Final Commit

Dependencies:   mbed

Committer:
JRM1986
Date:
Mon Apr 30 10:13:35 2018 +0000
Revision:
19:b437806e579b
Parent:
18:406fc298a7c4
Child:
20:277e88a8185f
exeptions for set direction debugged, function for set direction seperated into smaller blocks;

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 17:94dd8a691d4a 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 17:94dd8a691d4a 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 17:94dd8a691d4a 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 19:b437806e579b 149 void SnakeEngine::init(Direction in, Direction cur, int pos_x, int pos_y)
JRM1986 7:c38800a428a6 150 {
JRM1986 18:406fc298a7c4 151
JRM1986 18:406fc298a7c4 152 _snake.init(W, W);
JRM1986 18:406fc298a7c4 153 _food.init(true);
JRM1986 9:561e5681b7a6 154
JRM1986 8:a2b431b9b3f7 155 }
JRM1986 8:a2b431b9b3f7 156
JRM1986 13:72bc2579e85e 157 void SnakeEngine::get_input(Gamepad &pad)
JRM1986 10:62d8cb7742c3 158 {
JRM1986 17:94dd8a691d4a 159
JRM1986 13:72bc2579e85e 160 _in = pad.get_direction();
JRM1986 10:62d8cb7742c3 161
JRM1986 10:62d8cb7742c3 162 }
JRM1986 10:62d8cb7742c3 163
JRM1986 10:62d8cb7742c3 164 void SnakeEngine::update(Gamepad &pad)
JRM1986 10:62d8cb7742c3 165 {
JRM1986 16:85ca9feccf3f 166 int length;
JRM1986 16:85ca9feccf3f 167 bool food_col;
JRM1986 17:94dd8a691d4a 168 ++g_engine_fc;
JRM1986 17:94dd8a691d4a 169
JRM1986 10:62d8cb7742c3 170
JRM1986 13:72bc2579e85e 171 _snake.update(_in, _cur);
JRM1986 16:85ca9feccf3f 172 food_col = detect_food_collision(pad);
JRM1986 18:406fc298a7c4 173 _collision = food_col;
JRM1986 16:85ca9feccf3f 174 set_tail_length(food_col);
JRM1986 16:85ca9feccf3f 175 length = get_tail_length();
JRM1986 17:94dd8a691d4a 176 printf("Tail Length = %i \n", length);
JRM1986 17:94dd8a691d4a 177 set_tail_array(pad);
JRM1986 10:62d8cb7742c3 178
JRM1986 10:62d8cb7742c3 179 }
JRM1986 10:62d8cb7742c3 180
JRM1986 10:62d8cb7742c3 181
JRM1986 8:a2b431b9b3f7 182 void SnakeEngine::draw(N5110 &lcd)
JRM1986 8:a2b431b9b3f7 183 {
JRM1986 8:a2b431b9b3f7 184
JRM1986 8:a2b431b9b3f7 185 lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
JRM1986 8:a2b431b9b3f7 186 lcd.setContrast(0.5);
JRM1986 18:406fc298a7c4 187 _food.update(_collision);
JRM1986 8:a2b431b9b3f7 188 _food.draw(lcd);
JRM1986 13:72bc2579e85e 189 _snake.update(_in, _cur);
JRM1986 10:62d8cb7742c3 190 _snake.draw(lcd);
JRM1986 17:94dd8a691d4a 191 draw_tail(lcd);
JRM1986 9:561e5681b7a6 192
JRM1986 16:85ca9feccf3f 193 }
JRM1986 16:85ca9feccf3f 194
JRM1986 16:85ca9feccf3f 195 bool SnakeEngine::detect_food_collision(Gamepad &pad)
JRM1986 16:85ca9feccf3f 196 {
JRM1986 16:85ca9feccf3f 197 Vector2D snake_pos = _snake.get_snake_position();
JRM1986 16:85ca9feccf3f 198 Vector2D food_pos = _food.get_food_position();
JRM1986 16:85ca9feccf3f 199
JRM1986 16:85ca9feccf3f 200 bool success_flag = false;
JRM1986 16:85ca9feccf3f 201
JRM1986 16:85ca9feccf3f 202 if((snake_pos.x == food_pos.x) && (snake_pos.y == food_pos.y)) {
JRM1986 16:85ca9feccf3f 203
JRM1986 16:85ca9feccf3f 204 success_flag = true;
JRM1986 16:85ca9feccf3f 205
JRM1986 16:85ca9feccf3f 206 }
JRM1986 16:85ca9feccf3f 207
JRM1986 16:85ca9feccf3f 208 else {
JRM1986 16:85ca9feccf3f 209
JRM1986 16:85ca9feccf3f 210 success_flag = false;
JRM1986 16:85ca9feccf3f 211
JRM1986 16:85ca9feccf3f 212 }
JRM1986 16:85ca9feccf3f 213
JRM1986 16:85ca9feccf3f 214 return success_flag;
JRM1986 16:85ca9feccf3f 215
JRM1986 16:85ca9feccf3f 216 }
JRM1986 16:85ca9feccf3f 217
JRM1986 19:b437806e579b 218 bool SnakeEngine::detect_wall_collision(Gamepad &pad)
JRM1986 19:b437806e579b 219 {
JRM1986 19:b437806e579b 220
JRM1986 19:b437806e579b 221 Vector2D snake_pos = _snake.get_snake_position();
JRM1986 19:b437806e579b 222
JRM1986 19:b437806e579b 223 bool success_flag = false;
JRM1986 19:b437806e579b 224
JRM1986 19:b437806e579b 225 if((snake_pos.x == (0 || 84)) || (snake_pos.y == (0 || 48))) {
JRM1986 19:b437806e579b 226
JRM1986 19:b437806e579b 227 success_flag = true;
JRM1986 19:b437806e579b 228
JRM1986 19:b437806e579b 229 }
JRM1986 19:b437806e579b 230
JRM1986 19:b437806e579b 231 return success_flag;
JRM1986 19:b437806e579b 232
JRM1986 19:b437806e579b 233 }
JRM1986 19:b437806e579b 234
JRM1986 19:b437806e579b 235
JRM1986 16:85ca9feccf3f 236 void SnakeEngine::set_tail_length(bool collision_detected)
JRM1986 16:85ca9feccf3f 237 {
JRM1986 16:85ca9feccf3f 238
JRM1986 16:85ca9feccf3f 239 if(collision_detected) {
JRM1986 16:85ca9feccf3f 240
JRM1986 16:85ca9feccf3f 241 ++g_tl;
JRM1986 16:85ca9feccf3f 242
JRM1986 16:85ca9feccf3f 243 }
JRM1986 16:85ca9feccf3f 244
JRM1986 16:85ca9feccf3f 245 else {
JRM1986 16:85ca9feccf3f 246
JRM1986 16:85ca9feccf3f 247 g_tl = g_tl;
JRM1986 16:85ca9feccf3f 248
JRM1986 16:85ca9feccf3f 249 }
JRM1986 16:85ca9feccf3f 250
JRM1986 16:85ca9feccf3f 251 }
JRM1986 16:85ca9feccf3f 252
JRM1986 16:85ca9feccf3f 253 int SnakeEngine::get_tail_length()
JRM1986 16:85ca9feccf3f 254 {
JRM1986 16:85ca9feccf3f 255
JRM1986 16:85ca9feccf3f 256 int length = g_tl;
JRM1986 16:85ca9feccf3f 257
JRM1986 16:85ca9feccf3f 258 return length;
JRM1986 16:85ca9feccf3f 259
JRM1986 16:85ca9feccf3f 260 }
JRM1986 16:85ca9feccf3f 261
JRM1986 16:85ca9feccf3f 262
JRM1986 16:85ca9feccf3f 263
JRM1986 16:85ca9feccf3f 264