#include <players.h>
Inheritance diagram for ComputerDetective:
Public Methods | |
ComputerDetective (char *name, int color) | |
ComputerDetective (char *name, int color, PosType pos) | |
Protected Methods | |
Move | ChooseMove (void) |
byte | NumNodeTypes (int node) |
bool | CanLeave (Move *duh) |
Move * | FindNearest (int x, int y, MoveList *moves) |
|
Definition at line 140 of file players.h.
00140 : Player (name, color) { } |
|
Definition at line 141 of file players.h. References PosType.
00142 : Player (name, color, pos) { } |
|
Definition at line 104 of file players.c. References Bus, False, NumNodeTypes(), Detective::NumTokens(), Subway, Taxi, and True. Referenced by FindNearest().
00105 { 00106 bool taxi, bus, subway, ok = False; 00107 int vertex; 00108 00109 vertex = duh -> Node; 00110 if (NumNodeTypes (vertex) > 1) return True; 00111 00112 bus = theMap.bus (vertex); 00113 taxi = theMap.taxi (vertex); 00114 subway = theMap.subway (vertex); 00115 00116 if (bus) 00117 { 00118 bus &= (bool) (NumTokens (Bus) - 1); // Just one token left... 00119 if (!bus) return False; 00120 } 00121 00122 if (taxi) 00123 { 00124 bus &= (bool) (NumTokens (Taxi) - 1); // Just one token left... 00125 if (!bus) return False; 00126 } 00127 00128 if (subway) 00129 { 00130 bus &= (bool) (NumTokens (Subway) - 1); // Just one token left... 00131 if (!bus) return False; 00132 } 00133 00134 return True; // He has more than one token 00135 } |
|
Reimplemented from Player. Definition at line 163 of file players.c. References FindNearest(), and Move::Next.
00164 { 00165 MoveList *ml; 00166 Move *shalowitz, theMove; 00167 int ira, barry; // If it was us, could you eat? 00168 00169 ml = theRules.GetLegalMoves (*this); 00170 ira = ml -> Length (); 00171 if (ira == 0) // Dooh! 00172 theMove = UI.NoLegalMoves (*this); 00173 else // Our AI routine 00174 { 00175 ira = theRules.SpyLastX (); 00176 barry = theRules.SpyLastY (); 00177 shalowitz = FindNearest (ira, barry, ml); 00178 00179 theMove = *shalowitz; // Rum raisin! Woof! 00180 theMove.Next = NULL; 00181 } 00182 delete ml; // Let's try Smalltalk 00183 return theMove; 00184 } |
|
Definition at line 137 of file players.c. References CanLeave(). Referenced by ChooseMove().
00138 { 00139 Move *best, *temp; 00140 int deltaX, deltaY; 00141 double dist, nearest; 00142 00143 nearest = MAXINT; 00144 moves -> Reset (); 00145 best = moves -> GetCurrent (); 00146 while (moves -> Next ()) 00147 { 00148 temp = moves -> GetCurrent (); 00149 deltaX = x - theMap.x (temp -> Node); 00150 deltaY = y - theMap.y (temp -> Node); 00151 dist = deltaX * deltaX; 00152 dist += deltaY * deltaY; 00153 dist = sqrt (dist); 00154 if ((dist < nearest) && CanLeave (temp)) // Will he get stuck? 00155 { 00156 best = temp; 00157 nearest = dist; 00158 } 00159 } 00160 return best; 00161 } |
|
Definition at line 94 of file players.c. References byte. Referenced by CanLeave().
00095 { 00096 byte me = 0; 00097 00098 me += theMap.bus (node); 00099 me += theMap.taxi (node); 00100 me += theMap.subway (node); 00101 return me; 00102 } |