Crypt Mbed

Dependencies:   mbed wave_player 4DGL-uLCD-SE USBHost

Committer:
amcentag
Date:
Thu Dec 09 07:53:03 2021 +0000
Revision:
0:9d0cdfe46974
version 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
amcentag 0:9d0cdfe46974 1 #include "mbed.h"
amcentag 0:9d0cdfe46974 2 #include "uLCD_4DGL.h"
amcentag 0:9d0cdfe46974 3 #include "rtos.h"
amcentag 0:9d0cdfe46974 4 #include <stdlib.h>
amcentag 0:9d0cdfe46974 5
amcentag 0:9d0cdfe46974 6 #define YELLOW 0xFFFF00
amcentag 0:9d0cdfe46974 7 #define BROWN 0x964B00
amcentag 0:9d0cdfe46974 8 #define GREN 0x228B22
amcentag 0:9d0cdfe46974 9 #define RED 0xFF0000
amcentag 0:9d0cdfe46974 10 #define BLUE 0x0000FF
amcentag 0:9d0cdfe46974 11
amcentag 0:9d0cdfe46974 12 #define pl1 1
amcentag 0:9d0cdfe46974 13 #define pl2 2
amcentag 0:9d0cdfe46974 14 #define w 3
amcentag 0:9d0cdfe46974 15 #define slime 4
amcentag 0:9d0cdfe46974 16 #define slime2 5
amcentag 0:9d0cdfe46974 17 #define slime3 6
amcentag 0:9d0cdfe46974 18 #define stc -1
amcentag 0:9d0cdfe46974 19
amcentag 0:9d0cdfe46974 20 uLCD_4DGL uLCD(p9,p10,p11);
amcentag 0:9d0cdfe46974 21 Serial blue(p28,p27); // player 1
amcentag 0:9d0cdfe46974 22 Serial toof(p13,p14); // player 2
amcentag 0:9d0cdfe46974 23
amcentag 0:9d0cdfe46974 24 Thread thread_clk;
amcentag 0:9d0cdfe46974 25 Thread thread_input;
amcentag 0:9d0cdfe46974 26 Thread thread_input2;
amcentag 0:9d0cdfe46974 27 Thread ts;
amcentag 0:9d0cdfe46974 28 //Thread thread_proc;
amcentag 0:9d0cdfe46974 29
amcentag 0:9d0cdfe46974 30 //InterruptIn Wbn(p21);
amcentag 0:9d0cdfe46974 31 //InterruptIn Abn(p22);
amcentag 0:9d0cdfe46974 32 //InterruptIn Sbn(p23);
amcentag 0:9d0cdfe46974 33 //InterruptIn Dbn(p24);
amcentag 0:9d0cdfe46974 34 //PinDetect Wbn(p21);
amcentag 0:9d0cdfe46974 35 //PinDetect Abn(p22);
amcentag 0:9d0cdfe46974 36 //PinDetect Sbn(p23);
amcentag 0:9d0cdfe46974 37 //PinDetect Dbn(p24);
amcentag 0:9d0cdfe46974 38
amcentag 0:9d0cdfe46974 39 const int gb_SIZE = 14;
amcentag 0:9d0cdfe46974 40
amcentag 0:9d0cdfe46974 41 //current state of the game
amcentag 0:9d0cdfe46974 42 int gameBoard[gb_SIZE][gb_SIZE];
amcentag 0:9d0cdfe46974 43 //used to optimize draw function
amcentag 0:9d0cdfe46974 44 int changeBoard[gb_SIZE][gb_SIZE];
amcentag 0:9d0cdfe46974 45 //lock on both boards
amcentag 0:9d0cdfe46974 46 Mutex boardM;
amcentag 0:9d0cdfe46974 47
amcentag 0:9d0cdfe46974 48 //displays if it's currently a clickable action or not
amcentag 0:9d0cdfe46974 49 DigitalOut beat(LED1);
amcentag 0:9d0cdfe46974 50
amcentag 0:9d0cdfe46974 51 //counts up to 100
amcentag 0:9d0cdfe46974 52 int counter;
amcentag 0:9d0cdfe46974 53 //level in the game (for choosing bpm)
amcentag 0:9d0cdfe46974 54 int level;
amcentag 0:9d0cdfe46974 55 int kmrs;
amcentag 0:9d0cdfe46974 56 int numPlayers;
amcentag 0:9d0cdfe46974 57
amcentag 0:9d0cdfe46974 58 int currAction; // 1 is W, 2 is A, 3 is S, 4 is D
amcentag 0:9d0cdfe46974 59 int currAction2;
amcentag 0:9d0cdfe46974 60 int actLock; // locks actions out after first action until next beat
amcentag 0:9d0cdfe46974 61 int actLock2;
amcentag 0:9d0cdfe46974 62 Mutex actM; // mutex on currAction
amcentag 0:9d0cdfe46974 63
amcentag 0:9d0cdfe46974 64 //method declarations
amcentag 0:9d0cdfe46974 65 int levelTimes();
amcentag 0:9d0cdfe46974 66 void clk();
amcentag 0:9d0cdfe46974 67 void drawSquare(int i, int j, int temp);
amcentag 0:9d0cdfe46974 68 void drawGB();
amcentag 0:9d0cdfe46974 69 void processEnemyAction();
amcentag 0:9d0cdfe46974 70
amcentag 0:9d0cdfe46974 71 int p1x;
amcentag 0:9d0cdfe46974 72 int p1y;
amcentag 0:9d0cdfe46974 73 int stcx;
amcentag 0:9d0cdfe46974 74 int stcy;
amcentag 0:9d0cdfe46974 75
amcentag 0:9d0cdfe46974 76 #define Bb 233.08
amcentag 0:9d0cdfe46974 77
amcentag 0:9d0cdfe46974 78 #define C 261.63
amcentag 0:9d0cdfe46974 79
amcentag 0:9d0cdfe46974 80 #define Cs 277.18
amcentag 0:9d0cdfe46974 81
amcentag 0:9d0cdfe46974 82 #define D 293.66
amcentag 0:9d0cdfe46974 83
amcentag 0:9d0cdfe46974 84 #define E 329.66
amcentag 0:9d0cdfe46974 85
amcentag 0:9d0cdfe46974 86 #define F 349.23
amcentag 0:9d0cdfe46974 87
amcentag 0:9d0cdfe46974 88 #define G 392.00
amcentag 0:9d0cdfe46974 89
amcentag 0:9d0cdfe46974 90 #define A 440.00
amcentag 0:9d0cdfe46974 91
amcentag 0:9d0cdfe46974 92 int odd = 0;
amcentag 0:9d0cdfe46974 93
amcentag 0:9d0cdfe46974 94 PwmOut speaker(p26);
amcentag 0:9d0cdfe46974 95
amcentag 0:9d0cdfe46974 96
amcentag 0:9d0cdfe46974 97
amcentag 0:9d0cdfe46974 98 // the pin must be a PWM output pin
amcentag 0:9d0cdfe46974 99
amcentag 0:9d0cdfe46974 100 float note[64]= {293.66, 440.00, 329.66, 440.00, 349.23, 440.00, 392.00, 440.00,
amcentag 0:9d0cdfe46974 101
amcentag 0:9d0cdfe46974 102 349.23, 440.00, 329.66, 440.00, 293.66, 440.00, 277.18, 440.00,
amcentag 0:9d0cdfe46974 103
amcentag 0:9d0cdfe46974 104 293.66, 440.00, 329.66, 440.00, 349.23, 440.00, 392.00, 440.00,
amcentag 0:9d0cdfe46974 105
amcentag 0:9d0cdfe46974 106 349.23, 440.00, 329.66, 440.00, 293.66, 440.00, 277.18, 440.00,
amcentag 0:9d0cdfe46974 107
amcentag 0:9d0cdfe46974 108 233.08, 440.00, 261.63, 440.00, 293.66, 440.00, 329.66, 440.00,
amcentag 0:9d0cdfe46974 109
amcentag 0:9d0cdfe46974 110 349.23, 440.00, 329.66, 440.00, 293.66, 440.00, 261.63, 440.00,
amcentag 0:9d0cdfe46974 111
amcentag 0:9d0cdfe46974 112 261.63, 440.00, 293.66, 440.00, 329.66, 440.00, 349.23, 440.00,
amcentag 0:9d0cdfe46974 113
amcentag 0:9d0cdfe46974 114 392.00, 440.00, 349.23, 440.00, 329.66, 440.00, 293.66, 440.00
amcentag 0:9d0cdfe46974 115
amcentag 0:9d0cdfe46974 116 };
amcentag 0:9d0cdfe46974 117
amcentag 0:9d0cdfe46974 118
amcentag 0:9d0cdfe46974 119
amcentag 0:9d0cdfe46974 120 void speaker_thread()
amcentag 0:9d0cdfe46974 121
amcentag 0:9d0cdfe46974 122 {
amcentag 0:9d0cdfe46974 123 while(1){
amcentag 0:9d0cdfe46974 124 for(int i = 0; i < 64; i++) {
amcentag 0:9d0cdfe46974 125
amcentag 0:9d0cdfe46974 126 speaker.period(1.0/note[i]);
amcentag 0:9d0cdfe46974 127
amcentag 0:9d0cdfe46974 128 speaker = 0.3;
amcentag 0:9d0cdfe46974 129
amcentag 0:9d0cdfe46974 130 Thread::wait(1000);
amcentag 0:9d0cdfe46974 131
amcentag 0:9d0cdfe46974 132 }}
amcentag 0:9d0cdfe46974 133
amcentag 0:9d0cdfe46974 134 }
amcentag 0:9d0cdfe46974 135
amcentag 0:9d0cdfe46974 136 // setup instance of new SongPlayer class, mySpeaker using pin 26
amcentag 0:9d0cdfe46974 137
amcentag 0:9d0cdfe46974 138
amcentag 0:9d0cdfe46974 139 //returns the thread wait time for each level
amcentag 0:9d0cdfe46974 140 int levelTimes() {
amcentag 0:9d0cdfe46974 141 if (level == 1) {
amcentag 0:9d0cdfe46974 142 return 10;
amcentag 0:9d0cdfe46974 143 } else if (level == 2) {
amcentag 0:9d0cdfe46974 144 return 10;
amcentag 0:9d0cdfe46974 145 }
amcentag 0:9d0cdfe46974 146 return 1000;
amcentag 0:9d0cdfe46974 147 }
amcentag 0:9d0cdfe46974 148
amcentag 0:9d0cdfe46974 149
amcentag 0:9d0cdfe46974 150 void clk() {
amcentag 0:9d0cdfe46974 151 // Game code waits for input on a timer
amcentag 0:9d0cdfe46974 152 beat = 1;
amcentag 0:9d0cdfe46974 153 // Have clock increment a counter from 0 upZ to 100 (wait time depends on song [level])
amcentag 0:9d0cdfe46974 154 for(;;) {
amcentag 0:9d0cdfe46974 155 Thread::wait(levelTimes());
amcentag 0:9d0cdfe46974 156 counter++;
amcentag 0:9d0cdfe46974 157 if (counter > 100) {
amcentag 0:9d0cdfe46974 158 counter = 1;
amcentag 0:9d0cdfe46974 159 }
amcentag 0:9d0cdfe46974 160 //reset ability to make action on half beat
amcentag 0:9d0cdfe46974 161 if (counter == 50) {
amcentag 0:9d0cdfe46974 162 processEnemyAction();
amcentag 0:9d0cdfe46974 163 actLock = 1;
amcentag 0:9d0cdfe46974 164 actLock2 = 1;
amcentag 0:9d0cdfe46974 165 //currAction = 0;
amcentag 0:9d0cdfe46974 166 }
amcentag 0:9d0cdfe46974 167 //indicate when a press is on beat. May need to alter according to calibration
amcentag 0:9d0cdfe46974 168 if (counter == 25 || counter == 75) {
amcentag 0:9d0cdfe46974 169 beat = !beat;
amcentag 0:9d0cdfe46974 170 }
amcentag 0:9d0cdfe46974 171 }
amcentag 0:9d0cdfe46974 172 }
amcentag 0:9d0cdfe46974 173
amcentag 0:9d0cdfe46974 174 void processEnemyAction() {
amcentag 0:9d0cdfe46974 175 boardM.lock();
amcentag 0:9d0cdfe46974 176 for (int i = 0; i < gb_SIZE; i++) {
amcentag 0:9d0cdfe46974 177 for (int j = 0; j < gb_SIZE; j++) {
amcentag 0:9d0cdfe46974 178 if (gameBoard[i][j] == slime2 && changeBoard[i][j] != 1) { // enemy is here
amcentag 0:9d0cdfe46974 179 if (j > 0) {
amcentag 0:9d0cdfe46974 180 if (gameBoard[i][(j - 1)] < 3) {
amcentag 0:9d0cdfe46974 181 gameBoard[i][(j - 1)] = slime3;
amcentag 0:9d0cdfe46974 182 changeBoard[i][(j - 1)] = 1;
amcentag 0:9d0cdfe46974 183 gameBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 184 changeBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 185 }
amcentag 0:9d0cdfe46974 186 } else {
amcentag 0:9d0cdfe46974 187 if (gameBoard[i][(gb_SIZE-1)] < 3) {
amcentag 0:9d0cdfe46974 188 gameBoard[i][(gb_SIZE-1)] = slime3;
amcentag 0:9d0cdfe46974 189 changeBoard[i][(gb_SIZE-1)] = 1;
amcentag 0:9d0cdfe46974 190 gameBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 191 changeBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 192 }
amcentag 0:9d0cdfe46974 193 }
amcentag 0:9d0cdfe46974 194 }
amcentag 0:9d0cdfe46974 195 }
amcentag 0:9d0cdfe46974 196 }
amcentag 0:9d0cdfe46974 197 for (int i = 0; i < gb_SIZE; i++) {
amcentag 0:9d0cdfe46974 198 for (int j = 0; j < gb_SIZE; j++) {
amcentag 0:9d0cdfe46974 199 if (gameBoard[i][j] == slime3 && changeBoard[i][j] != 1) { // enemy is here
amcentag 0:9d0cdfe46974 200 if (j < gb_SIZE - 1) {
amcentag 0:9d0cdfe46974 201 if (gameBoard[i][(j + 1)] < 3) {
amcentag 0:9d0cdfe46974 202 gameBoard[i][(j + 1)] = slime2;
amcentag 0:9d0cdfe46974 203 changeBoard[i][(j + 1)] = 1;
amcentag 0:9d0cdfe46974 204 gameBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 205 changeBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 206 }
amcentag 0:9d0cdfe46974 207 } else {
amcentag 0:9d0cdfe46974 208 if (gameBoard[i][(0)] < 3) {
amcentag 0:9d0cdfe46974 209 gameBoard[i][(0)] = slime2;
amcentag 0:9d0cdfe46974 210 changeBoard[i][(0)] = 1;
amcentag 0:9d0cdfe46974 211 gameBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 212 changeBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 213 }
amcentag 0:9d0cdfe46974 214 }
amcentag 0:9d0cdfe46974 215 }
amcentag 0:9d0cdfe46974 216 }
amcentag 0:9d0cdfe46974 217 }
amcentag 0:9d0cdfe46974 218 odd++;
amcentag 0:9d0cdfe46974 219 if (odd % 4 == 0) {
amcentag 0:9d0cdfe46974 220 for (int i = 0; i < gb_SIZE; i++) {
amcentag 0:9d0cdfe46974 221 for (int j = 0; j < gb_SIZE; j++) {
amcentag 0:9d0cdfe46974 222 if (gameBoard[i][j] == 8 && changeBoard[i][j] != 1) { // enemy is here
amcentag 0:9d0cdfe46974 223 if (p1x < i && gameBoard[i - 1][(j)] < 3) {
amcentag 0:9d0cdfe46974 224 gameBoard[i - 1][(j)] = 8;
amcentag 0:9d0cdfe46974 225 changeBoard[i - 1][(j)] = 1;
amcentag 0:9d0cdfe46974 226 gameBoard[i][j] = slime;
amcentag 0:9d0cdfe46974 227 changeBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 228 } else if (p1x > i && gameBoard[i + 1][(j)] < 3) {
amcentag 0:9d0cdfe46974 229 gameBoard[i + 1][(j)] = 8;
amcentag 0:9d0cdfe46974 230 changeBoard[i + 1][(j)] = 1;
amcentag 0:9d0cdfe46974 231 gameBoard[i][j] = slime;
amcentag 0:9d0cdfe46974 232 changeBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 233 } else if (p1y < j && gameBoard[i][(j - 1)] < 3) {
amcentag 0:9d0cdfe46974 234 gameBoard[i][(j)-1] = 8;
amcentag 0:9d0cdfe46974 235 changeBoard[i][(j-1)] = 1;
amcentag 0:9d0cdfe46974 236 gameBoard[i][j] = slime;
amcentag 0:9d0cdfe46974 237 changeBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 238 } else {
amcentag 0:9d0cdfe46974 239 gameBoard[i][(j)+1] = 8;
amcentag 0:9d0cdfe46974 240 changeBoard[i][(j+1)] = 1;
amcentag 0:9d0cdfe46974 241 gameBoard[i][j] = slime;
amcentag 0:9d0cdfe46974 242 changeBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 243 }
amcentag 0:9d0cdfe46974 244 }
amcentag 0:9d0cdfe46974 245 }
amcentag 0:9d0cdfe46974 246 }
amcentag 0:9d0cdfe46974 247 }
amcentag 0:9d0cdfe46974 248 //draw board
amcentag 0:9d0cdfe46974 249 boardM.unlock();
amcentag 0:9d0cdfe46974 250 }
amcentag 0:9d0cdfe46974 251
amcentag 0:9d0cdfe46974 252 void processAction() {
amcentag 0:9d0cdfe46974 253 // On timed update from T1, assess player action, then assess enemy actions (enemies not implemented)
amcentag 0:9d0cdfe46974 254 // Grab grid lock
amcentag 0:9d0cdfe46974 255 // Update grid backing game information based on player action
amcentag 0:9d0cdfe46974 256 boardM.lock();
amcentag 0:9d0cdfe46974 257 if (currAction != 0) {
amcentag 0:9d0cdfe46974 258 for (int i = 0; i < gb_SIZE; i++) {
amcentag 0:9d0cdfe46974 259 for (int j = 0; j < gb_SIZE; j++) {
amcentag 0:9d0cdfe46974 260 if (gameBoard[i][j] == pl1 && changeBoard[i][j] != 1) { // player is here
amcentag 0:9d0cdfe46974 261 gameBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 262 changeBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 263 if (currAction == 1) {
amcentag 0:9d0cdfe46974 264 if (j > 0) {
amcentag 0:9d0cdfe46974 265 if (gameBoard[i][(j - 1)] < 1) {
amcentag 0:9d0cdfe46974 266 gameBoard[i][(j - 1)] = pl1;
amcentag 0:9d0cdfe46974 267 changeBoard[i][(j - 1)] = 1;
amcentag 0:9d0cdfe46974 268 p1x = i;
amcentag 0:9d0cdfe46974 269 p1y = j-1;
amcentag 0:9d0cdfe46974 270 } else if (gameBoard[i][(j - 1)] == w) {
amcentag 0:9d0cdfe46974 271 gameBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 272 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 273 } else {
amcentag 0:9d0cdfe46974 274 level = -1;
amcentag 0:9d0cdfe46974 275 }
amcentag 0:9d0cdfe46974 276 } else {
amcentag 0:9d0cdfe46974 277 if (gameBoard[i][(gb_SIZE-1)] < 1) {
amcentag 0:9d0cdfe46974 278 gameBoard[i][(gb_SIZE-1)] = pl1;
amcentag 0:9d0cdfe46974 279 changeBoard[i][(gb_SIZE-1)] = 1;
amcentag 0:9d0cdfe46974 280 p1x = i;
amcentag 0:9d0cdfe46974 281 p1y = gb_SIZE -1;
amcentag 0:9d0cdfe46974 282 } else if (gameBoard[i][(gb_SIZE-1)] == w) {
amcentag 0:9d0cdfe46974 283 gameBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 284 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 285 } else {
amcentag 0:9d0cdfe46974 286 level = -1;
amcentag 0:9d0cdfe46974 287 }
amcentag 0:9d0cdfe46974 288 }
amcentag 0:9d0cdfe46974 289 } else if (currAction == 2) {
amcentag 0:9d0cdfe46974 290 if (i > 0) {
amcentag 0:9d0cdfe46974 291 if (gameBoard[(i - 1)][j] < 1) {
amcentag 0:9d0cdfe46974 292 gameBoard[(i - 1)][j] = pl1;
amcentag 0:9d0cdfe46974 293 changeBoard[(i - 1)][j] = 1;
amcentag 0:9d0cdfe46974 294 p1x = i-1;
amcentag 0:9d0cdfe46974 295 p1y = j;
amcentag 0:9d0cdfe46974 296 }else if (gameBoard[(i - 1)][j] == w) {
amcentag 0:9d0cdfe46974 297 gameBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 298 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 299 } else {
amcentag 0:9d0cdfe46974 300 level = -1;
amcentag 0:9d0cdfe46974 301 }
amcentag 0:9d0cdfe46974 302 } else {
amcentag 0:9d0cdfe46974 303 if (gameBoard[(gb_SIZE-1)][j] < 1) {
amcentag 0:9d0cdfe46974 304 gameBoard[(gb_SIZE-1)][j] = pl1;
amcentag 0:9d0cdfe46974 305 changeBoard[(gb_SIZE-1)][j] = 1;
amcentag 0:9d0cdfe46974 306 p1x = gb_SIZE - 1;
amcentag 0:9d0cdfe46974 307 p1y = j;
amcentag 0:9d0cdfe46974 308 }else if (gameBoard[(gb_SIZE-1)][j] == w) {
amcentag 0:9d0cdfe46974 309 gameBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 310 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 311 } else {
amcentag 0:9d0cdfe46974 312 level = -1;
amcentag 0:9d0cdfe46974 313 }
amcentag 0:9d0cdfe46974 314 }
amcentag 0:9d0cdfe46974 315 } else if (currAction == 3) {
amcentag 0:9d0cdfe46974 316 if (gameBoard[i][(j+1)%gb_SIZE] < 1) {
amcentag 0:9d0cdfe46974 317 gameBoard[i][(j+1)%gb_SIZE] = pl1;
amcentag 0:9d0cdfe46974 318 p1x = i;
amcentag 0:9d0cdfe46974 319 p1y = (j+1)%gb_SIZE;
amcentag 0:9d0cdfe46974 320 changeBoard[i][(j+1)%gb_SIZE] = 1;
amcentag 0:9d0cdfe46974 321 }else if (gameBoard[i][(j+1)%gb_SIZE] == w) {
amcentag 0:9d0cdfe46974 322 gameBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 323 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 324 } else {
amcentag 0:9d0cdfe46974 325 level = -1;
amcentag 0:9d0cdfe46974 326 }
amcentag 0:9d0cdfe46974 327 } else if (currAction == 4) {
amcentag 0:9d0cdfe46974 328 if (gameBoard[(i+1)%gb_SIZE][j] < 1) {
amcentag 0:9d0cdfe46974 329 gameBoard[(i+1)%gb_SIZE][j] = pl1;
amcentag 0:9d0cdfe46974 330 changeBoard[(i+1)%gb_SIZE][j] = 1;
amcentag 0:9d0cdfe46974 331 p1y = j;
amcentag 0:9d0cdfe46974 332 p1x = (i+1)%gb_SIZE;
amcentag 0:9d0cdfe46974 333 } else if (gameBoard[(i+1)%gb_SIZE][j] == w) {
amcentag 0:9d0cdfe46974 334 gameBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 335 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 336 } else {
amcentag 0:9d0cdfe46974 337 level = -1;
amcentag 0:9d0cdfe46974 338 }
amcentag 0:9d0cdfe46974 339 } else if (currAction == 5) {
amcentag 0:9d0cdfe46974 340 if (j > 0) {
amcentag 0:9d0cdfe46974 341 if (gameBoard[i][(j - 1)] != w) {
amcentag 0:9d0cdfe46974 342 gameBoard[i][(j - 1)] = 0;
amcentag 0:9d0cdfe46974 343 changeBoard[i][(j - 1)] = 1;
amcentag 0:9d0cdfe46974 344 }
amcentag 0:9d0cdfe46974 345 } else {
amcentag 0:9d0cdfe46974 346 if (gameBoard[i][(gb_SIZE-1)] != w) {
amcentag 0:9d0cdfe46974 347 gameBoard[i][(gb_SIZE-1)] = 0;
amcentag 0:9d0cdfe46974 348 changeBoard[i][(gb_SIZE-1)] = 1;
amcentag 0:9d0cdfe46974 349 }
amcentag 0:9d0cdfe46974 350 }
amcentag 0:9d0cdfe46974 351 if (i > 0) {
amcentag 0:9d0cdfe46974 352 if (gameBoard[(i - 1)][j] != w) {
amcentag 0:9d0cdfe46974 353 gameBoard[(i - 1)][j] = 0;
amcentag 0:9d0cdfe46974 354 changeBoard[(i - 1)][j] = 1;
amcentag 0:9d0cdfe46974 355 }
amcentag 0:9d0cdfe46974 356 } else {
amcentag 0:9d0cdfe46974 357 if (gameBoard[(gb_SIZE-1)][j] != w) {
amcentag 0:9d0cdfe46974 358 gameBoard[(gb_SIZE-1)][j] = 0;
amcentag 0:9d0cdfe46974 359 changeBoard[(gb_SIZE-1)][j] = 1;
amcentag 0:9d0cdfe46974 360 }
amcentag 0:9d0cdfe46974 361 }
amcentag 0:9d0cdfe46974 362 if (gameBoard[i][(j+1)%gb_SIZE] != w) {
amcentag 0:9d0cdfe46974 363 gameBoard[i][(j+1)%gb_SIZE] = 0;
amcentag 0:9d0cdfe46974 364 changeBoard[i][(j+1)%gb_SIZE] = 1;
amcentag 0:9d0cdfe46974 365 }
amcentag 0:9d0cdfe46974 366 if (gameBoard[(i+1)%gb_SIZE][j] != w) {
amcentag 0:9d0cdfe46974 367 gameBoard[(i+1)%gb_SIZE][j] = 0;
amcentag 0:9d0cdfe46974 368 changeBoard[(i+1)%gb_SIZE][j] = 1;
amcentag 0:9d0cdfe46974 369 }
amcentag 0:9d0cdfe46974 370 gameBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 371 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 372 }
amcentag 0:9d0cdfe46974 373 }
amcentag 0:9d0cdfe46974 374 }
amcentag 0:9d0cdfe46974 375 }
amcentag 0:9d0cdfe46974 376 }
amcentag 0:9d0cdfe46974 377 processEnemyAction();
amcentag 0:9d0cdfe46974 378 if (gameBoard[p1x][p1y] != 1) {
amcentag 0:9d0cdfe46974 379 level = -1;
amcentag 0:9d0cdfe46974 380 }
amcentag 0:9d0cdfe46974 381 //draw board
amcentag 0:9d0cdfe46974 382 drawGB();
amcentag 0:9d0cdfe46974 383 //}
amcentag 0:9d0cdfe46974 384 boardM.unlock();
amcentag 0:9d0cdfe46974 385
amcentag 0:9d0cdfe46974 386 }
amcentag 0:9d0cdfe46974 387
amcentag 0:9d0cdfe46974 388 void processAction2() {
amcentag 0:9d0cdfe46974 389 // On timed update from T1, assess player action, then assess enemy actions (enemies not implemented)
amcentag 0:9d0cdfe46974 390 // Grab grid lock
amcentag 0:9d0cdfe46974 391 // Update grid backing game information based on player action
amcentag 0:9d0cdfe46974 392 boardM.lock();
amcentag 0:9d0cdfe46974 393 if (currAction2 != 0) {
amcentag 0:9d0cdfe46974 394 for (int i = 0; i < gb_SIZE; i++) {
amcentag 0:9d0cdfe46974 395 for (int j = 0; j < gb_SIZE; j++) {
amcentag 0:9d0cdfe46974 396 if (gameBoard[i][j] == pl2 && changeBoard[i][j] != 1) { // player is here
amcentag 0:9d0cdfe46974 397 gameBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 398 changeBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 399 if (currAction2 == 1) {
amcentag 0:9d0cdfe46974 400 if (j > 0) {
amcentag 0:9d0cdfe46974 401 if (gameBoard[i][(j - 1)] < 1) {
amcentag 0:9d0cdfe46974 402 gameBoard[i][(j - 1)] = pl2;
amcentag 0:9d0cdfe46974 403 changeBoard[i][(j - 1)] = 1;
amcentag 0:9d0cdfe46974 404
amcentag 0:9d0cdfe46974 405 } else if (gameBoard[i][(j - 1)] == w) {
amcentag 0:9d0cdfe46974 406 gameBoard[i][j] = pl2;
amcentag 0:9d0cdfe46974 407 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 408 } else {
amcentag 0:9d0cdfe46974 409 level = -1;
amcentag 0:9d0cdfe46974 410 }
amcentag 0:9d0cdfe46974 411 } else {
amcentag 0:9d0cdfe46974 412 if (gameBoard[i][(gb_SIZE-1)] < 1) {
amcentag 0:9d0cdfe46974 413 gameBoard[i][(gb_SIZE-1)] = pl2;
amcentag 0:9d0cdfe46974 414 changeBoard[i][(gb_SIZE-1)] = 1;
amcentag 0:9d0cdfe46974 415
amcentag 0:9d0cdfe46974 416 } else if (gameBoard[i][(gb_SIZE-1)] == w) {
amcentag 0:9d0cdfe46974 417 gameBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 418 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 419 } else {
amcentag 0:9d0cdfe46974 420 level = -1;
amcentag 0:9d0cdfe46974 421 }
amcentag 0:9d0cdfe46974 422 }
amcentag 0:9d0cdfe46974 423 } else if (currAction2 == 2) {
amcentag 0:9d0cdfe46974 424 if (i > 0) {
amcentag 0:9d0cdfe46974 425 if (gameBoard[(i - 1)][j] < 1) {
amcentag 0:9d0cdfe46974 426 gameBoard[(i - 1)][j] = pl2;
amcentag 0:9d0cdfe46974 427 changeBoard[(i - 1)][j] = 1;
amcentag 0:9d0cdfe46974 428
amcentag 0:9d0cdfe46974 429 }else if (gameBoard[(i - 1)][j] == w) {
amcentag 0:9d0cdfe46974 430 gameBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 431 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 432 } else {
amcentag 0:9d0cdfe46974 433 level = -1;
amcentag 0:9d0cdfe46974 434 }
amcentag 0:9d0cdfe46974 435 } else {
amcentag 0:9d0cdfe46974 436 if (gameBoard[(gb_SIZE-1)][j] < 1) {
amcentag 0:9d0cdfe46974 437 gameBoard[(gb_SIZE-1)][j] = pl2;
amcentag 0:9d0cdfe46974 438 changeBoard[(gb_SIZE-1)][j] = 1;
amcentag 0:9d0cdfe46974 439
amcentag 0:9d0cdfe46974 440 }else if (gameBoard[(gb_SIZE-1)][j] == w) {
amcentag 0:9d0cdfe46974 441 gameBoard[i][j] = pl2;
amcentag 0:9d0cdfe46974 442 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 443 } else {
amcentag 0:9d0cdfe46974 444 level = -1;
amcentag 0:9d0cdfe46974 445 }
amcentag 0:9d0cdfe46974 446 }
amcentag 0:9d0cdfe46974 447 } else if (currAction2 == 3) {
amcentag 0:9d0cdfe46974 448 if (gameBoard[i][(j+1)%gb_SIZE] < 1) {
amcentag 0:9d0cdfe46974 449 gameBoard[i][(j+1)%gb_SIZE] = pl2;
amcentag 0:9d0cdfe46974 450
amcentag 0:9d0cdfe46974 451 changeBoard[i][(j+1)%gb_SIZE] = 1;
amcentag 0:9d0cdfe46974 452 }else if (gameBoard[i][(j+1)%gb_SIZE] == w) {
amcentag 0:9d0cdfe46974 453 gameBoard[i][j] = pl2;
amcentag 0:9d0cdfe46974 454 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 455 } else {
amcentag 0:9d0cdfe46974 456 level = -1;
amcentag 0:9d0cdfe46974 457 }
amcentag 0:9d0cdfe46974 458 } else if (currAction2 == 4) {
amcentag 0:9d0cdfe46974 459 if (gameBoard[(i+1)%gb_SIZE][j] < 1) {
amcentag 0:9d0cdfe46974 460 gameBoard[(i+1)%gb_SIZE][j] = pl2;
amcentag 0:9d0cdfe46974 461 changeBoard[(i+1)%gb_SIZE][j] = 1;
amcentag 0:9d0cdfe46974 462 p1y = j;
amcentag 0:9d0cdfe46974 463 p1x = (i+1)%gb_SIZE;
amcentag 0:9d0cdfe46974 464 } else if (gameBoard[(i+1)%gb_SIZE][j] == w) {
amcentag 0:9d0cdfe46974 465 gameBoard[i][j] = 1;
amcentag 0:9d0cdfe46974 466 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 467 } else {
amcentag 0:9d0cdfe46974 468 level = -1;
amcentag 0:9d0cdfe46974 469 }
amcentag 0:9d0cdfe46974 470 } else if (currAction2 == 5) {
amcentag 0:9d0cdfe46974 471 if (j > 0) {
amcentag 0:9d0cdfe46974 472 if (gameBoard[i][(j - 1)] != w) {
amcentag 0:9d0cdfe46974 473 gameBoard[i][(j - 1)] = 0;
amcentag 0:9d0cdfe46974 474 changeBoard[i][(j - 1)] = 1;
amcentag 0:9d0cdfe46974 475 }
amcentag 0:9d0cdfe46974 476 } else {
amcentag 0:9d0cdfe46974 477 if (gameBoard[i][(gb_SIZE-1)] != w) {
amcentag 0:9d0cdfe46974 478 gameBoard[i][(gb_SIZE-1)] = 0;
amcentag 0:9d0cdfe46974 479 changeBoard[i][(gb_SIZE-1)] = 1;
amcentag 0:9d0cdfe46974 480 }
amcentag 0:9d0cdfe46974 481 }
amcentag 0:9d0cdfe46974 482 if (i > 0) {
amcentag 0:9d0cdfe46974 483 if (gameBoard[(i - 1)][j] != w) {
amcentag 0:9d0cdfe46974 484 gameBoard[(i - 1)][j] = 0;
amcentag 0:9d0cdfe46974 485 changeBoard[(i - 1)][j] = 1;
amcentag 0:9d0cdfe46974 486 }
amcentag 0:9d0cdfe46974 487 } else {
amcentag 0:9d0cdfe46974 488 if (gameBoard[(gb_SIZE-1)][j] != w) {
amcentag 0:9d0cdfe46974 489 gameBoard[(gb_SIZE-1)][j] = 0;
amcentag 0:9d0cdfe46974 490 changeBoard[(gb_SIZE-1)][j] = 1;
amcentag 0:9d0cdfe46974 491 }
amcentag 0:9d0cdfe46974 492 }
amcentag 0:9d0cdfe46974 493 if (gameBoard[i][(j+1)%gb_SIZE] != w) {
amcentag 0:9d0cdfe46974 494 gameBoard[i][(j+1)%gb_SIZE] = 0;
amcentag 0:9d0cdfe46974 495 changeBoard[i][(j+1)%gb_SIZE] = 1;
amcentag 0:9d0cdfe46974 496 }
amcentag 0:9d0cdfe46974 497 if (gameBoard[(i+1)%gb_SIZE][j] != w) {
amcentag 0:9d0cdfe46974 498 gameBoard[(i+1)%gb_SIZE][j] = 0;
amcentag 0:9d0cdfe46974 499 changeBoard[(i+1)%gb_SIZE][j] = 1;
amcentag 0:9d0cdfe46974 500 }
amcentag 0:9d0cdfe46974 501 gameBoard[i][j] = pl2;
amcentag 0:9d0cdfe46974 502 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 503 }
amcentag 0:9d0cdfe46974 504 }
amcentag 0:9d0cdfe46974 505 }
amcentag 0:9d0cdfe46974 506 }
amcentag 0:9d0cdfe46974 507 }
amcentag 0:9d0cdfe46974 508 //draw board
amcentag 0:9d0cdfe46974 509 drawGB();
amcentag 0:9d0cdfe46974 510 //}
amcentag 0:9d0cdfe46974 511 boardM.unlock();
amcentag 0:9d0cdfe46974 512
amcentag 0:9d0cdfe46974 513 }
amcentag 0:9d0cdfe46974 514
amcentag 0:9d0cdfe46974 515 void drawSquare(int i, int j, int temp) {
amcentag 0:9d0cdfe46974 516 if (temp == 0) { // empty
amcentag 0:9d0cdfe46974 517 if (level == 1) {
amcentag 0:9d0cdfe46974 518 uLCD.filled_rectangle(i * 9 + 1, j * 9 + 1, i * 9 + 8, j * 9 + 8, YELLOW);
amcentag 0:9d0cdfe46974 519 } else if (level == 2) {
amcentag 0:9d0cdfe46974 520 uLCD.filled_rectangle(i * 9 + 1, j * 9 + 1, i * 9 + 8, j * 9 + 8, 0x00FF00);
amcentag 0:9d0cdfe46974 521 }
amcentag 0:9d0cdfe46974 522 } else if (temp == pl1) { // player
amcentag 0:9d0cdfe46974 523 // uLCD.filled_rectangle(i * 9 + 3, j * 9 + 3, i * 9 + 6, j * 9 + 6, 0xFF0000);
amcentag 0:9d0cdfe46974 524 uLCD.filled_rectangle(i*9+2,j*9+6,i*9+3,j*9+7,RED);
amcentag 0:9d0cdfe46974 525 uLCD.filled_rectangle(i*9+6,j*9+6,i*9+7,j*9+7,RED);
amcentag 0:9d0cdfe46974 526 uLCD.line(i*9+3,j*9+5,i*9+3,j*9+2,RED);
amcentag 0:9d0cdfe46974 527 uLCD.line(i*9+7,j*9+5,i*9+7,j*9+2,RED);
amcentag 0:9d0cdfe46974 528 uLCD.line(i*9+3,j*9+2,i*9+8,j*9+2,RED);
amcentag 0:9d0cdfe46974 529 } else if (temp == pl2) { // player
amcentag 0:9d0cdfe46974 530 // uLCD.filled_rectangle(i * 9 + 3, j * 9 + 3, i * 9 + 6, j * 9 + 6, 0xFF0000);
amcentag 0:9d0cdfe46974 531 uLCD.filled_rectangle(i*9+2,j*9+6,i*9+3,j*9+7,BLUE);
amcentag 0:9d0cdfe46974 532 uLCD.filled_rectangle(i*9+6,j*9+6,i*9+7,j*9+7,BLUE);
amcentag 0:9d0cdfe46974 533 uLCD.line(i*9+3,j*9+5,i*9+3,j*9+2,BLUE);
amcentag 0:9d0cdfe46974 534 uLCD.line(i*9+7,j*9+5,i*9+7,j*9+2,BLUE);
amcentag 0:9d0cdfe46974 535 uLCD.line(i*9+3,j*9+2,i*9+8,j*9+2,BLUE);
amcentag 0:9d0cdfe46974 536 } else if (temp == w) {
amcentag 0:9d0cdfe46974 537 uLCD.filled_rectangle(i * 9 + 2, j * 9 + 2, i * 9 + 7, j * 9 + 7, BROWN);
amcentag 0:9d0cdfe46974 538 } else if (temp == slime) {
amcentag 0:9d0cdfe46974 539 uLCD.filled_rectangle(i * 9 + 2, j * 9 + 2, i * 9 + 5, j * 9 + 5, RED);
amcentag 0:9d0cdfe46974 540 uLCD.filled_rectangle(i * 9 + 5, j * 9 + 5, i * 9 + 7, j * 9 + 7, RED);
amcentag 0:9d0cdfe46974 541 } else if (temp == slime2 || temp == slime3) {
amcentag 0:9d0cdfe46974 542 uLCD.filled_rectangle(i * 9 + 2, j * 9 + 2, i * 9 + 5, j * 9 + 5, GREN);
amcentag 0:9d0cdfe46974 543 uLCD.filled_rectangle(i * 9 + 5, j * 9 + 5, i * 9 + 7, j * 9 + 7, GREN);
amcentag 0:9d0cdfe46974 544 } else if (temp == stc) {
amcentag 0:9d0cdfe46974 545 uLCD.filled_rectangle(i*9 + 6, j * 9 + 1, i*9 + 7, j*9 + 7, 0);
amcentag 0:9d0cdfe46974 546 uLCD.filled_rectangle(i*9 + 4, j * 9 + 3, i*9 + 5, j*9 + 7, 0);
amcentag 0:9d0cdfe46974 547 uLCD.filled_rectangle(i*9 + 2, j * 9 + 5, i*9 + 3, j*9 + 7, 0);
amcentag 0:9d0cdfe46974 548 } else if (temp == 8) {
amcentag 0:9d0cdfe46974 549 uLCD.filled_rectangle(i*9 + 2, j * 9 + 2, i*9 + 2, j*9 + 7, 0xFFFFFF);
amcentag 0:9d0cdfe46974 550 uLCD.filled_rectangle(i*9 + 4, j * 9 + 2, i*9 + 4, j*9 + 7, 0xFFFFFF);
amcentag 0:9d0cdfe46974 551 uLCD.filled_rectangle(i*9 + 6, j * 9 + 2, i*9 + 6, j*9 + 7, 0xFFFFFF);
amcentag 0:9d0cdfe46974 552 }
amcentag 0:9d0cdfe46974 553 }
amcentag 0:9d0cdfe46974 554
amcentag 0:9d0cdfe46974 555 void drawGB() {
amcentag 0:9d0cdfe46974 556 //draw all squares from gameboard which changeboard indicates are changed
amcentag 0:9d0cdfe46974 557 for (int i = 0; i < gb_SIZE; i++) {
amcentag 0:9d0cdfe46974 558 for (int j =0; j < gb_SIZE; j++) {
amcentag 0:9d0cdfe46974 559 if (changeBoard[i][j] > 0) {
amcentag 0:9d0cdfe46974 560 int temp = gameBoard[i][j];
amcentag 0:9d0cdfe46974 561 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 562 drawSquare(i, j, temp);
amcentag 0:9d0cdfe46974 563 }
amcentag 0:9d0cdfe46974 564 }
amcentag 0:9d0cdfe46974 565 }
amcentag 0:9d0cdfe46974 566 }
amcentag 0:9d0cdfe46974 567
amcentag 0:9d0cdfe46974 568 void actionable(int i) {
amcentag 0:9d0cdfe46974 569 if (actLock) {
amcentag 0:9d0cdfe46974 570 actM.lock();
amcentag 0:9d0cdfe46974 571 actLock = 0;
amcentag 0:9d0cdfe46974 572 actM.unlock();
amcentag 0:9d0cdfe46974 573 if (counter <= 25 || counter >= 75) {
amcentag 0:9d0cdfe46974 574 currAction = i;
amcentag 0:9d0cdfe46974 575 } else {
amcentag 0:9d0cdfe46974 576 currAction = 0;
amcentag 0:9d0cdfe46974 577 }
amcentag 0:9d0cdfe46974 578 processAction();
amcentag 0:9d0cdfe46974 579 }
amcentag 0:9d0cdfe46974 580 }
amcentag 0:9d0cdfe46974 581
amcentag 0:9d0cdfe46974 582 void actionable2(int i) {
amcentag 0:9d0cdfe46974 583 if (actLock2) {
amcentag 0:9d0cdfe46974 584 actLock2 = 0;
amcentag 0:9d0cdfe46974 585 if (counter <= 25 || counter >= 75) {
amcentag 0:9d0cdfe46974 586 currAction2 = i;
amcentag 0:9d0cdfe46974 587 } else {
amcentag 0:9d0cdfe46974 588 currAction2 = 0;
amcentag 0:9d0cdfe46974 589 }
amcentag 0:9d0cdfe46974 590 processAction2();
amcentag 0:9d0cdfe46974 591 }
amcentag 0:9d0cdfe46974 592 }
amcentag 0:9d0cdfe46974 593
amcentag 0:9d0cdfe46974 594 void initLevel(int lvlNum) {
amcentag 0:9d0cdfe46974 595 for(int i = 0; i < gb_SIZE; i++) {
amcentag 0:9d0cdfe46974 596 for(int j = 0; j < gb_SIZE; j++) {
amcentag 0:9d0cdfe46974 597 gameBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 598 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 599 }
amcentag 0:9d0cdfe46974 600 }
amcentag 0:9d0cdfe46974 601 if (lvlNum == 1) {
amcentag 0:9d0cdfe46974 602 p1x = 0;
amcentag 0:9d0cdfe46974 603 p1y = 0;
amcentag 0:9d0cdfe46974 604 stcx = 13;
amcentag 0:9d0cdfe46974 605 stcy = 13;
amcentag 0:9d0cdfe46974 606 gameBoard[13][13] = stc;
amcentag 0:9d0cdfe46974 607 changeBoard[13][13] = 1;
amcentag 0:9d0cdfe46974 608 gameBoard[0][0] = pl1;
amcentag 0:9d0cdfe46974 609 changeBoard[0][0] = 1;
amcentag 0:9d0cdfe46974 610 if (numPlayers > 1) {
amcentag 0:9d0cdfe46974 611 gameBoard[0][13] = pl2;
amcentag 0:9d0cdfe46974 612 changeBoard[0][13] = 1;
amcentag 0:9d0cdfe46974 613 }
amcentag 0:9d0cdfe46974 614 for (int bxm = 2; bxm < 9; bxm++) {
amcentag 0:9d0cdfe46974 615 gameBoard[1][bxm] = w;
amcentag 0:9d0cdfe46974 616 changeBoard[1][bxm] = 1;
amcentag 0:9d0cdfe46974 617 }
amcentag 0:9d0cdfe46974 618 for (int bxm = 11; bxm > 7; bxm--) {
amcentag 0:9d0cdfe46974 619 gameBoard[bxm][bxm] = w;
amcentag 0:9d0cdfe46974 620 changeBoard[bxm][bxm] = 1;
amcentag 0:9d0cdfe46974 621 }
amcentag 0:9d0cdfe46974 622 for (int bxm = 1; bxm < 5; bxm++) {
amcentag 0:9d0cdfe46974 623 gameBoard[bxm][2] = w;
amcentag 0:9d0cdfe46974 624 changeBoard[bxm][2] = 1;
amcentag 0:9d0cdfe46974 625 }
amcentag 0:9d0cdfe46974 626 for (int jqw =0; jqw< 7; jqw++) {
amcentag 0:9d0cdfe46974 627 int xxx = rand()%13 + 1;
amcentag 0:9d0cdfe46974 628 int yyy = rand()%14;
amcentag 0:9d0cdfe46974 629 gameBoard[xxx][yyy] = slime;
amcentag 0:9d0cdfe46974 630 changeBoard[xxx][yyy] = 1;
amcentag 0:9d0cdfe46974 631 }
amcentag 0:9d0cdfe46974 632 for (int jqw =0; jqw< 7; jqw++) {
amcentag 0:9d0cdfe46974 633 int xxx = rand()%13 + 1;
amcentag 0:9d0cdfe46974 634 int yyy = rand()%14;
amcentag 0:9d0cdfe46974 635 gameBoard[xxx][yyy] = slime2;
amcentag 0:9d0cdfe46974 636 changeBoard[xxx][yyy] = 1;
amcentag 0:9d0cdfe46974 637 }
amcentag 0:9d0cdfe46974 638 } else if (lvlNum == 2) {
amcentag 0:9d0cdfe46974 639 for(int i = 0; i < gb_SIZE; i++) {
amcentag 0:9d0cdfe46974 640 for(int j = 0; j < gb_SIZE; j++) {
amcentag 0:9d0cdfe46974 641 gameBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 642 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 643 }
amcentag 0:9d0cdfe46974 644 }
amcentag 0:9d0cdfe46974 645 uLCD.background_color(0x00FF00);
amcentag 0:9d0cdfe46974 646 uLCD.cls();
amcentag 0:9d0cdfe46974 647 uLCD.color(BLACK);
amcentag 0:9d0cdfe46974 648 //display char # select menu TODO, Skipped for now
amcentag 0:9d0cdfe46974 649 //wait on input for char select TODO, Skipped for nowha
amcentag 0:9d0cdfe46974 650 //add calibration screen TODO, Skipped for now
amcentag 0:9d0cdfe46974 651 // draw board grid
amcentag 0:9d0cdfe46974 652 for (int i = 0; i < 128; i+=9) {
amcentag 0:9d0cdfe46974 653 uLCD.line(0, i, 127, i, 0);
amcentag 0:9d0cdfe46974 654 uLCD.line(i, 0, i, 127, 0);
amcentag 0:9d0cdfe46974 655 }
amcentag 0:9d0cdfe46974 656 p1x = 1;
amcentag 0:9d0cdfe46974 657 p1y = 1;
amcentag 0:9d0cdfe46974 658 stcx = 12;
amcentag 0:9d0cdfe46974 659 stcy = 12;
amcentag 0:9d0cdfe46974 660 for(int i = 0; i < gb_SIZE; i++) {
amcentag 0:9d0cdfe46974 661 for(int j = 0; j < gb_SIZE; j++) {
amcentag 0:9d0cdfe46974 662 gameBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 663 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 664 }
amcentag 0:9d0cdfe46974 665 }
amcentag 0:9d0cdfe46974 666 gameBoard[12][12] = stc;
amcentag 0:9d0cdfe46974 667 changeBoard[12][12] = 1;
amcentag 0:9d0cdfe46974 668 gameBoard[1][1] = pl1;
amcentag 0:9d0cdfe46974 669 changeBoard[1][1] = 1;
amcentag 0:9d0cdfe46974 670 if (numPlayers > 1) {
amcentag 0:9d0cdfe46974 671 gameBoard[1][12] = pl2;
amcentag 0:9d0cdfe46974 672 changeBoard[1][12] = 1;
amcentag 0:9d0cdfe46974 673 }
amcentag 0:9d0cdfe46974 674 for (int i = 0; i < gb_SIZE; i++) {
amcentag 0:9d0cdfe46974 675 gameBoard[0][i] = w;
amcentag 0:9d0cdfe46974 676 gameBoard[i][0] = w;
amcentag 0:9d0cdfe46974 677 gameBoard[gb_SIZE - 1][i] = w;
amcentag 0:9d0cdfe46974 678 gameBoard[i][gb_SIZE - 1] = w;
amcentag 0:9d0cdfe46974 679 changeBoard[0][i] = 1;
amcentag 0:9d0cdfe46974 680 changeBoard[i][0] = 1;
amcentag 0:9d0cdfe46974 681 changeBoard[gb_SIZE - 1][i] = 1;
amcentag 0:9d0cdfe46974 682 changeBoard[i][gb_SIZE - 1] = 1;
amcentag 0:9d0cdfe46974 683 }
amcentag 0:9d0cdfe46974 684 gameBoard[7][7] = 8;
amcentag 0:9d0cdfe46974 685 changeBoard[7][7] = 1;
amcentag 0:9d0cdfe46974 686 } else {
amcentag 0:9d0cdfe46974 687 for(int i = 0; i < gb_SIZE; i++) {
amcentag 0:9d0cdfe46974 688 for(int j = 0; j < gb_SIZE; j++) {
amcentag 0:9d0cdfe46974 689 gameBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 690 changeBoard[i][j] = 0;
amcentag 0:9d0cdfe46974 691 }
amcentag 0:9d0cdfe46974 692 }
amcentag 0:9d0cdfe46974 693 // uLCD.cls();
amcentag 0:9d0cdfe46974 694 // uLCD.color(GREN);
amcentag 0:9d0cdfe46974 695 // uLCD.printf("YOU WIN!!");
amcentag 0:9d0cdfe46974 696 // while(1);
amcentag 0:9d0cdfe46974 697 }
amcentag 0:9d0cdfe46974 698 drawGB();
amcentag 0:9d0cdfe46974 699 }
amcentag 0:9d0cdfe46974 700
amcentag 0:9d0cdfe46974 701 void inpizzy() {
amcentag 0:9d0cdfe46974 702 odd = 0;
amcentag 0:9d0cdfe46974 703 char bnum=0;
amcentag 0:9d0cdfe46974 704 char bhit=0;
amcentag 0:9d0cdfe46974 705 while(1) {
amcentag 0:9d0cdfe46974 706 if (blue.getc()=='!') {
amcentag 0:9d0cdfe46974 707 if (blue.getc()=='B') { //button data packet
amcentag 0:9d0cdfe46974 708 bnum = blue.getc(); //button number
amcentag 0:9d0cdfe46974 709 bhit = blue.getc(); //1=hit, 0=release
amcentag 0:9d0cdfe46974 710 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
amcentag 0:9d0cdfe46974 711 switch (bnum) {
amcentag 0:9d0cdfe46974 712 case '1': //number button 1
amcentag 0:9d0cdfe46974 713 if (bhit=='1') {
amcentag 0:9d0cdfe46974 714 //add hit code here
amcentag 0:9d0cdfe46974 715 actionable2(1);
amcentag 0:9d0cdfe46974 716 //actionable(5);
amcentag 0:9d0cdfe46974 717 } else {
amcentag 0:9d0cdfe46974 718 //add release code here
amcentag 0:9d0cdfe46974 719 }
amcentag 0:9d0cdfe46974 720 break;
amcentag 0:9d0cdfe46974 721 case '2': //number button 2
amcentag 0:9d0cdfe46974 722 if (bhit=='1') {
amcentag 0:9d0cdfe46974 723 actionable2(4);
amcentag 0:9d0cdfe46974 724 //add hit code here
amcentag 0:9d0cdfe46974 725 } else {
amcentag 0:9d0cdfe46974 726 //add release code here
amcentag 0:9d0cdfe46974 727 }
amcentag 0:9d0cdfe46974 728 break;
amcentag 0:9d0cdfe46974 729 case '3': //number button 3
amcentag 0:9d0cdfe46974 730 if (bhit=='1') {
amcentag 0:9d0cdfe46974 731 actionable2(2);
amcentag 0:9d0cdfe46974 732 //add hit code here
amcentag 0:9d0cdfe46974 733 } else {
amcentag 0:9d0cdfe46974 734 //add release code here
amcentag 0:9d0cdfe46974 735 }
amcentag 0:9d0cdfe46974 736 break;
amcentag 0:9d0cdfe46974 737 case '4': //number button 4
amcentag 0:9d0cdfe46974 738 if (bhit=='1') {
amcentag 0:9d0cdfe46974 739 actionable2(3);
amcentag 0:9d0cdfe46974 740 //add hit code here
amcentag 0:9d0cdfe46974 741 } else {
amcentag 0:9d0cdfe46974 742 //add release code here
amcentag 0:9d0cdfe46974 743 }
amcentag 0:9d0cdfe46974 744 break;
amcentag 0:9d0cdfe46974 745 case '5': //button 5 up arrow
amcentag 0:9d0cdfe46974 746 if (bhit=='1') {
amcentag 0:9d0cdfe46974 747 actionable(1);
amcentag 0:9d0cdfe46974 748 } else {
amcentag 0:9d0cdfe46974 749 //add release code here
amcentag 0:9d0cdfe46974 750 }
amcentag 0:9d0cdfe46974 751 break;
amcentag 0:9d0cdfe46974 752 case '6': //button 6 down arrow
amcentag 0:9d0cdfe46974 753 if (bhit=='1') {
amcentag 0:9d0cdfe46974 754 actionable(3);
amcentag 0:9d0cdfe46974 755 } else {
amcentag 0:9d0cdfe46974 756
amcentag 0:9d0cdfe46974 757 }
amcentag 0:9d0cdfe46974 758 break;
amcentag 0:9d0cdfe46974 759 case '7': //button 7 left arrow
amcentag 0:9d0cdfe46974 760 if (bhit=='1') {
amcentag 0:9d0cdfe46974 761 actionable(2);
amcentag 0:9d0cdfe46974 762 } else {
amcentag 0:9d0cdfe46974 763 //add release code here
amcentag 0:9d0cdfe46974 764 }
amcentag 0:9d0cdfe46974 765 break;
amcentag 0:9d0cdfe46974 766 case '8': //button 8 right arrow
amcentag 0:9d0cdfe46974 767 if (bhit=='1') {
amcentag 0:9d0cdfe46974 768 actionable(4);
amcentag 0:9d0cdfe46974 769 } else {
amcentag 0:9d0cdfe46974 770 //add release code here
amcentag 0:9d0cdfe46974 771 }
amcentag 0:9d0cdfe46974 772 break;
amcentag 0:9d0cdfe46974 773 default:
amcentag 0:9d0cdfe46974 774 break;
amcentag 0:9d0cdfe46974 775 }
amcentag 0:9d0cdfe46974 776 }
amcentag 0:9d0cdfe46974 777 }
amcentag 0:9d0cdfe46974 778 }
amcentag 0:9d0cdfe46974 779 }
amcentag 0:9d0cdfe46974 780 }
amcentag 0:9d0cdfe46974 781
amcentag 0:9d0cdfe46974 782
amcentag 0:9d0cdfe46974 783 int main()
amcentag 0:9d0cdfe46974 784 {
amcentag 0:9d0cdfe46974 785 numPlayers = 0;
amcentag 0:9d0cdfe46974 786 level = 1;
amcentag 0:9d0cdfe46974 787 //initialize lcd
amcentag 0:9d0cdfe46974 788 uLCD.cls();
amcentag 0:9d0cdfe46974 789 uLCD.baudrate(3000000);
amcentag 0:9d0cdfe46974 790 uLCD.background_color(0xFFFF00);
amcentag 0:9d0cdfe46974 791 uLCD.cls();
amcentag 0:9d0cdfe46974 792 char bnum=0;
amcentag 0:9d0cdfe46974 793 char bhit=0;
amcentag 0:9d0cdfe46974 794 uLCD.text_width(1); //4X size text
amcentag 0:9d0cdfe46974 795 uLCD.text_height(1);
amcentag 0:9d0cdfe46974 796 uLCD.color(RED);
amcentag 0:9d0cdfe46974 797 uLCD.printf("How many Players?");
amcentag 0:9d0cdfe46974 798 while(numPlayers < 1) {
amcentag 0:9d0cdfe46974 799 if (blue.getc()=='!') {
amcentag 0:9d0cdfe46974 800 if (blue.getc()=='B') { //button data packet
amcentag 0:9d0cdfe46974 801 bnum = blue.getc(); //button number
amcentag 0:9d0cdfe46974 802 bhit = blue.getc(); //1=hit, 0=release
amcentag 0:9d0cdfe46974 803 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
amcentag 0:9d0cdfe46974 804 if (bnum=='1') {
amcentag 0:9d0cdfe46974 805 numPlayers = 1;
amcentag 0:9d0cdfe46974 806 //add hit code here
amcentag 0:9d0cdfe46974 807 }
amcentag 0:9d0cdfe46974 808 if (bnum=='2') {
amcentag 0:9d0cdfe46974 809 numPlayers = 2;
amcentag 0:9d0cdfe46974 810 //add hit code here
amcentag 0:9d0cdfe46974 811 }
amcentag 0:9d0cdfe46974 812 }
amcentag 0:9d0cdfe46974 813 }
amcentag 0:9d0cdfe46974 814 }
amcentag 0:9d0cdfe46974 815 }
amcentag 0:9d0cdfe46974 816 uLCD.cls();
amcentag 0:9d0cdfe46974 817 uLCD.color(BLACK);
amcentag 0:9d0cdfe46974 818 //display char # select menu TODO, Skipped for now
amcentag 0:9d0cdfe46974 819 //wait on input for char select TODO, Skipped for nowha
amcentag 0:9d0cdfe46974 820 //add calibration screen TODO, Skipped for now
amcentag 0:9d0cdfe46974 821 // draw board grid
amcentag 0:9d0cdfe46974 822 for (int i = 0; i < 128; i+=9) {
amcentag 0:9d0cdfe46974 823 uLCD.line(0, i, 127, i, 0);
amcentag 0:9d0cdfe46974 824 uLCD.line(i, 0, i, 127, 0);
amcentag 0:9d0cdfe46974 825 }
amcentag 0:9d0cdfe46974 826 //initialize threads
amcentag 0:9d0cdfe46974 827 //initialize another thread if 2 chars TODO, Skipped for now
amcentag 0:9d0cdfe46974 828
amcentag 0:9d0cdfe46974 829
amcentag 0:9d0cdfe46974 830 //Andrew - initializing gameBoard to try to get a moving character demo
amcentag 0:9d0cdfe46974 831 initLevel(1);
amcentag 0:9d0cdfe46974 832 thread_clk.start(clk);
amcentag 0:9d0cdfe46974 833 thread_input.start(inpizzy);
amcentag 0:9d0cdfe46974 834 ts.start(speaker_thread);
amcentag 0:9d0cdfe46974 835 while(1) {
amcentag 0:9d0cdfe46974 836 if (p1x == stcx && p1y == stcy) {
amcentag 0:9d0cdfe46974 837 thread_clk.terminate();
amcentag 0:9d0cdfe46974 838 thread_input.terminate();
amcentag 0:9d0cdfe46974 839 ts.terminate();
amcentag 0:9d0cdfe46974 840 boardM.lock();
amcentag 0:9d0cdfe46974 841 level++;
amcentag 0:9d0cdfe46974 842 initLevel(level);
amcentag 0:9d0cdfe46974 843 boardM.unlock();
amcentag 0:9d0cdfe46974 844 }
amcentag 0:9d0cdfe46974 845 if (level == 2) {
amcentag 0:9d0cdfe46974 846 thread_clk.start(clk);
amcentag 0:9d0cdfe46974 847 thread_input.start(inpizzy);
amcentag 0:9d0cdfe46974 848 ts.start(speaker_thread);
amcentag 0:9d0cdfe46974 849 while(1) {
amcentag 0:9d0cdfe46974 850 if (p1x == stcx && p1y == stcy) {
amcentag 0:9d0cdfe46974 851 wait(1);
amcentag 0:9d0cdfe46974 852 thread_clk.terminate();
amcentag 0:9d0cdfe46974 853 thread_input.terminate();
amcentag 0:9d0cdfe46974 854 ts.terminate();
amcentag 0:9d0cdfe46974 855 uLCD.background_color(0);
amcentag 0:9d0cdfe46974 856 uLCD.cls();
amcentag 0:9d0cdfe46974 857 uLCD.text_width(2); //4X size text
amcentag 0:9d0cdfe46974 858 uLCD.text_height(2);
amcentag 0:9d0cdfe46974 859 uLCD.color(GREN);
amcentag 0:9d0cdfe46974 860 uLCD.printf("You WON");
amcentag 0:9d0cdfe46974 861 }
amcentag 0:9d0cdfe46974 862 if (level == -1) {
amcentag 0:9d0cdfe46974 863 wait(1);
amcentag 0:9d0cdfe46974 864 thread_clk.terminate();
amcentag 0:9d0cdfe46974 865 thread_input.terminate();
amcentag 0:9d0cdfe46974 866 ts.terminate();
amcentag 0:9d0cdfe46974 867 boardM.lock();
amcentag 0:9d0cdfe46974 868 uLCD.background_color(0);
amcentag 0:9d0cdfe46974 869 uLCD.cls();
amcentag 0:9d0cdfe46974 870 uLCD.text_width(2); //4X size text
amcentag 0:9d0cdfe46974 871 uLCD.text_height(2);
amcentag 0:9d0cdfe46974 872 uLCD.color(RED);
amcentag 0:9d0cdfe46974 873 uLCD.printf("You Lost");
amcentag 0:9d0cdfe46974 874 boardM.unlock();
amcentag 0:9d0cdfe46974 875 }
amcentag 0:9d0cdfe46974 876 }
amcentag 0:9d0cdfe46974 877 }
amcentag 0:9d0cdfe46974 878 if (level == -1) {
amcentag 0:9d0cdfe46974 879 wait(1);
amcentag 0:9d0cdfe46974 880 thread_clk.terminate();
amcentag 0:9d0cdfe46974 881 thread_input.terminate();
amcentag 0:9d0cdfe46974 882 ts.terminate();
amcentag 0:9d0cdfe46974 883 boardM.lock();
amcentag 0:9d0cdfe46974 884 uLCD.background_color(0);
amcentag 0:9d0cdfe46974 885 uLCD.cls();
amcentag 0:9d0cdfe46974 886 uLCD.text_width(2); //4X size text
amcentag 0:9d0cdfe46974 887 uLCD.text_height(2);
amcentag 0:9d0cdfe46974 888 uLCD.color(RED);
amcentag 0:9d0cdfe46974 889 uLCD.printf("You Lost");
amcentag 0:9d0cdfe46974 890 boardM.unlock();
amcentag 0:9d0cdfe46974 891 }
amcentag 0:9d0cdfe46974 892
amcentag 0:9d0cdfe46974 893 }
amcentag 0:9d0cdfe46974 894
amcentag 0:9d0cdfe46974 895 //play speaker TODO Not sure how
amcentag 0:9d0cdfe46974 896 }