Mbed project for a FRDM-K64F microcontroller. Game made out of five sub-games including flappy birds, snake, stack, trivia and space invaders.
Fork of The_Children_of_Cronos_el15mggr by
main.cpp
- Committer:
- matirc
- Date:
- 2017-05-03
- Revision:
- 2:8b95be711648
- Parent:
- 1:101e060118fa
- Child:
- 3:151ac98b6252
File content as of revision 2:8b95be711648:
#include "mbed.h" #include "N5110.h" #include "Bitmap.h" #include "Gamepad.h" #include "hydralib.h" #include "Stymphalianlib.h" #include "aurigaslib.h" #include "cerinealib.h" #include "taurolib.h" #include "array.h" #include "game.h" #include "SDFileSystem.h" Serial serial(USBTX, USBRX); SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); FILE *fp; int first_pos=0,second_pos=0,third_pos=0; //////////////////////////////////////////////////// int main() { init(); // intro(); introlights.detach(); while(menuselection) { pad.leds_on(); float pott=pad.read_pot(); lcd.setBrightness(pott); menuscreen(); menuselect(); } } ///////////////////////////////////////////////////////////////// void newgame() { while(selection) { pad.leds_on(); float pott=pad.read_pot(); totalscore=scoreg1+scoreg2+scoreg3+scoreg4+scoreg5; game(); select(); if (r) { selection=false; menuselection=true; } } } //////////////////////////////////////////////////////////////////// void menuscreen() { drawselectmenu(); Direction d = pad.get_direction(); if (d==S || a) { wait(0.1); if (d==S || a) { statemenu = games[statemenu].nextstate[1];} } if (d==N || y) { wait(0.1); if(d==N || y) { statemenu = games[statemenu].nextstate[0]; }} outputmenu=games[statemenu].position; } void game() { drawselectscreen(); Direction d = pad.get_direction(); if (d==S || a) { wait(0.1); if (d==S || a) { state = games[state].nextstate[1]; } } if (d==N || y) { wait(0.1); if(d==N || y) { state = games[state].nextstate[0]; wait(0.1); }} output=games[state].position; } void menuselect() { if(l && outputmenu==0) { menuselection=false; selection=true; newgame(); } if(l && outputmenu==1) { menuselection=false; savescore(); } if(l && outputmenu==2) { menuselection=false; highscr=true; highscores(); } if(l && outputmenu==3) { menuselection=false; tut=true; tutorial(); } if(l && outputmenu==4) { menuselection=false; stor=true; story(); } } void select() { if(start && output==0) { selection=false; game1=true; gameone(); } if(start && output==1) { selection=false; game2=true; gametwo(); } if(start && output==2) { selection=false; game3=true; gamethree(); } if(start && output==3) { selection=false; game4=true; gamefour(); } if(start && output==4) { selection=false; game5=true; gamefive(); } } //////////////////////GAMES///////////////////////////////////////////////////// void gamefive() { while(game5) { float pott=pad.read_pot(); lcd.setBrightness(pott); tau.game(lcd,pad,a,start,b,x); if(back) { if (tau.score()>scoreg5) { scoreg5=tau.score(); } game5=false; selection=true; } } } void gamefour() { while(game4) { float pott=pad.read_pot(); lcd.setBrightness(pott); if(back) { game4=false; selection=true; } if(!cer.die()) { cer.commands(b,a,x,y,pad); cer.updatescr(); cer.draw(lcd); cer.velocities(); } else if(cer.die()) { cer.gameover(lcd,start); if (cer.score()>scoreg4) { scoreg4=cer.score(); } } } } void gamethree() { while(game3) { float pott=pad.read_pot(); lcd.setBrightness(pott); if(back) { game3=false; selection=true; } if(aurig.touch()) { srand( time( NULL ) ); aurig.pipegenerator(pad,start); aurig.updatescr(a,b,x,y,pad); aurig.draw(lcd); wait(0.05); } else { aurig.gameover(lcd,pad,l,r); if (aurig.score()>scoreg3) { scoreg3=aurig.score(); } } } } void gametwo() { alienmove.attach(&aliens, 1.0); while(game2) { float pott=pad.read_pot(); lcd.setBrightness(pott); if(back) { game2=false; selection=true; alienmove.detach(); } if (!stym.die()) { stym.leds(pad); stym.commands(pad,l,b,x,r); stym.touch(pad); srand(time(NULL)); stym.auxiliar(); stym.updatescr(); stym.draw(lcd); wait(0.08); } else if(stym.die()) { stym.gameover(lcd,start,pad); if (stym.score()>scoreg2) { scoreg2=stym.score(); } } } } void gameone() { while(game1) { float pott=pad.read_pot(); lcd.setBrightness(pott); if(back) { game1=false; selection=true; } if (hyd.border()) { hyd.leds(pad); hyd.commands(pad,a,b,x,y); hyd.pausegame(l,r,lcd); if (hyd.eat()) { //pad.tone(NOTE_GS6,0.5); srand( time( NULL ) ); hyd.auxiliar(); } hyd.updatescr(); hyd.draw(lcd); hyd.touch(); hyd.velocities(); } else { hyd.gameover(lcd,start,pad); if (hyd.score()>scoreg1) { scoreg1=hyd.score(); } } } } /////////////////////////////////////////////////////////////////////////////// void drawselectscreen() { lcd.clear(); if(output==0) { lcd.drawRect(0,8,84,8,FILL_BLACK); } if(output==1) { lcd.drawRect(0,16,84,8,FILL_BLACK); } if(output==2) { lcd.drawRect(0,24,84,8,FILL_BLACK); } if(output==3) { lcd.drawRect(0,32,84,8,FILL_BLACK); } if(output==4) { lcd.drawRect(0,40,84,8,FILL_BLACK); } lcd.printString("DEMETER",0,1); lcd.printString("ZEUS",0,2); lcd.printString("HERA",0,3); lcd.printString("POSEIDON",0,4); lcd.printString("HADES",0,5); lcd.refresh(); } void drawselectmenu() { lcd.clear(); lcd.printString("MENU",30,0); if(outputmenu==0) { lcd.drawRect(0,16,84,8,FILL_BLACK); lcd.printString("GAME",0,2); lcd.printString("SAVE SCORE",0,3); lcd.printString("HIGH SCORES",0,4); lcd.printString("TUTORIAL",0,5); } if(outputmenu==1) { lcd.drawRect(0,24,84,8,FILL_BLACK); lcd.printString("GAME",0,2); lcd.printString("SAVE SCORE",0,3); lcd.printString("HIGH SCORES",0,4); lcd.printString("TUTORIAL",0,5); } if(outputmenu==2) { lcd.drawRect(0,32,84,8,FILL_BLACK); lcd.printString("GAME",0,2); lcd.printString("SAVE SCORE",0,3); lcd.printString("HIGH SCORES",0,4); lcd.printString("TUTORIAL",0,5); } if(outputmenu==3) { lcd.drawRect(0,40,84,8,FILL_BLACK); lcd.printString("GAME",0,2); lcd.printString("SAVE SCORE",0,3); lcd.printString("HIGH SCORES",0,4); lcd.printString("TUTORIAL",0,5); } if(outputmenu==4) { lcd.drawRect(0,40,84,8,FILL_BLACK); lcd.printString("SAVE SCORE",0,2); lcd.printString("HIGH SCORES",0,3); lcd.printString("TUTORIAL",0,4); lcd.printString("STORY",0,5); } lcd.refresh(); } void intro() { Bitmap sprite(randulfe,15,72); sprite.render(lcd,6,0); sprite.print(); lcd.printString("presents",5,4); lcd.refresh(); wait(1); lcd.printString(".",60,4); lcd.refresh(); wait(1); lcd.printString(".",65,4); lcd.refresh(); wait(1); lcd.printString(".",70,4); lcd.refresh(); wait(1); lcd.clear(); Bitmap sprite1(gamename,15,72); Bitmap sprite2(gamename1,17,72); Bitmap sprite3(gamename2,10,13); sprite1.render(lcd,0,0); sprite3.render(lcd,25,15); sprite2.render(lcd,4,26); sprite1.print(); sprite3.print(); sprite2.print(); lcd.refresh(); wait(8); lcd.clear(); lcd.printString("In menu scr:",0,0); lcd.printString("select:l",0,1); lcd.printString("Back:r",0,2); lcd.printString("In game scr:",0,3); lcd.printString("select:start",0,4); lcd.printString("Back:back",0,5); lcd.refresh(); wait(6); } void story() { while(stor) { lcd.clear(); lcd.printString("NEXT",60,5); if(outputstory==0) { lcd.printString("Hey there! :)",0,0); lcd.printString("Welcome to the",0,1); lcd.printString("Olympus.Hestia",0,2); lcd.printString("God of home,",0,3); lcd.printString("needs your hlp",0,4); } if(outputstory==1) { lcd.printString("for protecting",0,0); lcd.printString("the sacred",0,1); lcd.printString("fire.But first",0,2); lcd.printString("you need to",0,3); lcd.printString("prove to the",0,4); } if(outputstory==2) { lcd.printString("ancient gods",0,0); lcd.printString("(siblings of",0,1); lcd.printString("Hestia) that",0,2); lcd.printString("you're a brave",0,3); lcd.printString("soldier.",0,4); } if(outputstory==3) { lcd.printString("You must pass",0,0); lcd.printString("their challen-",0,1); lcd.printString("-ges!Get ",0,2); lcd.printString("ready for the",0,3); lcd.printString("adventure!!!",0,4); } lcd.refresh(); Direction d = pad.get_direction(); if (d==E || (pad.check_event(pad.B_PRESSED))) { statestory = games[statestory].nextstate[1]; wait(0.1); } if (d==W || (pad.check_event(pad.X_PRESSED))) { statestory = games[statestory].nextstate[0]; wait(0.1); } outputstory=games[statestory].position; if(r) { stor=false; menuselection=true; } } } void highscores() { fp = fopen("/sd/topscore.txt", "r"); fscanf(fp, "%d",&first_pos); fscanf(fp, "%d",&second_pos); fscanf(fp, "%d",&third_pos); fclose(fp); while(highscr){ lcd.clear(); lcd.printString("HIGH SCORES",9,0); sprintf(buffer1,"1st=%2d ",first_pos); lcd.printString(buffer1,0,2); sprintf(buffer2,"2nd=%2d ",second_pos); lcd.printString(buffer2,0,3); sprintf(buffer3,"3rd=%2d ",third_pos); lcd.printString(buffer3,0,4); sprintf(buffer0,"Your score=%2d ",totalscore); lcd.printString(buffer0,0,5); lcd.refresh(); if(r){ highscr=false; menuselection=true;}} } void savescore() { fp = fopen("/sd/topscore.txt", "r"); fscanf(fp, "%d",&first_pos); fscanf(fp, "%d",&second_pos); fscanf(fp, "%d",&third_pos); fclose(fp); fp = fopen("/sd/topscore.txt", "w"); if(totalscore>third_pos && totalscore<second_pos){ third_pos=totalscore; } if(totalscore>second_pos && totalscore<first_pos){ second_pos=totalscore; } if(totalscore>first_pos){ first_pos=totalscore; } fprintf(fp, "%d",first_pos); // ensure data type matches fprintf(fp, "%d",second_pos); // ensure data type matches fprintf(fp, "%d",third_pos); // ensure data type matches fclose(fp); // ensure you close the file after writing lcd.clear(); lcd.printString("SAVED",20,2); lcd.refresh(); wait(2); menuselection=true; } void tutorial() { while(tut) { lcd.clear(); lcd.printChar('1',0,0); lcd.printChar('2',16,0); lcd.printChar('3',32,0); lcd.printChar('4',48,0); lcd.printChar('5',64,0); if(outpututorial==0) { lcd.drawRect(0,0,9,9,FILL_BLACK); lcd.printString("Y,A,X,B:",0,2); lcd.printString("UP,DWN,LFT,RGT",0,3); lcd.printString("L,R PAUSE",0,5); } if(outpututorial==1) { lcd.drawRect(16,0,9,9,FILL_BLACK); lcd.printString("A,B,JOY:",0,2); lcd.printString("MOVE RGT/LFT",0,3); lcd.printString("L,R SHOOT",0,5); } if(outpututorial==2) { lcd.drawRect(32,0,9,9,FILL_BLACK); lcd.printString("A,B,X,Y:",0,2); lcd.printString("JUMP",0,3); } if(outpututorial==3) { lcd.drawRect(48,0,9,9,FILL_BLACK); lcd.printString("A/B/X/Y:",0,2); lcd.printString("LEAVE BLOCK",0,3); } if(outpututorial==4) { lcd.drawRect(64,0,9,9,FILL_BLACK); lcd.printString("JOY:",0,2); lcd.printString("SELECT",0,3); lcd.printString("A:CONTINUE",0,5); } lcd.refresh(); Direction d = pad.get_direction(); if (d==E || (pad.check_event(pad.B_PRESSED))) { statetutorial = games[statetutorial].nextstate[1]; wait(0.1); } if (d==W || (pad.check_event(pad.X_PRESSED))) { statetutorial = games[statetutorial].nextstate[0]; wait(0.1); } outpututorial=games[statetutorial].position; if(r) { tut=false; menuselection=true; } } } void lights() { if(k==1 && lit>6) { k=-1; } if(k==-1 && lit<0) { k=1; } lit+=k; for(int i=1; i<lit; i++) { pad.led(i,1); } } void aliens() { stym.move(); } void init() { introlights.attach(&lights,1); tau.init(); cer.init(); aurig.init(); stym.init(); hyd.init(); pad.init(); lcd.init(); lcd.normalMode(); lcd.setBrightness(0.5); }