201199550 Li Boyuan PlaneWar Game on K64f

Dependencies:   mbed Gamepad N5110

Files at this revision

API Documentation at this revision

Comitter:
LBY
Date:
Thu May 14 10:14:48 2020 +0000
Commit message:
From:201199550 Li Boyuan; Game name: PlaneWar

Changed in this revision

Gamepad.lib Show annotated file Show diff for this revision Revisions of this file
N5110.lib Show annotated file Show diff for this revision Revisions of this file
engine.cpp Show annotated file Show diff for this revision Revisions of this file
engine.h Show annotated file Show diff for this revision Revisions of this file
life.cpp Show annotated file Show diff for this revision Revisions of this file
life.h 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
plane.cpp Show annotated file Show diff for this revision Revisions of this file
plane.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Gamepad.lib	Thu May 14 10:14:48 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/eencae/code/Gamepad/#c0959710291b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/N5110.lib	Thu May 14 10:14:48 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/eencae/code/N5110/#32f9ffeafb6d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/engine.cpp	Thu May 14 10:14:48 2020 +0000
@@ -0,0 +1,37 @@
+#include "engine.h"
+
+
+void engine::init(){
+}
+
+void engine::fire(int x,int y, bullet &b){
+    b.x = x;
+    b.y = y;
+}
+events engine::evet_check(plane &p, bomb &b, Gamepad &pad, bullet &bu){
+    xy pxy = p.getxy();
+    int width = p.getwidth();
+    int height = p.getheight();
+    if(b.x>-1){
+        if(((pxy.x - b.width < b.x)&&(pxy.x+width>b.x)) &&((pxy.y-b.height<b.y)&&(pxy.y+height>b.y))){
+            return DEAD;
+        }
+    }
+    if(pad.check_event(Gamepad::B_PRESSED) == true){
+        return FIRE;
+    }
+    if(bu.x>-1&&b.x>-1){
+        if(((bu.x - b.width < b.x)&&(bu.x+2>b.x)) &&((bu.y-b.height<b.y)&&(bu.y+2>b.y))){
+            return ELMININATE;
+        }
+    }
+        return NONE;
+    }
+
+
+int engine::randombomb(){
+    int a = 5;
+    int b = 35;
+    int y = (rand() % (b-a+1))+ a;
+    return y;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/engine.h	Thu May 14 10:14:48 2020 +0000
@@ -0,0 +1,36 @@
+#ifndef ENGINE_H
+#define ENGINE_H
+
+#include "plane.h"
+#include "life.h"
+#include "Bitmap.h"
+#include "N5110.h"
+#include "Gamepad.h"
+
+
+struct bomb{
+    int x;
+    int y;
+    int width;
+    int height;
+    int *data;
+};
+struct bullet{
+    int x;
+    int y;
+};
+
+enum events{
+    DEAD,
+    FIRE,
+    ELMININATE,
+    NONE,
+};
+class engine{
+    public:
+    void init();
+    events evet_check(plane &p, bomb &b, Gamepad &pad, bullet &bu);
+    void fire(int x,int y, bullet &b);
+    int randombomb();
+};
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/life.cpp	Thu May 14 10:14:48 2020 +0000
@@ -0,0 +1,35 @@
+#include "life.h"
+
+void life::init(){
+    _x = 0;
+    _y = 0;
+    _num = 4;
+    _width = 8;
+    _height = 7;
+    int d[56] = {
+        0,1,1,0,0,1,1,0,
+        1,1,1,1,1,1,1,1,
+        1,1,0,0,1,1,1,1,
+        1,1,0,1,1,1,1,1,
+        0,1,1,1,1,1,1,0,
+        0,0,1,1,1,1,0,0,
+        0,0,0,1,1,0,0,0
+    };
+    for(int i = 0; i < 56; i++){
+        data[i] = d[i];
+    }
+}
+void life::update(){
+    _num = _num - 1;
+}
+void life::display(N5110 &lcd){
+    for(int i = 0; i < _num; i++){
+        int x = _x + _width*i;
+        unsigned int width = _width;
+        unsigned int height = _height;
+        Bitmap p(data, height, width);
+        p.render(lcd, x, _y);
+    }
+}
+
+int life::liferest(){return _num;}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/life.h	Thu May 14 10:14:48 2020 +0000
@@ -0,0 +1,23 @@
+#ifndef LIFE_H
+#define LIFE_H
+
+
+#include "Bitmap.h"
+#include "N5110.h"
+#include "Gamepad.h"
+class life{
+    public:
+    void init();
+    void update();
+    void display(N5110 &lcd);
+    int liferest();
+    
+    private:
+    int _x;
+    int _y;
+    int _num;
+    int _width;
+    int _height;
+    int data[56];
+};
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu May 14 10:14:48 2020 +0000
@@ -0,0 +1,174 @@
+#include "Bitmap.h"
+#include "N5110.h"
+#include "Gamepad.h"
+
+#include "plane.h"
+#include "life.h"
+#include "engine.h"
+#include "N5110.h"
+#include "Gamepad.h"
+#include<iostream>
+
+using namespace std;
+N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
+Gamepad pad;
+plane p;
+life lf;
+engine eg;
+bool n = true;
+bomb bo[20];
+bullet bu[20];
+int bunum = 0;
+int bonum = 0;
+int score = 0;
+int m = 0;
+
+void init();
+void welcome();
+void screen();
+void update();
+void gameover();
+void drawBitmap(int x, int y, int width, int height, int *data);
+
+int main()
+{
+    while(1){
+        init();
+        welcome();
+        while(n){
+            if(m%8 ==0){
+                bo[bonum%20].y = eg.randombomb();
+                bo[bonum%20].x = 82;
+                bonum = bonum + 1;
+            }
+            lcd.clear();
+            screen();
+            update();
+            lcd.refresh();
+            wait(0.2);
+            m = m + 1;
+        }
+        wait(1);
+    }
+}
+
+void init(){
+    lcd.init();
+    pad.init();
+    p.init();
+    lf.init();
+    eg.init();
+    lcd.setContrast(0.4);
+    n = true;
+    bunum = 0;
+    bonum = 0;
+    score = 0;
+    m = 0;
+    for(int i = 0; i < 20; i++){
+        bu[i].x = -1;
+        bu[i].y = -1;
+        bo[i].x = -1;
+        bo[i].y = -1;
+        bo[i].width = 8;
+        bo[i].height = 8;
+        int data[64]= {
+                0,0,0,1,1,0,0,0,
+                0,1,1,0,0,1,1,0,
+                0,1,1,1,1,1,1,0,
+                1,0,1,1,1,1,0,1,
+                1,0,1,1,1,1,0,1,
+                0,1,1,1,1,1,1,0,
+                0,1,1,0,0,1,1,0,
+                0,0,0,1,1,0,0,0                 
+        };
+        bo[i].data = data;
+    }
+}
+
+void welcome(){
+    lcd.clear();
+    lcd.printString("The plane war!",0,1);  
+    lcd.printString("  Press Start ",0,4);
+    lcd.refresh();
+    while( pad.check_event(Gamepad::START_PRESSED) == false){
+        pad.leds_on();
+        wait(0.1);
+        pad.leds_off();
+        wait(0.1);
+    }
+}
+
+void screen(){
+    lcd.clear();
+    p.display(lcd);
+    lf.display(lcd);
+    for(int i = 0; i <20; i++){
+        if(bo[i].x >=0){
+            drawBitmap(bo[i].x, bo[i].y, bo[i].width, bo[i].height, bo[i].data);}
+        if(bu[i].x >=0){
+            lcd.drawRect(bu[i].x, bu[i].y, 2, 2, FILL_BLACK);}
+    }
+    lcd.refresh();
+}
+
+void update(){
+    p.update(pad);
+    for(int i = 0; i<20; i++){
+        for(int j = 0; j < 20; j++){
+            events e = eg.evet_check(p, bo[i],pad,bu[j]);
+            if(e == DEAD){
+                lf.update();
+                bo[i].x = -1;
+                pad.tone(1000,0.2);
+                if(lf.liferest()==0){
+                    gameover();
+                    i = 20;
+                    j = 20;
+                    pad.tone(1000,0.5);
+                    break;
+                }
+            }else if(e == FIRE){
+                eg.fire(p.getxy().x+7, p.getxy().y+3, bu[bunum%20]);
+                bunum = bunum + 1;
+            }else if(e == ELMININATE){
+                bo[i].x = -1;
+                bu[j].x = -1;
+                score = score + 5;
+                cout <<score<<endl;
+            }
+        }
+    }
+    for(int i = 0; i<20; i++){
+        if((bo[i].x >=0) && (bo[i].x<=84)){
+            bo[i].x = bo[i].x - 1;
+        }
+        if((bu[i].x >=0) && (bu[i].x<=84)){
+            bu[i].x = bu[i].x + 1;
+        }
+    }
+    
+}
+
+void gameover(){
+    cout <<"game over"<< endl;
+    lcd.clear();
+    lcd.printString("GAMEOVER    ",0,1);  
+    lcd.printString("SCORE    ",0,2);  
+    char buffer1[14];
+    sprintf(buffer1,"%2d",score);
+    lcd.printString(buffer1,0,3);
+    lcd.printString("  Press A ",0,4);
+    lcd.refresh();
+    while ( pad.check_event(Gamepad::A_PRESSED) == false) {
+        pad.leds_on();
+        wait(0.1);
+        pad.leds_off();
+        wait(0.1);
+    }
+    n = false;
+}
+
+void drawBitmap(int x, int y, int width, int height, int *data){
+    Bitmap p(data, height, width);
+    p.render(lcd, x, y);
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu May 14 10:14:48 2020 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/e7ca05fa8600
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plane.cpp	Thu May 14 10:14:48 2020 +0000
@@ -0,0 +1,45 @@
+#include "plane.h"
+
+void plane::init(){
+    _width = 7;
+    _height = 8;
+    int d[56] = {
+            0,0,0,0,1,0,0,
+            0,0,0,0,1,1,0,
+            1,0,0,0,1,1,0,
+            1,1,1,1,1,1,1,
+            1,1,1,1,1,1,1,
+            1,0,0,0,1,1,0,
+            0,0,0,0,1,1,0,
+            0,0,0,0,1,0,0
+            };
+    for(int i = 0; i<56;i++){
+        data[i] = d[i];
+    }
+    _xy.x = 0;
+    _xy.y = 25;
+}
+
+void plane::update(Gamepad &pad){
+    if(pad.get_direction() == N){
+        _xy.y = _xy.y - 1;
+    }else if(pad.get_direction() == S){
+        _xy.y = _xy.y + 1;
+    }else if(pad.get_direction() == W){
+        _xy.x = _xy.x - 1;
+    }else if(pad.get_direction() == E){
+        _xy.x = _xy.x + 1;
+    }
+}
+
+void plane::display(N5110 &lcd){
+        unsigned int width = _width;
+        unsigned int height = _height;
+        Bitmap p(data, height, width);
+        p.render(lcd, _xy.x, _xy.y);
+}
+
+xy plane::getxy(){return _xy;}
+
+int plane::getwidth(){return _width;}
+int plane::getheight(){return _height;}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plane.h	Thu May 14 10:14:48 2020 +0000
@@ -0,0 +1,29 @@
+#ifndef PLANE_H
+#define PLANE_H
+
+#include "Bitmap.h"
+#include "N5110.h"
+#include "Gamepad.h"
+
+
+struct xy{
+    int x;
+    int y;
+};
+
+class plane{
+    public:
+    void init();
+    void update(Gamepad &pad);
+    void display(N5110 &lcd);
+    xy getxy();
+    int getwidth();
+    int getheight();
+    
+    private:
+    int _height;
+    int _width;
+    int data[56];
+    xy _xy;
+};
+#endif
\ No newline at end of file