home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / TTicTacToe_GUIUnit.pas < prev    next >
Pascal/Delphi Source File  |  1997-08-20  |  9KB  |  390 lines

  1. //
  2. // File          : TTicTacToe_GUIUnit.pas
  3. //
  4. // Project       : PCProject
  5. // Configuration : PCConfig 1
  6. // Phase         : Implementation 1
  7. // System        : TicTacToe 1
  8. //
  9. unit TTicTacToe_GUIUnit;
  10.  
  11. interface
  12.  
  13. uses
  14.   // Start user include section
  15.   // End user include section
  16.   Menus,
  17.   ExtCtrls,
  18.   StdCtrls,
  19.   Forms,
  20.   Classes,
  21.   TicTacToe_GameUnit,
  22.   TicTacToe_ComputerUnit;
  23.  
  24. type
  25.   // Graphical User Interface of the game.
  26.   TTicTacToe_GUI = class(TForm)
  27.  
  28.     // Visual Components
  29.     CellButton3: TButton (* Component:TicTacToe_CellButton *);
  30.     CellButton8: TButton (* Component:TicTacToe_CellButton *);
  31.     Board: TPanel (* Component:TicTacToe_Board *);
  32.     New: TMenuItem (* Component:TicTacToe_New *);
  33.     CellButton5: TButton (* Component:TicTacToe_CellButton *);
  34.     Result: TLabel (* Component:TicTacToe_Result *);
  35.     ComputerX: TMenuItem (* Component:TicTacToe_Opponent *);
  36.     CellButton2: TButton (* Component:TicTacToe_CellButton *);
  37.     CellButton7: TButton (* Component:TicTacToe_CellButton *);
  38.     MainMenu: TMainMenu (* Component:TicTacToe_MainMenu *);
  39.     GameMenu: TMenuItem (* Component:TicTacToe_GameMenu *);
  40.     OpponentMenu: TMenuItem (* Component:TicTacToe_OpponentMenu *);
  41.     CellButton4: TButton (* Component:TicTacToe_CellButton *);
  42.     CellButton9: TButton (* Component:TicTacToe_CellButton *);
  43.     Human: TMenuItem (* Component:TicTacToe_Opponent *);
  44.     CellButton1: TButton (* Component:TicTacToe_CellButton *);
  45.     ComputerO: TMenuItem (* Component:TicTacToe_Opponent *);
  46.     CellButton6: TButton (* Component:TicTacToe_CellButton *);
  47.  
  48.     // Events methods
  49.     procedure CellButton1Click(Sender: TObject);
  50.     procedure CellButton3Click(Sender: TObject);
  51.     procedure HumanClick(Sender: TObject);
  52.     procedure CellButton4Click(Sender: TObject);
  53.     procedure CellButton5Click(Sender: TObject);
  54.     procedure CellButton6Click(Sender: TObject);
  55.     procedure CellButton7Click(Sender: TObject);
  56.     procedure CellButton8Click(Sender: TObject);
  57.     procedure CellButton9Click(Sender: TObject);
  58.     procedure NewClick(Sender: TObject);
  59.     procedure ComputerOClick(Sender: TObject);
  60.     procedure ComputerXClick(Sender: TObject);
  61.     procedure CellButton2Click(Sender: TObject);
  62.  
  63.   private
  64.     // User defined attributes
  65.     CellButtons: array [1..9] of TButton;
  66.  
  67.     // Association attributes
  68.     computerRef: TicTacToe_Computer;
  69.     gameRef: TicTacToe_Game;
  70.  
  71.     // User defined methods
  72.  
  73.     // Properties
  74.  
  75.   protected
  76.     // User defined attributes
  77.  
  78.     // User defined methods
  79.  
  80.     // Properties
  81.  
  82.   public
  83.     // User defined attributes
  84.  
  85.     // Default constructor/destructor
  86.     constructor Create(AOwner: TComponent); override;
  87.     destructor Destroy; override;
  88.  
  89.     // User defined methods
  90.     procedure enableBoard;
  91.     procedure displayResult(text: String);
  92.     procedure disableBoard;
  93.     procedure cellButtonClick(index: Integer);
  94.     procedure clearBoard;
  95.  
  96.     // Association methods
  97.     procedure setGame(newTicTacToe_Game: TicTacToe_Game);
  98.     function getGame: TicTacToe_Game;
  99.     procedure removeComputer;
  100.     function getComputer: TicTacToe_Computer;
  101.     procedure setComputer(newTicTacToe_Computer: TicTacToe_Computer);
  102.     procedure removeGame;
  103.  
  104.     // Properties
  105.  
  106.   published
  107.     // User defined attributes
  108.  
  109.     // User defined methods
  110.  
  111.     // Properties
  112.   end;
  113.  
  114. // Class feature attributes
  115. var
  116.   TicTacToe_GUI: TTicTacToe_GUI   (* Form attribute *);
  117.  
  118.  
  119. implementation
  120.  
  121.   // Start user include section
  122.   // End user include section
  123.  
  124. {$R *.DFM}
  125.  
  126. constructor TTicTacToe_GUI.Create(AOwner: TComponent);
  127.   // Start user section
  128.   // End user section
  129. begin
  130.  
  131.   inherited Create(AOwner);
  132.   // Start user section
  133.   setGame(TicTacToe_Game.Create);
  134.   setComputer(TicTacToe_Computer.Create(getGame()));
  135.   CellButtons[1] := CellButton1;
  136.   CellButtons[2] := CellButton2;
  137.   CellButtons[3] := CellButton3;
  138.   CellButtons[4] := CellButton4;
  139.   CellButtons[5] := CellButton5;
  140.   CellButtons[6] := CellButton6;
  141.   CellButtons[7] := CellButton7;
  142.   CellButtons[8] := CellButton8;
  143.   CellButtons[9] := CellButton9;
  144.  
  145.   TicTacToe_Game(getGame()).startGame;
  146.   // End user section
  147. end;
  148.  
  149.  
  150. destructor TTicTacToe_GUI.Destroy;
  151.   // Start user section
  152.   // End user section
  153. begin
  154.   // Start user section
  155.   // End user section
  156.   removeComputer;
  157.   removeGame;
  158.  
  159.   inherited Destroy;
  160. end;
  161.  
  162.  
  163. // Enables all the buttons of the board.
  164. procedure TTicTacToe_GUI.enableBoard;
  165. var
  166.   i: Integer;
  167.  
  168. begin
  169.   for i := 1 to 9 do
  170.     if CellButtons[i].Caption = ' ' then
  171.       CellButtons[i].Enabled := True;
  172. end;
  173.  
  174.  
  175. // Displays the specified result.
  176. procedure TTicTacToe_GUI.displayResult(text: String);
  177. begin
  178.   Result.Caption := text;
  179. end;
  180.  
  181.  
  182. // Disables all the buttons of the board.
  183. procedure TTicTacToe_GUI.disableBoard;
  184. var
  185.   i: Integer;
  186. begin
  187.   for i := 1 to 9 do
  188.     CellButtons[i].Enabled := False;
  189. end;
  190.  
  191.  
  192. // Checks if cell is empty and sets it.
  193. procedure TTicTacToe_GUI.cellButtonClick(index: Integer);
  194. begin
  195.   if CellButtons[index].Enabled then
  196.   begin
  197.     CellButtons[index].Enabled := False;
  198.     CellButtons[index].Caption := gameRef.getActivePlayer();
  199.     gameRef.selectCell(index);
  200.     computerRef.checkTurn();
  201.   end;
  202. end;
  203.  
  204.  
  205. // Clears the contents of all the buttons of the board.
  206. procedure TTicTacToe_GUI.clearBoard;
  207. var
  208.   i: Integer;
  209. begin
  210.   for i := 1 to 9 do
  211.     CellButtons[i].Caption := ' ';
  212. end;
  213.  
  214.  
  215. procedure TTicTacToe_GUI.CellButton1Click(Sender: TObject);
  216. begin
  217.   cellButtonClick(1);
  218. end;
  219.  
  220.  
  221. procedure TTicTacToe_GUI.CellButton3Click(Sender: TObject);
  222. begin
  223.   cellButtonClick(3);
  224. end;
  225.  
  226.  
  227. // Sets opponent.
  228. procedure TTicTacToe_GUI.HumanClick(Sender: TObject);
  229. begin
  230.   Human.Checked := True;
  231.   computerRef.setId('');
  232.   computerRef.checkTurn;
  233. end;
  234.  
  235.  
  236. procedure TTicTacToe_GUI.CellButton4Click(Sender: TObject);
  237. begin
  238.   cellButtonClick(4);
  239. end;
  240.  
  241.  
  242. procedure TTicTacToe_GUI.CellButton5Click(Sender: TObject);
  243. begin
  244.   cellButtonClick(5);
  245. end;
  246.  
  247.  
  248. procedure TTicTacToe_GUI.CellButton6Click(Sender: TObject);
  249. begin
  250.   cellButtonClick(6);
  251. end;
  252.  
  253.  
  254. procedure TTicTacToe_GUI.CellButton7Click(Sender: TObject);
  255. begin
  256.   cellButtonClick(7);
  257. end;
  258.  
  259.  
  260. procedure TTicTacToe_GUI.CellButton8Click(Sender: TObject);
  261. begin
  262.   cellButtonClick(8);
  263. end;
  264.  
  265.  
  266. procedure TTicTacToe_GUI.CellButton9Click(Sender: TObject);
  267. begin
  268.   cellButtonClick(9);
  269. end;
  270.  
  271.  
  272. // Starts new game.
  273. procedure TTicTacToe_GUI.NewClick(Sender: TObject);
  274. begin
  275.   gameRef.startGame;
  276.   computerRef.checkTurn;
  277. end;
  278.  
  279.  
  280. // Sets opponent.
  281. procedure TTicTacToe_GUI.ComputerOClick(Sender: TObject);
  282. begin
  283.   ComputerO.Checked := True;
  284.   computerRef.setId('O');
  285.   computerRef.checkTurn;
  286. end;
  287.  
  288.  
  289. // Sets opponent.
  290. procedure TTicTacToe_GUI.ComputerXClick(Sender: TObject);
  291. begin
  292.   ComputerX.Checked := True;
  293.   computerRef.setId('X');
  294.   computerRef.checkTurn;
  295. end;
  296.  
  297.  
  298. procedure TTicTacToe_GUI.CellButton2Click(Sender: TObject);
  299. begin
  300.   cellButtonClick(2);
  301. end;
  302.  
  303.  
  304. // Do not delete this line -- regeneration marker
  305.  
  306. procedure TTicTacToe_GUI.setGame(newTicTacToe_Game: TicTacToe_Game);
  307. begin
  308.   if (newTicTacToe_Game <> NIL) then
  309.   begin
  310.     if (newTicTacToe_Game <> gameRef) then
  311.     begin
  312.       if (gameRef <> NIL) then
  313.       begin
  314.         gameRef.removeGui;
  315.       end;
  316.       gameRef := newTicTacToe_Game;
  317.       newTicTacToe_Game.setGui(SELF);
  318.     end;
  319.   end
  320.   else
  321.   begin
  322.     removeGame;
  323.   end;
  324. end;
  325.  
  326.  
  327. function TTicTacToe_GUI.getGame: TicTacToe_Game;
  328. begin
  329.   getGame := gameRef;
  330. end;
  331.  
  332.  
  333. procedure TTicTacToe_GUI.removeComputer;
  334. var
  335.   oldTicTacToe_Computer: TicTacToe_Computer;
  336.  
  337. begin
  338.   if (computerRef <> NIL) then
  339.   begin
  340.     oldTicTacToe_Computer := computerRef;
  341.     computerRef := NIL;
  342.     oldTicTacToe_Computer.removeGui();
  343.   end;
  344. end;
  345.  
  346.  
  347. function TTicTacToe_GUI.getComputer: TicTacToe_Computer;
  348. begin
  349.   getComputer := computerRef;
  350. end;
  351.  
  352.  
  353. procedure TTicTacToe_GUI.setComputer(newTicTacToe_Computer: TicTacToe_Computer);
  354. begin
  355.   if (newTicTacToe_Computer <> NIL) then
  356.   begin
  357.     if (newTicTacToe_Computer <> computerRef) then
  358.     begin
  359.       if (computerRef <> NIL) then
  360.       begin
  361.         computerRef.removeGui;
  362.       end;
  363.       computerRef := newTicTacToe_Computer;
  364.       newTicTacToe_Computer.setGui(SELF);
  365.     end;
  366.   end
  367.   else
  368.   begin
  369.     removeComputer;
  370.   end;
  371. end;
  372.  
  373.  
  374. procedure TTicTacToe_GUI.removeGame;
  375. var
  376.   oldTicTacToe_Game: TicTacToe_Game;
  377.  
  378. begin
  379.   if (gameRef <> NIL) then
  380.   begin
  381.     oldTicTacToe_Game := gameRef;
  382.     gameRef := NIL;
  383.     oldTicTacToe_Game.removeGui();
  384.   end;
  385. end;
  386.  
  387.  
  388.  
  389. end.
  390.