Basic snake game
Dependencies: mbed C12832_lcd MMA7660
main.cpp@0:5196f76c6aa5, 2019-03-20 (annotated)
- Committer:
- nblackshaw
- Date:
- Wed Mar 20 00:25:44 2019 +0000
- Revision:
- 0:5196f76c6aa5
I made snake for mbed application board as fast a possible, this is the result.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nblackshaw | 0:5196f76c6aa5 | 1 | // snake made for mbed application board |
nblackshaw | 0:5196f76c6aa5 | 2 | #include "mbed.h" |
nblackshaw | 0:5196f76c6aa5 | 3 | #include "C12832_lcd.h" |
nblackshaw | 0:5196f76c6aa5 | 4 | |
nblackshaw | 0:5196f76c6aa5 | 5 | #define UP 1 |
nblackshaw | 0:5196f76c6aa5 | 6 | #define DOWN 2 |
nblackshaw | 0:5196f76c6aa5 | 7 | #define LEFT 4 |
nblackshaw | 0:5196f76c6aa5 | 8 | #define RIGHT 8 |
nblackshaw | 0:5196f76c6aa5 | 9 | |
nblackshaw | 0:5196f76c6aa5 | 10 | C12832_LCD lcd; |
nblackshaw | 0:5196f76c6aa5 | 11 | |
nblackshaw | 0:5196f76c6aa5 | 12 | BusIn joystick(p15,p12,p13,p16); //up, down , left, right |
nblackshaw | 0:5196f76c6aa5 | 13 | |
nblackshaw | 0:5196f76c6aa5 | 14 | |
nblackshaw | 0:5196f76c6aa5 | 15 | //globals |
nblackshaw | 0:5196f76c6aa5 | 16 | int ver[50]; |
nblackshaw | 0:5196f76c6aa5 | 17 | int hor[50]; |
nblackshaw | 0:5196f76c6aa5 | 18 | int tail =1; |
nblackshaw | 0:5196f76c6aa5 | 19 | int coinHor =200; //coin x,y coordinates |
nblackshaw | 0:5196f76c6aa5 | 20 | int coinVer =200; |
nblackshaw | 0:5196f76c6aa5 | 21 | int ranC = 12; //used for random spwan point |
nblackshaw | 0:5196f76c6aa5 | 22 | int ranL = 52; //used for random spawn point |
nblackshaw | 0:5196f76c6aa5 | 23 | int direction= RIGHT; |
nblackshaw | 0:5196f76c6aa5 | 24 | |
nblackshaw | 0:5196f76c6aa5 | 25 | //function prototypes |
nblackshaw | 0:5196f76c6aa5 | 26 | void display(int a); |
nblackshaw | 0:5196f76c6aa5 | 27 | void control(); |
nblackshaw | 0:5196f76c6aa5 | 28 | void coin(); |
nblackshaw | 0:5196f76c6aa5 | 29 | |
nblackshaw | 0:5196f76c6aa5 | 30 | int main() |
nblackshaw | 0:5196f76c6aa5 | 31 | { |
nblackshaw | 0:5196f76c6aa5 | 32 | hor[0]= 0; |
nblackshaw | 0:5196f76c6aa5 | 33 | ver[0] = 1; |
nblackshaw | 0:5196f76c6aa5 | 34 | for (int p = 49; p > 0 ; p--){ |
nblackshaw | 0:5196f76c6aa5 | 35 | hor[p]= 200; |
nblackshaw | 0:5196f76c6aa5 | 36 | ver[p] = 200; |
nblackshaw | 0:5196f76c6aa5 | 37 | }//end of for |
nblackshaw | 0:5196f76c6aa5 | 38 | coin(); |
nblackshaw | 0:5196f76c6aa5 | 39 | while(1){ |
nblackshaw | 0:5196f76c6aa5 | 40 | lcd.cls(); |
nblackshaw | 0:5196f76c6aa5 | 41 | control(); |
nblackshaw | 0:5196f76c6aa5 | 42 | for (int n=0; n<tail; n++){ |
nblackshaw | 0:5196f76c6aa5 | 43 | display(n); |
nblackshaw | 0:5196f76c6aa5 | 44 | } |
nblackshaw | 0:5196f76c6aa5 | 45 | wait(0.1); |
nblackshaw | 0:5196f76c6aa5 | 46 | } |
nblackshaw | 0:5196f76c6aa5 | 47 | }//end of main |
nblackshaw | 0:5196f76c6aa5 | 48 | |
nblackshaw | 0:5196f76c6aa5 | 49 | |
nblackshaw | 0:5196f76c6aa5 | 50 | void display(int a) |
nblackshaw | 0:5196f76c6aa5 | 51 | { |
nblackshaw | 0:5196f76c6aa5 | 52 | //display box |
nblackshaw | 0:5196f76c6aa5 | 53 | lcd.fillrect(hor[a],ver[a],hor[a]+2,ver[a]+2,1); |
nblackshaw | 0:5196f76c6aa5 | 54 | //display coin |
nblackshaw | 0:5196f76c6aa5 | 55 | lcd.fillrect(coinHor,coinVer,coinHor+2,coinVer+2,1); |
nblackshaw | 0:5196f76c6aa5 | 56 | //check if maximum tail length reached |
nblackshaw | 0:5196f76c6aa5 | 57 | if (tail>49){ lcd.locate(40,16); |
nblackshaw | 0:5196f76c6aa5 | 58 | lcd.printf("YOU WIN!"); |
nblackshaw | 0:5196f76c6aa5 | 59 | while(1){}} |
nblackshaw | 0:5196f76c6aa5 | 60 | |
nblackshaw | 0:5196f76c6aa5 | 61 | |
nblackshaw | 0:5196f76c6aa5 | 62 | }//end void display |
nblackshaw | 0:5196f76c6aa5 | 63 | |
nblackshaw | 0:5196f76c6aa5 | 64 | |
nblackshaw | 0:5196f76c6aa5 | 65 | void control(){ |
nblackshaw | 0:5196f76c6aa5 | 66 | //shift boxes position in array |
nblackshaw | 0:5196f76c6aa5 | 67 | for (int p = 49; p > 0 ; p--){ |
nblackshaw | 0:5196f76c6aa5 | 68 | hor[p]= hor [p-1]; |
nblackshaw | 0:5196f76c6aa5 | 69 | ver[p] = ver [p-1]; |
nblackshaw | 0:5196f76c6aa5 | 70 | }//end of for |
nblackshaw | 0:5196f76c6aa5 | 71 | |
nblackshaw | 0:5196f76c6aa5 | 72 | //moves the main box depending on direction |
nblackshaw | 0:5196f76c6aa5 | 73 | switch (direction){ |
nblackshaw | 0:5196f76c6aa5 | 74 | case RIGHT: if (hor[0]<123){hor[0]+=5;}else{hor[0]=0;}ranC +=2; ranL +=3; break; |
nblackshaw | 0:5196f76c6aa5 | 75 | case LEFT: if (hor[0]>0){hor[0]-=5;}else{hor[0]=123;}ranC +=3; ranL +=5; break; |
nblackshaw | 0:5196f76c6aa5 | 76 | case UP: if (ver[0]>0){ver[0]-=5;}else{ver[0]=25;}ranC +=8; ranL +=2; break; |
nblackshaw | 0:5196f76c6aa5 | 77 | case DOWN: if (ver[0]<25){ver[0]+=5;}else{ver[0]=0;}ranC +=5; ranL +=9; break; |
nblackshaw | 0:5196f76c6aa5 | 78 | }//end of switch |
nblackshaw | 0:5196f76c6aa5 | 79 | //change direction if statements |
nblackshaw | 0:5196f76c6aa5 | 80 | if (joystick == UP) |
nblackshaw | 0:5196f76c6aa5 | 81 | {if (direction !=DOWN){ |
nblackshaw | 0:5196f76c6aa5 | 82 | direction = UP; |
nblackshaw | 0:5196f76c6aa5 | 83 | } |
nblackshaw | 0:5196f76c6aa5 | 84 | |
nblackshaw | 0:5196f76c6aa5 | 85 | }//end of if UP |
nblackshaw | 0:5196f76c6aa5 | 86 | |
nblackshaw | 0:5196f76c6aa5 | 87 | if (joystick == DOWN) |
nblackshaw | 0:5196f76c6aa5 | 88 | { |
nblackshaw | 0:5196f76c6aa5 | 89 | if (direction !=UP){ |
nblackshaw | 0:5196f76c6aa5 | 90 | direction = DOWN;} |
nblackshaw | 0:5196f76c6aa5 | 91 | |
nblackshaw | 0:5196f76c6aa5 | 92 | }//end of if DOWN |
nblackshaw | 0:5196f76c6aa5 | 93 | |
nblackshaw | 0:5196f76c6aa5 | 94 | if (joystick == LEFT) |
nblackshaw | 0:5196f76c6aa5 | 95 | { |
nblackshaw | 0:5196f76c6aa5 | 96 | if (direction !=RIGHT){ |
nblackshaw | 0:5196f76c6aa5 | 97 | direction = LEFT;} |
nblackshaw | 0:5196f76c6aa5 | 98 | |
nblackshaw | 0:5196f76c6aa5 | 99 | }//end of if LEFT |
nblackshaw | 0:5196f76c6aa5 | 100 | |
nblackshaw | 0:5196f76c6aa5 | 101 | if (joystick == RIGHT) |
nblackshaw | 0:5196f76c6aa5 | 102 | { |
nblackshaw | 0:5196f76c6aa5 | 103 | if (direction !=LEFT){ |
nblackshaw | 0:5196f76c6aa5 | 104 | direction = RIGHT;} |
nblackshaw | 0:5196f76c6aa5 | 105 | |
nblackshaw | 0:5196f76c6aa5 | 106 | }//end of if RIGHT |
nblackshaw | 0:5196f76c6aa5 | 107 | |
nblackshaw | 0:5196f76c6aa5 | 108 | //checks if first box hits any other box |
nblackshaw | 0:5196f76c6aa5 | 109 | for (int p = tail; p > 3 ; p--){ |
nblackshaw | 0:5196f76c6aa5 | 110 | if( hor[0]==hor[p] && ver[0] == ver[p]){ |
nblackshaw | 0:5196f76c6aa5 | 111 | lcd.locate(40,10); |
nblackshaw | 0:5196f76c6aa5 | 112 | lcd.printf("YOU LOSE!"); |
nblackshaw | 0:5196f76c6aa5 | 113 | lcd.locate(40,20); |
nblackshaw | 0:5196f76c6aa5 | 114 | lcd.printf("Score: %d",tail); |
nblackshaw | 0:5196f76c6aa5 | 115 | while(1){} |
nblackshaw | 0:5196f76c6aa5 | 116 | }//end of if |
nblackshaw | 0:5196f76c6aa5 | 117 | }//end of for |
nblackshaw | 0:5196f76c6aa5 | 118 | |
nblackshaw | 0:5196f76c6aa5 | 119 | |
nblackshaw | 0:5196f76c6aa5 | 120 | //check if first box hits coin, adds tail and moves coin |
nblackshaw | 0:5196f76c6aa5 | 121 | if (coinHor+5>hor[0] && hor[0]>coinHor-5 && coinVer+5>ver[0] && ver[0] >coinVer-5){ |
nblackshaw | 0:5196f76c6aa5 | 122 | tail++; |
nblackshaw | 0:5196f76c6aa5 | 123 | coin(); |
nblackshaw | 0:5196f76c6aa5 | 124 | } |
nblackshaw | 0:5196f76c6aa5 | 125 | }//end of button pressed |
nblackshaw | 0:5196f76c6aa5 | 126 | |
nblackshaw | 0:5196f76c6aa5 | 127 | |
nblackshaw | 0:5196f76c6aa5 | 128 | void coin() { |
nblackshaw | 0:5196f76c6aa5 | 129 | //changes location of coin |
nblackshaw | 0:5196f76c6aa5 | 130 | coinVer = ranC % 25; |
nblackshaw | 0:5196f76c6aa5 | 131 | coinHor = ranL % 123; |
nblackshaw | 0:5196f76c6aa5 | 132 | |
nblackshaw | 0:5196f76c6aa5 | 133 | }//end void coin |