Asteroids

Dependencies:   N5110 mbed

Files at this revision

API Documentation at this revision

Comitter:
el15s3p
Date:
Thu May 05 14:59:03 2016 +0000
Parent:
2:9e791f33c49f
Commit message:
Asteroids like game

Changed in this revision

cometCrusher.cpp Show annotated file Show diff for this revision Revisions of this file
cometCrusher.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cometCrusher.cpp	Thu May 05 14:59:03 2016 +0000
@@ -0,0 +1,752 @@
+#include "mbed.h"
+#include "N5110.h"
+
+#define DIRECTION_TOLERANCE 0.05L
+
+//         VCC,    SCE,   RST,   D/C,   MOSI,  SCLK,   LED
+N5110 lcd (PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3);
+
+// connections for joystick
+DigitalIn button(PTB11);
+AnalogIn xPot(PTB2);
+AnalogIn yPot(PTB3);
+
+AnalogIn Pot1(PTB10); //Declaring the variable resistor as an AnalogIn
+
+PwmOut led1(PTC2);//Declaring that led 1 is used as a PwmOut
+
+//InterruptIn sw2 (SW2);
+
+DigitalIn buttonA(PTB18); //Declaring that button A is used as a DigitalIn
+DigitalIn buttonB(PTB19); //Declaring that button B is used as a DigitalIn
+
+PwmOut buzzer(PTA2);//Declaring that buzzer is used as a PwmOut
+
+//volatile int g_sw2_flag = 0;
+
+// timer to regularly read the joystick
+Ticker pollJoystick;
+
+// Giving the names of the direction of the joystick
+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)
+    int buttonA; // buttonA state (assume pull-down used, so 1 = pressed, 0 = unpressed)
+    int buttonB; // buttonB state (assume pull-down used, so 1 = pressed, 0 = unpressed)
+    DirectionName direction;  // current direction
+};
+// create struct variable
+Joystick joystick;
+
+int printFlag = 0;
+
+// function prototypes
+void calibrateJoystick(); //Declaring the calibration of joystick void
+void updateJoystick(); //Declaring the updating of the joystick displacement void
+
+//void sw2_isr();
+
+void menu(); //Declaring the menu void
+void game();//Declaring the game void
+void difficultySet();//Declaring the difficulty setting void
+void highScore();//Declaring the highscore displaying void
+void instructions();//Declaring the instructions display void
+void ship();//Declaring the ship displaying void
+void bullets();//Declaring the bullets displaying void
+void comets();//Declaring the comet displaying void
+
+
+int menuSelect = 2; //Default value of menuSelect so cursor is already on "Start" option
+int menuUp = 1;//Default value for indicator to show menu is up
+int gameUp = 0; //Default value to show if game is playing
+int instructionsPage = 0; //Default value to show what page of instructions is up
+int shipDirection = 0; //Default value to decide with direction the space ship is facing
+int gameOver = 0; //Default value to say when the game is over
+int cometMoveX = 0; //Default value to the X axis movement of the comets
+int cometMoveY = 0; //Default value to the Y axis movement of the comets
+int bulletMoveX = 0; //Default value to the X axis movement of the bullets
+int bulletMoveY = 0; //Default value to the Y axis movement of the bullets
+
+int main()
+{
+    while(1) {
+        calibrateJoystick();  // get centred values of joystick
+        pollJoystick.attach(&updateJoystick,1.0/10.0);  // read joystick 10 times per second
+        while(menuUp == 1) {
+            menu();
+        }
+        lcd.refresh();
+    }
+}
+
+void menu()
+{
+    calibrateJoystick();  // get centred values of joystick
+    pollJoystick.attach(&updateJoystick,1.0/10.0);  // read joystick 10 times per second
+
+    lcd.init();
+    lcd.clear();
+    lcd.normalMode();
+    //Displaying the main menu and showing the name of the game
+    lcd.printString("Comet Crusher!",0,0);
+    lcd.printString("Start",10,2);
+    lcd.printString("Instructions",10,3);
+    lcd.printString("Difficulty",10,4);
+    lcd.printString("Scores",10,5);
+    lcd.printString(">",5,menuSelect); //this is the cursor to show what is being selected
+    lcd.refresh();
+    sleep();
+
+    //the switch case allows you to move the cursor depending on the displacement of the joystick
+    switch (menuSelect) {
+        case 2:
+            if (joystick.direction == DOWN) {
+                menuSelect = 3;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            } else if (joystick.direction == UP) {
+                menuSelect = 5;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            }
+            if (buttonA == 1) {
+                menuUp = 0;
+                gameUp = 1;
+                game();
+            }
+            break;
+        case 3:
+            if (joystick.direction == DOWN) {
+                menuSelect = 4;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            } else if (joystick.direction == UP) {
+                menuSelect = 2;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            }
+            if (buttonA == 1) {
+                menuUp = 0;
+                instructions();
+            }
+            break;
+        case 4:
+            if (joystick.direction == DOWN) {
+                menuSelect = 5;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            } else if (joystick.direction == UP) {
+                menuSelect = 3;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            }
+            if (buttonA == 1) {
+                menuUp = 0;
+                difficultySet();
+            }
+            break;
+        case 5:
+            if (joystick.direction == DOWN) {
+                menuSelect = 2;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            } else if (joystick.direction == UP) {
+                menuSelect = 4;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            }
+            if (buttonA == 1) {
+                menuUp = 0;
+                highScore();
+            }
+            break;
+    }
+}
+void game()
+{
+    // SW2 has a pull-up resistor, so the pin will be at 3.3 V by default
+    // and fall to 0 V when pressed. We therefore need to look for a falling edge
+    // on the pin to fire the interrupt
+    //sw2.fall(&sw2_isr);
+    //since SW2 has an external pull-up, we should disable to internal pull-down
+    // resistor that is enabled by default using InterruptIn
+    //sw2.mode(PullNone);
+
+    while(gameUp) {
+        lcd.clear(); //Clear menu and starts game
+        lcd.inverseMode();
+        ship();
+        comets();
+        /*if (g_sw2_flag == 1) {
+            gameUp = 0;
+            lcd.printString("pause",20,3);
+            if(g_sw2_flag == 0) {
+                gameUp = 1;
+            }
+        }*/
+    }
+
+}
+
+//This is for the difficulty setting page to decide how hard the game play will be
+void difficultySet()
+{
+    lcd.clear();
+    lcd.printString("Difficulty:",0,0);
+    while(!menuUp) {
+        if (buttonB == 1) {
+            menuUp = 1;
+            menu();
+        }
+    }
+}
+
+//This is for the highscores that people have gotten on the game
+void highScore()
+{
+    lcd.clear();
+    lcd.printString("HighScores:",0,0);
+    lcd.printString("1)",0,1);
+    lcd.printString("2)",0,2);
+    lcd.printString("3)",0,3);
+    while(!menuUp) {
+        if (buttonB == 1) {
+            menuUp = 1;
+            menu();
+        }
+    }
+}
+
+//this displays the instructions on how to play the game
+void instructions()
+{
+    switch(instructionsPage) {
+        case 0:
+            lcd.clear();
+            lcd.printString(" Game controls:",0,0);
+            lcd.printString("Joystick L/R =",5,1);
+            lcd.printString("rotate ship",10,2);
+            lcd.printString("Button A =",5,3);
+            lcd.printString("shoot",10,4);
+            lcd.printString("next page->",0,5);
+            break;
+        case 1:
+            lcd.clear();
+            lcd.printString("Game controls:",0,0);
+            lcd.printString("Button B =",5,1);
+            lcd.printString("block",10,2);
+            lcd.printString("next page->",0,5);
+            break;
+        case 2:
+            lcd.printString("Diff control:",0,0);
+            lcd.printString("Variable res =",5,1);
+            lcd.printString("change diff",10,2);
+            lcd.printString("First page->",0,5);
+
+            while(!menuUp) {
+                if(buttonA == 1) {
+                    for(instructionsPage = 0; instructionsPage < 3; instructionsPage ++) {
+                        instructionsPage =instructionsPage + 1;
+                    }
+                }
+                if (buttonB == 1) {
+                    menuUp = 1;
+                    menu();
+                }
+            }
+    }
+}
+//this will display the ship when game is playing and will let you be able to change the direction of the ship
+void ship()
+{
+    calibrateJoystick();  // get centred values of joystick
+    pollJoystick.attach(&updateJoystick,1.0/10.0);  // read joystick 10 times per second
+
+    int shipShape1 [7][11] = {
+        {0,0,0,0,0,0,0,0,1,1,1},
+        {0,0,0,0,0,1,1,1,1,1,0},
+        {0,0,1,1,1,1,1,1,1,0,0},
+        {1,1,1,1,1,1,1,1,0,0,0},
+        {0,0,1,1,1,1,1,1,1,0,0},
+        {0,0,0,0,0,1,1,1,1,1,0},
+        {0,0,0,0,0,0,0,0,1,1,1}
+    };
+    int shipShape2 [10][11] = {
+        {0,0,0,0,0,0,1,0,0,0,0},
+        {0,0,0,0,0,1,1,0,0,0,0},
+        {0,0,0,0,1,1,1,0,0,0,0},
+        {0,0,0,0,1,1,1,0,0,0,0},
+        {0,0,0,1,1,1,1,1,1,1,1},
+        {0,0,0,1,1,1,1,1,1,1,0},
+        {0,0,1,1,1,1,1,1,1,0,0},
+        {0,0,1,1,1,1,1,0,0,0,0},
+        {0,1,1,1,1,0,0,0,0,0,0},
+        {0,1,1,0,0,0,0,0,0,0,0}
+
+    };
+    int shipShape3 [11][7] = {
+        {1,0,0,0,0,0,1},
+        {1,1,0,0,0,1,1},
+        {1,1,1,0,1,1,1},
+        {0,1,1,1,1,1,0},
+        {0,1,1,1,1,1,0},
+        {0,1,1,1,1,1,0},
+        {0,0,1,1,1,0,0},
+        {0,0,1,1,1,0,0},
+        {0,0,1,1,1,0,0},
+        {0,0,0,1,0,0,0},
+        {0,0,0,1,0,0,0}
+    };
+    int shipShape4 [10][11] = {
+        {0,0,0,0,1,0,0,0,0,0,0},
+        {0,0,0,0,1,1,0,0,0,0,0},
+        {0,0,0,0,1,1,1,0,0,0,0},
+        {0,0,0,0,1,1,1,0,0,0,0},
+        {1,1,1,1,1,1,1,1,0,0,0},
+        {0,1,1,1,1,1,1,1,0,0,0},
+        {0,0,1,1,1,1,1,1,1,0,0},
+        {0,0,0,0,1,1,1,1,1,0,0},
+        {0,0,0,0,0,0,1,1,1,1,0},
+        {0,0,0,0,0,0,0,0,1,1,0}
+    };
+    int shipShape5 [7][11] = {
+        {1,1,1,0,0,0,0,0,0,0,0},
+        {0,1,1,1,1,1,0,0,0,0,0},
+        {0,0,1,1,1,1,1,1,1,0,0},
+        {0,0,0,1,1,1,1,1,1,1,1},
+        {0,0,1,1,1,1,1,1,1,0,0},
+        {0,1,1,1,1,1,0,0,0,0,0},
+        {1,1,1,0,0,0,0,0,0,0,0}
+    };
+    int shipShape6 [10][11] = {
+        {0,0,0,0,0,0,0,0,1,1,0},
+        {0,0,0,0,0,0,1,1,1,1,0},
+        {0,0,0,0,1,1,1,1,1,0,0},
+        {0,0,1,1,1,1,1,1,1,0,0},
+        {0,1,1,1,1,1,1,1,0,0,0},
+        {1,1,1,1,1,1,1,1,0,0,0},
+        {0,0,0,0,1,1,1,0,0,0,0},
+        {0,0,0,0,1,1,1,0,0,0,0},
+        {0,0,0,0,1,1,0,0,0,0,0},
+        {0,0,0,0,1,0,0,0,0,0,0}
+    };
+    int shipShape7 [11][7] = {
+        {0,0,0,1,0,0,0},
+        {0,0,0,1,0,0,0},
+        {0,0,1,1,1,0,0},
+        {0,0,1,1,1,0,0},
+        {0,0,1,1,1,0,0},
+        {0,1,1,1,1,1,0},
+        {0,1,1,1,1,1,0},
+        {0,1,1,1,1,1,0},
+        {1,1,1,0,1,1,1},
+        {1,1,0,0,0,1,1},
+        {1,0,0,0,0,0,1}
+    };
+    int shipShape8 [10][11] = {
+        {0,1,1,0,0,0,0,0,0,0,0},
+        {0,1,1,1,1,0,0,0,0,0,0},
+        {0,0,1,1,1,1,1,0,0,0,0},
+        {0,0,1,1,1,1,1,1,0,0,0},
+        {0,0,0,1,1,1,1,1,1,1,0},
+        {0,0,0,1,1,1,1,1,1,1,1},
+        {0,0,0,0,1,1,1,0,0,0,0},
+        {0,0,0,0,0,1,1,0,0,0,0},
+        {0,0,0,0,0,1,1,0,0,0,0},
+        {0,0,0,0,0,0,1,0,0,0,0}
+    };
+
+
+    while(gameUp) {
+        lcd.printString("Score:",0,0);
+
+        if (joystick.direction == RIGHT) {
+            if (shipDirection < 7) {
+                shipDirection = shipDirection + 1;
+            } else if (shipDirection == 7) {
+                shipDirection = 0;
+            }
+        } else if (joystick.direction == LEFT) {
+            if (shipDirection > 0) {
+                shipDirection = shipDirection - 1;
+            } else if(shipDirection == 0) {
+                shipDirection = 7;
+            }
+        }
+
+        switch(shipDirection) {
+            case 0:
+                lcd.clear();
+                lcd.printString("Score:",0,0);
+                for(int shipR = 0; shipR <= 6; shipR ++) {
+                    for(int shipC = 0; shipC <= 10; shipC ++) {
+                        if(shipShape1[shipR][shipC] == 0) {
+                            lcd.clearPixel(shipR + 38,shipC + 18);
+                        } else if(shipShape1[shipR][shipC] == 1) {
+                            lcd.setPixel(shipR + 38,shipC + 18);
+                        }
+                    }
+                }
+                lcd.refresh();
+                break;
+            case 1:
+                lcd.clear();
+                lcd.printString("Score:",0,0);
+                for(int shipR = 0; shipR <= 9; shipR ++) {
+                    for(int shipC = 0; shipC <= 10; shipC ++) {
+                        if(shipShape2[shipR][shipC] == 0) {
+                            lcd.clearPixel(shipR + 38,shipC + 18);
+                        } else if(shipShape2[shipR][shipC] == 1) {
+                            lcd.setPixel(shipR + 38,shipC + 18);
+                        }
+                    }
+                }
+                lcd.refresh();
+                break;
+            case 2:
+                lcd.clear();
+                lcd.printString("Score:",0,0);
+                for(int shipR = 0; shipR <= 10; shipR ++) {
+                    for(int shipC = 0; shipC <= 6; shipC ++) {
+                        if(shipShape3[shipR][shipC] == 0) {
+                            lcd.clearPixel(shipR + 36,shipC + 20);
+                        } else if(shipShape3[shipR][shipC] == 1) {
+                            lcd.setPixel(shipR + 36,shipC + 20);
+                        }
+                    }
+                }
+                lcd.refresh();
+                break;
+            case 3:
+                lcd.clear();
+                lcd.printString("Score:",0,0);
+                for(int shipR = 0; shipR <= 9; shipR ++) {
+                    for(int shipC = 0; shipC <= 10; shipC ++) {
+                        if(shipShape4[shipR][shipC] == 0) {
+                            lcd.clearPixel(shipR + 38,shipC + 18);
+                        } else if(shipShape4[shipR][shipC] == 1) {
+                            lcd.setPixel(shipR + 38,shipC + 18);
+                        }
+                    }
+                }
+                lcd.refresh();
+                break;
+            case 4:
+                lcd.clear();
+                lcd.printString("Score:",0,0);
+                for(int shipR = 0; shipR <= 6; shipR ++) {
+                    for(int shipC = 0; shipC <= 10; shipC ++) {
+                        if(shipShape5[shipR][shipC] == 0) {
+                            lcd.clearPixel(shipR + 38,shipC + 18);
+                        } else if(shipShape5[shipR][shipC] == 1) {
+                            lcd.setPixel(shipR + 38,shipC + 18);
+                        }
+                    }
+                }
+                lcd.refresh();
+                break;
+            case 5:
+                lcd.clear();
+                lcd.printString("Score:",0,0);
+                for(int shipR = 0; shipR <= 9; shipR ++) {
+                    for(int shipC = 0; shipC <= 10; shipC ++) {
+                        if(shipShape6[shipR][shipC] == 0) {
+                            lcd.clearPixel(shipR + 38,shipC + 18);
+                        } else if(shipShape6[shipR][shipC] == 1) {
+                            lcd.setPixel(shipR + 38,shipC + 18);
+                        }
+                    }
+                }
+                lcd.refresh();
+                break;
+            case 6:
+                lcd.clear();
+                lcd.printString("Score:",0,0);
+                for(int shipR = 0; shipR <= 10; shipR ++) {
+                    for(int shipC = 0; shipC <= 6; shipC ++) {
+                        if(shipShape7[shipR][shipC] == 0) {
+                            lcd.clearPixel(shipR + 36,shipC + 20);
+                        } else if(shipShape7[shipR][shipC] == 1) {
+                            lcd.setPixel(shipR + 36,shipC + 20);
+                        }
+                    }
+                }
+                lcd.refresh();
+                break;
+            case 7:
+                lcd.clear();
+                lcd.printString("Score:",0,0);
+                for(int shipR = 0; shipR <= 9; shipR ++) {
+                    for(int shipC = 0; shipC <= 10; shipC ++) {
+                        if(shipShape8[shipR][shipC] == 0) {
+                            lcd.clearPixel(shipR + 38,shipC + 18);
+                        } else if(shipShape8[shipR][shipC] == 1) {
+                            lcd.setPixel(shipR + 38,shipC + 18);
+                        }
+                    }
+                }
+                lcd.refresh();
+                break;
+        }
+        sleep();
+
+    }
+}
+
+//this void is to display the bullets on when game is playing if button A is pressed
+void bullets()
+{
+    switch(shipDirection) {
+        case 0:
+            for(bulletMoveY = 0; bulletMoveY >= 0; bulletMoveY++) {
+                lcd.setPixel(41,18 + bulletMoveY);
+                sleep();
+            }
+            break;
+        case 1:
+            for(bulletMoveY = 0; bulletMoveY >= 0; bulletMoveY++) {
+                lcd.setPixel(41,18 + bulletMoveY);
+                sleep();
+
+            }
+            break;
+        case 2:
+            for(bulletMoveY = 0; bulletMoveY >= 0; bulletMoveY++) {
+                lcd.setPixel(44,23 + bulletMoveY);
+                sleep();
+            }
+            break;
+        case 3:
+            for(bulletMoveY = 0; bulletMoveY >= 0; bulletMoveY++) {
+                lcd.setPixel(41,18 + bulletMoveY);
+                sleep();
+            }
+            break;
+        case 4:
+            for(bulletMoveY = 0; bulletMoveY >= 0; bulletMoveY++) {
+                lcd.setPixel(41,28 + bulletMoveY);
+                sleep();
+            }
+            break;
+        case 5:
+            for(bulletMoveY = 0; bulletMoveY >= 0; bulletMoveY++) {
+                lcd.setPixel(41,18 + bulletMoveY);
+                sleep();
+            }
+            break;
+        case 6:
+            for(bulletMoveY = 0; bulletMoveY >= 0; bulletMoveY++) {
+                lcd.setPixel(38,23 + bulletMoveY);
+                sleep();
+            }
+            break;
+        case 7:
+            for(bulletMoveY = 0; bulletMoveY >= 0; bulletMoveY++) {
+                lcd.setPixel(41,18 + bulletMoveY);
+                sleep();
+            }
+            break;
+    }
+}
+
+//this void will create comets to display on the screen for the ship to destroy or for it to destroy the ship
+void comets()
+{
+    while(gameUp) {
+        int cometDirection = rand() % 8 + 1;
+
+        int comet [11][11] = {
+            {0,0,0,0,1,1,0,0,0,0,0},
+            {0,0,0,1,0,0,1,0,0,0,0},
+            {0,0,1,0,0,0,0,1,1,0,0},
+            {0,1,0,0,0,0,0,0,0,1,0},
+            {0,1,0,0,0,0,0,0,0,0,1},
+            {1,0,0,0,0,0,0,0,0,0,1},
+            {0,1,1,0,0,0,0,0,0,0,1},
+            {0,0,0,1,1,0,0,0,1,1,0},
+            {0,0,0,0,0,1,0,0,1,0,0},
+            {0,0,0,0,0,1,0,1,0,0,0},
+            {0,0,0,0,0,1,1,0,0,0,0}
+        };
+
+        switch(cometDirection) {
+            case 1:
+                for(int cometR = 0; cometR <= 10; cometR ++) {
+                    for(int cometC = 0; cometC <= 10; cometC ++) {
+                        if(comet[cometR][cometC] == 0) {
+                            lcd.clearPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        } else if(comet[cometR][cometC] == 1) {
+                            lcd.setPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        }
+                    }
+                }
+                lcd.refresh();
+                break;
+            case 2:
+                for(int cometR = 0; cometR <= 10; cometR ++) {
+                    for(int cometC = 0; cometC <= 10; cometC ++) {
+                        if(comet[cometR][cometC] == 0) {
+                            lcd.clearPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        } else if(comet[cometR][cometC] == 1) {
+                            lcd.setPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        }
+                    }
+                }
+
+                lcd.refresh();
+                break;
+            case 3:
+                for(int cometR = 0; cometR <= 10; cometR ++) {
+                    for(int cometC = 0; cometC <= 10; cometC ++) {
+                        if(comet[cometR][cometC] == 0) {
+                            lcd.clearPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        } else if(comet[cometR][cometC] == 1) {
+                            lcd.setPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        }
+                    }
+                }
+                lcd.refresh();
+                break;
+            case 4:
+                for(int cometR = 0; cometR <= 10; cometR ++) {
+                    for(int cometC = 0; cometC <= 10; cometC ++) {
+                        if(comet[cometR][cometC] == 0) {
+                            lcd.clearPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        } else if(comet[cometR][cometC] == 1) {
+                            lcd.setPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        }
+                    }
+                }
+
+                lcd.refresh();
+                break;
+            case 5:
+                for(int cometR = 0; cometR <= 10; cometR ++) {
+                    for(int cometC = 0; cometC <= 10; cometC ++) {
+                        if(comet[cometR][cometC] == 0) {
+                            lcd.clearPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        } else if(comet[cometR][cometC] == 1) {
+                            lcd.setPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        }
+                    }
+                }
+
+                lcd.refresh();
+                break;
+            case 6:
+                for(int cometR = 0; cometR <= 10; cometR ++) {
+                    for(int cometC = 0; cometC <= 10; cometC ++) {
+                        if(comet[cometR][cometC] == 0) {
+                            lcd.clearPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        } else if(comet[cometR][cometC] == 1) {
+                            lcd.setPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        }
+                    }
+                }
+
+                lcd.refresh();
+                break;
+            case 7:
+                for(int cometR = 0; cometR <= 10; cometR ++) {
+                    for(int cometC = 0; cometC <= 10; cometC ++) {
+                        if(comet[cometR][cometC] == 0) {
+                            lcd.clearPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        } else if(comet[cometR][cometC] == 1) {
+                            lcd.setPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        }
+                    }
+                }
+
+                lcd.refresh();
+                break;
+            case 8:
+                for(int cometR = 0; cometR <= 10; cometR ++) {
+                    for(int cometC = 0; cometC <= 10; cometC ++) {
+                        if(comet[cometR][cometC] == 0) {
+                            lcd.clearPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        } else if(comet[cometR][cometC] == 1) {
+                            lcd.setPixel(cometR + cometMoveX,cometC + cometMoveY);
+                        }
+                    }
+                }
+
+                lcd.refresh();
+                break;
+
+        };
+    }
+}
+
+void GameOver()
+{
+    lcd.clear();
+    lcd.printString("GAME OVER",20,3);
+    wait(2.0);
+    menuUp = 1;
+    menu();
+}
+
+//this will calibrate the joystick
+void calibrateJoystick()
+{
+    button.mode(PullDown);
+    buttonA.mode(PullDown);
+    buttonB.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;
+}
+
+//this will update the joystick to show it's current displacement
+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;
+    joystick.buttonA = buttonA;
+    joystick.buttonB = buttonB;
+
+    // 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;
+    } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
+        joystick.direction = UP;
+    } 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;
+    }
+
+    // set flag for printing
+    printFlag = 1;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cometCrusher.h	Thu May 05 14:59:03 2016 +0000
@@ -0,0 +1,248 @@
+#include "mbed.h"
+#include "N5110.h"
+
+#define DIRECTION_TOLERANCE 0.05L
+
+//         VCC,    SCE,   RST,   D/C,   MOSI,  SCLK,   LED
+N5110 lcd (PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3);
+
+// connections for joystick
+DigitalIn button(PTB11);
+AnalogIn xPot(PTB2);
+AnalogIn yPot(PTB3);
+
+AnalogIn Pot1(PTB10);
+
+PwmOut led1(PTC2);
+
+//InterruptIn sw2 (SW2);
+DigitalIn buttonA(PTB18);
+DigitalIn buttonB(PTB19);
+PwmOut buzzer(PTA2);
+
+//volatile int g_sw2_flag = 0;
+int shipShape [7][11] = {
+    {0,0,0,0,0,0,0,0,0,0,1},
+    {0,0,0,0,0,1,1,1,1,1,0},
+    {0,0,1,1,1,1,1,1,1,0,0},
+    {1,1,1,1,1,1,1,1,0,0,0},
+    {0,0,1,1,1,1,0,1,1,0,0},
+    {0,0,0,0,0,1,1,1,1,1,0},
+    {0,0,0,0,0,0,0,0,0,0,1}
+};
+
+void ship()
+{
+    for(int shipR = 0; shipR <= 6; shipR ++) {
+        for(int shipC = 0; shipC <= 10; shipC ++) {
+            if(shipShape[shipR][shipC] == 0) {
+                lcd.clearPixel(shipR + 35,shipC + 20);
+            } else if(shipShape[shipR][shipC] == 1) {
+                lcd.setPixel(shipR + 35,shipC + 20);
+            }
+        }
+    }
+    lcd.refresh();
+    
+}
+
+
+// timer to regularly read the joystick
+Ticker pollJoystick;
+
+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)
+    int buttonA; // buttonA state (assume pull-down used, so 1 = pressed, 0 = unpressed)
+    int buttonB; // buttonB state (assume pull-down used, so 1 = pressed, 0 = unpressed)
+    DirectionName direction;  // current direction
+};
+// create struct variable
+Joystick joystick;
+
+int printFlag = 0;
+
+// function prototypes
+void calibrateJoystick();
+void updateJoystick();
+
+//void sw2_isr();
+
+void menu();
+void game();
+void difficultySet();
+void highScore();
+void instructions();
+
+
+int menuSelect = 2; //Default value of menuSelect so cursor is already on "Start" option
+int menuUp = 1;//default value for indicator to show menu is up
+
+int main()
+{
+    while(1) {
+        calibrateJoystick();  // get centred values of joystick
+        pollJoystick.attach(&updateJoystick,1.0/10.0);  // read joystick 10 times per second
+        while(menuUp == 1) {
+            menu();
+        }
+    }
+}
+
+void menu()
+{
+    calibrateJoystick();  // get centred values of joystick
+    pollJoystick.attach(&updateJoystick,1.0/10.0);  // read joystick 10 times per second
+
+    lcd.init();
+    lcd.clear();
+    lcd.normalMode();
+    lcd.printString("Comet Crusher!",0,0);
+    lcd.printString("Start",10,2);
+    lcd.printString("Instructions",10,3);
+    lcd.printString("Difficulty",10,4);
+    lcd.printString("Scores",10,5);
+    lcd.printString(">",5,menuSelect);
+    lcd.refresh();
+    sleep();
+    switch (menuSelect) {
+        case 2:
+            if (joystick.direction == DOWN) {
+                menuSelect = 3;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            } else if (joystick.direction == UP) {
+                menuSelect = 5;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            }
+            if (buttonA == 1) {
+                menuUp = 0;
+                game();
+            }
+            break;
+        case 3:
+            if (joystick.direction == DOWN) {
+                menuSelect = 4;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            } else if (joystick.direction == UP) {
+                menuSelect = 2;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            }
+            break;
+        case 4:
+            if (joystick.direction == DOWN) {
+                menuSelect = 5;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            } else if (joystick.direction == UP) {
+                menuSelect = 3;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            }
+            break;
+        case 5:
+            if (joystick.direction == DOWN) {
+                menuSelect = 2;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            } else if (joystick.direction == UP) {
+                menuSelect = 4;
+                lcd.refresh();
+                wait (0.2);
+                sleep();
+            }
+            break;
+    }
+}
+void game()
+{
+    // SW2 has a pull-up resistor, so the pin will be at 3.3 V by default
+    // and fall to 0 V when pressed. We therefore need to look for a falling edge
+    // on the pin to fire the interrupt
+    //sw2.fall(&sw2_isr);
+    //since SW2 has an external pull-up, we should disable to internal pull-down
+    // resistor that is enabled by default using InterruptIn
+    //sw2.mode(PullNone);
+    
+    lcd.clear(); //Clear menu and start game
+    ship();
+}
+
+void difficultySet()
+{
+}
+
+void highScore()
+{
+}
+
+void instructions()
+{
+}
+
+
+
+
+void calibrateJoystick()
+{
+    button.mode(PullDown);
+    buttonA.mode(PullDown);
+    buttonB.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;
+    joystick.buttonA = buttonA;
+    joystick.buttonB = buttonB;
+
+    // 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;
+    } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
+        joystick.direction = UP;
+    } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
+        joystick.direction = LEFT;
+    } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
+        joystick.direction = RIGHT;
+    } else {
+        joystick.direction = UNKNOWN;
+    }
+
+    // set flag for printing
+    printFlag = 1;
+}
\ No newline at end of file
--- a/main.cpp	Wed Apr 27 22:47:43 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,180 +0,0 @@
-#include "mbed.h"
-#include "N5110.h"
-
-#define DIRECTION_TOLERANCE 0.05
-
-//         VCC,    SCE,   RST,   D/C,   MOSI,  SCLK,   LED
-N5110 lcd (PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3);
-
-// connections for joystick
-DigitalIn button(PTB11);
-AnalogIn xPot(PTB2);
-AnalogIn yPot(PTB3);
-
-AnalogIn Pot1(PTB10);
-
-BusOut leds(LED1,LED2);
-DigitalOut led1(LED1);
-DigitalOut led2(LED2);
-
-
-InterruptIn sw2 (SW2);
-DigitalIn buttonA(PTB18);
-DigitalIn buttonB(PTB19);
-PwmOut buzzer(PTA2);
-
-// timer to regularly read the joystick
-Ticker pollJoystick;
-
-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;
-
-int printFlag = 0;
-
-// function prototypes
-void calibrateJoystick();
-void updateJoystick();
-
-int menuSelect = 2;
-
-int main()
-{
-    while (1) {
-        calibrateJoystick();  // get centred values of joystick
-        pollJoystick.attach(&updateJoystick,1.0/10.0);  // read joystick 10 times per second
-        lcd.init();
-        lcd.clear();
-        lcd.normalMode();
-        lcd.printString("Comet Crusher!",0,0);
-        lcd.printString("Start",10,2);
-        lcd.printString("Instructions",10,3);
-        lcd.printString("Difficulty",10,4);
-        lcd.printString("Scores",10,5);
-        lcd.printString(">",5,menuSelect);
-        lcd.refresh();
-        sleep();
-        switch (menuSelect) {
-            case 2:
-                if (joystick.direction == DOWN) {
-                    menuSelect = 3;
-                    lcd.refresh();
-                    wait (0.5);
-                    sleep();
-                } else if (joystick.direction == UP) {
-                    menuSelect = 5;
-                    lcd.refresh();
-                    wait (0.5);
-                    sleep();
-                }
-                break;
-            case 3:
-                if (joystick.direction == DOWN) {
-                    menuSelect = 4;
-                    lcd.refresh();
-                    wait (0.5);
-                    sleep();
-                } else if (joystick.direction == UP) {
-                    menuSelect = 2;
-                    lcd.refresh();
-                    wait (0.5);
-                    sleep();
-                }
-                break;
-            case 4:
-                if (joystick.direction == DOWN) {
-                    menuSelect = 5;
-                    lcd.refresh();
-                    wait (0.5);
-                    sleep();
-                } else if (joystick.direction == UP) {
-                    menuSelect = 3;
-                    lcd.refresh();
-                    wait (0.5);
-                    sleep();
-                }
-                break;
-            case 5:
-                if (joystick.direction == DOWN) {
-                    menuSelect = 2;
-                    lcd.refresh();
-                    wait (0.5);
-                    sleep();
-                } else if (joystick.direction == UP) {
-                    menuSelect = 4;
-                    lcd.refresh();
-                    wait (0.5);
-                    sleep();
-                }
-                break;
-        }
-    }
-}
-void game()
-{
-}
-
-void difficultySet()
-{
-}
-
-void highScore()
-{
-}
-
-void instructions()
-{
-}
-
-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;
-    } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
-        joystick.direction = UP;
-    } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
-        joystick.direction = LEFT;
-    } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
-        joystick.direction = RIGHT;
-    } else {
-        joystick.direction = UNKNOWN;
-    }
-
-    // set flag for printing
-    printFlag = 1;
-}
\ No newline at end of file