Game codes for Pokemon Academy Yiu Fai Kwok - 201198802 I have read the University Regulations on Plagiarism and state that the work covered by this declaration is my own and does not contain any unacknowledged work from other sources.

Dependencies:   mbed FXOS8700CQ mbed-rtos

Revision:
13:02002658e718
Child:
14:abe64fe0b6a5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Game_two/Game_two.cpp	Wed Apr 17 17:53:56 2019 +0000
@@ -0,0 +1,251 @@
+#include "Game_two.h"
+
+Game_two::Game_two()
+{
+    
+}
+
+Game_two::~Game_two()
+{
+    
+} 
+
+//Enumerate instruction menu from page 1 - 3
+enum Page {
+    PAGE_1, PAGE_2, PAGE_3   
+};
+
+void Game_two::init(int speed, int cha, int r)
+{
+    // Set the speed of the objects
+    _speed = speed;
+    
+    // Set the character being drawn
+    _cha = cha;
+    
+    // Set the random parameter for coin/block ratio
+    _rand = r; 
+    
+    // initialize round counter
+    _count = 0;
+    _alt = 0;
+
+}
+
+/*void Game_two::render(N5110 &lcd, int cha)
+{
+    lcd.clear();
+    draw(lcd, cha);
+    lcd.refresh();    
+}
+
+void Game_two::read_input(Gamepad &pad)
+{
+    _d = pad.get_direction();
+    _mag = pad.get_mag();
+}
+
+void Game_two::draw(N5110 &lcd, int cha)
+{
+    int alt = update_alt();
+    // draw player on lcd
+    if(alt <= 1){_p1.draw(lcd, cha);}
+    else {_p1.draw_alt(lcd, cha);}
+    print_scores(lcd);
+    // spawn coin
+    if(_type < _rand) {_coin.draw(lcd);}
+    else {_block.draw(lcd);}
+}
+
+void Game_two::update(Gamepad &pad, N5110 &lcd)
+{
+    if(_type < _rand) {
+        check_miss_coin(pad);
+        _p1.update(_d,_mag);
+        _coin.update();
+        check_player_collect(pad);
+    }
+    else {
+        check_miss_block(pad);
+        _p1.update(_d,_mag);
+        _block.update();
+        check_player_collide(pad, lcd);
+    }
+}
+
+void Game_two::check_player_collect(Gamepad &pad)
+{
+    // read current coin attributes
+    Vector2D coin_pos = _coin.get_pos();
+    int coin_speed = _coin.get_velocity();
+
+    // check p1 first
+    Vector2D p1_pos = _p1.get_pos();
+
+    // see if coin has hit the player by checking for overlaps
+    if (
+        (coin_pos.y >= p1_pos.y) && //top
+        (coin_pos.y <= p1_pos.y + 21) && //bottom
+        (coin_pos.x >= _p1x) && //left
+        (coin_pos.x <= _p1x + 17)  //right
+    ) 
+    {
+        // write new attributes
+        _p1.add_score();
+        _coin.init(_speed);
+        music.coin(pad);
+        _count++;
+        _type = rand() % 8; // randomise type
+    }
+}
+
+void Game_two::check_player_collide(Gamepad &pad, N5110 &lcd)
+{
+    // read current block attributes
+    Vector2D block_pos = _block.get_pos();
+    int block_speed = _block.get_velocity();
+
+    Vector2D p1_pos = _p1.get_pos();
+
+    // see if block has hit the player by checking for overlaps
+    if (
+        (block_pos.y >= p1_pos.y - 6) && //top
+        (block_pos.y <= p1_pos.y + 14) && //bottom
+        (block_pos.x >= _p1x) && //left
+        (block_pos.x <= _p1x + 17)  //right
+    ) 
+    {
+        // write new attributes
+        _block.init(_speed);
+        gameover(lcd, pad);
+    }
+}
+
+void Game_two::check_miss_coin(Gamepad &pad)
+{
+    Vector2D coin_pos = _coin.get_pos();
+    // player has missed
+    if (coin_pos.x > WIDTH) {
+        _coin.init(_speed);
+        pad.tone(750.0,0.1);
+        _count++;
+        wait(0.1);
+        _type = rand() % 8; // randomise type
+    }
+    
+}
+
+void Game_two::check_miss_block(Gamepad &pad)
+{
+    Vector2D block_pos = _block.get_pos();
+    // player has missed
+    if (block_pos.x > WIDTH) {
+        _block.init(_speed);
+        pad.tone(750.0,0.1);
+        wait(0.1);
+        _type = rand() % 8; // randomise type
+    }
+    
+}
+
+int Game_two::print_scores(N5110 &lcd)
+{
+    // get scores from paddles
+    int p1_score = _p1.get_score();
+    int total = get_count();
+
+    // print to LCD i
+    char buffer1[14];
+    sprintf(buffer1,"%2d / %2d",p1_score, total);
+    lcd.printString(buffer1,WIDTH/2 - 20,1);  // font is 8 wide, so leave 4 pixel gape from middle assuming two digits
+    return p1_score;
+}
+
+void Game_two::set_count(int count)
+{
+    _count = count;
+}
+
+int Game_two::get_count()
+{
+    int count = _count;
+    return count;
+}
+
+void Game_two::set_alt(int alt)
+{
+    _alt = alt;
+}
+
+int Game_two::update_alt()
+{
+    if(_alt < 4){_alt = _alt++;}
+    else {_alt=0;}
+    int alt = _alt;
+    return alt;
+}
+
+void Game_two::gameover(N5110 &lcd, Gamepad &pad)
+{
+    while(pad.check_event(Gamepad::B_PRESSED) == false) {
+        lcd.clear();
+        lcd.printString("You rushed ",0,0);
+        lcd.printString("into a block!",0,1);
+        lcd.printString("You are late",0,2);
+        lcd.printString("for class!",0,3);
+        lcd.printString("Press B",0,5);
+        lcd.refresh();
+        wait(0.1);
+    }
+    _count = 10;
+}
+
+void Game_two::intro(Gamepad &pad, N5110 &lcd)
+{
+    Page currentPage = PAGE_1;
+    int fps = 8.0;
+    int instruct_data[4][7] = {
+        {1,1,1,1,1,1,1},
+        {0,1,1,1,1,1,0},
+        {0,0,1,1,1,0,0},
+        {0,0,0,1,0,0,0},
+    };
+    
+    while(pad.check_event(Gamepad::A_PRESSED) == false){
+        switch (currentPage) {
+            case PAGE_1:
+                lcd.clear();
+                lcd.printString("Squirtle",0,0);
+                lcd.printString("is rushing",0,1);
+                lcd.printString("to his lecture",0,2);
+                lcd.printString("Collect coins",0,4);
+                lcd.drawSprite(39, 44, 4, 7, (int *)instruct_data);
+                lcd.refresh();
+                if(pad.get_direction() == S){currentPage = PAGE_2;}
+                wait(1.0f/fps);
+            break;
+            case PAGE_2:
+                lcd.clear();
+                lcd.printString("so he can have",0,0);
+                lcd.printString("lunch and ",0,1);
+                lcd.printString("reach the",0,2);
+                lcd.printString("classroom in",0,3);
+                lcd.printString("time by ",0,4);
+                lcd.drawSprite(39, 44, 4, 7, (int *)instruct_data);
+                lcd.refresh();
+                if(pad.get_direction() == S){currentPage = PAGE_3;}
+                wait(1.0f/fps);
+            break;
+            case PAGE_3:
+                lcd.clear();
+                lcd.printString("avoiding the",0,0);
+                lcd.printString("blocks",0,1);
+                lcd.printString("Press A",0,5);
+                lcd.refresh();
+                wait(1.0f/fps);
+
+        }
+    }
+}
+
+*/
\ No newline at end of file