::
x21_ttt.ada
with Simple_io; use Simple_io;
package Class_board is
type Board is private;
procedure add( the:in out Board; pos:in Integer;
piece:in Character );
function valid( the:in Board; pos:in Integer ) return Boolean;
procedure display( the:in Board );
private
SIZE_TTT : CONSTANT := 9; -- Must be 9
subtype Board_index is Integer range 1 .. SIZE_TTT;
subtype Board_range is Board_index;
type Board_grid is array( Board_range ) of Character;
type Board is record
sqrs : Board_grid := ( others => ' '); -- Initialize
end record;
end Class_board;
with Simple_io; use Simple_io;
package body Class_board is
procedure add( the:in out Board; pos:in Integer;
piece:in Character ) is
begin
the.sqrs( pos ) := piece;
end add;
function valid(the:in Board; pos:in Integer) return Boolean is
begin
return pos in Board_range and then the.sqrs( pos ) = ' ';
end valid;
procedure display( the:in Board ) is
begin
for i in Board_range loop -- All pieces
put( the.sqrs( i ) ); -- Display counter;
case i is -- after printing counter
when 3 | 6 => -- print Row Separator
new_line; put("---------");
new_line;
when 9 => -- print new line
new_line;
when 1 | 2 | 4 | 5 | 7 | 8 => -- print Col separator
put(" | ");
end case;
end loop;
end display;
end Class_board;
with Simple_io, Class_board;
use Simple_io, Class_board;
procedure main is
player : Character; -- Either 'X' or 'O'
game : Board; -- An instance of Class Board
move : Integer; -- Move from user
begin
player := 'X'; -- Set player
put("Player "); put( player ); -- Ask player for
put(" enter move (1-9) : "); -- move
while not end_of_file loop -- While moves
get( move ); skip_line; -- Get move
if valid( game, move ) then -- Valid
add( game, move, player ); -- Add to board
display( game ); -- Display board
case player is -- Next Player
when 'X' => player := 'O'; -- 'X' -> 'O'
when 'O' => player := 'X'; -- 'O' -> 'X'
when others => null; --
end case;
else
put("Move invalid"); new_line; -- for board
end if;
put("Player "); put( player ); -- Ask player for
put(" enter move (1-9) : "); -- move
end loop;
new_line(2);
end main;
© M.A.Smith University of Brighton.
Created September 1995 last modified May 1997.
Comments, suggestions, etc.
M.A.Smith@brighton.ac.uk
*
[Home page]