summary refs log tree commit diff stats
path: root/gamestate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gamestate.cpp')
-rw-r--r--gamestate.cpp83
1 files changed, 45 insertions, 38 deletions
diff --git a/gamestate.cpp b/gamestate.cpp index 9a50b32..95d1769 100644 --- a/gamestate.cpp +++ b/gamestate.cpp
@@ -7,35 +7,34 @@ GameState::GameState()
7 7
8 newGame = false; 8 newGame = false;
9 9
10 info.playerx = 1; 10 info = new Info();
11 info.playery = 1; 11 info->playerx = 1;
12 info.level = Level(); 12 info->playery = 1;
13 info.doneMaking = false; 13 info->level = Level();
14 board = Board(&info); 14 info->doneMaking = false;
15 15 board = Board(info);
16 SDL_WM_SetCaption("Maze Of Life - Level 1", NULL);
17} 16}
18 17
19void GameState::input(SDL_keysym key) 18void GameState::input(SDL_keysym key)
20{ 19{
21 if (info.doneMaking) 20 if (info->doneMaking)
22 { 21 {
23 switch (key.sym) 22 switch (key.sym)
24 { 23 {
25 case SDLK_LEFT: 24 case SDLK_LEFT:
26 move(info.playerx-1, info.playery); 25 move(info->playerx-1, info->playery);
27 26
28 break; 27 break;
29 case SDLK_RIGHT: 28 case SDLK_RIGHT:
30 move(info.playerx+1, info.playery); 29 move(info->playerx+1, info->playery);
31 30
32 break; 31 break;
33 case SDLK_UP: 32 case SDLK_UP:
34 move(info.playerx, info.playery-1); 33 move(info->playerx, info->playery-1);
35 34
36 break; 35 break;
37 case SDLK_DOWN: 36 case SDLK_DOWN:
38 move(info.playerx, info.playery+1); 37 move(info->playerx, info->playery+1);
39 38
40 break; 39 break;
41 case SDLK_ESCAPE: 40 case SDLK_ESCAPE:
@@ -52,7 +51,7 @@ void GameState::input(SDL_keysym key)
52 { 51 {
53 fclose(hslist); 52 fclose(hslist);
54 53
55 changeState(new NewHighscoreState(info.level.getLevel())); 54 changeState(new NewHighscoreState(info->level.getLevel()));
56 } else { 55 } else {
57 for (int i=0; i<scores; i++) 56 for (int i=0; i<scores; i++)
58 { 57 {
@@ -71,15 +70,15 @@ void GameState::input(SDL_keysym key)
71 70
72 fclose(hslist); 71 fclose(hslist);
73 72
74 if (h->getLevel() < info.level.getLevel()) 73 if (h->getLevel() < info->level.getLevel())
75 { 74 {
76 changeState(new NewHighscoreState(info.level.getLevel())); 75 changeState(new NewHighscoreState(info->level.getLevel()));
77 } else { 76 } else {
78 changeState(new LocalHighscoreListState(true)); 77 changeState(new LocalHighscoreListState(true));
79 } 78 }
80 } 79 }
81 } else { 80 } else {
82 changeState(new NewHighscoreState(info.level.getLevel())); 81 changeState(new NewHighscoreState(info->level.getLevel()));
83 } 82 }
84 83
85 break; 84 break;
@@ -93,20 +92,17 @@ void GameState::tick()
93 { 92 {
94 switch (rand()%4) 93 switch (rand()%4)
95 { 94 {
96 case 0: info.playerx = 1; info.playery = 1; break; 95 case 0: info->playerx = 1; info->playery = 1; break;
97 case 1: info.playerx = 1; info.playery = HEIGHT-2; break; 96 case 1: info->playerx = 1; info->playery = HEIGHT-2; break;
98 case 2: info.playerx = WIDTH-2; info.playery = HEIGHT-2; break; 97 case 2: info->playerx = WIDTH-2; info->playery = HEIGHT-2; break;
99 case 3: info.playerx = WIDTH-2; info.playery = 1; break; 98 case 3: info->playerx = WIDTH-2; info->playery = 1; break;
100 } 99 }
101 100
102 info.level.incrementLevel(); 101 info->level.incrementLevel();
103 info.doneMaking = false; 102 info->doneMaking = false;
104 board = Board(&info); 103 info->gens = 0;
104 board = Board(info);
105 newGame = false; 105 newGame = false;
106
107 char title[32];
108 sprintf(title, "Maze Of Life - Level %d", info.level.getLevel());
109 SDL_WM_SetCaption(title, NULL);
110 } 106 }
111 107
112 board.tick(); 108 board.tick();
@@ -119,8 +115,8 @@ void GameState::move(int x, int y)
119 if (board.isObstructed(x,y)) return; 115 if (board.isObstructed(x,y)) return;
120 if ((x==15)&&(y==15)) newGame = true; 116 if ((x==15)&&(y==15)) newGame = true;
121 117
122 info.playerx = x; 118 info->playerx = x;
123 info.playery = y; 119 info->playery = y;
124} 120}
125 121
126void GameState::render(SDL_Surface* screen) 122void GameState::render(SDL_Surface* screen)
@@ -128,20 +124,31 @@ void GameState::render(SDL_Surface* screen)
128 // Paint maze 124 // Paint maze
129 board.render(screen); 125 board.render(screen);
130 126
131 // Paint player 127 // Paint event
132 SDL_Rect block; 128 SDL_Rect block;
133 block.x = info.playerx*16; 129 block.x = 15*16;
134 block.y = info.playery*16; 130 block.y = 15*16;
135 block.w = 16; 131 block.w = 16;
136 block.h = 16; 132 block.h = 16;
137 133
138 SDL_FillRect(screen, &block, player_color); 134 SDL_FillRect(screen, &block, event_color);
139 135
140 // Paint event 136 if (!info->doneMaking)
141 block.x = 15*16; 137 {
142 block.y = 15*16; 138 SDL_Color fontColor = {0, 0, 0, 0};
139 char levelnum[8];
140 sprintf(levelnum, "%d", info->level.getLevel());
141 SDL_Surface* title = TTF_RenderText_Solid(loadFont(100), levelnum, fontColor);
142 SDL_Rect tSpace = {240-(title->w/2), 240-(title->h/2), title->w, title->h};
143 SDL_FillRect(screen, NULL, info->level.getDeadColor());
144 SDL_BlitSurface(title, NULL, screen, &tSpace);
145 }
143 146
144 SDL_FillRect(screen, &block, event_color); 147 // Paint player
148 block.x = info->playerx*16;
149 block.y = info->playery*16;
150
151 SDL_FillRect(screen, &block, player_color);
145} 152}
146 153
147GameState::Level::Level() 154GameState::Level::Level()
@@ -292,7 +299,7 @@ void GameState::Board::tick()
292 } 299 }
293 } 300 }
294 301
295 if (!info->doneMaking && ++gens > 100) info->doneMaking = true; 302 if (!info->doneMaking && ++info->gens > 50) info->doneMaking = true;
296} 303}
297 304
298void GameState::Board::incrementIfNeighbor(int x, int y, bool temp[WIDTH][HEIGHT], int* tick) 305void GameState::Board::incrementIfNeighbor(int x, int y, bool temp[WIDTH][HEIGHT], int* tick)