Mortal Kombat Game ELEC2645

Dependencies:   mbed N5110 ShiftReg Joystick

Committer:
ozy
Date:
Wed Apr 21 22:56:55 2021 +0000
Revision:
6:a1a7dc264fed
Parent:
5:889ad974b64d
Child:
7:737fb0c3dbef
Code before FighterClass change to GameEngine

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ozy 0:99b49fd71085 1 ///////////// includes /////////////////////
ozy 0:99b49fd71085 2 #include "mbed.h"
ozy 0:99b49fd71085 3 #include "N5110.h"
ozy 0:99b49fd71085 4 #include "Fighter.h"
ozy 0:99b49fd71085 5 #include "Joystick.h"
ozy 0:99b49fd71085 6 #include "Menu.h"
ozy 6:a1a7dc264fed 7 // #include "Enemy.h"
ozy 6:a1a7dc264fed 8 #include "GameEngine.h"
ozy 0:99b49fd71085 9 ///////////// defines /////////////////////
ozy 0:99b49fd71085 10 #define GROUND 34
ozy 0:99b49fd71085 11 ///////////// objects ///////////////////
ozy 6:a1a7dc264fed 12 GameEngine game;
ozy 3:1d99b6ad4f9e 13 Fighter fighter;
ozy 0:99b49fd71085 14 Menu menu;
ozy 6:a1a7dc264fed 15 // Enemy enemy;
ozy 3:1d99b6ad4f9e 16 DigitalIn buttonA(p29);
ozy 3:1d99b6ad4f9e 17 DigitalIn buttonB(p28);
ozy 3:1d99b6ad4f9e 18 DigitalIn buttonC(p27);
ozy 3:1d99b6ad4f9e 19 DigitalIn buttonD(p26);
ozy 0:99b49fd71085 20 AnalogIn joy_v(p20);
ozy 0:99b49fd71085 21 AnalogIn joy_h(p19);
ozy 0:99b49fd71085 22 N5110 lcd(p14,p8,p9,p10,p11,p13,p21);
ozy 0:99b49fd71085 23 BusOut leds(LED4,LED3,LED2,LED1);
ozy 0:99b49fd71085 24 Serial pc(USBTX, USBRX);
ozy 0:99b49fd71085 25 //////////// functions ////////////////////
ozy 0:99b49fd71085 26 void init();
ozy 0:99b49fd71085 27 void menu_screen();
ozy 0:99b49fd71085 28 void move_sprite();
ozy 0:99b49fd71085 29 void draw_background();
ozy 1:3bdadf6f6dbd 30 void move_enemy();
ozy 3:1d99b6ad4f9e 31
ozy 0:99b49fd71085 32
ozy 0:99b49fd71085 33 int main() {
ozy 0:99b49fd71085 34 init();
ozy 3:1d99b6ad4f9e 35 // menu_screen();
ozy 0:99b49fd71085 36 while(1) {
ozy 2:1703eb2a68f8 37 lcd.clear();
ozy 3:1d99b6ad4f9e 38 draw_background();
ozy 6:a1a7dc264fed 39 // fighter.draw(lcd, buttonA, buttonB, buttonC, buttonD, joy_v, joy_h);
ozy 6:a1a7dc264fed 40 // initialize game
ozy 6:a1a7dc264fed 41 game.init(lcd, buttonA, buttonB, buttonC, buttonD, joy_v, joy_h);
ozy 6:a1a7dc264fed 42
ozy 0:99b49fd71085 43 }
ozy 0:99b49fd71085 44 }
ozy 0:99b49fd71085 45
ozy 0:99b49fd71085 46 void init() { // initialize all devices
ozy 0:99b49fd71085 47 lcd.init();
ozy 0:99b49fd71085 48 lcd.setContrast(0.5);
ozy 6:a1a7dc264fed 49 //fighter.set_x(33); // setting initial position of fighter
ozy 6:a1a7dc264fed 50 //fighter.set_y(GROUND); // placing fighter on ground
ozy 6:a1a7dc264fed 51 // enemy.set_x(40); // setting initial position of enemy
ozy 6:a1a7dc264fed 52 // enemy.set_y(GROUND); // placing enemy on ground
ozy 0:99b49fd71085 53 }
ozy 0:99b49fd71085 54
ozy 3:1d99b6ad4f9e 55 void menu_screen() {
ozy 3:1d99b6ad4f9e 56 menu.main_menu(lcd); // printing the menu screen
ozy 0:99b49fd71085 57 wait(3.5f);
ozy 0:99b49fd71085 58 menu.created_by(lcd); // 2nd menu screen
ozy 0:99b49fd71085 59 wait(3.5f);
ozy 1:3bdadf6f6dbd 60 menu.homescreen(lcd); // print homescreen
ozy 1:3bdadf6f6dbd 61 menu.menu_selection(lcd, buttonA, buttonB, buttonC, buttonD); // function to ask user to select menu item
ozy 0:99b49fd71085 62 }
ozy 0:99b49fd71085 63
ozy 0:99b49fd71085 64
ozy 0:99b49fd71085 65 void draw_background() {
ozy 0:99b49fd71085 66 // lcd.drawLine(x1, y1, x2, y2, type);
ozy 0:99b49fd71085 67 lcd.drawLine(0,46,82,46,1); // draws ground platform
ozy 0:99b49fd71085 68 lcd.drawLine(0,46,0,25,1); // draws first side wall
ozy 0:99b49fd71085 69 lcd.drawLine(82,46,82,25,1); // draws second side wall
ozy 0:99b49fd71085 70 lcd.refresh();
ozy 0:99b49fd71085 71 }
ozy 0:99b49fd71085 72
ozy 0:99b49fd71085 73
ozy 3:1d99b6ad4f9e 74
ozy 3:1d99b6ad4f9e 75 /*
ozy 6:a1a7dc264fed 76 // IGNORE THIS FUNCTION FOR NOW (look at fighter class function 'draw')
ozy 1:3bdadf6f6dbd 77 void move_enemy() {
ozy 3:1d99b6ad4f9e 78 // read each of the pins
ozy 1:3bdadf6f6dbd 79 float x = joy_h.read();
ozy 1:3bdadf6f6dbd 80 float y = joy_v.read();
ozy 1:3bdadf6f6dbd 81 printf("x = %.2f | y = %.2f \n",x,y);
ozy 5:889ad974b64d 82 // get x position of enemy
ozy 5:889ad974b64d 83 int x_pos = enemy.get_x();
ozy 5:889ad974b64d 84 printf("enemy x pos = %i \n", x_pos);
ozy 3:1d99b6ad4f9e 85
ozy 4:6b1de03716d6 86 if(x > 0.48 && x < 0.52) { // joystick not moved - we use ± 0.02 to take account of fluctuation in joystick tolerance and noice on ADC
ozy 5:889ad974b64d 87 enemy.draw(lcd); // draw enemy
ozy 1:3bdadf6f6dbd 88 lcd.refresh();
ozy 5:889ad974b64d 89 wait(0.3);
ozy 3:1d99b6ad4f9e 90 // Preform kick move if user presses button A
ozy 5:889ad974b64d 91 if (buttonA.read() == 1) {
ozy 5:889ad974b64d 92 enemy.kick_right(lcd); // draw kick on same coordinates as the standing sprite
ozy 1:3bdadf6f6dbd 93 lcd.refresh();
ozy 5:889ad974b64d 94 wait(0.3);
ozy 1:3bdadf6f6dbd 95 }
ozy 1:3bdadf6f6dbd 96 // Preform punch move if user presses button B
ozy 5:889ad974b64d 97 if (buttonB.read() == 1) {
ozy 5:889ad974b64d 98 enemy.sword_right(lcd); // draw sword move on same coordinates as the standing sprite
ozy 1:3bdadf6f6dbd 99 lcd.refresh();
ozy 5:889ad974b64d 100 wait(0.3);
ozy 1:3bdadf6f6dbd 101 }
ozy 1:3bdadf6f6dbd 102 }
ozy 1:3bdadf6f6dbd 103 else if(x < 0.48) { // joystick moved to the right
ozy 5:889ad974b64d 104 enemy.add_x(5); // increment by 5
ozy 1:3bdadf6f6dbd 105 // print the move_right animation, refresh, then print the 2nd move_right animation (toggling animations to create moving legs!)
ozy 5:889ad974b64d 106 enemy.move_right(lcd); // draw standing fighter, multiply by speed -69 (negative to correct for direction!)
ozy 1:3bdadf6f6dbd 107 lcd.refresh();
ozy 1:3bdadf6f6dbd 108 wait(0.1);
ozy 5:889ad974b64d 109 enemy.move_right2(lcd);
ozy 1:3bdadf6f6dbd 110 lcd.refresh();
ozy 1:3bdadf6f6dbd 111 wait(0.08);
ozy 5:889ad974b64d 112
ozy 5:889ad974b64d 113 if (x_pos >= 65) { // code to stop enemy moving out of lcd screen
ozy 5:889ad974b64d 114 enemy.add_x(-5);
ozy 5:889ad974b64d 115 }
ozy 5:889ad974b64d 116
ozy 3:1d99b6ad4f9e 117 // kick if user presses button A
ozy 5:889ad974b64d 118 if (buttonA.read() == 1) {
ozy 5:889ad974b64d 119 enemy.kick_right(lcd);
ozy 5:889ad974b64d 120 lcd.refresh();
ozy 5:889ad974b64d 121 wait(0.3);
ozy 5:889ad974b64d 122 }
ozy 1:3bdadf6f6dbd 123 // Preform punch move if user presses button B
ozy 5:889ad974b64d 124 if (buttonB.read() == 1) {
ozy 5:889ad974b64d 125 enemy.sword_right(lcd); // draw kick on same coordinates as the sprite
ozy 1:3bdadf6f6dbd 126 lcd.refresh();
ozy 5:889ad974b64d 127 wait(0.3);
ozy 1:3bdadf6f6dbd 128 }
ozy 1:3bdadf6f6dbd 129 }
ozy 1:3bdadf6f6dbd 130 else if(x > 0.52) { // joystick moved to the left
ozy 5:889ad974b64d 131 enemy.add_x(-5); // decrement by 5
ozy 5:889ad974b64d 132 enemy.move_left(lcd);
ozy 1:3bdadf6f6dbd 133 lcd.refresh();
ozy 1:3bdadf6f6dbd 134 wait(0.1);
ozy 5:889ad974b64d 135 enemy.move_left2(lcd);
ozy 1:3bdadf6f6dbd 136 lcd.refresh();
ozy 1:3bdadf6f6dbd 137 wait(0.08);
ozy 5:889ad974b64d 138
ozy 5:889ad974b64d 139
ozy 5:889ad974b64d 140 if (x_pos <= 6) { // code to stop enemy moving out of lcd screen
ozy 5:889ad974b64d 141 enemy.add_x(5);
ozy 5:889ad974b64d 142 }
ozy 3:1d99b6ad4f9e 143
ozy 3:1d99b6ad4f9e 144 // kick if user presses button A
ozy 5:889ad974b64d 145 if (buttonA.read() == 1) {
ozy 5:889ad974b64d 146 enemy.kick_left(lcd);
ozy 1:3bdadf6f6dbd 147 lcd.refresh();
ozy 5:889ad974b64d 148 wait(0.3);
ozy 1:3bdadf6f6dbd 149 }
ozy 5:889ad974b64d 150 if (buttonB.read() == 1) {
ozy 5:889ad974b64d 151 enemy.sword_left(lcd); // draw kick on same coordinates as the sprite
ozy 1:3bdadf6f6dbd 152 lcd.refresh();
ozy 5:889ad974b64d 153 wait(0.3);
ozy 1:3bdadf6f6dbd 154 }
ozy 5:889ad974b64d 155 }
ozy 0:99b49fd71085 156 }
ozy 6:a1a7dc264fed 157 */
ozy 0:99b49fd71085 158
ozy 2:1703eb2a68f8 159