Basic snake game

Dependencies:   mbed C12832_lcd MMA7660

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?

UserRevisionLine numberNew 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