Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 7:69ae0585d11a
- Parent:
- 6:290173d4a22d
- Child:
- 8:b01f638d23b4
--- a/main.cpp Sun May 03 19:06:32 2015 +0000 +++ b/main.cpp Tue May 05 14:34:44 2015 +0000 @@ -54,12 +54,14 @@ // create struct variable Joystick joystick; -int buttonAFlag = 0; +Ticker timer; +int timerFlag=0; +int buttonFlag = 0; int printFlag = 0; int nutFlag =1; int lifeFlag =0; -float frequency[]={659,554,659,554,550,494,554,587,494,659,554,440}; -float beat[]={1,1,1,1,1,0.5,0.5,1,1,1,1,2}; +//float frequency[]={659,554,659,554,550,494,554,587,494,659,554,440}; +//float beat[]={1,1,1,1,1,0.5,0.5,1,1,1,1,2}; //int buttonFlag = 0; // function prototypes //void setPixel(int x, int y); @@ -70,7 +72,6 @@ struct Nut { int X; int Y; - int yes; }; Nut nut; @@ -79,7 +80,6 @@ int snakeX[100]; int snakeY[100]; int node; - int life; DirectionName direction; }; Snake snake; @@ -98,7 +98,7 @@ //int X = rand()%84; //int Y = rand()%48; if(nutFlag==1){ - lcd.drawCircle(nut.X,nut.Y,1,1); + lcd.drawCircle(nut.X,nut.Y,1,1); } } @@ -152,33 +152,31 @@ snake.direction = RIGHT; } - - + + void drawSnake() { - + for(i=0; i<snake.node-1; i++) { lcd.drawCircle(snake.snakeX[i],snake.snakeY[i],1,1); //lcd.setPixel(snake.snakeX[i],snake.snakeY[i]); + } } void startGmae() { - //lcd.drawRect(snake.snakeX[0]+10,snake.snakeY[0]+10,10,10,1); - //nutFlag = 1; + //nutFlag = 1; //lifeFlag = 0; //snake.direction=LEFT; - //if(joystick.direction == UNKNOWN) - + if((snake.snakeX[0]==nut.X)&&(snake.snakeY[0]==nut.Y)) { // if snake got nut ||(snake.snakeX[0]==nut.X-1)&&(snake.snakeY[0]==nut.Y-1)||(snake.snakeY[0]==nut.Y+1)&&(snake.snakeY[0]==nut.Y+1 - snake.node++; - - //buzzer.period(1/659); // set PWM period - //buzzer=0.1; // set duty cycle - //wait(0.1); - nutFlag=0; // new nut appear + snake.node+=10; + nutFlag=0; + //if(timerFlag){ + //timerFlag=0; + // new nut appear } if(nutFlag==0) { //set nut randomly @@ -191,10 +189,10 @@ for(i=3; i<snake.node; i++) { //if snake collide itself snake die if(snake.snakeX[i]==snake.snakeX[0] && snake.snakeY[i]==snake.snakeY[0]) { lifeFlag=1; - // break; } } - + + for(i=snake.node-1; i>0; i--) { //move snake if(snake.snakeX[0]>1||snake.snakeX[0]<83||snake.snakeY[0]>1||snake.snakeY[0]<47){ snake.snakeX[i]=snake.snakeX[i-1]; @@ -204,21 +202,13 @@ snake.snakeX[i]=snake.snakeX[i]; snake.snakeY[i]=snake.snakeY[i]; } - } + } if(snake.snakeX[0]<1||snake.snakeX[0]>83||snake.snakeY[0]<1||snake.snakeY[0]>47) { lifeFlag=1; // snake collide the corrider snake die - //break; } - - - //if(snake.life==1) { - //break; - //} - - } void printScore(){ @@ -229,13 +219,135 @@ lcd.printString("Press to start",0,4); } -void buttonAPressed(){ - buttonAFlag=1; - } +//void buttonAPressed(){ + //buttonAFlag=1; + //} + +void pauseGame(){ + if(button==1){ + buttonFlag = 1; + } + } + +void timerExpired(){ + timerFlag = 1; +} + +void promptVoice(){ -//while(joystick.direction == UNKNOWN) { - - + buzzer.period(0.0020); // set PWM period + buzzer.pulsewidth(0.001); // set duty cycle + wait(0.5); + lcd.printString("Your Score is",0,0); + + } + +void snakeModel(){ + lcd.drawRect(24,21,1,1,1); + lcd.drawRect(26,21,1,1,1); + lcd.drawRect(28,21,1,1,1); + + lcd.drawRect(22,23,1,1,1); + lcd.drawRect(24,23,1,1,1); + lcd.drawRect(26,23,1,1,1); + lcd.drawRect(28,23,1,1,1); + + lcd.drawRect(20,25,1,1,1); + lcd.drawRect(22,25,1,1,1); + lcd.drawRect(24,25,1,1,1); + lcd.drawRect(26,25,1,1,1); + lcd.drawRect(28,25,1,1,1); + lcd.drawRect(30,25,1,1,1); + + lcd.drawRect(20,27,1,1,1); + lcd.drawRect(22,27,1,1,1); + lcd.drawRect(24,27,1,1,1); + lcd.drawRect(26,27,1,1,1); + lcd.drawRect(28,27,1,1,1); + lcd.drawRect(30,27,1,1,1);//head + + lcd.drawRect(18,29,1,1,0); //tougue + lcd.drawRect(20,31,1,1,0); + + lcd.drawRect(26,29,1,1,1); + lcd.drawRect(28,29,1,1,1); + lcd.drawRect(30,29,1,1,1); + + lcd.drawRect(26,31,1,1,1); + lcd.drawRect(28,31,1,1,1); + lcd.drawRect(30,31,1,1,1); + + lcd.drawRect(24,33,1,1,1); + lcd.drawRect(26,33,1,1,1); + lcd.drawRect(28,33,1,1,1); + + lcd.drawRect(24,35,1,1,1); + lcd.drawRect(26,35,1,1,1); + lcd.drawRect(28,35,1,1,1); + + lcd.drawRect(22,37,1,1,1); + lcd.drawRect(24,37,1,1,1); + lcd.drawRect(26,37,1,1,1); + + lcd.drawRect(22,39,1,1,1); + lcd.drawRect(24,39,1,1,1); + lcd.drawRect(26,39,1,1,1); + + lcd.drawRect(24,41,1,1,1); + lcd.drawRect(26,41,1,1,1); + lcd.drawRect(28,41,1,1,1); + lcd.drawRect(30,41,1,1,1);//neck + + lcd.drawRect(60,41,1,1,1);//tail + lcd.drawRect(62,41,1,1,1); + lcd.drawRect(64,41,1,1,1); + + lcd.drawRect(62,39,1,1,1); + lcd.drawRect(64,39,1,1,1); + + lcd.drawRect(62,37,1,1,1); + + lcd.drawRect(60,35,1,1,1);//tail + + lcd.drawRect(26,43,1,1,1); + lcd.drawRect(28,43,1,1,1); + lcd.drawRect(30,43,1,1,1); + lcd.drawRect(32,43,1,1,1); + lcd.drawRect(34,43,1,1,1); + lcd.drawRect(36,43,1,1,1); + lcd.drawRect(38,43,1,1,1); + lcd.drawRect(40,43,1,1,1); + lcd.drawRect(42,43,1,1,1); + lcd.drawRect(44,43,1,1,1); + lcd.drawRect(46,43,1,1,1); + lcd.drawRect(48,43,1,1,1); + lcd.drawRect(50,43,1,1,1); + lcd.drawRect(52,43,1,1,1); + lcd.drawRect(54,43,1,1,1); + lcd.drawRect(56,43,1,1,1); + lcd.drawRect(58,43,1,1,1); + lcd.drawRect(60,43,1,1,1); + lcd.drawRect(62,43,1,1,1); + + lcd.drawRect(28,45,1,1,1); + lcd.drawRect(30,45,1,1,1); + lcd.drawRect(32,45,1,1,1); + lcd.drawRect(34,45,1,1,1); + lcd.drawRect(36,45,1,1,1); + lcd.drawRect(38,45,1,1,1); + lcd.drawRect(40,45,1,1,1); + lcd.drawRect(42,45,1,1,1); + lcd.drawRect(44,45,1,1,1); + lcd.drawRect(46,45,1,1,1); + lcd.drawRect(48,45,1,1,1); + lcd.drawRect(50,45,1,1,1); + lcd.drawRect(52,45,1,1,1); + lcd.drawRect(54,45,1,1,1); + lcd.drawRect(56,45,1,1,1); + lcd.drawRect(58,45,1,1,1); + lcd.drawRect(60,45,1,1,1); + + } //switch(snake.direction) //{ // case RIGHT:snake.X[0]+=1; @@ -251,18 +363,6 @@ //end of while(joystick.direction = UNKNOWN) -// if(joystick.direction == UP&&snake.direction!=DOWN) { -// snake.direction=UP; -// } else if(joystick.direction == RIGHT&&snake.direction!=LEFT) { -// snake.direction= RIGHT; -// } else if(joystick.direction == LEFT&&snake.direction!=RIGHT) { -// snake.direction=LEFT; -// } else(joystick.direction == DOWN&&snake.direction!=UP) { -// snake.direction=DOWN; -// } - - - // read default positions of the joystick to calibrate later readings void calibrateJoystick() { @@ -309,7 +409,7 @@ { // get direction of joystick and update snake if (snake.direction == LEFT) { - snake.snakeX[0]--; + snake.snakeX[0]-=1; //LED1 if(snake.snakeX[0]<1) { snake.snakeX[0]=1; @@ -318,21 +418,21 @@ } if (snake.direction == RIGHT) { - snake.snakeX[0]++; + snake.snakeX[0]+=1; //LED2 if(snake.snakeX[0]>83) { snake.snakeX[0]=83; }//will stop at the bottom edge } if (snake.direction == UP) { - snake.snakeY[0]--; + snake.snakeY[0]-=1; if(snake.snakeY[0]>47) { snake.snakeY[0]=47; }//will stop at the left edge } if (snake.direction == DOWN) { - snake.snakeY[0]++; + snake.snakeY[0]+=1; if(snake.snakeY[0]<1) { snake.snakeY[0]=1; }//will stop at the right edge @@ -353,12 +453,12 @@ { lcd.init(); lcd.setBrightness(0.5); // put LED backlight on 50% - //button.rise(&buttonPressed); calibrateJoystick(); // get centred values of joystick pollJoystick.attach(&updateJoystick,1.0/10.0); // read joystick 10 times per second lcd.refresh(); initNut(); initSnake(); + timer.attach(&timerExpired,0.05); //buzzer.period(0.020); // a 20ms period //buttonA.rise(&buttonAPressed); @@ -367,39 +467,48 @@ //infinite while loop while(1) { - if(buttonAFlag==1){ - buttonAFlag=0; + if(buttonFlag==1){ lcd.clear(); + buttonFlag=0; lifeFlag=0; updateSnake(); drawSnake(); drawNut(); moveSnake(); startGmae(); + pauseGame(); + if (buttonFlag==1){ + while(1){ + buttonFlag =0; + if(buttonFlag ==1) + break; + } + } if(lifeFlag==1){ lcd.clear(); lcd.refresh(); printScore(); - for(int i=0; i<=11; i++){ - buzzer.period(1/(frequency[i])); // set PWM period - buzzer=0.1; // set duty cycle - wait(0.5*beat[i]); - } + //for(int i=0; i<=11; i++){ + // buzzer.period(1/(frequency[i])); // set PWM period + // buzzer=0.1; // set duty cycle + // wait(0.5*beat[i]); + //} lifeFlag=0; + wait(1); } - lcd.refresh(); - wait(0.02); - } - +// if (buttonFlag==1){ +// while(1){ +// buttonFlag =0; +// if(buttonFlag ==1) +// break; +// } +// } + lcd.refresh(); + wait(0.02); + } else lcd.printString("Press to start",1,1); + snakeModel(); } - //wait(0.5); - //if(snake.life==1) { - // lcd.printString("lost",24,42); - // break; - - - }