Mortal Kombat Game ELEC2645

Dependencies:   mbed N5110 ShiftReg Joystick

main.cpp

Committer:
ozy
Date:
2021-04-25
Revision:
12:b4477a312158
Parent:
10:e83899f11e8a
Child:
14:7f23841685ad

File content as of revision 12:b4477a312158:

///////////// includes /////////////////////
#include "mbed.h"
#include "N5110.h"
#include "Fighter.h"
#include "Joystick.h"
#include "Menu.h"
#include "Enemy.h"
#include "GameEngine.h"
///////////// defines /////////////////////
#define GROUND         34
///////////// objects /////////////////////
GameEngine game;
Fighter fighter;
Menu menu;
Enemy enemy;
DigitalIn buttonA(p29);
DigitalIn buttonB(p28);
DigitalIn buttonC(p27);
DigitalIn buttonD(p26);
AnalogIn  joy_v(p20);
AnalogIn  joy_h(p19);
N5110 lcd(p14,p8,p9,p10,p11,p13,p21);
BusOut leds(LED4,LED3,LED2,LED1);
Serial pc(USBTX, USBRX);
//////////// functions ////////////////////
void init();
void menu_screen();
void move_sprite();
void draw_background();
void move_enemy();


int main() {
    init();
    // menu_screen();
    while(1) {
        lcd.clear();
        draw_background();
        // fighter.move_fighter(lcd, buttonA, buttonB, buttonC, buttonD, joy_v, joy_h);
        game.start(lcd, buttonA, buttonB, buttonC, buttonD, joy_v, joy_h);
        lcd.refresh();
        wait(0.22);
    }
}

void init() { // initialize all devices
    lcd.init();
    lcd.setContrast(0.5);
    game.init();
    // fighter.init();
}

void menu_screen() {
    menu.main_menu(lcd); // printing the menu screen
    wait(3.5f);
    menu.created_by(lcd); // 2nd menu screen
    wait(3.5f);
    menu.homescreen(lcd); // print homescreen
    menu.menu_selection(lcd, buttonA, buttonB, buttonC, buttonD); // function to ask user to select menu item
}


void draw_background() {
        // lcd.drawLine(x1, y1, x2, y2, type);
        lcd.drawLine(0,46,82,46,1);   // draws ground platform
        lcd.drawLine(0,46,0,25,1);   // draws first side wall
        lcd.drawLine(82,46,82,25,1);   // draws second side wall
        lcd.refresh();
    }



/*
// IGNORE THIS FUNCTION FOR NOW (look at fighter class function 'draw')
void move_enemy() {
    // read each of the pins
    float x = joy_h.read();
    float y = joy_v.read();
    printf("x = %.2f | y = %.2f \n",x,y);
    // get x position of enemy
    int x_pos = enemy.get_x();
    printf("enemy x pos = %i \n", x_pos);

    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
          enemy.draw(lcd); // draw enemy
          lcd.refresh();
          wait(0.3);
       // Preform kick move if user presses button A
        if (buttonA.read() == 1) {
            enemy.kick_right(lcd);  // draw kick on same coordinates as the standing sprite
            lcd.refresh();
            wait(0.3);
        }
        // Preform punch move if user presses button B
        if (buttonB.read() == 1) {
            enemy.sword_right(lcd);  // draw sword move on same coordinates as the standing sprite
            lcd.refresh();
            wait(0.3);
        }
    }
    else if(x < 0.48) { //  joystick moved to the right
        enemy.add_x(5);           // increment by 5
        // print  the  move_right animation, refresh, then print the 2nd move_right animation (toggling animations to create moving legs!)
        enemy.move_right(lcd); // draw standing fighter, multiply by speed -69 (negative to correct for direction!)
        lcd.refresh();
        wait(0.1);
        enemy.move_right2(lcd);
        lcd.refresh();
        wait(0.08);
        
        if (x_pos >= 65) {   // code to stop enemy moving out of lcd screen
            enemy.add_x(-5);
        }
        
        // kick if user presses button A
        if (buttonA.read() == 1) {
            enemy.kick_right(lcd);
            lcd.refresh();
            wait(0.3);
        }
        // Preform punch move if user presses button B
        if (buttonB.read() == 1) {
            enemy.sword_right(lcd);  // draw kick on same coordinates as the sprite
            lcd.refresh();
            wait(0.3);
        }
    }
    else if(x > 0.52) { // joystick moved to the left
        enemy.add_x(-5);           // decrement by 5
        enemy.move_left(lcd);
        lcd.refresh();
        wait(0.1);
        enemy.move_left2(lcd);
        lcd.refresh();
        wait(0.08);
    
    
    if (x_pos <= 6) {   // code to stop enemy moving out of lcd screen
            enemy.add_x(5);
        }

    // kick if user presses button A
        if (buttonA.read() == 1) {
            enemy.kick_left(lcd);
            lcd.refresh();
            wait(0.3);
        }
        if (buttonB.read() == 1) {
            enemy.sword_left(lcd);  // draw kick on same coordinates as the sprite
            lcd.refresh();
            wait(0.3);
        }
    }
}
*/