Final Commit

Dependencies:   mbed

Committer:
JRM1986
Date:
Mon Apr 30 14:37:23 2018 +0000
Revision:
21:63c5590cb2c2
Parent:
20:277e88a8185f
Child:
23:3081be418c89
No longer increments in steps of 2, init functions work

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JRM1986 2:ea90cec2489a 1 #include "SnakeEngine.h"
JRM1986 2:ea90cec2489a 2
JRM1986 2:ea90cec2489a 3
JRM1986 2:ea90cec2489a 4 SnakeEngine::SnakeEngine()
JRM1986 2:ea90cec2489a 5 {
JRM1986 2:ea90cec2489a 6
JRM1986 2:ea90cec2489a 7 }
JRM1986 2:ea90cec2489a 8
JRM1986 2:ea90cec2489a 9 SnakeEngine::~SnakeEngine()
JRM1986 2:ea90cec2489a 10 {
JRM1986 2:ea90cec2489a 11
JRM1986 7:c38800a428a6 12 }
JRM1986 17:94dd8a691d4a 13
JRM1986 17:94dd8a691d4a 14
JRM1986 17:94dd8a691d4a 15
JRM1986 17:94dd8a691d4a 16 void SnakeEngine::set_even_array(Gamepad &pad)
JRM1986 16:85ca9feccf3f 17 {
JRM1986 16:85ca9feccf3f 18
JRM1986 17:94dd8a691d4a 19 int i;
JRM1986 17:94dd8a691d4a 20 int length = g_tl;
JRM1986 17:94dd8a691d4a 21
JRM1986 17:94dd8a691d4a 22 extern int g_odd_array_x[100];
JRM1986 17:94dd8a691d4a 23 extern int g_odd_array_y[100];
JRM1986 17:94dd8a691d4a 24
JRM1986 17:94dd8a691d4a 25 Vector2D pos = _snake.get_snake_position();
JRM1986 17:94dd8a691d4a 26
JRM1986 17:94dd8a691d4a 27 g_odd_array_x[0] = pos.x;
JRM1986 17:94dd8a691d4a 28 g_odd_array_y[0] = pos.y;
JRM1986 17:94dd8a691d4a 29
JRM1986 20:277e88a8185f 30 for(i = length; i >= 0; --i) {
JRM1986 17:94dd8a691d4a 31
JRM1986 17:94dd8a691d4a 32 if(i > 0) {
JRM1986 17:94dd8a691d4a 33
JRM1986 17:94dd8a691d4a 34 g_even_array_x[i] = g_odd_array_x[i-1];
JRM1986 17:94dd8a691d4a 35 g_even_array_y[i] = g_odd_array_y[i-1];
JRM1986 16:85ca9feccf3f 36
JRM1986 17:94dd8a691d4a 37 }
JRM1986 17:94dd8a691d4a 38
JRM1986 17:94dd8a691d4a 39 else if(i == 0) {
JRM1986 17:94dd8a691d4a 40
JRM1986 17:94dd8a691d4a 41 g_even_array_x[0] = pos.x;
JRM1986 17:94dd8a691d4a 42 g_even_array_y[0] = pos.y;
JRM1986 17:94dd8a691d4a 43
JRM1986 17:94dd8a691d4a 44 }
JRM1986 17:94dd8a691d4a 45
JRM1986 17:94dd8a691d4a 46
JRM1986 17:94dd8a691d4a 47 }
JRM1986 17:94dd8a691d4a 48
JRM1986 17:94dd8a691d4a 49 }
JRM1986 17:94dd8a691d4a 50
JRM1986 17:94dd8a691d4a 51 void SnakeEngine::set_odd_array(Gamepad &pad)
JRM1986 17:94dd8a691d4a 52 {
JRM1986 17:94dd8a691d4a 53
JRM1986 16:85ca9feccf3f 54 int i;
JRM1986 16:85ca9feccf3f 55 int length = g_tl;
JRM1986 16:85ca9feccf3f 56
JRM1986 17:94dd8a691d4a 57 extern int g_even_array_x[100];
JRM1986 17:94dd8a691d4a 58 extern int g_even_array_y[100];
JRM1986 17:94dd8a691d4a 59
JRM1986 17:94dd8a691d4a 60 Vector2D pos = _snake.get_snake_position();
JRM1986 17:94dd8a691d4a 61
JRM1986 17:94dd8a691d4a 62 g_even_array_x[0] = pos.x;
JRM1986 17:94dd8a691d4a 63 g_even_array_y[0] = pos.y;
JRM1986 16:85ca9feccf3f 64
JRM1986 20:277e88a8185f 65 for(i = length; i >= 0; --i) {
JRM1986 17:94dd8a691d4a 66
JRM1986 17:94dd8a691d4a 67 if(i > 0) {
JRM1986 17:94dd8a691d4a 68
JRM1986 17:94dd8a691d4a 69 g_odd_array_x[i] = g_even_array_x[i-1];
JRM1986 17:94dd8a691d4a 70 g_odd_array_y[i] = g_even_array_y[i-1];
JRM1986 17:94dd8a691d4a 71
JRM1986 17:94dd8a691d4a 72 }
JRM1986 17:94dd8a691d4a 73
JRM1986 17:94dd8a691d4a 74 else if(i == 0) {
JRM1986 17:94dd8a691d4a 75
JRM1986 17:94dd8a691d4a 76 g_odd_array_x[0] = pos.x;
JRM1986 17:94dd8a691d4a 77 g_odd_array_y[0] = pos.y;
JRM1986 17:94dd8a691d4a 78
JRM1986 17:94dd8a691d4a 79 }
JRM1986 17:94dd8a691d4a 80
JRM1986 16:85ca9feccf3f 81 }
JRM1986 16:85ca9feccf3f 82
JRM1986 17:94dd8a691d4a 83 }
JRM1986 17:94dd8a691d4a 84
JRM1986 17:94dd8a691d4a 85
JRM1986 17:94dd8a691d4a 86 void SnakeEngine::set_tail_array(Gamepad &pad)
JRM1986 17:94dd8a691d4a 87 {
JRM1986 16:85ca9feccf3f 88
JRM1986 17:94dd8a691d4a 89 int c = g_engine_fc % 2;
JRM1986 17:94dd8a691d4a 90
JRM1986 17:94dd8a691d4a 91 if(c == 1) {
JRM1986 16:85ca9feccf3f 92
JRM1986 17:94dd8a691d4a 93 set_odd_array(pad);
JRM1986 16:85ca9feccf3f 94
JRM1986 16:85ca9feccf3f 95 }
JRM1986 17:94dd8a691d4a 96
JRM1986 17:94dd8a691d4a 97 else if (c == 0) {
JRM1986 17:94dd8a691d4a 98
JRM1986 17:94dd8a691d4a 99 set_even_array(pad);
JRM1986 17:94dd8a691d4a 100
JRM1986 17:94dd8a691d4a 101 }
JRM1986 17:94dd8a691d4a 102
JRM1986 17:94dd8a691d4a 103 }
JRM1986 10:62d8cb7742c3 104
JRM1986 17:94dd8a691d4a 105 void SnakeEngine::draw_tail(N5110 &lcd)
JRM1986 17:94dd8a691d4a 106 {
JRM1986 17:94dd8a691d4a 107 int length = g_tl;
JRM1986 17:94dd8a691d4a 108 int c;
JRM1986 17:94dd8a691d4a 109 c = g_engine_fc % 2;
JRM1986 17:94dd8a691d4a 110 int i;
JRM1986 17:94dd8a691d4a 111 int x;
JRM1986 17:94dd8a691d4a 112 int y;
JRM1986 17:94dd8a691d4a 113
JRM1986 19:b437806e579b 114 //printf("Odd/Even %i \n", c);
JRM1986 17:94dd8a691d4a 115
JRM1986 20:277e88a8185f 116 for(i=0; i<=length; ++i) {
JRM1986 17:94dd8a691d4a 117
JRM1986 17:94dd8a691d4a 118 if(c == 1) {
JRM1986 17:94dd8a691d4a 119
JRM1986 17:94dd8a691d4a 120 x = g_odd_array_x[i];
JRM1986 17:94dd8a691d4a 121 y = g_odd_array_y[i];
JRM1986 17:94dd8a691d4a 122
JRM1986 17:94dd8a691d4a 123 lcd.setPixel(x,y,true);
JRM1986 17:94dd8a691d4a 124
JRM1986 17:94dd8a691d4a 125 }
JRM1986 17:94dd8a691d4a 126
JRM1986 17:94dd8a691d4a 127 else if (c == 0) {
JRM1986 17:94dd8a691d4a 128
JRM1986 17:94dd8a691d4a 129 x = g_even_array_x[i];
JRM1986 17:94dd8a691d4a 130 y = g_even_array_y[i];
JRM1986 17:94dd8a691d4a 131
JRM1986 17:94dd8a691d4a 132 lcd.setPixel(x,y,true);
JRM1986 17:94dd8a691d4a 133
JRM1986 17:94dd8a691d4a 134 }
JRM1986 17:94dd8a691d4a 135
JRM1986 17:94dd8a691d4a 136 }
JRM1986 17:94dd8a691d4a 137 }
JRM1986 16:85ca9feccf3f 138
JRM1986 16:85ca9feccf3f 139 int g_tail_length()
JRM1986 16:85ca9feccf3f 140 {
JRM1986 16:85ca9feccf3f 141
JRM1986 16:85ca9feccf3f 142 extern int g_tl;
JRM1986 16:85ca9feccf3f 143
JRM1986 16:85ca9feccf3f 144 return g_tl;
JRM1986 16:85ca9feccf3f 145
JRM1986 16:85ca9feccf3f 146 }
JRM1986 16:85ca9feccf3f 147
JRM1986 17:94dd8a691d4a 148
JRM1986 20:277e88a8185f 149 void SnakeEngine::init(Direction in, Direction cur, int snake_pos_x, int snake_pos_y)
JRM1986 7:c38800a428a6 150 {
JRM1986 20:277e88a8185f 151 _snake_pos_x = snake_pos_x;
JRM1986 20:277e88a8185f 152 _snake_pos_y = snake_pos_y;
JRM1986 20:277e88a8185f 153 _in = in;
JRM1986 20:277e88a8185f 154 _cur = cur;
JRM1986 18:406fc298a7c4 155
JRM1986 20:277e88a8185f 156 _snake.init(_in, _cur, _snake_pos_x, _snake_pos_y);
JRM1986 20:277e88a8185f 157
JRM1986 18:406fc298a7c4 158 _food.init(true);
JRM1986 9:561e5681b7a6 159
JRM1986 8:a2b431b9b3f7 160 }
JRM1986 8:a2b431b9b3f7 161
JRM1986 13:72bc2579e85e 162 void SnakeEngine::get_input(Gamepad &pad)
JRM1986 10:62d8cb7742c3 163 {
JRM1986 17:94dd8a691d4a 164
JRM1986 13:72bc2579e85e 165 _in = pad.get_direction();
JRM1986 10:62d8cb7742c3 166
JRM1986 10:62d8cb7742c3 167 }
JRM1986 10:62d8cb7742c3 168
JRM1986 10:62d8cb7742c3 169 void SnakeEngine::update(Gamepad &pad)
JRM1986 10:62d8cb7742c3 170 {
JRM1986 20:277e88a8185f 171 //int length;
JRM1986 16:85ca9feccf3f 172 bool food_col;
JRM1986 17:94dd8a691d4a 173 ++g_engine_fc;
JRM1986 17:94dd8a691d4a 174
JRM1986 10:62d8cb7742c3 175
JRM1986 13:72bc2579e85e 176 _snake.update(_in, _cur);
JRM1986 16:85ca9feccf3f 177 food_col = detect_food_collision(pad);
JRM1986 18:406fc298a7c4 178 _collision = food_col;
JRM1986 16:85ca9feccf3f 179 set_tail_length(food_col);
JRM1986 20:277e88a8185f 180 //length = get_tail_length();
JRM1986 20:277e88a8185f 181 //printf("Tail Length = %i \n", length);
JRM1986 17:94dd8a691d4a 182 set_tail_array(pad);
JRM1986 10:62d8cb7742c3 183
JRM1986 10:62d8cb7742c3 184 }
JRM1986 10:62d8cb7742c3 185
JRM1986 10:62d8cb7742c3 186
JRM1986 8:a2b431b9b3f7 187 void SnakeEngine::draw(N5110 &lcd)
JRM1986 8:a2b431b9b3f7 188 {
JRM1986 8:a2b431b9b3f7 189
JRM1986 8:a2b431b9b3f7 190 lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
JRM1986 8:a2b431b9b3f7 191 lcd.setContrast(0.5);
JRM1986 18:406fc298a7c4 192 _food.update(_collision);
JRM1986 8:a2b431b9b3f7 193 _food.draw(lcd);
JRM1986 21:63c5590cb2c2 194 //_snake.draw(lcd);
JRM1986 21:63c5590cb2c2 195 //draw_tail(lcd);
JRM1986 21:63c5590cb2c2 196 //_snake.update(_in, _cur);
JRM1986 10:62d8cb7742c3 197 _snake.draw(lcd);
JRM1986 17:94dd8a691d4a 198 draw_tail(lcd);
JRM1986 9:561e5681b7a6 199
JRM1986 16:85ca9feccf3f 200 }
JRM1986 16:85ca9feccf3f 201
JRM1986 16:85ca9feccf3f 202 bool SnakeEngine::detect_food_collision(Gamepad &pad)
JRM1986 16:85ca9feccf3f 203 {
JRM1986 16:85ca9feccf3f 204 Vector2D snake_pos = _snake.get_snake_position();
JRM1986 16:85ca9feccf3f 205 Vector2D food_pos = _food.get_food_position();
JRM1986 16:85ca9feccf3f 206
JRM1986 16:85ca9feccf3f 207 bool success_flag = false;
JRM1986 16:85ca9feccf3f 208
JRM1986 16:85ca9feccf3f 209 if((snake_pos.x == food_pos.x) && (snake_pos.y == food_pos.y)) {
JRM1986 16:85ca9feccf3f 210
JRM1986 16:85ca9feccf3f 211 success_flag = true;
JRM1986 16:85ca9feccf3f 212
JRM1986 16:85ca9feccf3f 213 }
JRM1986 16:85ca9feccf3f 214
JRM1986 16:85ca9feccf3f 215 else {
JRM1986 16:85ca9feccf3f 216
JRM1986 16:85ca9feccf3f 217 success_flag = false;
JRM1986 16:85ca9feccf3f 218
JRM1986 16:85ca9feccf3f 219 }
JRM1986 16:85ca9feccf3f 220
JRM1986 16:85ca9feccf3f 221 return success_flag;
JRM1986 16:85ca9feccf3f 222
JRM1986 16:85ca9feccf3f 223 }
JRM1986 16:85ca9feccf3f 224
JRM1986 19:b437806e579b 225 bool SnakeEngine::detect_wall_collision(Gamepad &pad)
JRM1986 19:b437806e579b 226 {
JRM1986 19:b437806e579b 227
JRM1986 19:b437806e579b 228 Vector2D snake_pos = _snake.get_snake_position();
JRM1986 19:b437806e579b 229
JRM1986 19:b437806e579b 230 bool success_flag = false;
JRM1986 19:b437806e579b 231
JRM1986 19:b437806e579b 232 if((snake_pos.x == (0 || 84)) || (snake_pos.y == (0 || 48))) {
JRM1986 19:b437806e579b 233
JRM1986 19:b437806e579b 234 success_flag = true;
JRM1986 19:b437806e579b 235
JRM1986 19:b437806e579b 236 }
JRM1986 19:b437806e579b 237
JRM1986 19:b437806e579b 238 return success_flag;
JRM1986 19:b437806e579b 239
JRM1986 19:b437806e579b 240 }
JRM1986 19:b437806e579b 241
JRM1986 19:b437806e579b 242
JRM1986 16:85ca9feccf3f 243 void SnakeEngine::set_tail_length(bool collision_detected)
JRM1986 16:85ca9feccf3f 244 {
JRM1986 16:85ca9feccf3f 245
JRM1986 16:85ca9feccf3f 246 if(collision_detected) {
JRM1986 16:85ca9feccf3f 247
JRM1986 16:85ca9feccf3f 248 ++g_tl;
JRM1986 16:85ca9feccf3f 249
JRM1986 16:85ca9feccf3f 250 }
JRM1986 16:85ca9feccf3f 251
JRM1986 16:85ca9feccf3f 252 else {
JRM1986 16:85ca9feccf3f 253
JRM1986 16:85ca9feccf3f 254 g_tl = g_tl;
JRM1986 16:85ca9feccf3f 255
JRM1986 16:85ca9feccf3f 256 }
JRM1986 16:85ca9feccf3f 257
JRM1986 16:85ca9feccf3f 258 }
JRM1986 16:85ca9feccf3f 259
JRM1986 16:85ca9feccf3f 260 int SnakeEngine::get_tail_length()
JRM1986 16:85ca9feccf3f 261 {
JRM1986 16:85ca9feccf3f 262
JRM1986 16:85ca9feccf3f 263 int length = g_tl;
JRM1986 16:85ca9feccf3f 264
JRM1986 16:85ca9feccf3f 265 return length;
JRM1986 16:85ca9feccf3f 266
JRM1986 16:85ca9feccf3f 267 }
JRM1986 16:85ca9feccf3f 268
JRM1986 16:85ca9feccf3f 269
JRM1986 16:85ca9feccf3f 270
JRM1986 16:85ca9feccf3f 271