11_01_2020

Dependencies:   mbed

Committer:
riad
Date:
Sat Jan 11 15:21:35 2020 +0000
Revision:
0:0e46824d32a0
Snake_New_2020

Who changed what in which revision?

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