Sixiang Miao
/
Miao_Sixiang
Miao Sixiang 201089108
main.cpp
- Committer:
- Rubio
- Date:
- 2019-05-05
- Revision:
- 0:7f86012fb8b5
File content as of revision 0:7f86012fb8b5:
/* ELEC2645 Embedded Systems Project School of Electronic & Electrical Engineering University of Leeds Name: Miao Sixiang Username: el16sm Student ID Number: 201089108 Date: */ #include "mbed.h" #include "Gamepad.h" #include "N5110.h" #include "enemies.h" #include "math.h" #include "ship.h" #include "Bitmap.h" #ifdef WITH_TESTING #include "tests.h" #endif DigitalOut r_led(LED_RED); DigitalOut g_led(LED_GREEN); DigitalOut b_led(LED_BLUE); DigitalOut led1(PTA1); DigitalOut led2(PTA2); N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); Gamepad pad; enemies eni; ship shi; void init(); void welcome(); bool explosionjudge(float x1,float y1,float x2,float y2); void explosion(int x, int y); void game_over(); float xp1,xp2,yp1,yp2,xn1,yn1,xn2,yn2,x,y,x1,y1,x2,y2,v; int p1,p2,score,high_score,count; Vector2D enic1 = {xn1, yn1}; Vector2D enic2 = {xn2, yn2}; const int explosion123[10][10] = { { 0,0,0,0,1,0,0,0,0,0 }, { 0,1,0,1,0,1,0,0,1,0 }, { 0,1,0,1,0,1,1,1,1,0 }, { 0,0,1,0,0,0,0,1,0,0 }, { 0,1,0,0,0,0,0,0,1,0 }, { 0,1,0,0,0,0,0,0,1,0 }, { 0,0,1,0,0,0,0,1,0,0 }, { 0,1,0,1,0,0,1,1,0,0 }, { 1,0,0,0,1,1,0,0,1,0 }, { 0,0,0,0,0,0,0,0,0,0 }, }; int main() { //initial all the components init();//the lcd is initialed lcd.init(); lcd.normalMode(); lcd.setContrast(0.5); count = 0; score = 0; x = 5.0; y = 21.0; x1 = 0.0; y1 = 0.0; x2 = 0.0; y2 = 0.0; v = 4.0; p1 = p2 = 0; xp1 = xp2 = xn1 =xn2 =0.0; yp1 = yp2 = yn1 = yn2 =0.0; enic1.x = enic2.x = 0.0; high_score = 0; shi.set_ship(y,x,lcd); welcome(); while (1) { lcd.clear(); Vector2D coord = pad.get_mapped_coord(); x = x + coord.x; y = y - coord.y; shi.set_ship(y,x,lcd); if (pad.check_event(Gamepad::A_PRESSED)){ if (x1 == 0){ x1 = x; y1 = y; x1 = shi.open_fire(x1,y1,v,lcd); if (!x2 ==0){ x2 = shi.open_fire(x2,y2,v,lcd); } } else if (x1 > 0 and x2 == 0){ x2 = x; y2 = y; x2 = shi.open_fire(x2,y2,v,lcd); x1 = shi.open_fire(x1,y1,v,lcd); } else if (x1 > 0 and x2 > 0){ x2 = shi.open_fire(x2,y2,v,lcd); x1 = shi.open_fire(x1,y1,v,lcd); } } else if (x1 > 0 or x2 > 0) { if (x1 > 0){ x1 = shi.open_fire(x1,y1,v,lcd); } if (x2 > 0){ x2 = shi.open_fire(x2,y2,v,lcd); } } if (x1 >= 84){ x1 = 0; } if (x2 >= 84) { x2 = 0; } eninumber enin = eni.enemiesjudge(enic1.x, enic2.x); p1 = enin.p1; p2 = enin.p2; if (p1 == 1){ enic1 = eni.set_coord1(p1); } if (p2 == 1){ enic2 = eni.set_coord1(p2); } eni.drawenemies_small(enic1.x, enic1.y,lcd); eni.drawenemies_large(enic2.x, enic2.y,lcd); if (explosionjudge(enic1.x,enic1.y,x1,y1)) { explosion(x1, y1); x1 = 0; count = count + 1; enic1.x = 0; } if (explosionjudge(enic2.x,enic2.y,x1,y1)) { explosion(x1, y1); x1= 0; count = count + 1; enic2.x = 0; } if (explosionjudge(enic1.x,enic1.y,x2,y2)) { explosion(x1, y1); x2 = 0; count = count + 1; enic1.x = 0; } if (explosionjudge(enic2.x,enic2.y,x2,y2)) { explosion(x2, y2); count = count + 1; x2 = 0; enic2.x = 0; } score = count *50; if (xp1 <= 4) { xp1 = enic1.x; yp1 = enic1.y; }else if (xp1 > 0) { xp1 = eni.open_fire_en(xp1, yp1,lcd); } if (xp2 <= 4){ xp2 = enic2.x; yp2 = enic2.y; }else if (xp2 > 0) { xp2 = eni.open_fire_en(xp2, yp2,lcd); } if (score > high_score){ high_score = score; } if (explosionjudge(x,y,xp1,yp1)) { explosion(xp1, yp1); xp1 = 0; game_over(); } if (explosionjudge(x,y,xp2,yp2)) { explosion(xp2, yp2); xp2 = 0; game_over(); } wait(0.1); lcd.refresh(); } } void init() { // need to initialise LCD and Gamepad pad.init(); count = 0; score = 0; x = 5.0; y = 21.0; x1 = 0.0; y1 = 0.0; x2 = 0.0; y2 = 0.0; v = 4.0; p1 = p2 = 0; xp1 = xp2 = xn1 =xn2 =0.0; yp1 = yp2 = yn1 = yn2 =0.0; enic1.x = enic2.x = 0.0; // initialise the game with correct ball and paddle sizes } void welcome() { lcd.printString(" HALO WAR ",0,1); lcd.printString(" Press Start ",0,4); lcd.refresh(); // wait flashing LEDs until start button is pressed while ( pad.check_event(Gamepad::START_PRESSED) == false) { pad.leds_on(); wait(0.1); pad.leds_off(); wait(0.1); } } bool explosionjudge(float x1,float y1,float x2,float y2){ float d; d = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2); if (d <= 9){ return true; }else { return false; } } void explosion(int x, int y){ lcd.drawSprite(x, y, 10, 10, (int *)explosion123); } void game_over(){ while(!pad.check_event(Gamepad::START_PRESSED)){ char buffer1[20]; sprintf(buffer1, "High Score=%d", high_score); lcd.printString(buffer1,0,0); char buffer[14]; sprintf(buffer, " Score = %d ", score); lcd.printString(buffer,0,1); lcd.printString(" Wasted ",0,2); lcd.printString("Press start to",0,3); lcd.printString(" new compaign",0,4); lcd.refresh(); lcd.clear(); } init(); }