A complex 2D-dungeon game on LPC1768 in SWJTU-Leeds Joint School XJEL2645 project. Referenced from the framework contributed by https://os.mbed.com/users/Siriagus/code/SimplePlatformGame/

Dependencies:   mbed N5110 ShiftReg PinDetect

main.cpp

Committer:
Siriagus
Date:
2015-05-01
Revision:
4:d6661b976359
Parent:
3:4e3f342a135c
Child:
5:100d960fc6d5

File content as of revision 4:d6661b976359:

/**
@brief Simple platform game developed for ELEC2645 Embedded Systems Project at University of Leeds

@author Andreas Garmannslund
**/

#include "mbed.h"
#include "N5110.h"
#include "PowerControl.h"
#include "PinDetect.h"
#include <string>
#include <ctime>

#include "Joystick.h"

#include "State.h"
#include "images.h"
#include "InputManager.h"



// Redefine pin names for simple access.
#define JOY_H p17
#define JOY_V p16
#define JOY_BTN p15

#define LED_POT p20

#define BUTTON_A p28
#define BUTTON_B p27
#define BUTTON_C p29

// Input and Output
N5110 *lcd; // VCC, SCE, RST, D/C, MOSI, SCLK and LED

InputManager *input;

// Replaced by InputManager
/*Joystick *joystick;
PinDetect *btnA;
PinDetect *btnB;
PinDetect *btnC;*/

// Brightness potentiometer
AnalogIn ledPot(LED_POT);

// Debugging
Serial pc(USBTX, USBRX);
BusOut leds(LED1, LED2, LED3, LED4);

// @brief Clears the screen and fill it with the image in the argument.
void clearAndDrawImage(const int img[BANKS][WIDTH])
{
    for (int i = 0; i < BANKS; ++i)
    {
        for (int j = 0; j < WIDTH; ++j)
        {
            lcd->buffer[j][i] = img[i][j];
        }
    }
    lcd->refresh();
}

// States




void init();
void cleanUp();

int main()
{
    init();
    
    time_t dt = time(NULL);
    
    while(true)
    {   
        lcd->clear();
    
        input->joystick->update();
        lcd->setBrightness(1.0 - ledPot); // Update brightness of screen
        
        // update
        
        // render
        
        
        lcd->refresh();
        Sleep();
    }
    
    cleanUp();
    
    return 0;
}

void ledToggle()
{
    leds[0] = !leds[0];
}

int ctr = 0;
void ledToggle4() {leds[3] = !leds[3];}
void ledToggle2()
{
    leds[1] = !leds[1];
    
    if (++ctr > 4)
        input->addBtnPressInterrupt(input->btnB, ledToggle4);
        
}


void ledToggle3() {leds[2] = !leds[2];}

void init()
{
    // Init LCD
    lcd = new N5110(p7, p8, p9, p10, p11, p13, p26);
    lcd->init();
    lcd->normalMode();
    lcd->setBrightness(1.0 - ledPot); // Update brightness of screen
    
    // Input
    input = new InputManager(BUTTON_A, BUTTON_B, BUTTON_C, JOY_V, JOY_H, JOY_BTN);
    input->addBtnPressInterrupt(input->btnA, ledToggle);
    input->addBtnPressInterrupt(input->btnB, ledToggle2);
    input->addBtnPressInterrupt(input->btnC, ledToggle3);
    
    
    
}

void cleanUp()
{
    delete lcd;
    delete input;
}