Final Commit

Dependencies:   mbed

Committer:
JRM1986
Date:
Tue May 01 10:55:49 2018 +0000
Revision:
23:3081be418c89
Parent:
21:63c5590cb2c2
Child:
24:4b180348826e
Comments in process;

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