Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed FXOS8700CQ mbed-rtos
Diff: Game_two/Game_two.cpp
- 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