wu weilong / Mbed 2 deprecated frdm_gpio1

Dependencies:   mbed

Committer:
wuweilong
Date:
Wed May 08 20:08:17 2019 +0000
Revision:
10:ae5f62a1e40e
Parent:
9:32e85f1fcd15
version1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chris 0:0024ab6b9624 1 #include "mbed.h"
wuweilong 10:ae5f62a1e40e 2 #include "Gamepad.h"
wuweilong 10:ae5f62a1e40e 3 #include "N5110.h"
wuweilong 10:ae5f62a1e40e 4 #include "element.h"
wuweilong 10:ae5f62a1e40e 5
wuweilong 10:ae5f62a1e40e 6
wuweilong 10:ae5f62a1e40e 7 void init(int n);
wuweilong 10:ae5f62a1e40e 8 void render(int n);
wuweilong 10:ae5f62a1e40e 9 void update(int &n);
wuweilong 10:ae5f62a1e40e 10 void hitwall(int &n);
wuweilong 10:ae5f62a1e40e 11 void welcome();
wuweilong 10:ae5f62a1e40e 12 void eat(int &n);
wuweilong 10:ae5f62a1e40e 13 void hitself(int &n);
wuweilong 10:ae5f62a1e40e 14
wuweilong 10:ae5f62a1e40e 15 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
wuweilong 10:ae5f62a1e40e 16 Gamepad pad;
wuweilong 10:ae5f62a1e40e 17 element e;
wuweilong 10:ae5f62a1e40e 18 int main(){
wuweilong 10:ae5f62a1e40e 19 int n=20;
wuweilong 10:ae5f62a1e40e 20 int fps =8;
wuweilong 10:ae5f62a1e40e 21 init(n);
wuweilong 10:ae5f62a1e40e 22 welcome();
wuweilong 10:ae5f62a1e40e 23 render(n);
wuweilong 10:ae5f62a1e40e 24 wait(1.0f/fps);
wuweilong 10:ae5f62a1e40e 25 while(1){
wuweilong 10:ae5f62a1e40e 26
wuweilong 10:ae5f62a1e40e 27 update(n);
wuweilong 10:ae5f62a1e40e 28 render(n);
wuweilong 10:ae5f62a1e40e 29 wait(1.0f/fps);
wuweilong 10:ae5f62a1e40e 30 }
wuweilong 10:ae5f62a1e40e 31 }
chris 0:0024ab6b9624 32
wuweilong 10:ae5f62a1e40e 33 void init(int n){
wuweilong 10:ae5f62a1e40e 34 lcd.init();
wuweilong 10:ae5f62a1e40e 35 pad.init();
wuweilong 10:ae5f62a1e40e 36 e.init(2,20,20,30,30,n);
wuweilong 10:ae5f62a1e40e 37
wuweilong 10:ae5f62a1e40e 38 }
wuweilong 10:ae5f62a1e40e 39 void render(int n){
wuweilong 10:ae5f62a1e40e 40 lcd.clear();
wuweilong 10:ae5f62a1e40e 41 e.draw(lcd,n);
wuweilong 10:ae5f62a1e40e 42 lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
wuweilong 10:ae5f62a1e40e 43 lcd.refresh();
wuweilong 10:ae5f62a1e40e 44 }
wuweilong 10:ae5f62a1e40e 45 void update(int &n){
wuweilong 10:ae5f62a1e40e 46 e.input(pad);
wuweilong 10:ae5f62a1e40e 47 e.move(n);
wuweilong 10:ae5f62a1e40e 48 eat(n);
wuweilong 10:ae5f62a1e40e 49 hitwall(n);
wuweilong 10:ae5f62a1e40e 50 hitself(n);
wuweilong 10:ae5f62a1e40e 51
wuweilong 10:ae5f62a1e40e 52 }
wuweilong 10:ae5f62a1e40e 53 void hitwall(int &n){
wuweilong 10:ae5f62a1e40e 54 if(e.getsnakepos(0).x<=0 || e.getsnakepos(0).x+2>=WIDTH ||e.getsnakepos(0).y<=0||e.getsnakepos(0).y+2>=HEIGHT)
wuweilong 10:ae5f62a1e40e 55 {
wuweilong 10:ae5f62a1e40e 56
wuweilong 10:ae5f62a1e40e 57 while ( pad.check_event(Gamepad::BACK_PRESSED) == false){
wuweilong 10:ae5f62a1e40e 58 lcd.clear();
wuweilong 10:ae5f62a1e40e 59 lcd.printString(" FAILED ",0,1);
wuweilong 10:ae5f62a1e40e 60 lcd.printString(" YOU HIT WALL",0,2);
wuweilong 10:ae5f62a1e40e 61 lcd.printString(" PRESS BACK ",0,3);
wuweilong 10:ae5f62a1e40e 62 char buffer[14];
wuweilong 10:ae5f62a1e40e 63 sprintf(buffer,"SCORE = %2d ",n-20);
wuweilong 10:ae5f62a1e40e 64 lcd.printString(buffer,0,5);
wuweilong 10:ae5f62a1e40e 65 lcd.refresh();
wuweilong 10:ae5f62a1e40e 66
wuweilong 10:ae5f62a1e40e 67
wuweilong 10:ae5f62a1e40e 68 }
wuweilong 10:ae5f62a1e40e 69 n=20;
wuweilong 10:ae5f62a1e40e 70 e.init(2,20,20,30,30,n);
wuweilong 10:ae5f62a1e40e 71
wuweilong 10:ae5f62a1e40e 72
wuweilong 10:ae5f62a1e40e 73 }
wuweilong 10:ae5f62a1e40e 74
wuweilong 10:ae5f62a1e40e 75 }
wuweilong 10:ae5f62a1e40e 76 void welcome() {
wuweilong 10:ae5f62a1e40e 77
wuweilong 10:ae5f62a1e40e 78 lcd.printString(" SNAKE! ",0,1);
wuweilong 10:ae5f62a1e40e 79 lcd.printString(" Press Start to play ",0,4);
wuweilong 10:ae5f62a1e40e 80 lcd.refresh();
wuweilong 10:ae5f62a1e40e 81
wuweilong 10:ae5f62a1e40e 82 // wait flashing LEDs until start button is pressed
wuweilong 10:ae5f62a1e40e 83 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
wuweilong 10:ae5f62a1e40e 84 pad.leds_on();
wuweilong 10:ae5f62a1e40e 85 wait(0.1);
wuweilong 10:ae5f62a1e40e 86 pad.leds_off();
wuweilong 10:ae5f62a1e40e 87 wait(0.1);
wuweilong 10:ae5f62a1e40e 88 }
wuweilong 10:ae5f62a1e40e 89
wuweilong 10:ae5f62a1e40e 90 }
wuweilong 10:ae5f62a1e40e 91 void eat(int &n ){
chris 0:0024ab6b9624 92
wuweilong 10:ae5f62a1e40e 93 for(int i=0;i<3;i++)
wuweilong 10:ae5f62a1e40e 94 {
wuweilong 10:ae5f62a1e40e 95 if(e.getsnakepos(0).y+i ==e.getfoodpos().y && e.getsnakepos(0).x ==e.getfoodpos().x )
wuweilong 10:ae5f62a1e40e 96 {
wuweilong 10:ae5f62a1e40e 97 e.update();
wuweilong 10:ae5f62a1e40e 98 n+=1;
wuweilong 10:ae5f62a1e40e 99
wuweilong 10:ae5f62a1e40e 100 }
wuweilong 10:ae5f62a1e40e 101 if(e.getsnakepos(0).y+2==e.getfoodpos().y &&e.getsnakepos(0).x+i==e.getfoodpos().x)
wuweilong 10:ae5f62a1e40e 102 {
wuweilong 10:ae5f62a1e40e 103 e.update();
wuweilong 10:ae5f62a1e40e 104 n+=1;
wuweilong 10:ae5f62a1e40e 105
wuweilong 10:ae5f62a1e40e 106 }
wuweilong 10:ae5f62a1e40e 107 if(e.getsnakepos(0).y==e.getfoodpos().y &&e.getsnakepos(0).x+i==e.getfoodpos().x)
wuweilong 10:ae5f62a1e40e 108 {
wuweilong 10:ae5f62a1e40e 109 e.update();
wuweilong 10:ae5f62a1e40e 110 n+=1;
wuweilong 10:ae5f62a1e40e 111
wuweilong 10:ae5f62a1e40e 112 }
wuweilong 10:ae5f62a1e40e 113 if(e.getsnakepos(0).y+i==e.getfoodpos().y &&e.getsnakepos(0).x+2==e.getfoodpos().x)
wuweilong 10:ae5f62a1e40e 114 {
wuweilong 10:ae5f62a1e40e 115 e.update();
wuweilong 10:ae5f62a1e40e 116 n+=1;
wuweilong 10:ae5f62a1e40e 117
wuweilong 10:ae5f62a1e40e 118 }
wuweilong 10:ae5f62a1e40e 119 //x,y
wuweilong 10:ae5f62a1e40e 120 if(e.getsnakepos(0).y+i ==e.getfoodpos().y && e.getsnakepos(0).x ==e.getfoodpos().x+1 )
wuweilong 10:ae5f62a1e40e 121 {
wuweilong 10:ae5f62a1e40e 122 e.update();
wuweilong 10:ae5f62a1e40e 123 n+=1;
wuweilong 10:ae5f62a1e40e 124
wuweilong 10:ae5f62a1e40e 125 }
wuweilong 10:ae5f62a1e40e 126 if(e.getsnakepos(0).y+2==e.getfoodpos().y &&e.getsnakepos(0).x+i==e.getfoodpos().x+1)
wuweilong 10:ae5f62a1e40e 127 {
wuweilong 10:ae5f62a1e40e 128 e.update();
wuweilong 10:ae5f62a1e40e 129 n+=1;
wuweilong 10:ae5f62a1e40e 130
wuweilong 10:ae5f62a1e40e 131 }
wuweilong 10:ae5f62a1e40e 132 if(e.getsnakepos(0).y==e.getfoodpos().y &&e.getsnakepos(0).x+i==e.getfoodpos().x+1)
wuweilong 10:ae5f62a1e40e 133 {
wuweilong 10:ae5f62a1e40e 134 e.update();
wuweilong 10:ae5f62a1e40e 135 n+=1;
wuweilong 10:ae5f62a1e40e 136
wuweilong 10:ae5f62a1e40e 137 }
wuweilong 10:ae5f62a1e40e 138 if(e.getsnakepos(0).y+i==e.getfoodpos().y &&e.getsnakepos(0).x+2==e.getfoodpos().x+1)
wuweilong 10:ae5f62a1e40e 139 {
wuweilong 10:ae5f62a1e40e 140 e.update();
wuweilong 10:ae5f62a1e40e 141 n+=1;
wuweilong 10:ae5f62a1e40e 142
wuweilong 10:ae5f62a1e40e 143 }
wuweilong 10:ae5f62a1e40e 144 //x+1,y
wuweilong 10:ae5f62a1e40e 145
wuweilong 10:ae5f62a1e40e 146 if(e.getsnakepos(0).y+i ==e.getfoodpos().y+1 && e.getsnakepos(0).x ==e.getfoodpos().x )
wuweilong 10:ae5f62a1e40e 147 {
wuweilong 10:ae5f62a1e40e 148 e.update();
wuweilong 10:ae5f62a1e40e 149 n+=1;
wuweilong 10:ae5f62a1e40e 150
wuweilong 10:ae5f62a1e40e 151 }
wuweilong 10:ae5f62a1e40e 152 if(e.getsnakepos(0).y+2==e.getfoodpos().y+1 &&e.getsnakepos(0).x+i==e.getfoodpos().x)
wuweilong 10:ae5f62a1e40e 153 {
wuweilong 10:ae5f62a1e40e 154 e.update();
wuweilong 10:ae5f62a1e40e 155 n+=1;
wuweilong 10:ae5f62a1e40e 156
wuweilong 10:ae5f62a1e40e 157 }
wuweilong 10:ae5f62a1e40e 158 if(e.getsnakepos(0).y==e.getfoodpos().y+1&&e.getsnakepos(0).x+i==e.getfoodpos().x)
wuweilong 10:ae5f62a1e40e 159 {
wuweilong 10:ae5f62a1e40e 160 e.update();
wuweilong 10:ae5f62a1e40e 161 n+=1;
wuweilong 10:ae5f62a1e40e 162
wuweilong 10:ae5f62a1e40e 163 }
wuweilong 10:ae5f62a1e40e 164 if(e.getsnakepos(0).y+i==e.getfoodpos().y+1 &&e.getsnakepos(0).x+2==e.getfoodpos().x)
wuweilong 10:ae5f62a1e40e 165 {
wuweilong 10:ae5f62a1e40e 166 e.update();
wuweilong 10:ae5f62a1e40e 167 n+=1;
wuweilong 10:ae5f62a1e40e 168
wuweilong 10:ae5f62a1e40e 169 }
wuweilong 10:ae5f62a1e40e 170 //x,y-1
wuweilong 10:ae5f62a1e40e 171 if(e.getsnakepos(0).y+i ==e.getfoodpos().y+1 && e.getsnakepos(0).x ==e.getfoodpos().x +1)
wuweilong 10:ae5f62a1e40e 172 {
wuweilong 10:ae5f62a1e40e 173 e.update();
wuweilong 10:ae5f62a1e40e 174 n+=1;
wuweilong 10:ae5f62a1e40e 175
wuweilong 10:ae5f62a1e40e 176 }
wuweilong 10:ae5f62a1e40e 177 if(e.getsnakepos(0).y+2==e.getfoodpos().y+1 &&e.getsnakepos(0).x+i==e.getfoodpos().x+1)
wuweilong 10:ae5f62a1e40e 178 {
wuweilong 10:ae5f62a1e40e 179 e.update();
wuweilong 10:ae5f62a1e40e 180 n+=1;
wuweilong 10:ae5f62a1e40e 181
wuweilong 10:ae5f62a1e40e 182 }
wuweilong 10:ae5f62a1e40e 183 if(e.getsnakepos(0).y==e.getfoodpos().y+1 &&e.getsnakepos(0).x+i==e.getfoodpos().x+1)
wuweilong 10:ae5f62a1e40e 184 {
wuweilong 10:ae5f62a1e40e 185 e.update();
wuweilong 10:ae5f62a1e40e 186 n+=1;
wuweilong 10:ae5f62a1e40e 187
wuweilong 10:ae5f62a1e40e 188 }
wuweilong 10:ae5f62a1e40e 189 if(e.getsnakepos(0).y+i==e.getfoodpos().y+1 &&e.getsnakepos(0).x+2==e.getfoodpos().x+1)
wuweilong 10:ae5f62a1e40e 190 {
wuweilong 10:ae5f62a1e40e 191 e.update();
wuweilong 10:ae5f62a1e40e 192 n+=1;
wuweilong 10:ae5f62a1e40e 193
wuweilong 10:ae5f62a1e40e 194 }
chris 0:0024ab6b9624 195 }
wuweilong 10:ae5f62a1e40e 196
wuweilong 10:ae5f62a1e40e 197 }
wuweilong 10:ae5f62a1e40e 198 void hitself(int &n){
wuweilong 10:ae5f62a1e40e 199 for(int i=2;i<n;i++)
wuweilong 10:ae5f62a1e40e 200 {
wuweilong 10:ae5f62a1e40e 201 for(int j=0;j<3;j++)
wuweilong 10:ae5f62a1e40e 202 {
wuweilong 10:ae5f62a1e40e 203 if(e.getsnakepos(0).x==e.getsnakepos(i).x+1 && e.getsnakepos(0).y+j==e.getsnakepos(i).y+1)
wuweilong 10:ae5f62a1e40e 204 {
wuweilong 10:ae5f62a1e40e 205 while ( pad.check_event(Gamepad::BACK_PRESSED) == false)
wuweilong 10:ae5f62a1e40e 206 {
wuweilong 10:ae5f62a1e40e 207 lcd.clear();
wuweilong 10:ae5f62a1e40e 208 lcd.printString(" FAILED ",0,1);
wuweilong 10:ae5f62a1e40e 209 lcd.printString(" YOU HIT SELF! ",0,2);
wuweilong 10:ae5f62a1e40e 210 lcd.printString(" PRESS BACK ",0,3);
wuweilong 10:ae5f62a1e40e 211 char buffer[14];
wuweilong 10:ae5f62a1e40e 212 sprintf(buffer,"SCORE = %2d ",n-20);
wuweilong 10:ae5f62a1e40e 213 lcd.printString(buffer,0,4);
wuweilong 10:ae5f62a1e40e 214 lcd.refresh();
wuweilong 10:ae5f62a1e40e 215 lcd.clear();
wuweilong 10:ae5f62a1e40e 216
wuweilong 10:ae5f62a1e40e 217 }
wuweilong 10:ae5f62a1e40e 218 n=20;
wuweilong 10:ae5f62a1e40e 219 e.init(2,20,20,30,30,n);
wuweilong 10:ae5f62a1e40e 220
wuweilong 10:ae5f62a1e40e 221
wuweilong 10:ae5f62a1e40e 222 }
wuweilong 10:ae5f62a1e40e 223
wuweilong 10:ae5f62a1e40e 224
wuweilong 10:ae5f62a1e40e 225
wuweilong 10:ae5f62a1e40e 226
wuweilong 10:ae5f62a1e40e 227 if(e.getsnakepos(0).x+j==e.getsnakepos(i).x+1 && e.getsnakepos(0).y==e.getsnakepos(i).y+1)
wuweilong 10:ae5f62a1e40e 228 {
wuweilong 10:ae5f62a1e40e 229 while ( pad.check_event(Gamepad::BACK_PRESSED) == false)
wuweilong 10:ae5f62a1e40e 230 {
wuweilong 10:ae5f62a1e40e 231 lcd.clear();
wuweilong 10:ae5f62a1e40e 232 lcd.printString(" HIT SELF! ",0,2);
wuweilong 10:ae5f62a1e40e 233 lcd.printString(" PRESS BACK ",0,3);
wuweilong 10:ae5f62a1e40e 234 char buffer[14];
wuweilong 10:ae5f62a1e40e 235 sprintf(buffer,"SCORE = %2d ",n-20);
wuweilong 10:ae5f62a1e40e 236 lcd.printString(buffer,0,4);
wuweilong 10:ae5f62a1e40e 237 lcd.refresh();
wuweilong 10:ae5f62a1e40e 238 lcd.clear();
wuweilong 10:ae5f62a1e40e 239
wuweilong 10:ae5f62a1e40e 240 }
wuweilong 10:ae5f62a1e40e 241 n=20;
wuweilong 10:ae5f62a1e40e 242 e.init(2,20,20,30,30,n);
wuweilong 10:ae5f62a1e40e 243
wuweilong 10:ae5f62a1e40e 244 }
wuweilong 10:ae5f62a1e40e 245
wuweilong 10:ae5f62a1e40e 246
wuweilong 10:ae5f62a1e40e 247
wuweilong 10:ae5f62a1e40e 248
wuweilong 10:ae5f62a1e40e 249
wuweilong 10:ae5f62a1e40e 250
wuweilong 10:ae5f62a1e40e 251 if(e.getsnakepos(0).x+j==e.getsnakepos(i).x+1 && e.getsnakepos(0).y+2==e.getsnakepos(i).y+1)
wuweilong 10:ae5f62a1e40e 252 {
wuweilong 10:ae5f62a1e40e 253 while ( pad.check_event(Gamepad::BACK_PRESSED) == false)
wuweilong 10:ae5f62a1e40e 254 {
wuweilong 10:ae5f62a1e40e 255 lcd.clear();
wuweilong 10:ae5f62a1e40e 256 lcd.printString(" HIT SELF! ",0,2);
wuweilong 10:ae5f62a1e40e 257 lcd.printString(" PRESS BACK ",0,3);
wuweilong 10:ae5f62a1e40e 258 char buffer[14];
wuweilong 10:ae5f62a1e40e 259 sprintf(buffer,"SCORE = %2d ",n-20);
wuweilong 10:ae5f62a1e40e 260 lcd.printString(buffer,0,4);
wuweilong 10:ae5f62a1e40e 261 lcd.refresh();
wuweilong 10:ae5f62a1e40e 262 lcd.clear();
wuweilong 10:ae5f62a1e40e 263
wuweilong 10:ae5f62a1e40e 264
wuweilong 10:ae5f62a1e40e 265 }
wuweilong 10:ae5f62a1e40e 266 n=20;
wuweilong 10:ae5f62a1e40e 267 e.init(2,20,20,30,30,n);
wuweilong 10:ae5f62a1e40e 268
wuweilong 10:ae5f62a1e40e 269 }
wuweilong 10:ae5f62a1e40e 270
wuweilong 10:ae5f62a1e40e 271
wuweilong 10:ae5f62a1e40e 272 if(e.getsnakepos(0).x+2==e.getsnakepos(i).x+1 && e.getsnakepos(0).y+j==e.getsnakepos(i).y+1)
wuweilong 10:ae5f62a1e40e 273 {
wuweilong 10:ae5f62a1e40e 274 while ( pad.check_event(Gamepad::BACK_PRESSED) == false)
wuweilong 10:ae5f62a1e40e 275 {
wuweilong 10:ae5f62a1e40e 276 lcd.clear();
wuweilong 10:ae5f62a1e40e 277 lcd.printString(" HIT SELF! ",0,2);
wuweilong 10:ae5f62a1e40e 278 lcd.printString(" PRESS BACK ",0,3);
wuweilong 10:ae5f62a1e40e 279 char buffer[14];
wuweilong 10:ae5f62a1e40e 280 sprintf(buffer,"SCORE = %2d ",n-20);
wuweilong 10:ae5f62a1e40e 281 lcd.printString(buffer,0,4);
wuweilong 10:ae5f62a1e40e 282 lcd.refresh();
wuweilong 10:ae5f62a1e40e 283 lcd.clear();
wuweilong 10:ae5f62a1e40e 284
wuweilong 10:ae5f62a1e40e 285
wuweilong 10:ae5f62a1e40e 286 }
wuweilong 10:ae5f62a1e40e 287 n=20;
wuweilong 10:ae5f62a1e40e 288 e.init(2,20,20,30,30,n);
wuweilong 10:ae5f62a1e40e 289
wuweilong 10:ae5f62a1e40e 290 }
wuweilong 10:ae5f62a1e40e 291
wuweilong 10:ae5f62a1e40e 292 }
wuweilong 10:ae5f62a1e40e 293 }
wuweilong 10:ae5f62a1e40e 294 }
wuweilong 10:ae5f62a1e40e 295
wuweilong 10:ae5f62a1e40e 296