Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Joystick N5110 SDFileSystem beep fsmMenu mbed
Fork of SnakeProjectRev1 by
Diff: main.cpp
- Revision:
- 17:4e6f0f7f22fb
- Parent:
- 16:68b9460d4c76
- Child:
- 18:67d5ae64fbd1
--- a/main.cpp Wed May 04 15:16:12 2016 +0000 +++ b/main.cpp Wed May 04 17:31:25 2016 +0000 @@ -115,41 +115,35 @@ } - while(gamePlaying == true) { - - lcd.setBrightness(1-pot); // turn pot right for brightness - - if (buttonFlag ==1) { - buttonFlag = 0; - if (pauseCount < 3) { - gamePaused(); - } - } - - if(game_timer_flag) { - game_timer_flag = 0; - gameLogic(); - } - if (printFlag) { // if flag set, clear flag and print joystick values to serial port - printFlag = 0; - moveSnake(); - } - sleep(); // put the MCU to sleep until an interrupt wakes it up - } + mainGame(); } void generateFood() { - while (randomXoddEven ==1 || randomYoddEven ==1 || lcd.getPixel(randomX,randomY) >= 1) { // do while x or y is even or pixel is on - - randomX = rand() % 83 + 1; // randomX in the range 1 to 83 - randomY = rand() % 47 + 1; // randomY in the range 1 to 47 - randomXoddEven = randomX%2; // find out whether odd or even - randomYoddEven = randomY%2; - } - - lcd.drawRect(randomX,randomY,1,1,1); + if (gameType == classicMode || gameType == hardMode) { + while (randomXoddEven ==0 || randomYoddEven ==0 || lcd.getPixel(randomX,randomY) >= 1) { // do while x or y is even or pixel is on + + randomX = rand() % 83 + 1; // randomX in the range 1 to 83 + randomY = rand() % 47 + 1; // randomY in the range 1 to 47 + randomXoddEven = randomX%2; // find out whether odd or even + randomYoddEven = randomY%2; + } + + lcd.drawRect(randomX,randomY,1,1,1); + } + + else { + while (randomXoddEven ==1 || randomYoddEven ==1 || lcd.getPixel(randomX,randomY) >= 1) { // do while x or y is even or pixel is on + + randomX = rand() % 83 + 1; // randomX in the range 1 to 83 + randomY = rand() % 47 + 1; // randomY in the range 1 to 47 + randomXoddEven = randomX%2; // find out whether odd or even + randomYoddEven = randomY%2; + } + + lcd.drawRect(randomX,randomY,1,1,1); + } } @@ -226,8 +220,15 @@ lcd.refresh(); lcd.drawRect(randomX,randomY,1,1,1); // food - //hardWall(); - wrapAround(); + if (gameType == classicMode) { + hardWall(); + } + else if (gameType == infiniteMode) { + wrapAround(); + } + else { + specialMap(); + } if (i == randomX && j == randomY) { // if fruit is eaten greenLed = 0; @@ -330,14 +331,14 @@ void specialMap() { - for (int i=41; i<43; i++) { // vertical cross line - for (int j=14; j<34; j++) { + for (int x=41; x<43; x++) { // vertical cross line + for (int y=14; y<34; y++) { lcd.setPixel(i,j); lcd.refresh(); } } - for (int i=32; i<52; i++) { // horizontal cross line - for (int j=23; j<25; j++) { + for (int x=32; x<52; x++) { // horizontal cross line + for (int y=23; y<25; y++) { lcd.setPixel(i,j); lcd.refresh(); } @@ -376,12 +377,27 @@ void initSnakeTail() { + if (gameType == classicMode) { prev_i = 39; prev_j = 23; + prev2_i = 37; + prev2_j = 23; + } + else if (gameType == infiniteMode) { + prev_i = 38; + prev_j = 22; + prev2_i = 36; + prev2_j = 22; + } + else { + prev_i = 11; + prev_j = 5; + prev2_i = 9; + prev2_j = 5; + } + snakeTailX[1] = prev_i; snakeTailY[1] = prev_j; - prev2_i = 37; - prev2_j = 23; snakeTailX[2] = prev2_i; snakeTailY[2] = prev2_j; @@ -446,6 +462,52 @@ } +void mainGame() { + + if(gameType == classicMode) { + hardWall(); + i = 41; + j = 23; + } + else if(gameType == infiniteMode) { + wrapAround(); + i = 40; + j = 22; + } + else { + specialMap(); + i = 13; + j = 5; + } + generateFood(); + initSnakeTail(); + score = 0; + fruitValue = 10; // init everything + + while(gamePlaying == true) { + + lcd.setBrightness(1-pot); // turn pot right for brightness + + if (buttonFlag ==1) { + buttonFlag = 0; + if (pauseCount < 3) { + gamePaused(); + } + } + + if(game_timer_flag) { + game_timer_flag = 0; + gameLogic(); + } + if (printFlag) { // if flag set, clear flag and print joystick values to serial port + printFlag = 0; + moveSnake(); + } + sleep(); // put the MCU to sleep until an interrupt wakes it up + } +} + + void timer_isr() { game_timer_flag = 1;