Final Commit

Dependencies:   mbed

Committer:
JRM1986
Date:
Wed Apr 25 10:21:54 2018 +0000
Revision:
17:94dd8a691d4a
Parent:
16:85ca9feccf3f
Child:
18:406fc298a7c4
segments adding to tail but with gap between each

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 17:94dd8a691d4a 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 14:c3a435597196 149 void SnakeEngine::init(int snake_position_x, int snake_position_y)
JRM1986 7:c38800a428a6 150 {
JRM1986 13:72bc2579e85e 151 _snake_position_x = snake_position_x;
JRM1986 13:72bc2579e85e 152 _snake_position_y = snake_position_y;
JRM1986 14:c3a435597196 153
JRM1986 14:c3a435597196 154 _snake.init(_snake_position_x, _snake_position_y);
JRM1986 9:561e5681b7a6 155
JRM1986 8:a2b431b9b3f7 156 }
JRM1986 8:a2b431b9b3f7 157
JRM1986 13:72bc2579e85e 158 void SnakeEngine::get_input(Gamepad &pad)
JRM1986 10:62d8cb7742c3 159 {
JRM1986 17:94dd8a691d4a 160
JRM1986 13:72bc2579e85e 161 _in = pad.get_direction();
JRM1986 10:62d8cb7742c3 162
JRM1986 10:62d8cb7742c3 163 }
JRM1986 10:62d8cb7742c3 164
JRM1986 10:62d8cb7742c3 165 void SnakeEngine::update(Gamepad &pad)
JRM1986 10:62d8cb7742c3 166 {
JRM1986 16:85ca9feccf3f 167 int length;
JRM1986 16:85ca9feccf3f 168 bool food_col;
JRM1986 17:94dd8a691d4a 169 ++g_engine_fc;
JRM1986 17:94dd8a691d4a 170
JRM1986 10:62d8cb7742c3 171
JRM1986 13:72bc2579e85e 172 _snake.update(_in, _cur);
JRM1986 16:85ca9feccf3f 173 food_col = detect_food_collision(pad);
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 8:a2b431b9b3f7 187 _food.update();
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 16:85ca9feccf3f 218 void SnakeEngine::set_tail_length(bool collision_detected)
JRM1986 16:85ca9feccf3f 219 {
JRM1986 16:85ca9feccf3f 220
JRM1986 16:85ca9feccf3f 221 if(collision_detected) {
JRM1986 16:85ca9feccf3f 222
JRM1986 16:85ca9feccf3f 223 ++g_tl;
JRM1986 16:85ca9feccf3f 224
JRM1986 16:85ca9feccf3f 225 }
JRM1986 16:85ca9feccf3f 226
JRM1986 16:85ca9feccf3f 227 else {
JRM1986 16:85ca9feccf3f 228
JRM1986 16:85ca9feccf3f 229 g_tl = g_tl;
JRM1986 16:85ca9feccf3f 230
JRM1986 16:85ca9feccf3f 231 }
JRM1986 16:85ca9feccf3f 232
JRM1986 16:85ca9feccf3f 233 }
JRM1986 16:85ca9feccf3f 234
JRM1986 16:85ca9feccf3f 235 int SnakeEngine::get_tail_length()
JRM1986 16:85ca9feccf3f 236 {
JRM1986 16:85ca9feccf3f 237
JRM1986 16:85ca9feccf3f 238 int length = g_tl;
JRM1986 16:85ca9feccf3f 239
JRM1986 16:85ca9feccf3f 240 return length;
JRM1986 16:85ca9feccf3f 241
JRM1986 16:85ca9feccf3f 242 }
JRM1986 16:85ca9feccf3f 243
JRM1986 16:85ca9feccf3f 244
JRM1986 16:85ca9feccf3f 245
JRM1986 16:85ca9feccf3f 246