Laila Al Badwawi 200906179 SpaceInvaders I declare this my own independent work and understand the university rules on plagiarism.

Dependencies:   mbed

Committer:
fy14lkaa
Date:
Fri Apr 12 13:56:13 2019 +0000
Revision:
3:985fab783b92
Parent:
2:6c1d7aa20e81
Child:
4:13cc179c11c5
define the x-axis of the space ship and the y-axis

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fy14lkaa 3:985fab783b92 1 ///////// pre-processor directives ////////
fy14lkaa 0:e2af4c8e462e 2 #include "mbed.h"
fy14lkaa 0:e2af4c8e462e 3 #include "Gamepad.h"
fy14lkaa 0:e2af4c8e462e 4 #include "N5110.h"
fy14lkaa 0:e2af4c8e462e 5
fy14lkaa 0:e2af4c8e462e 6 #ifdef WITH_TESTING
fy14lkaa 0:e2af4c8e462e 7 # include "tests.h"
fy14lkaa 0:e2af4c8e462e 8 #endif
fy14lkaa 0:e2af4c8e462e 9
fy14lkaa 3:985fab783b92 10 #define PADDLE_WIDTH 2
fy14lkaa 3:985fab783b92 11 #define PADDLE_HEIGHT 8
fy14lkaa 3:985fab783b92 12 #define BALL_SIZE 2
fy14lkaa 3:985fab783b92 13 #define BALL_SPEED 3
fy14lkaa 0:e2af4c8e462e 14
fy14lkaa 3:985fab783b92 15 /////////////// structs /////////////////
fy14lkaa 0:e2af4c8e462e 16 struct UserInput {
fy14lkaa 0:e2af4c8e462e 17 Direction d;
fy14lkaa 0:e2af4c8e462e 18 float mag;
fy14lkaa 0:e2af4c8e462e 19 };
fy14lkaa 3:985fab783b92 20 /////////////// objects ///////////////
fy14lkaa 0:e2af4c8e462e 21 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
fy14lkaa 0:e2af4c8e462e 22 Gamepad pad;
fy14lkaa 3:985fab783b92 23 //Direction _d;
fy14lkaa 3:985fab783b92 24 //SpaceEngine space;
fy14lkaa 3:985fab783b92 25 ///////////// prototypes ///////////////
fy14lkaa 0:e2af4c8e462e 26 void init();
fy14lkaa 0:e2af4c8e462e 27 void update_game(UserInput input);
fy14lkaa 0:e2af4c8e462e 28 void render();
fy14lkaa 0:e2af4c8e462e 29 void welcome();
fy14lkaa 3:985fab783b92 30 const int run[12][10] = {
fy14lkaa 3:985fab783b92 31 { 0,0,0,0,0,1,1,1,0,0 },
fy14lkaa 3:985fab783b92 32 { 0,0,0,0,0,1,1,1,0,0 },
fy14lkaa 3:985fab783b92 33 { 0,0,0,1,1,1,1,0,0,0 },
fy14lkaa 3:985fab783b92 34 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 35 { 0,1,1,0,1,1,0,1,1,1 },
fy14lkaa 3:985fab783b92 36 { 1,0,0,0,1,1,0,0,0,0 },
fy14lkaa 3:985fab783b92 37 { 0,0,0,1,1,1,1,0,0,0 },
fy14lkaa 3:985fab783b92 38 { 0,0,1,1,0,0,1,1,0,0 },
fy14lkaa 3:985fab783b92 39 { 1,1,1,1,0,0,0,1,1,0 },
fy14lkaa 3:985fab783b92 40 { 0,0,0,0,0,0,1,1,0,0 },
fy14lkaa 3:985fab783b92 41 { 0,0,0,0,0,1,1,0,0,0 },
fy14lkaa 3:985fab783b92 42 { 0,0,0,0,1,1,0,0,0,0 },
fy14lkaa 3:985fab783b92 43 };
fy14lkaa 3:985fab783b92 44 const int bullet[4][10] = {
fy14lkaa 3:985fab783b92 45 { 0,0,0,0,0,1,1,1,0,0 },
fy14lkaa 3:985fab783b92 46 { 0,0,0,0,0,1,1,1,0,0 },
fy14lkaa 3:985fab783b92 47 { 0,0,0,1,1,1,1,0,0,0 },
fy14lkaa 3:985fab783b92 48 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 49 };
fy14lkaa 3:985fab783b92 50 const int alien[12][10] = {
fy14lkaa 3:985fab783b92 51 { 0,0,0,0,0,1,1,1,0,0 },
fy14lkaa 3:985fab783b92 52 { 0,0,0,0,0,1,1,1,0,0 },
fy14lkaa 3:985fab783b92 53 { 0,0,0,1,1,1,1,0,0,0 },
fy14lkaa 3:985fab783b92 54 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 55 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 56 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 57 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 58 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 59 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 60 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 61 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 3:985fab783b92 62 { 0,0,1,1,1,1,0,1,0,0 },
fy14lkaa 0:e2af4c8e462e 63
fy14lkaa 3:985fab783b92 64 };
fy14lkaa 3:985fab783b92 65 /*
fy14lkaa 3:985fab783b92 66 const int space_ship[10][12]={
fy14lkaa 3:985fab783b92 67 {0,0,0,0,0,0,0,1,0,0,0,0},
fy14lkaa 3:985fab783b92 68 {},
fy14lkaa 3:985fab783b92 69
fy14lkaa 3:985fab783b92 70 };
fy14lkaa 3:985fab783b92 71 */
fy14lkaa 3:985fab783b92 72 Direction _d2;
fy14lkaa 3:985fab783b92 73 ///////////// functions ////////////////
fy14lkaa 0:e2af4c8e462e 74 int main()
fy14lkaa 0:e2af4c8e462e 75 {
fy14lkaa 3:985fab783b92 76 /*
fy14lkaa 0:e2af4c8e462e 77 #ifdef WITH_TESTING
fy14lkaa 0:e2af4c8e462e 78 int number_of_failures = run_all_tests();
fy14lkaa 0:e2af4c8e462e 79
fy14lkaa 0:e2af4c8e462e 80 if(number_of_failures > 0) return number_of_failures;
fy14lkaa 0:e2af4c8e462e 81 #endif
fy14lkaa 3:985fab783b92 82 */
fy14lkaa 0:e2af4c8e462e 83 int fps = 8; // frames per second
fy14lkaa 3:985fab783b92 84
fy14lkaa 0:e2af4c8e462e 85 init(); // initialise and then display welcome screen...
fy14lkaa 0:e2af4c8e462e 86 welcome(); // waiting for the user to start
fy14lkaa 0:e2af4c8e462e 87
fy14lkaa 3:985fab783b92 88 //render(); // first draw the initial frame
fy14lkaa 0:e2af4c8e462e 89 wait(1.0f/fps); // and wait for one frame period
fy14lkaa 3:985fab783b92 90
fy14lkaa 3:985fab783b92 91 int y=0;
fy14lkaa 3:985fab783b92 92
fy14lkaa 3:985fab783b92 93 //define the x position of bullet from the space ship
fy14lkaa 3:985fab783b92 94 int x_bullet=0;
fy14lkaa 3:985fab783b92 95
fy14lkaa 3:985fab783b92 96 //define the y position of the bullet from the space ship
fy14lkaa 3:985fab783b92 97 int y_bullet=0;
fy14lkaa 3:985fab783b92 98 int y_alien=10;
fy14lkaa 3:985fab783b92 99 int x_alien=70;
fy14lkaa 3:985fab783b92 100 int bullet_fired=0;
fy14lkaa 3:985fab783b92 101 // game loop - read input, update the game state and render the display
fy14lkaa 0:e2af4c8e462e 102 while (1) {
fy14lkaa 3:985fab783b92 103 lcd.clear();
fy14lkaa 3:985fab783b92 104 lcd.drawSprite(0,y,12,10,(int *)run);
fy14lkaa 3:985fab783b92 105
fy14lkaa 3:985fab783b92 106 lcd.drawSprite(x_alien,y_alien,12,10,(int *)alien);
fy14lkaa 3:985fab783b92 107 lcd.drawSprite(x_bullet,y_bullet,4,10,(int *)bullet);
fy14lkaa 3:985fab783b92 108 //space.read_input(pad);
fy14lkaa 3:985fab783b92 109 _d2 = pad.get_direction();
fy14lkaa 3:985fab783b92 110 if(_d2==N)
fy14lkaa 3:985fab783b92 111 //pong.update(pad);
fy14lkaa 3:985fab783b92 112 //render();
fy14lkaa 3:985fab783b92 113 y=y-2;
fy14lkaa 3:985fab783b92 114 else
fy14lkaa 3:985fab783b92 115 if(_d2==S)
fy14lkaa 3:985fab783b92 116 y=y+2;
fy14lkaa 3:985fab783b92 117 else if(_d2==E){
fy14lkaa 3:985fab783b92 118 bullet_fired=1;
fy14lkaa 3:985fab783b92 119 x_bullet=11;
fy14lkaa 3:985fab783b92 120 y_bullet=y;
fy14lkaa 3:985fab783b92 121 }
fy14lkaa 3:985fab783b92 122 if(y>=40)
fy14lkaa 3:985fab783b92 123 y=40;
fy14lkaa 3:985fab783b92 124 else
fy14lkaa 3:985fab783b92 125 if(y<=0)
fy14lkaa 3:985fab783b92 126 y=0;
fy14lkaa 3:985fab783b92 127
fy14lkaa 3:985fab783b92 128 if(bullet_fired==1)
fy14lkaa 3:985fab783b92 129 x_bullet+=4;
fy14lkaa 3:985fab783b92 130 if(x_bullet>=x_alien && y_bullet >=y_alien && y_bullet <=y_alien+10)
fy14lkaa 3:985fab783b92 131 y=0;
fy14lkaa 0:e2af4c8e462e 132 wait(1.0f/fps);
fy14lkaa 3:985fab783b92 133
fy14lkaa 3:985fab783b92 134 lcd.refresh();
fy14lkaa 0:e2af4c8e462e 135 }
fy14lkaa 0:e2af4c8e462e 136 }
fy14lkaa 3:985fab783b92 137
fy14lkaa 3:985fab783b92 138 // initialies all classes and libraries
fy14lkaa 0:e2af4c8e462e 139 void init()
fy14lkaa 0:e2af4c8e462e 140 {
fy14lkaa 0:e2af4c8e462e 141 // need to initialise LCD and Gamepad
fy14lkaa 0:e2af4c8e462e 142 lcd.init();
fy14lkaa 2:6c1d7aa20e81 143 pad.init();
fy14lkaa 3:985fab783b92 144
fy14lkaa 0:e2af4c8e462e 145 // initialise the game with correct ball and paddle sizes
fy14lkaa 3:985fab783b92 146 //pong.init(PADDLE_WIDTH,PADDLE_HEIGHT,BALL_SIZE,BALL_SPEED);
fy14lkaa 3:985fab783b92 147
fy14lkaa 3:985fab783b92 148 }
fy14lkaa 3:985fab783b92 149
fy14lkaa 3:985fab783b92 150 // this function draws each frame on the LCD
fy14lkaa 0:e2af4c8e462e 151 void render()
fy14lkaa 0:e2af4c8e462e 152 {
fy14lkaa 0:e2af4c8e462e 153 // clear screen, re-draw and refresh
fy14lkaa 0:e2af4c8e462e 154 lcd.clear();
fy14lkaa 0:e2af4c8e462e 155 lcd.refresh();
fy14lkaa 0:e2af4c8e462e 156 }
fy14lkaa 3:985fab783b92 157
fy14lkaa 0:e2af4c8e462e 158 // simple splash screen displayed on start-up
fy14lkaa 0:e2af4c8e462e 159 void welcome() {
fy14lkaa 0:e2af4c8e462e 160
fy14lkaa 3:985fab783b92 161 lcd.printString("Space Invador!",0,1);
fy14lkaa 0:e2af4c8e462e 162 lcd.printString(" Press Start ",0,4);
fy14lkaa 3:985fab783b92 163
fy14lkaa 0:e2af4c8e462e 164 lcd.refresh();
fy14lkaa 0:e2af4c8e462e 165
fy14lkaa 0:e2af4c8e462e 166 // wait flashing LEDs until start button is pressed
fy14lkaa 0:e2af4c8e462e 167 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
fy14lkaa 0:e2af4c8e462e 168 pad.leds_on();
fy14lkaa 3:985fab783b92 169 wait(0.1); //wait 0.1 seconds
fy14lkaa 0:e2af4c8e462e 170 pad.leds_off();
fy14lkaa 0:e2af4c8e462e 171 wait(0.1);
fy14lkaa 0:e2af4c8e462e 172 }
fy14lkaa 0:e2af4c8e462e 173
fy14lkaa 3:985fab783b92 174 }