summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--gamestate.cpp99
-rw-r--r--gamestate.h3
-rw-r--r--includes.h1
-rw-r--r--mazeoflife.cpp3
4 files changed, 74 insertions, 32 deletions
diff --git a/gamestate.cpp b/gamestate.cpp index e5c8d9f..40229ba 100644 --- a/gamestate.cpp +++ b/gamestate.cpp
@@ -3,36 +3,49 @@
3GameState::GameState() 3GameState::GameState()
4{ 4{
5 player_color = getColor(255, 255, 0); 5 player_color = getColor(255, 255, 0);
6 event_color = getColor(0, 0, 255);
6 7
7 newGame = true; 8 newGame = false;
8 doneMaking = false;
9 9
10 info.playerx = 1;
11 info.playery = 1;
10 info.level = Level(); 12 info.level = Level();
13 board = Board(&info);
14
15 SDL_WM_SetCaption("Maze Of Life - Level 1", NULL);
11} 16}
12 17
13void GameState::input(SDLKey key) 18void GameState::input(SDLKey key)
14{ 19{
15 if (doneMaking) 20 switch (key)
16 { 21 {
17 switch (key) 22 case SDLK_LEFT:
18 { 23 move(info.playerx-1, info.playery);
19 case SDLK_LEFT:
20 move(info.playerx-1, info.playery);
21 24
22 break; 25 break;
23 case SDLK_RIGHT: 26 case SDLK_RIGHT:
24 move(info.playerx+1, info.playery); 27 move(info.playerx+1, info.playery);
25 28
26 break; 29 break;
27 case SDLK_UP: 30 case SDLK_UP:
28 move(info.playerx, info.playery-1); 31 move(info.playerx, info.playery-1);
29 32
30 break; 33 break;
31 case SDLK_DOWN: 34 case SDLK_DOWN:
32 move(info.playerx, info.playery+1); 35 move(info.playerx, info.playery+1);
33 36
34 break; 37 break;
35 } 38 case SDLK_ESCAPE:
39 newGame = false;
40
41 info.playerx = 1;
42 info.playery = 1;
43 info.level = Level();
44 board = Board(&info);
45
46 SDL_WM_SetCaption("Maze Of Life - Level 1", NULL);
47
48 break;
36 } 49 }
37} 50}
38 51
@@ -40,11 +53,21 @@ void GameState::tick()
40{ 53{
41 if (newGame) 54 if (newGame)
42 { 55 {
43 info.playerx = 1; 56 switch (rand()%4)
44 info.playery = 1; 57 {
58 case 0: info.playerx = 1; info.playery = 1; break;
59 case 1: info.playerx = 1; info.playery = HEIGHT-2; break;
60 case 2: info.playerx = WIDTH-2; info.playery = HEIGHT-2; break;
61 case 3: info.playerx = WIDTH-2; info.playery = 1; break;
62 }
63
64 info.level.incrementLevel();
45 board = Board(&info); 65 board = Board(&info);
46 newGame = false; 66 newGame = false;
47 doneMaking = true; 67
68 char title[32];
69 sprintf(title, "Maze Of Life - Level %d", info.level.getLevel());
70 SDL_WM_SetCaption(title, NULL);
48 } 71 }
49 72
50 board.tick(); 73 board.tick();
@@ -55,6 +78,7 @@ void GameState::move(int x, int y)
55 wrap(&x, &y); 78 wrap(&x, &y);
56 79
57 if (board.isObstructed(x,y)) return; 80 if (board.isObstructed(x,y)) return;
81 if ((x==15)&&(y==15)) newGame = true;
58 82
59 info.playerx = x; 83 info.playerx = x;
60 info.playery = y; 84 info.playery = y;
@@ -62,8 +86,10 @@ void GameState::move(int x, int y)
62 86
63void GameState::render(SDL_Surface* screen) 87void GameState::render(SDL_Surface* screen)
64{ 88{
89 // Paint maze
65 board.render(screen); 90 board.render(screen);
66 91
92 // Paint player
67 SDL_Rect block; 93 SDL_Rect block;
68 block.x = info.playerx*16; 94 block.x = info.playerx*16;
69 block.y = info.playery*16; 95 block.y = info.playery*16;
@@ -71,6 +97,12 @@ void GameState::render(SDL_Surface* screen)
71 block.h = 16; 97 block.h = 16;
72 98
73 SDL_FillRect(screen, &block, player_color); 99 SDL_FillRect(screen, &block, player_color);
100
101 // Paint event
102 block.x = 15*16;
103 block.y = 15*16;
104
105 SDL_FillRect(screen, &block, event_color);
74} 106}
75 107
76GameState::Level::Level() 108GameState::Level::Level()
@@ -95,14 +127,9 @@ int GameState::Level::getLevel()
95 return level; 127 return level;
96} 128}
97 129
98int GameState::Level::getLevelGroup()
99{
100 return (level/10)+1;
101}
102
103bool GameState::Level::checkSquare(int x, int y) 130bool GameState::Level::checkSquare(int x, int y)
104{ 131{
105 switch (getLevelGroup()) 132 switch (level/10+1)
106 { 133 {
107 case 1: 134 case 1:
108 return ((x>13)&&(x<16)&&(y>13)&&(y<16)); 135 return ((x>13)&&(x<16)&&(y>13)&&(y<16));
@@ -121,12 +148,17 @@ bool GameState::Level::checkSquare(int x, int y)
121 148
122Uint32 GameState::Level::getAliveColor() 149Uint32 GameState::Level::getAliveColor()
123{ 150{
124 return alive[(getLevelGroup()-1)%5]; 151 return alive[(level/10)%5];
125} 152}
126 153
127Uint32 GameState::Level::getDeadColor() 154Uint32 GameState::Level::getDeadColor()
128{ 155{
129 return dead[(getLevelGroup()-1)%5]; 156 return dead[(level/10)%5];
157}
158
159void GameState::Level::incrementLevel()
160{
161 level++;
130} 162}
131 163
132GameState::Board::Board() 164GameState::Board::Board()
@@ -151,6 +183,8 @@ GameState::Board::Board(GameState::Info* info)
151 } 183 }
152 } 184 }
153 } 185 }
186
187 blocks[15][15] = false;
154} 188}
155 189
156bool GameState::Board::isObstructed(int x, int y) 190bool GameState::Board::isObstructed(int x, int y)
@@ -194,6 +228,11 @@ void GameState::Board::tick()
194 { 228 {
195 for (y=0;y<HEIGHT;y++) 229 for (y=0;y<HEIGHT;y++)
196 { 230 {
231 if ((x==15)&&(y==15))
232 {
233 continue;
234 }
235
197 int neighbors = 0; 236 int neighbors = 0;
198 237
199 if ((x>0)&&(y>0)) incrementIfNeighbor(x-1,y-1,temp,&neighbors); 238 if ((x>0)&&(y>0)) incrementIfNeighbor(x-1,y-1,temp,&neighbors);
@@ -219,7 +258,7 @@ void GameState::Board::incrementIfNeighbor(int x, int y, bool temp[WIDTH][HEIGHT
219{ 258{
220 wrap(&x, &y); 259 wrap(&x, &y);
221 260
222 if ((blocks[x][y])||((info->playerx==x)&&(info->playery==y))) 261 if ((temp[x][y])||((info->playerx==x)&&(info->playery==y))||((x==15)&&(y==15)))
223 { 262 {
224 ++*tick; 263 ++*tick;
225 } 264 }
diff --git a/gamestate.h b/gamestate.h index c36bcee..5537b51 100644 --- a/gamestate.h +++ b/gamestate.h
@@ -22,6 +22,7 @@ class GameState : public State {
22 bool checkSquare(int x, int y); 22 bool checkSquare(int x, int y);
23 Uint32 getAliveColor(); 23 Uint32 getAliveColor();
24 Uint32 getDeadColor(); 24 Uint32 getDeadColor();
25 void incrementLevel();
25 }; 26 };
26 27
27 struct Info { 28 struct Info {
@@ -46,8 +47,8 @@ class GameState : public State {
46 47
47 private: 48 private:
48 Uint32 player_color; 49 Uint32 player_color;
50 Uint32 event_color;
49 bool newGame; 51 bool newGame;
50 bool doneMaking;
51 Info info; 52 Info info;
52 Board board; 53 Board board;
53 void move(int x, int y); 54 void move(int x, int y);
diff --git a/includes.h b/includes.h index 1d9df7a..a47a307 100644 --- a/includes.h +++ b/includes.h
@@ -1,6 +1,7 @@
1#include <SDL.h> 1#include <SDL.h>
2#include <stdio.h> 2#include <stdio.h>
3#include <time.h> 3#include <time.h>
4#include <string>
4#include "mazeoflife.h" 5#include "mazeoflife.h"
5#include "state.h" 6#include "state.h"
6#include "gamestate.h" 7#include "gamestate.h"
diff --git a/mazeoflife.cpp b/mazeoflife.cpp index 62551c7..7819ffd 100644 --- a/mazeoflife.cpp +++ b/mazeoflife.cpp
@@ -16,6 +16,8 @@ int main(int argc, char *argv[])
16 /* Clean up on exit */ 16 /* Clean up on exit */
17 atexit(SDL_Quit); 17 atexit(SDL_Quit);
18 18
19 SDL_WM_SetCaption("Maze Of Life", NULL);
20
19 /* 21 /*
20 * Initialize the display in a 640x480 8-bit palettized mode, 22 * Initialize the display in a 640x480 8-bit palettized mode,
21 * requesting a software surface 23 * requesting a software surface
@@ -26,7 +28,6 @@ int main(int argc, char *argv[])
26 exit(1); 28 exit(1);
27 } 29 }
28 30
29 SDL_WM_SetCaption("Maze Of Life", NULL);
30 SDL_EnableKeyRepeat(100, 50); 31 SDL_EnableKeyRepeat(100, 50);
31 32
32 State* state = new GameState(); 33 State* state = new GameState();