QINGXIANG KONG / Mbed 2 deprecated FlappyBird

Dependencies:   N5110 mbed

Files at this revision

API Documentation at this revision

Comitter:
240742751
Date:
Sat May 09 14:47:26 2015 +0000
Commit message:
mbed NXP LPC1768, Nokia N5110, Joystick, Flappy bird

Changed in this revision

N5110.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/N5110.lib	Sat May 09 14:47:26 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/eencae/code/N5110/#ba8addc061ea
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat May 09 14:47:26 2015 +0000
@@ -0,0 +1,303 @@
+#include "mbed.h"
+#include "N5110.h"
+
+//change this to alter tolerance of joystick direction
+#define DIRECTION_TOLERANCE 0.05
+
+Serial serial (USBTX,USBRX);               // TEST OF JOYSTICK
+N5110 lcd(p7, p8, p9, p10, p11, p13, p26); // N5110
+
+int printFlag = 0;      
+
+int Bird_X=5;           // define bird-x
+int Bird_Y=20;          // define bird-y
+
+int Wallup_x = 20;      //define UP wall-x
+int Wallup_y = 1;       //define UP wall-Y
+int Walldown_x = 60;    //define DOWN wall-x
+int Walldown_y = 20;    //define DOWN wall-Y
+
+//connections for button A nad button B
+InterruptIn buttonA(p29);
+InterruptIn buttonB(p28);
+
+//connections for buzzer
+PwmOut buzzer(p21);
+//Jigglypuff's Song
+float frequency[]= {440,659,554,440,492,554,600,554,494,554,440};
+float beat[]= {1,3,3,3,1,3,1.5,1,3,1.5,0.5};          // speed x 1 (just choose one)
+//float beat[]={2,6,6,6,2,6,3,2,6,3,1};               // speed x 2 (just choose one)
+//float beat[]={3,9,9,9,3,9,4.5,3,9,4.5,1.5};         // speed x 3 (just choose one)
+
+//connections for joystick
+AnalogIn xPot(p15);
+AnalogIn yPot(p16);
+
+//timer to regularly read the joystick
+Ticker pollJoystick;
+
+// create enumerated type (0,1,2,3 etc. for direction)
+// could be extended for diagonals etc.
+enum DirectionName {
+    UP,
+    DOWN,
+    LEFT,
+    RIGHT,
+    CENTRE,
+    UNKNOWN
+};
+
+// struct for Joystick
+typedef struct JoyStick Joystick;
+struct JoyStick {
+    float x;    // current x value
+    float x0;   // 'centred' x value
+    float y;    // current y value
+    float y0;   // 'centred' y value
+    int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
+    DirectionName direction;  // current direction
+};
+// create struct variable
+Joystick joystick;
+
+// function prototypes
+void calibrateJoystick();
+void updateJoystick();
+
+// read default positions of the joystick to calibrate later readings
+void calibrateJoystick()
+{
+    //button.mode(PullDown);
+    // must not move during calibration
+    joystick.x0 = xPot;  // initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
+    joystick.y0 = yPot;
+}
+void updateJoystick()
+{
+    // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
+    joystick.x = xPot - joystick.x0;
+    joystick.y = yPot - joystick.y0;
+    // read button state
+    //joystick.button = button;
+    // calculate direction depending on x,y values
+    // tolerance allows a little lee-way in case joystick not exactly in the stated direction
+    if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
+        joystick.direction = CENTRE;
+
+    } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
+        joystick.direction = DOWN;
+        Bird_Y=Bird_Y+3; // The bird's down movement of Y-axis is 3 for each refresh time   [change the value here to change the value of joystick]
+
+    } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
+        joystick.direction = UP;
+        Bird_Y = Bird_Y-4; // The bird's up movement of Y-axis is 4 for each refresh time   [change the value here to change the value of joystick]
+
+    } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
+        joystick.direction = RIGHT;
+
+    } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
+        joystick.direction = LEFT;
+
+    } else {
+        joystick.direction = UNKNOWN;
+    }
+    printFlag = 1;
+}
+
+void Bird(int bird_x, int bird_y)   // Draw my bird
+{
+    for (int i=bird_y; i<=bird_y+5; i++) {
+        lcd.setPixel(bird_x,i);     // left line of bird's body
+        lcd.setPixel(bird_x+5,i);   // right line of bird's body
+    }
+
+    for (int j=bird_x+1; j<=bird_x+5; j++)
+
+    {
+        lcd.setPixel(j,bird_y);     // up line of bird's body
+        lcd.setPixel(j,bird_y+5);   // down line of bird's body
+    }
+
+    lcd.setPixel(bird_x+3,bird_y+2);// eye of bird
+
+    lcd.setPixel(bird_x-2,bird_y+3);// tail of bird
+    lcd.setPixel(bird_x-2,bird_y+4);
+    lcd.setPixel(bird_x-1,bird_y+4);
+
+    lcd.setPixel(bird_x+6,bird_y+3);// mouth of bird
+    lcd.setPixel(bird_x+6,bird_y+4);
+
+    lcd.refresh();
+}
+
+
+void Wall(int x, int y)         // Drow the wall
+{
+
+    for (int k=1; k<=100; k++) {                        // set the time of wall
+        for (int i=x; i<=x+8; i++) {                    // set teh width of wall      
+            for (int j=y; j<=y+28; j++) {               // set the high of wall
+                lcd.setPixel(80*k+i, j);                // present wall 
+//-------------------------when bird hit on the wall-----------------------
+                if (Bird_X == 80*k+i-6 && Bird_Y == j-3 ) {
+                    lcd.clear();
+                    lcd.printString("Game Over",15,2);
+                    lcd.refresh();
+                    wait(5.0);
+                }
+                
+                else if (Bird_X == 80*k+i-5 && Bird_Y == j ) {
+                    lcd.clear();
+                    lcd.printString("Game Over",15,2);
+                    lcd.refresh();
+                    wait(5.0);
+                }
+                
+                else if (Bird_X == 80*k+i-4 && Bird_Y == j ) {
+                    lcd.clear();
+                    lcd.printString("Game Over",15,2);
+                    lcd.refresh();
+                    wait(5.0);  
+                }
+                
+                else if (Bird_X == 80*k+i-3 && Bird_Y == j ) {
+                    lcd.clear();
+                    lcd.printString("Game Over",15,2);
+                    lcd.refresh();
+                    wait(5.0);
+                }
+                
+                else if (Bird_X == 80*k+i-2 && Bird_Y == j ) {
+                    lcd.clear();
+                    lcd.printString("Game Over",15,2);
+                    lcd.refresh();
+                    wait(5.0);
+                }
+                
+                else if (Bird_X == 80*k+i-1 && Bird_Y == j ) {
+                    lcd.clear();
+                    lcd.printString("Game Over",15,2);
+                    lcd.refresh();
+                    wait(5.0);
+                }
+                
+                else if (Bird_X == 80*k+i && Bird_Y == j ) {
+                    lcd.clear();
+                    lcd.printString("Game Over",15,2);
+                    lcd.refresh();
+                    wait(5.0);
+                }
+//-------------------------when bird hit on the wall-----------------------
+            }
+        }
+    }
+    lcd.refresh();
+}
+
+//------------------define button----------------------------------------------
+
+//Button A
+int buttonFlagA = 0;
+//Button B
+int buttonFlagB = 0;
+
+
+void buttonAPressed()
+{
+    buttonFlagA = 1;
+}
+
+
+void buttonBPressed()
+{
+    buttonFlagB = 1;
+}
+
+//------------------define button----------------------------------------------
+
+int main()
+{
+    lcd.init();
+
+    //present the bird
+    Bird(Bird_X , Bird_Y);
+
+    // square of the screen
+    lcd.drawLine(0,0,83,0,1);
+    lcd.drawLine(0,47,83,47,1);
+    lcd.drawLine(0,1,0,46,1);
+    lcd.drawLine(83,1,83,46,1);
+
+    // show the words of  "Flappy Bird"
+    lcd.printString("Flappy",26,2);
+    lcd.printString("Bird",32,4);
+
+    lcd.refresh();
+
+    // read the buzzer
+   for (int i= 0; i< (sizeof(frequency) / sizeof(int)); i++) {
+            buzzer.period(1.0 / frequency[i]);
+            buzzer.write(0.5);
+            wait(1.0 / beat[i]);
+            buzzer.write(0);
+            wait(0.05);
+        }
+    
+    calibrateJoystick();                                    // get centred values of joystick
+    pollJoystick.attach(&updateJoystick,1.0/10.0);          // read joystick 10 times per second
+
+    int speed = 0;  //change speed of wall down
+
+    buttonA.rise(&buttonAPressed);                          //buttonA rise
+    buttonB.rise(&buttonBPressed);                          //buttonB rise                       
+
+    while(1) {
+        
+        lcd.clear();
+//---------------------------------------bird hit on top and bottom--------------------------
+
+        if (Bird_Y <= -4) {
+            lcd.printString("Game Over",15,2);
+            lcd.refresh();
+        } else if (Bird_Y >= 42) {
+            lcd.printString("Game Over",15,2);
+            lcd.refresh();
+            wait(5);
+        }
+    else
+        {
+//---------------------------------------bird hit on top and bottom--------------------------
+
+//---------------------button to change the speed of the wall--------------------------------
+        
+
+            if (buttonFlagA==1) {
+                buttonFlagA=0;
+                speed--;
+                lcd.refresh();
+            }
+
+            if (buttonFlagB==1) {
+                buttonFlagB=0;
+                speed++;
+                lcd.refresh();
+            }
+
+//---------------------button to change the speed of the wall---------------------------------
+
+            lcd.drawLine(0,0,83,0,1);           //present the top line
+            lcd.drawLine(0,47,83,47,1);         //present the botton line
+
+            Bird_Y = Bird_Y + 2;
+            Bird(Bird_X,Bird_Y);                //present the bird
+
+            Wallup_x = Wallup_x + speed -1;     //up wall moving function
+            Walldown_x = Walldown_x + speed -1; //down wall moving function 
+            
+            Wall(Wallup_x, Wallup_y);           //draw the wall
+            Wall(Walldown_x, Walldown_y);       //draw the wall
+
+            wait(0.1);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sat May 09 14:47:26 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/8ab26030e058
\ No newline at end of file