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.
main.cpp
- Committer:
- Kern_EL17KJTF
- Date:
- 2019-05-07
- Revision:
- 7:ffbc921c20f7
- Parent:
- 6:478f81e79d9b
- Child:
- 8:421f94b816c4
File content as of revision 7:ffbc921c20f7:
/*
ELEC2645 Embedded Systems Project
School of Electronic & Electrical Engineering
University of Leeds
Name: Kern Fowler
Username: el17kjtf
Student ID Number: 201116686
Date: 19/02/2019
Version: 1.2
*/
#include "main.h"
N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
Gamepad pad;
Options opt;
Donkey dky;
GameEngine eng;
int fps = 24;
int direction;
int menu_option_pos = 0;
int arrow_pos = 0;
// Game State--------------------------------------------------------------
GameEngine::GameEngine()
{
}
GameEngine::~GameEngine()
{
}
void GameEngine::gameengine_run(Gamepad &pad, N5110 &lcd) {
wait_ms(250);
while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
//printf("Game State");
lcd.clear();
lcd.printString("Game",0,0);
dky.donkeykong_movement(pad, lcd);
wait_ms(1.0f/fps);
}
}
// Donkey -----------
int donkeykong_x = 0;
int donkeykong_y = 32;
int donkey_kong_speed = 25;
Donkey::Donkey()
{
}
Donkey::~Donkey()
{
}
void Donkey::donkeykong_movement(Gamepad &pad, N5110 &lcd) {
direction = pad.get_direction();
if (direction == NE || direction == E || direction == SE) {
donkeykong_x = donkeykong_x + 1;
lcd.drawSprite(donkeykong_x,donkeykong_y,16,16,(int *)game_dk_walking_right_1);
wait_ms(donkey_kong_speed);
}
else if (direction == NW || direction == W || direction == SW) {
donkeykong_x = donkeykong_x - 1;
lcd.drawSprite(donkeykong_x,donkeykong_y,16,16,(int *)game_dk_walking_left_1);
wait_ms(donkey_kong_speed);
}
else {
lcd.drawSprite(donkeykong_x,donkeykong_y,16,16,(int *)game_dk_stationary);
}
lcd.refresh();
if (donkeykong_x > 68) {
donkeykong_x = 68;
}
if (donkeykong_x < 0) {
donkeykong_x = 0;
}
}
// Barrel -----------
// Banana -----------
// Controls State----------------------------------------------------------
void controls_run() {
wait_ms(250);
while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
//printf("Control State");
lcd.clear();
lcd.printString("Controls",19,0);
lcd.refresh();
wait_ms(1.0f/fps);
}
}
// Instructions State------------------------------------------------------
void instructions_run() {
wait_ms(250);
while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
//printf("Instructions State");
lcd.clear();
lcd.printString("Instructions",7,0);
lcd.refresh();
wait_ms(1.0f/fps);
}
}
// Options State-----------------------------------------------------------
float opt_brightness = 0.5;
float opt_contrast = 0.396;
int opt_volume = 1;
Options::Options()
{
}
Options::~Options()
{
}
void Options::options_run(Gamepad &pad, N5110 &lcd) {
wait_ms(250);
while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
//printf("Options State");
lcd.clear();
lcd.printString("Options",21,0);
options_brightness(pad, lcd);
options_contrast(pad, lcd);
options_volume(pad, lcd);
lcd.refresh();
wait_ms(1.0f/fps);
}
}
void Options::options_brightness(Gamepad &pad, N5110 &lcd) {
if (pad.check_event(Gamepad::B_PRESSED) == true) {
opt_brightness = 0;
}
if (pad.check_event(Gamepad::A_PRESSED) == true) {
opt_brightness = 0.5;
}
lcd.setBrightness(opt_brightness);
lcd.printString("A/B = BackLite",0,2);
}
void Options::options_contrast(Gamepad &pad, N5110 &lcd) {
opt_contrast = pad.read_pot();
lcd.setContrast(opt_contrast);
lcd.printString("Pot = Contrast",0,3);
printf("Contrast = %f", opt_contrast);
}
void Options::options_volume(Gamepad &pad, N5110 &lcd) {
if (pad.check_event(Gamepad::Y_PRESSED) == true) {
opt_volume = 0;
}
if (pad.check_event(Gamepad::X_PRESSED) == true) {
opt_volume = 1;
pad.tone(2400, 0.2);
wait_ms(200);
pad.tone(2400, 0.2);
wait_ms(200);
pad.tone(2400, 0.2);
}
lcd.printString("X/Y = Volume",0,4);
if (opt_volume == 0) {
lcd.printString("Off",36,5);
} else {
lcd.printString("On",36,5);
}
}
// High Score State--------------------------------------------------------
void high_scores_run() {
while (pad.check_event(Gamepad::BACK_PRESSED) == false) {
//printf("High Score State");
lcd.clear();
lcd.printString("High Scores",12,0);
lcd.refresh();
wait_ms(1.0f/fps);
}
}
// Main Menu --------------------------------------------------------------
int main() {
init(); // initialise peripherals
welcome(); // display welcome message
while(1) { // infinite loop
arrow_location();
print_menu(); // this re-prints the menu at the start of every loop
arrow_select();
wait_ms(1.0f/fps);
}
}
void init() {
// initialise LCD
lcd.init();
// initialise Gamepad
pad.init();
wait(2.5);
}
void arrow_location() {
direction = pad.get_direction();
if (direction == N) {
menu_option_pos = menu_option_pos - 1;
// printf("North Pressed");
wait_ms(250);
}
if (direction == S) {
menu_option_pos = menu_option_pos + 1;
// printf("South Pressed");
wait_ms(250);
}
if (menu_option_pos > 4) {
menu_option_pos = 0;
}
if (menu_option_pos < 0) {
menu_option_pos = 4;
}
arrow_pos = 8 + (menu_option_pos * 8);
// printf("Option Num = %d", menu_option_pos)
}
void arrow_select() {
if (pad.check_event(Gamepad::A_PRESSED) == true) {
if (menu_option_pos == 0) {
// printf("GameEngine");
eng.gameengine_run(pad, lcd);
}
if (menu_option_pos == 1) {
// printf("Controls");
controls_run();
}
if (menu_option_pos == 2) {
// printf("Instructions");
instructions_run();
}
if (menu_option_pos == 3) {
// printf("Options");
opt.options_run(pad, lcd);
}
if (menu_option_pos == 4) {
// printf("High Scores");
high_scores_run();
}
}
}
void print_menu() {
lcd.clear();
lcd.printString("Main Menu",19,0);
lcd.printString("Start Game",8,1);
lcd.printString("Controls",8,2);
lcd.printString("Instructions",8,3);
lcd.printString("Options",8,4);
lcd.printString("High Scores",8,5);
lcd.drawSprite(0,arrow_pos,7,7,(int *)menu_arrow);
lcd.refresh();
}
void welcome() {
lcd.clear();
lcd.drawSprite(24,0,36,34,(int *)menu_dk_face);
lcd.printString(" Donkey Kong",0,5);
lcd.refresh();
wait(1.0); //edit back to longer
lcd.clear();
lcd.printString(" Created",0,0);
lcd.printString(" By",0,1);
lcd.printString(" Kern Fowler",0,3);
lcd.printString(" 201116686",0,4);
lcd.refresh();
wait(1.0);
}