More effective AI now. Should see more realistic, and more challenging behavior.
[crack-attack.git] / src / ComputerPlayer.cxx
blob2778ef7d6fa659fc45e13181345476875775b14a
1 using namespace std;
3 #include "ComputerPlayer.h"
4 #include "Score.h"
5 #include "GarbageQueue.h"
6 #include "ComputerPlayerAI.h"
8 //#define WAIT_TIME ( GC_STEPS_PER_SECOND * 10 )
10 bool ComputerPlayer::lost;
11 ComputerPlayerAI *ComputerPlayer::ai;
13 void ComputerPlayer::gameStart()
15 //queue = new GarbageQueue();
17 if ((MetaState::mode & CM_AI_EASY))
18 ai = new EasyAI();
19 if ((MetaState::mode & CM_AI_MEDIUM))
20 ai = new MediumAI();
21 if ((MetaState::mode & CM_AI_HARD))
22 ai = new HardAI();
24 if (ai)
25 ai->garbageQueue(queue);
27 assert(ai != NULL);
29 lost = false;
32 static void show_element (GarbageQueueElement *e) {
33 printf("Element: %p h %d w %d f %d\n",
35 e->height,
36 e->width,
37 e->flavor);
40 void show_element_foreach (gpointer e, gpointer unused)
42 show_element((GarbageQueueElement *)e);
45 int ComputerPlayer::gameFinish()
47 return lost ? GS_WON : GS_LOST;
50 void ComputerPlayer::timeStep()
52 if (!ai) {
53 return;
55 ComputerPlayerAI &localAi = *ai;
56 if (Game::time_step >= localAi.alarm()) {
57 //localAi.garbageQueue(queue);
58 GarbageQueue *tmp = localAi.garbageAmount();//garbage_queue);
59 tmp->sendToGenerator();
60 cout << "init pop: " << GC_INITIAL_POP_DELAY << endl;
61 cout << "steps per second: " << GC_STEPS_PER_SECOND << endl;
62 cout << "Height: " << ai->garbageQueue()->height() << endl;
63 //delete tmp;
64 //queue->reset();
65 localAi.resetAlarm();
66 MESSAGE("AI will drop again in " << ((localAi.alarm() - Game::time_step) / GC_STEPS_PER_SECOND));
67 LOG("AI will drop again in " << ((localAi.alarm() - Game::time_step) / GC_STEPS_PER_SECOND));
69 if(localAi.determineLoss()) {
70 Game::aiPlayerLoss();
74 void ComputerPlayer::addGarbage ( int height, int width, int flavor ) {
75 assert(ai != NULL);
76 MESSAGE("Adding garbage to queue");
77 ai->garbageQueue()->add(height, width, flavor);