Mortal Kombat Game ELEC2645
Dependencies: mbed N5110 ShiftReg Joystick
main.cpp@7:737fb0c3dbef, 2021-04-22 (annotated)
- Committer:
- ozy
- Date:
- Thu Apr 22 01:24:12 2021 +0000
- Revision:
- 7:737fb0c3dbef
- Parent:
- 6:a1a7dc264fed
- Child:
- 9:8c840b08a633
Code with Refresh problem
Who changed what in which revision?
User | Revision | Line number | New 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 | 7:737fb0c3dbef | 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 | 7:737fb0c3dbef | 40 | game.start(lcd, buttonA, buttonB, buttonC, buttonD, joy_v, joy_h); |
ozy | 6:a1a7dc264fed | 41 | |
ozy | 0:99b49fd71085 | 42 | } |
ozy | 0:99b49fd71085 | 43 | } |
ozy | 0:99b49fd71085 | 44 | |
ozy | 0:99b49fd71085 | 45 | void init() { // initialize all devices |
ozy | 0:99b49fd71085 | 46 | lcd.init(); |
ozy | 0:99b49fd71085 | 47 | lcd.setContrast(0.5); |
ozy | 7:737fb0c3dbef | 48 | game.init(); |
ozy | 0:99b49fd71085 | 49 | } |
ozy | 0:99b49fd71085 | 50 | |
ozy | 3:1d99b6ad4f9e | 51 | void menu_screen() { |
ozy | 3:1d99b6ad4f9e | 52 | menu.main_menu(lcd); // printing the menu screen |
ozy | 0:99b49fd71085 | 53 | wait(3.5f); |
ozy | 0:99b49fd71085 | 54 | menu.created_by(lcd); // 2nd menu screen |
ozy | 0:99b49fd71085 | 55 | wait(3.5f); |
ozy | 1:3bdadf6f6dbd | 56 | menu.homescreen(lcd); // print homescreen |
ozy | 1:3bdadf6f6dbd | 57 | menu.menu_selection(lcd, buttonA, buttonB, buttonC, buttonD); // function to ask user to select menu item |
ozy | 0:99b49fd71085 | 58 | } |
ozy | 0:99b49fd71085 | 59 | |
ozy | 0:99b49fd71085 | 60 | |
ozy | 0:99b49fd71085 | 61 | void draw_background() { |
ozy | 0:99b49fd71085 | 62 | // lcd.drawLine(x1, y1, x2, y2, type); |
ozy | 0:99b49fd71085 | 63 | lcd.drawLine(0,46,82,46,1); // draws ground platform |
ozy | 0:99b49fd71085 | 64 | lcd.drawLine(0,46,0,25,1); // draws first side wall |
ozy | 0:99b49fd71085 | 65 | lcd.drawLine(82,46,82,25,1); // draws second side wall |
ozy | 0:99b49fd71085 | 66 | lcd.refresh(); |
ozy | 0:99b49fd71085 | 67 | } |
ozy | 0:99b49fd71085 | 68 | |
ozy | 0:99b49fd71085 | 69 | |
ozy | 3:1d99b6ad4f9e | 70 | |
ozy | 3:1d99b6ad4f9e | 71 | /* |
ozy | 6:a1a7dc264fed | 72 | // IGNORE THIS FUNCTION FOR NOW (look at fighter class function 'draw') |
ozy | 1:3bdadf6f6dbd | 73 | void move_enemy() { |
ozy | 3:1d99b6ad4f9e | 74 | // read each of the pins |
ozy | 1:3bdadf6f6dbd | 75 | float x = joy_h.read(); |
ozy | 1:3bdadf6f6dbd | 76 | float y = joy_v.read(); |
ozy | 1:3bdadf6f6dbd | 77 | printf("x = %.2f | y = %.2f \n",x,y); |
ozy | 5:889ad974b64d | 78 | // get x position of enemy |
ozy | 5:889ad974b64d | 79 | int x_pos = enemy.get_x(); |
ozy | 5:889ad974b64d | 80 | printf("enemy x pos = %i \n", x_pos); |
ozy | 3:1d99b6ad4f9e | 81 | |
ozy | 4:6b1de03716d6 | 82 | 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 | 83 | enemy.draw(lcd); // draw enemy |
ozy | 1:3bdadf6f6dbd | 84 | lcd.refresh(); |
ozy | 5:889ad974b64d | 85 | wait(0.3); |
ozy | 3:1d99b6ad4f9e | 86 | // Preform kick move if user presses button A |
ozy | 5:889ad974b64d | 87 | if (buttonA.read() == 1) { |
ozy | 5:889ad974b64d | 88 | enemy.kick_right(lcd); // draw kick on same coordinates as the standing sprite |
ozy | 1:3bdadf6f6dbd | 89 | lcd.refresh(); |
ozy | 5:889ad974b64d | 90 | wait(0.3); |
ozy | 1:3bdadf6f6dbd | 91 | } |
ozy | 1:3bdadf6f6dbd | 92 | // Preform punch move if user presses button B |
ozy | 5:889ad974b64d | 93 | if (buttonB.read() == 1) { |
ozy | 5:889ad974b64d | 94 | enemy.sword_right(lcd); // draw sword move on same coordinates as the standing sprite |
ozy | 1:3bdadf6f6dbd | 95 | lcd.refresh(); |
ozy | 5:889ad974b64d | 96 | wait(0.3); |
ozy | 1:3bdadf6f6dbd | 97 | } |
ozy | 1:3bdadf6f6dbd | 98 | } |
ozy | 1:3bdadf6f6dbd | 99 | else if(x < 0.48) { // joystick moved to the right |
ozy | 5:889ad974b64d | 100 | enemy.add_x(5); // increment by 5 |
ozy | 1:3bdadf6f6dbd | 101 | // print the move_right animation, refresh, then print the 2nd move_right animation (toggling animations to create moving legs!) |
ozy | 5:889ad974b64d | 102 | enemy.move_right(lcd); // draw standing fighter, multiply by speed -69 (negative to correct for direction!) |
ozy | 1:3bdadf6f6dbd | 103 | lcd.refresh(); |
ozy | 1:3bdadf6f6dbd | 104 | wait(0.1); |
ozy | 5:889ad974b64d | 105 | enemy.move_right2(lcd); |
ozy | 1:3bdadf6f6dbd | 106 | lcd.refresh(); |
ozy | 1:3bdadf6f6dbd | 107 | wait(0.08); |
ozy | 5:889ad974b64d | 108 | |
ozy | 5:889ad974b64d | 109 | if (x_pos >= 65) { // code to stop enemy moving out of lcd screen |
ozy | 5:889ad974b64d | 110 | enemy.add_x(-5); |
ozy | 5:889ad974b64d | 111 | } |
ozy | 5:889ad974b64d | 112 | |
ozy | 3:1d99b6ad4f9e | 113 | // kick if user presses button A |
ozy | 5:889ad974b64d | 114 | if (buttonA.read() == 1) { |
ozy | 5:889ad974b64d | 115 | enemy.kick_right(lcd); |
ozy | 5:889ad974b64d | 116 | lcd.refresh(); |
ozy | 5:889ad974b64d | 117 | wait(0.3); |
ozy | 5:889ad974b64d | 118 | } |
ozy | 1:3bdadf6f6dbd | 119 | // Preform punch move if user presses button B |
ozy | 5:889ad974b64d | 120 | if (buttonB.read() == 1) { |
ozy | 5:889ad974b64d | 121 | enemy.sword_right(lcd); // draw kick on same coordinates as the sprite |
ozy | 1:3bdadf6f6dbd | 122 | lcd.refresh(); |
ozy | 5:889ad974b64d | 123 | wait(0.3); |
ozy | 1:3bdadf6f6dbd | 124 | } |
ozy | 1:3bdadf6f6dbd | 125 | } |
ozy | 1:3bdadf6f6dbd | 126 | else if(x > 0.52) { // joystick moved to the left |
ozy | 5:889ad974b64d | 127 | enemy.add_x(-5); // decrement by 5 |
ozy | 5:889ad974b64d | 128 | enemy.move_left(lcd); |
ozy | 1:3bdadf6f6dbd | 129 | lcd.refresh(); |
ozy | 1:3bdadf6f6dbd | 130 | wait(0.1); |
ozy | 5:889ad974b64d | 131 | enemy.move_left2(lcd); |
ozy | 1:3bdadf6f6dbd | 132 | lcd.refresh(); |
ozy | 1:3bdadf6f6dbd | 133 | wait(0.08); |
ozy | 5:889ad974b64d | 134 | |
ozy | 5:889ad974b64d | 135 | |
ozy | 5:889ad974b64d | 136 | if (x_pos <= 6) { // code to stop enemy moving out of lcd screen |
ozy | 5:889ad974b64d | 137 | enemy.add_x(5); |
ozy | 5:889ad974b64d | 138 | } |
ozy | 3:1d99b6ad4f9e | 139 | |
ozy | 3:1d99b6ad4f9e | 140 | // kick if user presses button A |
ozy | 5:889ad974b64d | 141 | if (buttonA.read() == 1) { |
ozy | 5:889ad974b64d | 142 | enemy.kick_left(lcd); |
ozy | 1:3bdadf6f6dbd | 143 | lcd.refresh(); |
ozy | 5:889ad974b64d | 144 | wait(0.3); |
ozy | 1:3bdadf6f6dbd | 145 | } |
ozy | 5:889ad974b64d | 146 | if (buttonB.read() == 1) { |
ozy | 5:889ad974b64d | 147 | enemy.sword_left(lcd); // draw kick on same coordinates as the sprite |
ozy | 1:3bdadf6f6dbd | 148 | lcd.refresh(); |
ozy | 5:889ad974b64d | 149 | wait(0.3); |
ozy | 1:3bdadf6f6dbd | 150 | } |
ozy | 5:889ad974b64d | 151 | } |
ozy | 0:99b49fd71085 | 152 | } |
ozy | 6:a1a7dc264fed | 153 | */ |
ozy | 0:99b49fd71085 | 154 | |
ozy | 2:1703eb2a68f8 | 155 |