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:
- 8:b01f638d23b4
- Parent:
- 7:69ae0585d11a
- Child:
- 9:c8ea9b4af873
--- a/main.cpp Tue May 05 14:34:44 2015 +0000 +++ b/main.cpp Thu May 07 16:42:37 2015 +0000 @@ -7,14 +7,17 @@ N5110 lcd(p7,p8,p9,p10,p11,p13,p26); // connections for joystick -DigitalIn button(p17); -AnalogIn buttonA(p19); +//DigitalIn button(p17); +//AnalogIn buttonA(p19); +InterruptIn button(p17); +DigitalIn buttonA(p19); AnalogIn xPot(p15); AnalogIn yPot(p16); PwmOut buzzer(p21); PwmOut blacklight(p26); PwmOut led1(p24); PwmOut led2(p23); +BusOut leds(LED4,LED3,LED2,LED1); int i; int j; @@ -54,15 +57,16 @@ // create struct variable Joystick joystick; -Ticker timer; -int timerFlag=0; +//int buttonA = 0; +int pause = 0; +int buttonAFlag=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}; -//int buttonFlag = 0; +//float frequency=659; +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}; // function prototypes //void setPixel(int x, int y); //void clearPixel(int x, int y); @@ -91,37 +95,36 @@ nut.X=rand()%84; nut.Y=rand()%48; //nutFlag=1; - } - +} + void drawNut() { //int X = rand()%84; //int Y = rand()%48; - if(nutFlag==1){ - lcd.drawCircle(nut.X,nut.Y,1,1); + if(nutFlag==1) { + lcd.drawCircle(nut.X,nut.Y,1,1); } } void moveSnake() { - - if(joystick.direction == CENTRE){ + + if(joystick.direction == CENTRE) { //snake.snakeX[0]+=1; joystick.direction = CENTRE; } //else if(joystick.button == button){ - // snake.snakeX[i]=snake.snakeX[i]; - // snake.snakeY[i]=snake.snakeY[i]; - // } - else if(joystick.direction == UNKNOWN){ - joystick.direction = UNKNOWN; - } - else if(joystick.direction != UNKNOWN&&joystick.direction != CENTRE) { + // snake.snakeX[i]=snake.snakeX[i]; + // snake.snakeY[i]=snake.snakeY[i]; + // } + else if(joystick.direction == UNKNOWN) { + joystick.direction = UNKNOWN; + } else if(joystick.direction != UNKNOWN&&joystick.direction != CENTRE) { if((joystick.direction == DOWN)&&(snake.direction!=LEFT)) { snake.direction= RIGHT; //snake.snakeX[0]+=1; - + } else if((joystick.direction == UP)&&(snake.direction!=RIGHT)) { snake.direction=LEFT; //snake.snakeX[0]-=1; @@ -134,12 +137,12 @@ } } - + } void initSnake() { - + snake.snakeX[0] = 16; //coordinate of head snake.snakeY[0] = 10; snake.snakeX[1] = 14; @@ -150,204 +153,197 @@ snake.snakeY[3] = 10; snake.node = 6; //node of snake snake.direction = RIGHT; - + } - - + + void drawSnake() -{ - - for(i=0; i<snake.node-1; i++) { +{ + + 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() { - //nutFlag = 1; + //nutFlag = 1; //lifeFlag = 0; //snake.direction=LEFT; - + 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+=10; - nutFlag=0; - //if(timerFlag){ - //timerFlag=0; - // new nut appear + snake.node+=1; + nutFlag=0; // new nut appear + buzzer.period(1/frequency[1]); // set PWM period + buzzer=0.1; // set duty cycle } - + + if((snake.snakeX[0]!=nut.X)||(snake.snakeY[0]!=nut.Y)) { + buzzer=0; + } + if(nutFlag==0) { //set nut randomly nut.X = rand()%83; nut.Y = rand()%47; nutFlag = 1; } - - 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; - } - } - - - 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]; - snake.snakeY[i]=snake.snakeY[i-1]; - } - else{ - snake.snakeX[i]=snake.snakeX[i]; - snake.snakeY[i]=snake.snakeY[i]; - } + + 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; } - + } + + + 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]; + snake.snakeY[i]=snake.snakeY[i-1]; + } else { + 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 } - + } -void printScore(){ +void printScore() +{ lcd.printString("Your Score is",0,0); int score=snake.node-6; int length = sprintf(buffer," SCORE=%2d ",score); - lcd.printString(buffer,0,2 ); + lcd.printString(buffer,0,2 ); lcd.printString("Press to start",0,4); - } - -//void buttonAPressed(){ - //buttonAFlag=1; - //} +} -void pauseGame(){ - if(button==1){ - buttonFlag = 1; - } - } - -void timerExpired(){ - timerFlag = 1; +void buttonPressed() +{ + buttonFlag =1; } -void promptVoice(){ +void snakeModel() +{ + for(int i=0; i<25; i+=5) { + lcd.clear(); + lcd.printString("Press to start",1,1); + + lcd.drawRect(44-i,21,1,1,1); + lcd.drawRect(46-i,21,1,1,1); + lcd.drawRect(48-i,21,1,1,1); + + lcd.drawRect(42-i,23,1,1,1); + lcd.drawRect(44-i,23,1,1,1); + lcd.drawRect(46-i,23,1,1,1); + lcd.drawRect(48-i,23,1,1,1); + + lcd.drawRect(40-i,25,1,1,1); + lcd.drawRect(42-i,25,1,1,1); + lcd.drawRect(44-i,25,1,1,1); + lcd.drawRect(46-i,25,1,1,1); + lcd.drawRect(48-i,25,1,1,1); + lcd.drawRect(50-i,25,1,1,1); + + lcd.drawRect(40-i,27,1,1,1); + lcd.drawRect(42-i,27,1,1,1); + lcd.drawRect(44-i,27,1,1,1); + lcd.drawRect(46-i,27,1,1,1); + lcd.drawRect(48-i,27,1,1,1); + lcd.drawRect(50-i,27,1,1,1);//head + + lcd.drawRect(38-i,29,1,1,0); //tougue + lcd.drawRect(40-i,31,1,1,0); + + lcd.drawRect(46-i,29,1,1,1); + lcd.drawRect(48-i,29,1,1,1); + lcd.drawRect(50-i,29,1,1,1); + + lcd.drawRect(46-i,31,1,1,1); + lcd.drawRect(48-i,31,1,1,1); + lcd.drawRect(50-i,31,1,1,1); + + lcd.drawRect(44-i,33,1,1,1); + lcd.drawRect(46-i,33,1,1,1); + lcd.drawRect(48-i,33,1,1,1); + + lcd.drawRect(44-i,35,1,1,1); + lcd.drawRect(46-i,35,1,1,1); + lcd.drawRect(48-i,35,1,1,1); + + lcd.drawRect(42-i,37,1,1,1); + lcd.drawRect(44-i,37,1,1,1); + lcd.drawRect(46-i,37,1,1,1); - buzzer.period(0.0020); // set PWM period - buzzer.pulsewidth(0.001); // set duty cycle + lcd.drawRect(42-i,39,1,1,1); + lcd.drawRect(44-i,39,1,1,1); + lcd.drawRect(46-i,39,1,1,1); + + lcd.drawRect(44-i,41,1,1,1); + lcd.drawRect(46-i,41,1,1,1); + lcd.drawRect(48-i,41,1,1,1); + lcd.drawRect(50-i,41,1,1,1);//neck + + lcd.drawRect(80-i,41,1,1,1);//tail + lcd.drawRect(82-i,41,1,1,1); + lcd.drawRect(84-i,41,1,1,1); + + lcd.drawRect(82-i,39,1,1,1); + lcd.drawRect(84-i,39,1,1,1); + + lcd.drawRect(82-i,37,1,1,1); + + lcd.drawRect(80-i,35,1,1,1);//tail + + lcd.drawRect(46-i,43,1,1,1); + lcd.drawRect(48-i,43,1,1,1); + lcd.drawRect(50-i,43,1,1,1); + lcd.drawRect(52-i,43,1,1,1); + lcd.drawRect(54-i,43,1,1,1); + lcd.drawRect(56-i,43,1,1,1); + lcd.drawRect(58-i,43,1,1,1); + lcd.drawRect(60-i,43,1,1,1); + lcd.drawRect(62-i,43,1,1,1); + lcd.drawRect(64-i,43,1,1,1); + lcd.drawRect(66-i,43,1,1,1); + lcd.drawRect(68-i,43,1,1,1); + lcd.drawRect(70-i,43,1,1,1); + lcd.drawRect(72-i,43,1,1,1); + lcd.drawRect(74-i,43,1,1,1); + lcd.drawRect(76-i,43,1,1,1); + lcd.drawRect(78-i,43,1,1,1); + lcd.drawRect(80-i,43,1,1,1); + lcd.drawRect(82-i,43,1,1,1); + + lcd.drawRect(48-i,45,1,1,1); + lcd.drawRect(50-i,45,1,1,1); + lcd.drawRect(52-i,45,1,1,1); + lcd.drawRect(54-i,45,1,1,1); + lcd.drawRect(56-i,45,1,1,1); + lcd.drawRect(58-i,45,1,1,1); + lcd.drawRect(60-i,45,1,1,1); + lcd.drawRect(62-i,45,1,1,1); + lcd.drawRect(64-i,45,1,1,1); + lcd.drawRect(66-i,45,1,1,1); + lcd.drawRect(68-i,45,1,1,1); + lcd.drawRect(70-i,45,1,1,1); + lcd.drawRect(72-i,45,1,1,1); + lcd.drawRect(74-i,45,1,1,1); + lcd.drawRect(76-i,45,1,1,1); + lcd.drawRect(78-i,45,1,1,1); + lcd.drawRect(80-i,45,1,1,1); 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); - + //lcd.refresh(); } + +} //switch(snake.direction) //{ // case RIGHT:snake.X[0]+=1; @@ -413,7 +409,7 @@ //LED1 if(snake.snakeX[0]<1) { snake.snakeX[0]=1; - + }//will stop at the top edge } @@ -438,12 +434,12 @@ }//will stop at the right edge } - if(snake.direction == CENTRE){ + if(snake.direction == CENTRE) { snake.snakeX[0]+=1; - } - if(snake.direction == UNKNOWN){ + } + if(snake.direction == UNKNOWN) { snake.snakeX[0]+=1; - } + } } @@ -458,57 +454,75 @@ lcd.refresh(); initNut(); initSnake(); - timer.attach(&timerExpired,0.05); - //buzzer.period(0.020); // a 20ms period - //buttonA.rise(&buttonAPressed); - + button.rise(&buttonPressed); + buttonA.mode(PullDown); + //pauseGame(); //printScore(); //infinite while loop while(1) { - - if(buttonFlag==1){ + + if(buttonFlag==0) { //joystick button unpressed + lcd.printString("Press to start",1,1); + snakeModel(); + } else { + + leds = 0; + + if(buttonA) { // if button pressed, toggle pause + wait_ms(50); + pause = !pause; + leds = 15; + } + + while(pause) { + leds = 3; + if(buttonA) { // if button pressed, toggle pause + wait_ms(50); + pause = 0; + leds = 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]); - //} - lifeFlag=0; - wait(1); - } -// 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(); - } + lcd.refresh(); + wait(0.08); + //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]); + } + } + + + if (buttonFlag==1) { + lifeFlag =0; + } + + + } + + }