The game of snake on the LCD of mbed application board, with the joystick as control

Dependencies:   C12832_lcd mbed

Committer:
sammekevremde
Date:
Mon May 13 10:47:49 2013 +0000
Revision:
0:b4eddf41d75b
The game of snake on the Application board of the mbed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sammekevremde 0:b4eddf41d75b 1 #include "mbed.h"
sammekevremde 0:b4eddf41d75b 2 #include "C12832_lcd.h"
sammekevremde 0:b4eddf41d75b 3
sammekevremde 0:b4eddf41d75b 4 C12832_LCD lcd;
sammekevremde 0:b4eddf41d75b 5 Ticker move;
sammekevremde 0:b4eddf41d75b 6 //-- Variable --
sammekevremde 0:b4eddf41d75b 7 enum richting { omhoog, omlaag, links, rechts, null};
sammekevremde 0:b4eddf41d75b 8 enum gamemode { start,stop,run,pauze};
sammekevremde 0:b4eddf41d75b 9 richting huidigeRichting;
sammekevremde 0:b4eddf41d75b 10 richting vorigeRichting;
sammekevremde 0:b4eddf41d75b 11 gamemode game;
sammekevremde 0:b4eddf41d75b 12 // -- Classes --
sammekevremde 0:b4eddf41d75b 13 struct block
sammekevremde 0:b4eddf41d75b 14 {
sammekevremde 0:b4eddf41d75b 15 int x;
sammekevremde 0:b4eddf41d75b 16 int y;
sammekevremde 0:b4eddf41d75b 17 };
sammekevremde 0:b4eddf41d75b 18 //---------------------
sammekevremde 0:b4eddf41d75b 19 struct block snakeHead;
sammekevremde 0:b4eddf41d75b 20 struct block fruit;
sammekevremde 0:b4eddf41d75b 21 int aantalFruits=0;
sammekevremde 0:b4eddf41d75b 22 //block snakeBody[5];
sammekevremde 0:b4eddf41d75b 23
sammekevremde 0:b4eddf41d75b 24 block* snakeBody=new block[aantalFruits+5];//=new block[aantalFruits+5];
sammekevremde 0:b4eddf41d75b 25 // -- I/O setting --
sammekevremde 0:b4eddf41d75b 26 InterruptIn up(p12);
sammekevremde 0:b4eddf41d75b 27 InterruptIn down(p15);
sammekevremde 0:b4eddf41d75b 28 InterruptIn left (p13);
sammekevremde 0:b4eddf41d75b 29 InterruptIn right(p16);
sammekevremde 0:b4eddf41d75b 30 InterruptIn center(p14);
sammekevremde 0:b4eddf41d75b 31
sammekevremde 0:b4eddf41d75b 32 // -- Functies --
sammekevremde 0:b4eddf41d75b 33
sammekevremde 0:b4eddf41d75b 34 void setFruit()
sammekevremde 0:b4eddf41d75b 35 {
sammekevremde 0:b4eddf41d75b 36 fruit.x = rand() % 126 +1;
sammekevremde 0:b4eddf41d75b 37 fruit.y = rand() % 30 +1;
sammekevremde 0:b4eddf41d75b 38 }
sammekevremde 0:b4eddf41d75b 39
sammekevremde 0:b4eddf41d75b 40 void richting_omhoog()
sammekevremde 0:b4eddf41d75b 41 {
sammekevremde 0:b4eddf41d75b 42 if ( huidigeRichting!=omlaag)
sammekevremde 0:b4eddf41d75b 43 huidigeRichting=omhoog;
sammekevremde 0:b4eddf41d75b 44 }
sammekevremde 0:b4eddf41d75b 45 void richting_omlaag()
sammekevremde 0:b4eddf41d75b 46 {
sammekevremde 0:b4eddf41d75b 47 if ( huidigeRichting!=omhoog)
sammekevremde 0:b4eddf41d75b 48 huidigeRichting=omlaag;
sammekevremde 0:b4eddf41d75b 49 }
sammekevremde 0:b4eddf41d75b 50 void richting_links()
sammekevremde 0:b4eddf41d75b 51 {
sammekevremde 0:b4eddf41d75b 52 if ( huidigeRichting!=rechts)
sammekevremde 0:b4eddf41d75b 53 huidigeRichting=links;
sammekevremde 0:b4eddf41d75b 54 }
sammekevremde 0:b4eddf41d75b 55 void richting_rechts()
sammekevremde 0:b4eddf41d75b 56 {
sammekevremde 0:b4eddf41d75b 57 if ( huidigeRichting!=links)
sammekevremde 0:b4eddf41d75b 58 huidigeRichting=rechts;
sammekevremde 0:b4eddf41d75b 59 }
sammekevremde 0:b4eddf41d75b 60 void center_knop()
sammekevremde 0:b4eddf41d75b 61 {
sammekevremde 0:b4eddf41d75b 62 if (game==pauze)
sammekevremde 0:b4eddf41d75b 63 {
sammekevremde 0:b4eddf41d75b 64 huidigeRichting=vorigeRichting;
sammekevremde 0:b4eddf41d75b 65 game=run;
sammekevremde 0:b4eddf41d75b 66 }
sammekevremde 0:b4eddf41d75b 67 else if (game==run)
sammekevremde 0:b4eddf41d75b 68 {
sammekevremde 0:b4eddf41d75b 69 vorigeRichting=huidigeRichting;
sammekevremde 0:b4eddf41d75b 70 huidigeRichting=null;
sammekevremde 0:b4eddf41d75b 71 game=pauze;
sammekevremde 0:b4eddf41d75b 72 }
sammekevremde 0:b4eddf41d75b 73 else if (game==stop)
sammekevremde 0:b4eddf41d75b 74 {
sammekevremde 0:b4eddf41d75b 75 for (int i=0;i<=4;i++)
sammekevremde 0:b4eddf41d75b 76 {
sammekevremde 0:b4eddf41d75b 77 snakeBody[i].x=(snakeHead.x)-(i+1);
sammekevremde 0:b4eddf41d75b 78 snakeBody[i].y=15;
sammekevremde 0:b4eddf41d75b 79 }
sammekevremde 0:b4eddf41d75b 80 huidigeRichting=null;
sammekevremde 0:b4eddf41d75b 81 game=run;
sammekevremde 0:b4eddf41d75b 82 }
sammekevremde 0:b4eddf41d75b 83 }
sammekevremde 0:b4eddf41d75b 84 void moveSnake()
sammekevremde 0:b4eddf41d75b 85 {
sammekevremde 0:b4eddf41d75b 86
sammekevremde 0:b4eddf41d75b 87 if (game==run)
sammekevremde 0:b4eddf41d75b 88 {
sammekevremde 0:b4eddf41d75b 89 if (huidigeRichting!=null)
sammekevremde 0:b4eddf41d75b 90 {
sammekevremde 0:b4eddf41d75b 91 for (int j=(aantalFruits+4);j>=1;j--)
sammekevremde 0:b4eddf41d75b 92 {
sammekevremde 0:b4eddf41d75b 93 snakeBody[j]=snakeBody[j-1];
sammekevremde 0:b4eddf41d75b 94 }
sammekevremde 0:b4eddf41d75b 95 snakeBody[0]=snakeHead;
sammekevremde 0:b4eddf41d75b 96 }
sammekevremde 0:b4eddf41d75b 97
sammekevremde 0:b4eddf41d75b 98 switch (huidigeRichting)
sammekevremde 0:b4eddf41d75b 99 {
sammekevremde 0:b4eddf41d75b 100 case omhoog:
sammekevremde 0:b4eddf41d75b 101 snakeHead.y+=1;
sammekevremde 0:b4eddf41d75b 102 break;
sammekevremde 0:b4eddf41d75b 103 case omlaag:
sammekevremde 0:b4eddf41d75b 104 snakeHead.y-=1;
sammekevremde 0:b4eddf41d75b 105 break;
sammekevremde 0:b4eddf41d75b 106 case links:
sammekevremde 0:b4eddf41d75b 107 snakeHead.x-=1;
sammekevremde 0:b4eddf41d75b 108 break;
sammekevremde 0:b4eddf41d75b 109 case rechts:
sammekevremde 0:b4eddf41d75b 110 snakeHead.x+=1;
sammekevremde 0:b4eddf41d75b 111 break;
sammekevremde 0:b4eddf41d75b 112
sammekevremde 0:b4eddf41d75b 113 }
sammekevremde 0:b4eddf41d75b 114
sammekevremde 0:b4eddf41d75b 115
sammekevremde 0:b4eddf41d75b 116
sammekevremde 0:b4eddf41d75b 117 if ((snakeHead.y == 0 ||snakeHead.y == 31 ||snakeHead.x == 127 ||snakeHead.x == 0) )
sammekevremde 0:b4eddf41d75b 118 {
sammekevremde 0:b4eddf41d75b 119 lcd.cls();
sammekevremde 0:b4eddf41d75b 120 lcd.locate(25,5);
sammekevremde 0:b4eddf41d75b 121 lcd.printf("Game Over!!");
sammekevremde 0:b4eddf41d75b 122 lcd.locate(25,15);
sammekevremde 0:b4eddf41d75b 123 lcd.printf("U score is %d",aantalFruits);
sammekevremde 0:b4eddf41d75b 124 huidigeRichting=null;
sammekevremde 0:b4eddf41d75b 125 snakeHead.x=15;
sammekevremde 0:b4eddf41d75b 126 snakeHead.y=15;
sammekevremde 0:b4eddf41d75b 127 game=stop;
sammekevremde 0:b4eddf41d75b 128 aantalFruits=0;
sammekevremde 0:b4eddf41d75b 129 }
sammekevremde 0:b4eddf41d75b 130 else if ((snakeHead.y == fruit.y )&& (snakeHead.x == fruit.x) )
sammekevremde 0:b4eddf41d75b 131 {
sammekevremde 0:b4eddf41d75b 132 aantalFruits+=1;
sammekevremde 0:b4eddf41d75b 133 /*
sammekevremde 0:b4eddf41d75b 134 for (int j=0;j<=(aantalFruits+4);j++)
sammekevremde 0:b4eddf41d75b 135 {
sammekevremde 0:b4eddf41d75b 136 snakeBody[j+1]=snakeBody[j+1];
sammekevremde 0:b4eddf41d75b 137 }
sammekevremde 0:b4eddf41d75b 138 snakeBody[0]=snakeHead;
sammekevremde 0:b4eddf41d75b 139 switch(huidigeRichting)
sammekevremde 0:b4eddf41d75b 140 {
sammekevremde 0:b4eddf41d75b 141 case omhoog:
sammekevremde 0:b4eddf41d75b 142 snakeHead.y+=1;
sammekevremde 0:b4eddf41d75b 143 break;
sammekevremde 0:b4eddf41d75b 144 case omlaag:
sammekevremde 0:b4eddf41d75b 145 snakeHead.y-=1;
sammekevremde 0:b4eddf41d75b 146 break;
sammekevremde 0:b4eddf41d75b 147 case links:
sammekevremde 0:b4eddf41d75b 148 snakeHead.x+=1;
sammekevremde 0:b4eddf41d75b 149 break;
sammekevremde 0:b4eddf41d75b 150 case rechts:
sammekevremde 0:b4eddf41d75b 151 snakeHead.x-=1;
sammekevremde 0:b4eddf41d75b 152 break;
sammekevremde 0:b4eddf41d75b 153 }
sammekevremde 0:b4eddf41d75b 154 */
sammekevremde 0:b4eddf41d75b 155 setFruit();
sammekevremde 0:b4eddf41d75b 156 }
sammekevremde 0:b4eddf41d75b 157 else
sammekevremde 0:b4eddf41d75b 158 {
sammekevremde 0:b4eddf41d75b 159 lcd.cls();
sammekevremde 0:b4eddf41d75b 160 lcd.pixel(snakeHead.x,snakeHead.y,1);
sammekevremde 0:b4eddf41d75b 161 lcd.copy_to_lcd();
sammekevremde 0:b4eddf41d75b 162 for(int k=0;k<=(aantalFruits+4);k++)
sammekevremde 0:b4eddf41d75b 163 {
sammekevremde 0:b4eddf41d75b 164 lcd.pixel(snakeBody[k].x,snakeBody[k].y,1);
sammekevremde 0:b4eddf41d75b 165
sammekevremde 0:b4eddf41d75b 166 }
sammekevremde 0:b4eddf41d75b 167 lcd.copy_to_lcd();
sammekevremde 0:b4eddf41d75b 168 lcd.pixel(fruit.x,fruit.y,1);
sammekevremde 0:b4eddf41d75b 169 lcd.copy_to_lcd();
sammekevremde 0:b4eddf41d75b 170 lcd.rect(0,0, 127, 31, 1);
sammekevremde 0:b4eddf41d75b 171 lcd.copy_to_lcd();
sammekevremde 0:b4eddf41d75b 172 }
sammekevremde 0:b4eddf41d75b 173
sammekevremde 0:b4eddf41d75b 174 for (int a=0;a<=(aantalFruits+4);a++)
sammekevremde 0:b4eddf41d75b 175 {
sammekevremde 0:b4eddf41d75b 176 if ( snakeBody[a].x==snakeHead.x && snakeBody[a].y==snakeHead.y)
sammekevremde 0:b4eddf41d75b 177 {
sammekevremde 0:b4eddf41d75b 178 lcd.cls();
sammekevremde 0:b4eddf41d75b 179 lcd.locate(25,5);
sammekevremde 0:b4eddf41d75b 180 lcd.printf("Game Over!!");
sammekevremde 0:b4eddf41d75b 181 lcd.locate(25,15);
sammekevremde 0:b4eddf41d75b 182 lcd.printf("U score is %d",aantalFruits);
sammekevremde 0:b4eddf41d75b 183 huidigeRichting=null;
sammekevremde 0:b4eddf41d75b 184 snakeHead.x=15;
sammekevremde 0:b4eddf41d75b 185 snakeHead.y=15;
sammekevremde 0:b4eddf41d75b 186 game=stop;
sammekevremde 0:b4eddf41d75b 187 aantalFruits=0;
sammekevremde 0:b4eddf41d75b 188
sammekevremde 0:b4eddf41d75b 189 }
sammekevremde 0:b4eddf41d75b 190 }
sammekevremde 0:b4eddf41d75b 191 }
sammekevremde 0:b4eddf41d75b 192 else if (game==pauze)
sammekevremde 0:b4eddf41d75b 193 {
sammekevremde 0:b4eddf41d75b 194 lcd.cls();
sammekevremde 0:b4eddf41d75b 195 lcd.locate(30,15);
sammekevremde 0:b4eddf41d75b 196 lcd.printf("Pauze");
sammekevremde 0:b4eddf41d75b 197 }
sammekevremde 0:b4eddf41d75b 198
sammekevremde 0:b4eddf41d75b 199
sammekevremde 0:b4eddf41d75b 200 }
sammekevremde 0:b4eddf41d75b 201 //template <class T>
sammekevremde 0:b4eddf41d75b 202
sammekevremde 0:b4eddf41d75b 203
sammekevremde 0:b4eddf41d75b 204
sammekevremde 0:b4eddf41d75b 205
sammekevremde 0:b4eddf41d75b 206
sammekevremde 0:b4eddf41d75b 207 //--------------------------------
sammekevremde 0:b4eddf41d75b 208
sammekevremde 0:b4eddf41d75b 209 int main()
sammekevremde 0:b4eddf41d75b 210 {
sammekevremde 0:b4eddf41d75b 211 game=run;
sammekevremde 0:b4eddf41d75b 212 lcd.rect(0, 0, 127, 31, 1);
sammekevremde 0:b4eddf41d75b 213 lcd.copy_to_lcd();
sammekevremde 0:b4eddf41d75b 214 huidigeRichting=null;
sammekevremde 0:b4eddf41d75b 215 snakeHead.x=15;
sammekevremde 0:b4eddf41d75b 216 snakeHead.y=15;
sammekevremde 0:b4eddf41d75b 217 for (int i=0;i<=4;i++)
sammekevremde 0:b4eddf41d75b 218 {
sammekevremde 0:b4eddf41d75b 219 snakeBody[i].x=(snakeHead.x)-(i+1);
sammekevremde 0:b4eddf41d75b 220 snakeBody[i].y=15;
sammekevremde 0:b4eddf41d75b 221 }
sammekevremde 0:b4eddf41d75b 222 setFruit();
sammekevremde 0:b4eddf41d75b 223 move.attach(&moveSnake, 0.1);
sammekevremde 0:b4eddf41d75b 224 up.rise(&richting_omhoog);
sammekevremde 0:b4eddf41d75b 225 down.rise(&richting_omlaag);
sammekevremde 0:b4eddf41d75b 226 left.rise(&richting_links);
sammekevremde 0:b4eddf41d75b 227 right.rise(&richting_rechts);
sammekevremde 0:b4eddf41d75b 228 center.rise(&center_knop);
sammekevremde 0:b4eddf41d75b 229
sammekevremde 0:b4eddf41d75b 230 while (1)
sammekevremde 0:b4eddf41d75b 231 {
sammekevremde 0:b4eddf41d75b 232
sammekevremde 0:b4eddf41d75b 233 }
sammekevremde 0:b4eddf41d75b 234 }