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

  1. //
  2. // File          : TicTacToe_CellUnit.pas
  3. //
  4. // Project       : PCProject
  5. // Configuration : PCConfig 1
  6. // Phase         : Implementation 1
  7. // System        : TicTacToe 1
  8. //
  9. unit TicTacToe_CellUnit;
  10.  
  11. interface
  12.  
  13. uses
  14.   // Start user include section
  15.   // End user include section
  16.   ClassDict;
  17.  
  18. type
  19.   // Cell of the board.
  20.   TicTacToe_Cell = class
  21.  
  22.   private
  23.     // User defined attributes
  24.     contents: String   (* = ' ' *);
  25.  
  26.     // Association attributes
  27.     neighbourDict: TClassDict;
  28.  
  29.     // User defined methods
  30.  
  31.     // Properties
  32.  
  33.   protected
  34.     // User defined attributes
  35.  
  36.     // User defined methods
  37.  
  38.     // Properties
  39.  
  40.   public
  41.     // User defined attributes
  42.  
  43.     // Default constructor/destructor
  44.     constructor Create;
  45.     destructor Destroy; override;
  46.  
  47.     // User defined methods
  48.     function getLine(dir: String; x: String): Integer;
  49.     function getMaxLine: Integer;
  50.  
  51.     // Access methods
  52.     function getContents: String;
  53.     procedure setContents(newContents: String);
  54.  
  55.     // Association methods
  56.     procedure setNeighbour(Direction: String; newTicTacToe_Cell: TicTacToe_Cell);
  57.     function getNeighbour(Direction: String): TicTacToe_Cell;
  58.     procedure removeNeighbour(Direction: String);
  59.  
  60.     // Properties
  61.  
  62.   published
  63.     // User defined attributes
  64.  
  65.     // User defined methods
  66.  
  67.     // Properties
  68.   end;
  69.  
  70.  
  71. implementation
  72.  
  73.   // Start user include section
  74.   // End user include section
  75.  
  76. constructor TicTacToe_Cell.Create;
  77.   // Start user section
  78.   // End user section
  79. begin
  80.   contents := ' ';
  81.  
  82.   inherited Create;
  83.   neighbourDict := TClassDict.Create;
  84.   // Start user section
  85.   // End user section
  86. end;
  87.  
  88.  
  89. destructor TicTacToe_Cell.Destroy;
  90.   // Start user section
  91.   // End user section
  92. begin
  93.   // Start user section
  94.   // End user section
  95.   neighbourDict.Destroy;
  96.  
  97.   inherited Destroy;
  98. end;
  99.  
  100.  
  101. // Returns the highest number of connected cells in a line in a specific
  102. // direction, where each cell contains the same specified symbol.
  103. function TicTacToe_Cell.getLine(dir: String; x: String): Integer;
  104. var
  105.    temp : TicTacToe_Cell;
  106.    retValue : Integer;
  107.  
  108. begin
  109.   retValue := 0;
  110.   if getContents() = 'X' then
  111.   begin
  112.     retValue := 1;
  113.     temp := getNeighbour(dir);
  114.     if (temp <> NIL) then
  115.       retValue := retValue + temp.getLine(dir, x);
  116.   end;
  117.   getLine := retValue;
  118. end;
  119.  
  120.  
  121. // Returns the highest number of connected cells in a line,
  122. // where each cell contains the same symbol as this cell.
  123. function TicTacToe_Cell.getMaxLine: Integer;
  124. var
  125.   MaxValue: Integer;
  126.   LineValue: Integer;
  127.  
  128. begin
  129.   MaxValue := getLine('N', getContents()) + getLine('S', getContents()) - 1;
  130.   LineValue := getLine('E', getContents()) + getLine('W', getContents()) - 1;
  131.   if (MaxValue < LineValue) then MaxValue := LineValue;
  132.  
  133.   LineValue := getLine('NE', getContents()) + getLine('SW', getContents()) - 1;
  134.   if (MaxValue < LineValue) then MaxValue := LineValue;
  135.  
  136.   LineValue := getLine('NW', getContents()) + getLine('SE', getContents()) - 1;
  137.   if (MaxValue < LineValue) then MaxValue := LineValue;
  138.  
  139.   getMaxLine := MaxValue;
  140. end;
  141.  
  142.  
  143. // Do not delete this line -- regeneration marker
  144.  
  145. function TicTacToe_Cell.getContents: String;
  146. begin
  147.   getContents := contents;
  148. end;
  149.  
  150.  
  151. procedure TicTacToe_Cell.setContents(newContents: String);
  152. begin
  153.   contents := newContents;
  154. end;
  155.  
  156.  
  157. procedure TicTacToe_Cell.setNeighbour(Direction: String; newTicTacToe_Cell: TicTacToe_Cell);
  158. begin
  159.   if (newTicTacToe_Cell <> NIL) then
  160.   begin
  161.     neighbourDict.Add(Direction, newTicTacToe_Cell);
  162.   end;
  163. end;
  164.  
  165.  
  166. function TicTacToe_Cell.getNeighbour(Direction: String): TicTacToe_Cell;
  167. begin
  168.   getNeighbour := neighbourDict.Item(Direction);
  169. end;
  170.  
  171.  
  172. procedure TicTacToe_Cell.removeNeighbour(Direction: String);
  173. begin
  174.   neighbourDict.RemoveUsingKey(Direction)
  175. end;
  176.  
  177.  
  178.  
  179. end.
  180.