The final(?) edition of el14jbed's ELEC2645 project
Dependencies: N5110 SDFileSystem mbed
Jacob Markl 200852678
Main.cpp
- Committer:
- horizontalwolf
- Date:
- 2016-05-05
- Revision:
- 0:cba7494d5dff
File content as of revision 0:cba7494d5dff:
/* ELEC2645 Project Jacob Markl 200852678 Week 19 - Tested display, started writing arrays Week 20 - More arrays, started writing map builders Week 21 - nothing, did PCB Sometime During Easter - reworked some bits, More Sprites, Map builder, Map writer, started on player builder and player movement Week 22 - Reworked player builder and movement. added map interaction Week 23 - added mobs, music, saving highscores, reading music from the sd card, added a tutorial, added settings, fixed up some bits and bobs. Week 24 - rounded off all parts of the code, expanded game slightly. */ #include "mbed.h" #include "N5110.h" #include "Arrays.h" #include "Variables.h" #include "Mobs.h" #include "Tickersandmore.h" #include "SDcard.h" #include <vector> void init_K64F(); void BUI_isr(); void BRI_isr(); void BDI_isr(); void BLI_isr(); void BAI_isr(); void BBI_isr(); void map_builder(int mapnumber); void player_builder(); void screen_builder(); void player_movement(); void Attack(); void stats(); void timer1_isr(); void timer2_isr(); void buttons(); void init_game(); void outidle(); void win(); void lose(); void main_menu(); void game(); void settings(); void addtopscore(); void highscores(); void tutorial(); void timeoutsound(); void startscreen(); void drawlines(); void level2screen(); //###################### CODE ##################### int main() { while(1) { init_K64F(); lcd.init(); startscreen(); main_menu(); } } void init_K64F() { BUI.fall(&BUI_isr); BUI.mode(PullDown); BRI.fall(&BRI_isr); BRI.mode(PullDown); BDI.fall(&BDI_isr); BDI.mode(PullDown); BLI.fall(&BLI_isr); BLI.mode(PullDown); BAI.fall(&BAI_isr); BAI.mode(PullDown); BBI.fall(&BBI_isr); BBI.mode(PullDown); g_BUI_flag = 0; g_BRI_flag = 0; g_BDI_flag = 0; g_BLI_flag = 0; g_BAI_flag = 0; g_BBI_flag = 0; g_timer1_flag = 0; g_timer2_flag = 0; } void BUI_isr() { g_BUI_flag = 1; // set flag in ISR } void BRI_isr() { g_BRI_flag = 1; // set flag in ISR } void BDI_isr() { g_BDI_flag = 1; // set flag in ISR } void BLI_isr() { g_BLI_flag = 1; // set flag in ISR } void BAI_isr() { g_BAI_flag = 1; // set flag in ISR } void BBI_isr() { g_BBI_flag = 1; // set flag in ISR } void map_builder(int mapnumber) { int mapx = 0; int mapy = 0; int spritex = 0; int spritey = 0; switch(mapnumber) { case 1: for(int x = 0; x < 8; x++) { for (int y = 0; y < 8 ; y++) { g_layout[x][y] = g_map_1[x][y]; } } break; case 2: for(int x = 0; x < 8; x++) { for (int y = 0; y < 8 ; y++) { g_layout[x][y] = g_map_2[x][y]; } } break; case 3: for(int x = 0; x < 8; x++) { for (int y = 0; y < 8 ; y++) { g_layout[x][y] = g_map_3[x][y]; } } break; case 4: for(int x = 0; x < 8; x++) { for (int y = 0; y < 8 ; y++) { g_layout[x][y] = g_map_4[x][y]; } } break; case 5: for(int x = 0; x < 8; x++) { for (int y = 0; y < 8 ; y++) { g_layout[x][y] = g_map_5[x][y]; } } break; case 6: for(int x = 0; x < 8; x++) { for (int y = 0; y < 8 ; y++) { g_layout[x][y] = g_map_6[x][y]; } } break; case 7: for(int x = 0; x < 8; x++) { for (int y = 0; y < 8 ; y++) { g_layout[x][y] = g_map_7[x][y]; } } break; case 8: for(int x = 0; x < 8; x++) { for (int y = 0; y < 8 ; y++) { g_layout[x][y] = g_map_8[x][y]; } } break; case 9: for(int x = 0; x < 8; x++) { for (int y = 0; y < 8 ; y++) { g_layout[x][y] = g_map_9[x][y]; } } break; case 10: for(int x = 0; x < 8; x++) { for (int y = 0; y < 8 ; y++) { g_layout[x][y] = g_map_10[x][y]; } } break; case 11: for(int x = 0; x < 8; x++) { for (int y = 0; y < 8 ; y++) { g_layout[x][y] = g_map_11[x][y]; } } break; case 12: for(int x = 0; x < 8; x++) { for (int y = 0; y < 8 ; y++) { g_layout[x][y] = g_map_12[x][y]; } } break; case 13: for(int x = 0; x < 8; x++) { for (int y = 0; y < 8 ; y++) { g_layout[x][y] = g_map_13[x][y]; } } break; default: for(int x = 0; x < 8; x++) { for (int y = 0; y < 8 ; y++) { g_layout[x][y] = g_map_1[x][y]; } } break; } for(int x = 0 ; x < 8; x++) { mapy = 0; for ( int y = 0; y < 8 ; y++) { switch(g_layout[x][y]) { case 0: for(spritex = 0; spritex < 6; spritex++) { for (spritey = 0; spritey < 6 ; spritey++) { g_screen[mapy+spritey][mapx+spritex] = 0; } } break; case 1: for(spritex = 0; spritex < 6; spritex++) { for (spritey = 0; spritey < 6 ; spritey++) { g_screen[mapy+spritey][mapx+spritex] = g_rock[spritex][spritey]; } } break; case 2: for(spritex = 0; spritex < 6; spritex++) { for (spritey = 0; spritey < 6 ; spritey++) { g_screen[mapy+spritey][mapx+spritex] = 2+g_exit[spritex][spritey]; } } break; case 4: for(spritex = 0; spritex < 6; spritex++) { for (spritey = 0; spritey < 6 ; spritey++) { g_screen[mapy+spritey][mapx+spritex] = 4+g_door[spritex][spritey]; } } break; case 5: for(spritex = 0; spritex < 6; spritex++) { for (spritey = 0; spritey < 6 ; spritey++) { g_screen[mapy+spritey][mapx+spritex] = 6+g_door[spritex][spritey]; } } break; case 6: for(spritex = 0; spritex < 6; spritex++) { for (spritey = 0; spritey < 6 ; spritey++) { g_screen[mapy+spritey][mapx+spritex] = 8+g_door[spritex][spritey]; } } break; case 7: for(spritex = 0; spritex < 6; spritex++) { for (spritey = 0; spritey < 6 ; spritey++) { g_screen[mapy+spritey][mapx+spritex] = 10+g_door[spritex][spritey]; } } break; } mapy = mapy + 6; } mapx = mapx + 6; } } void screen_builder() { for( int x = 0; x < 48; x++) { for (int y = 0; y < 48 ; y++) { if (((g_screen[x][y])%2)==0) { lcd.clearPixel(x,y); } else { lcd.setPixel(x,y); } } } } void player_builder() { int mapx = g_playerlocationy*6; int mapy = g_playerlocationx*6; int csprite[6][6]; int player[6][6]; if (g_playersprite == true) { for(int x = 0; x < 6; x++) { for (int y = 0; y < 6 ; y++) { csprite[x][y] = g_playerA[x][y]; } } } else { for(int x = 0; x < 6; x++) { for (int y = 0; y < 6 ; y++) { csprite[x][y] = g_player[x][y]; } } } switch (g_playerfacing) { case 0: for(int x = 0; x < 6; x++) { for (int y = 0; y < 6 ; y++) { player[x][y] = csprite[y][5-x]; } } break; case 1: for(int x = 0; x < 6; x++) { for (int y = 0; y < 6 ; y++) { player[x][y] = csprite[x][y]; } } break; case 2: for(int x = 0; x < 6; x++) { for (int y = 0; y < 6 ; y++) { player[x][y] = csprite[5-y][x]; } } break; case 3: for(int x = 0; x < 6; x++) { for (int y = 0; y < 6 ; y++) { player[x][y] = csprite[5-x][5-y]; } } break; } for(int x = 0; x < 6; x++) { for (int y = 0; y < 6 ; y++) { g_screen[mapy+y][mapx+x] = 12+player[x][y]; } } } void player_movement() { bool stop = false; switch(g_playerdirection) { case 0: g_playerfacing = 0; for(int y = 0; y < 6; y++) { if ((g_playerlocationy-1 == g_mobs[y][2])and(g_playerlocationx== g_mobs[y][1])) { stop=true; } } if (g_layout[g_playerlocationy-1][g_playerlocationx]==4) { if (cfsm[g_state].cleared==1) { g_playerlocationx=3; g_playerlocationy=6; g_state = cfsm[g_state].next_state[0]; mobs(); } } else if (stop==true ) { } else if (g_layout[g_playerlocationy-1][g_playerlocationx]==2) { if (cfsm[g_state].cleared==1) { g_playerlocationx=3; g_playerlocationy=6; g_gamewon = true; } } else if (g_layout[g_playerlocationy-1][g_playerlocationx]!=1) { g_playerlocationy--; } break; case 1: g_playerfacing = 1; for(int y = 0; y < 6; y++) { if ((g_playerlocationy == g_mobs[y][2])and(g_playerlocationx+1== g_mobs[y][1])) { stop=true; } } if (g_layout[g_playerlocationy][g_playerlocationx+1]==5) { if (cfsm[g_state].cleared==1) { g_playerlocationx=1; g_playerlocationy=4; g_state = cfsm[g_state].next_state[1]; mobs(); } } else if (stop==true ) { } else if (g_layout[g_playerlocationy][g_playerlocationx+1]==2) { if (cfsm[g_state].cleared==1) { g_playerlocationx=1; g_playerlocationy=4; g_gamewon = true; } } else if (g_layout[g_playerlocationy][g_playerlocationx+1]!=1) { g_playerlocationx++; } break; case 2: g_playerfacing = 2; for(int y = 0; y < 6; y++) { if ((g_playerlocationy+1 == g_mobs[y][2])and(g_playerlocationx== g_mobs[y][1])) { stop=true; } } if (g_layout[g_playerlocationy+1][g_playerlocationx]==6) { if (cfsm[g_state].cleared==1) { g_playerlocationx=3; g_playerlocationy=1; g_state = cfsm[g_state].next_state[2]; mobs(); } } else if (stop==true ) { } else if (g_layout[g_playerlocationy+1][g_playerlocationx]==2) { if (cfsm[g_state].cleared==1) { g_gamewon = true; g_playerlocationx=3; g_playerlocationy=1; } } else if (g_layout[g_playerlocationy+1][g_playerlocationx]!=1) { g_playerlocationy++; } break; case 3: g_playerfacing = 3; for(int y = 0; y < 6; y++) { if ((g_playerlocationy == g_mobs[y][2])and(g_playerlocationx-1== g_mobs[y][1])) { stop=true; } } if (g_layout[g_playerlocationy][g_playerlocationx-1]==7) { if (cfsm[g_state].cleared==1) { g_playerlocationx=6; g_playerlocationy=4; g_state = cfsm[g_state].next_state[3]; mobs(); } } else if (stop==true ) { } else if (g_layout[g_playerlocationy][g_playerlocationx-1]==2) { if (cfsm[g_state].cleared==1) { g_gamewon = true; g_playerlocationx=6; g_playerlocationy=4; } } else if (g_layout[g_playerlocationy][g_playerlocationx-1]!=1) { g_playerlocationx--; } break; case 4: break; } } void Attack() { g_playersprite= true; switch(g_playerfacing) { case 0: for(int y = 0; y < 5; y++) { if ((g_playerlocationy-1 == g_mobs[y][2])and(g_playerlocationx== g_mobs[y][1])) { if (g_mobs[y][0] == 6 ) { g_playerhp++; } g_mobs[y][0]=0; g_mobs[y][1]=0; g_mobs[y][2]=0; g_mobs[y][3]=0; g_score= g_score+10; } } break; case 1: for(int y = 0; y < 5; y++) { if ((g_playerlocationy == g_mobs[y][2])and(g_playerlocationx+1== g_mobs[y][1])) { if (g_mobs[y][0] == 6 ) { g_playerhp++; } g_mobs[y][0]=0; g_mobs[y][1]=0; g_mobs[y][2]=0; g_mobs[y][3]=0; g_score= g_score+10; } } break; case 2: for(int y = 0; y < 5; y++) { if ((g_playerlocationy+1 == g_mobs[y][2])and(g_playerlocationx== g_mobs[y][1])) { if (g_mobs[y][0] == 6 ) { g_playerhp++; } g_mobs[y][0]=0; g_mobs[y][1]=0; g_mobs[y][2]=0; g_mobs[y][3]=0; g_score= g_score+10; } } break; case 3: for(int y = 0; y < 5; y++) { if ((g_playerlocationy == g_mobs[y][2])and(g_playerlocationx-1== g_mobs[y][1])) { if (g_mobs[y][0] == 6 ) { g_playerhp++; } g_mobs[y][0]=0; g_mobs[y][1]=0; g_mobs[y][2]=0; g_mobs[y][3]=0; g_score= g_score+10; } } break; } int clear = 0; for(int y = 0; y < 5; y++) { if (g_mobs[y][0]!=0) { clear++; } } if (clear == 0) { cfsm[g_state].cleared=1; } } void stats() { int startx = 51; int starty = 8; int nx = 0; int ny = 0; for(int H = 0; H < g_playerhp; H++) { for( int x = startx; x < startx+6; x++) { for (int y = starty; y < starty+6 ; y++) { if (((g_heart[ny][nx])%2)==0) { lcd.clearPixel(x,y); } else { lcd.setPixel(x,y); } ny++; } ny=0; nx++; } nx=0; startx=startx+6; } lcd.printString("Health",48,0); lcd.printString("Time",54,2); char buffer[14]; sprintf(buffer,"%d",g_playtime); int newx=63; if (g_playtime>9) { newx= 60; } if (g_playtime>99) { newx= 57; } lcd.printString(buffer,newx,3); } void timer1_isr() { g_timer1_flag++; } void timer2_isr() { g_timer2_flag++; } void buttons() { if (g_BUI_flag == 1) { g_BUI_flag = 0; g_playerdirection=0; idle.detach(); g_isidle = 0; } else if (g_BRI_flag == 1) { g_BRI_flag = 0; g_playerdirection=1; idle.detach(); g_isidle = 0; } else if (g_BDI_flag == 1) { g_BDI_flag = 0; g_playerdirection=2; idle.detach(); g_isidle = 0; } else if (g_BLI_flag == 1) { g_BLI_flag = 0; g_playerdirection=3; idle.detach(); g_isidle = 0; } else if (g_BAI_flag == 1) { g_BAI_flag = 0; g_playerdirection=4; idle.detach(); g_isidle = 0; Attack(); } else { g_playerdirection=4; } } void init_game() { g_playersprite = false; g_gamewon = false; g_level = 1; g_score = 0; g_playerfacing = 0; g_playerhp=3; g_playtime=0; g_direction = 0; g_playerinvun = 0; g_playerdirection = 4; g_playerlocationy = 4; g_playerlocationx = 2; g_state = 0; g_isidle=0; g_BBI_flag=0; g_BAI_flag=0; for(int x = 0; x < 4; x++) { for (int y = 0; y < 5 ; y++) { g_mobs[y][x] = 0; } } memcpy(cfsm,fsm,sizeof(cfsm)); readsong(); } void win() { int newx=36; lcd.clear(); for (int y = 0; y < g_playerhp ; y++) { g_score=g_score+20; } if (g_playtime>250) { } else { g_score=g_score+(250-g_playtime); } char buffer[14]; sprintf(buffer,"%d",g_score); addtopscore(); writesd(); lcd.printString("You Won!",18,1); lcd.printString("Score",27,2); if (g_score>99) { newx= 30; } lcd.printString(buffer,newx,3); lcd.refresh(); } void lose() { int newx=36; lcd.clear(); char buffer[14]; sprintf(buffer,"%d",g_score); lcd.printString("You Died!",15,1); lcd.printString("Score",27,2); if (g_score>99) { newx= 30; } lcd.printString(buffer,newx,3); lcd.printString("Try Again",15,5); lcd.refresh(); addtopscore(); writesd(); } void main_menu() { ticker1.detach(); lcd.clear(); g_options = 4; g_select = 0; g_BAI_flag = 0; while(1) { lcd.clear(); for(int x = 0; x < 84; x++) { for (int y = 0; y < 15 ; y++) { if (((g_menuscreen[y][x])%2)==0) { lcd.clearPixel(x,y); } else { lcd.setPixel(x,y); } } } lcd.printString("LoZ",33,0); lcd.printString("Play",30,2); lcd.printString("Settings",18,3); lcd.printString("Tutorial",18,4); lcd.printString("Highscores",12,5); if (g_BUI_flag == 1) { g_BUI_flag = 0; if (g_select>0) { g_select--; } } else if (g_BDI_flag == 1) { g_BDI_flag = 0; if (g_select<g_options-1) { g_select++; } } else { } int nx = 0; int ny = 0; for(int x = 3; x < 9; x++) { for (int y = (g_select*8)+17; y < ((g_select*8)+23); y++) { if (((g_sword[ny][nx])%2)==0) { lcd.clearPixel(x,y); } else { lcd.setPixel(x,y); } ny++; } ny=0; nx++; } nx=0; lcd.refresh(); sleep(); if (g_BAI_flag == 1) { g_BAI_flag = 0; wait(0.1); switch(g_select) { case 0: init_game(); game(); break; case 1: settings(); break; case 2: tutorial(); break; case 3: highscores(); break; default: break; } return; } } } void game() { int n=1; ticker1.attach(&timer1_isr,0.5); ticker2.attach(&timer2_isr,g_musicarray[0]); while (1) { lcd.clear(); if (g_playerhp !=0) { if (g_playerinvun > 0) { g_playerinvun--; } g_playersprite= false; buttons(); player_movement(); map_builder(cfsm[g_state].mapno); player_builder(); mobturn(); screen_builder(); stats(); lcd.refresh(); //############################ ATTACK ONLY ########### // if the player has attacked, this section will run and the players attack will be animated. if (g_playersprite==true) { lcd.clear(); player_builder(); screen_builder(); stats(); lcd.refresh(); g_playersprite = false; } //##################################################### if (g_timer1_flag) { g_timer1_flag = 0; g_playtime++; } if (g_timer2_flag) { g_timer2_flag = 0; if (g_music) { tout.attach(&timeoutsound, (g_musicarray[0]/2)); Buzz.period(1.0/1000); Buzz.write(0.0); if (g_musicarray[n]!=0) { Buzz.period(1/(g_musicarray[n])); Buzz.write(0.5); } if (n==(g_musicarray.size()-1)) { n=1; } else { n++; } } } if (g_gamewon) { if (g_level == 1) { level2screen(); g_gamewon = 0; g_level++; memcpy(cfsm,lvl2fsm,sizeof(cfsm)); g_state = 0; } else { win(); ticker1.detach(); ticker2.detach(); tout.detach(); idle.detach(); while(1) { if (g_BAI_flag==1) { g_BAI_flag==0; break; } sleep(); } return; } } if (g_BBI_flag) { g_BBI_flag = 0; lcd.clear(); lcd.printString("Are you sure",6,0); lcd.printString("you want to",9,1); lcd.printString("quit?",27,2); lcd.printString(" No Yes ",0,5); lcd.refresh(); while(1) { if (g_BAI_flag==1) { g_BAI_flag=0; g_playerhp=0; break; } else if (g_BBI_flag==1) { g_BBI_flag=0; break; } sleep(); } } } else { lose(); ticker1.detach(); ticker2.detach(); tout.detach(); idle.detach(); while(1) { if (g_BAI_flag==1) { g_BAI_flag==0; break; } sleep(); } return; } if (g_idle_flag) { g_idle_flag=0; lose(); ticker1.detach(); ticker2.detach(); tout.detach(); idle.detach(); while(1) { if (g_BAI_flag==1) { g_BAI_flag==0; break; } sleep(); } return; } if (g_isidle==0) { g_isidle=1; idle.attach(&outidle,100); } sleep(); } } void settings() { lcd.clear(); g_options = 2; g_select = 0; while(1) { g_BAI_flag = 0; g_BBI_flag = 0; lcd.clear(); lcd.printString("Settings",18,0); lcd.printString("Music",27,2); lcd.printString("Reset",27,3); if (g_BUI_flag == 1) { g_BUI_flag = 0; if (g_select>0) { g_select--; } } else if (g_BDI_flag == 1) { g_BDI_flag = 0; if (g_select<g_options-1) { g_select++; } } else { } int nx = 0; int ny = 0; for(int x = 3; x < 9; x++) { for (int y = (g_select*8)+17; y < ((g_select*8)+23); y++) { if (((g_sword[ny][nx])%2)==0) { lcd.clearPixel(x,y); } else { lcd.setPixel(x,y); } ny++; } ny=0; nx++; } nx=0; lcd.refresh(); sleep(); if (g_BAI_flag == 1) { g_BAI_flag = 0; switch(g_select) { case 0: g_music=!g_music; if (g_music == 1) { lcd.clear(); lcd.printString("Music On",18,3); lcd.refresh(); wait(1); } else { lcd.clear(); lcd.printString("Music Off",15,3); lcd.refresh(); wait(1); } break; case 1: while(1) { lcd.clear(); lcd.printString("Are",33,1); lcd.printString("You",33,2); lcd.printString("Sure?",27,3); lcd.printString(" No Yes ",0,5); lcd.refresh(); sleep(); if (g_BAI_flag==1) { g_BAI_flag=0; clearsd(); break; } else if (g_BBI_flag==1) { g_BBI_flag=0; break; } } } break; } if (g_BBI_flag == 1) { g_BBI_flag =0; return; } } } void addtopscore() { for(int i = 0; i <= 2; i++) { if (g_score>=g_topscores[i]) { if (i<2) { if (i==0) { g_topscores[i+2]=g_topscores[i+1]; } g_topscores[i+1]=g_topscores[i]; } g_topscores[i]=g_score; return; } } } void highscores() { readsd(); while(1) { char score1[14]; char score2[14]; char score3[14]; sprintf(score1,"1st %d",g_topscores[0]); sprintf(score2,"2nd %d",g_topscores[1]); sprintf(score3,"3rd %d",g_topscores[2]); lcd.clear(); lcd.printString("Highscores",12,0); lcd.printString(score1,21,2); lcd.printString(score2,21,3); lcd.printString(score3,21,4); lcd.printString("back",60,5); lcd.refresh(); sleep(); if (g_BBI_flag==1) { g_BBI_flag=0; break; } } } void tutorial() { g_BAI_flag = 0; lcd.clear(); drawlines(); lcd.printString("Use the D-pad",3,0); lcd.printString("to control",12,1); lcd.printString("Zordo",27,2); ticker1.attach(&timer1_isr,0.5); int startx=39; int starty=30; int ny=0; int nx=0; int loop=0; while(1) { if (g_timer1_flag == 1) { g_timer1_flag = 0; switch(loop) { case 0: for( int x = startx; x < startx+6; x++) { for (int y = starty; y < starty+6 ; y++) { if (((g_player[ny][nx])%2)==0) { lcd.clearPixel(x,y); } else { lcd.setPixel(x,y); } ny++; } ny=0; nx++; } nx=0; lcd.refresh(); lcd.drawRect(startx,starty,6,6,2); loop++; break; case 1: for( int x = startx; x < startx+6; x++) { for (int y = starty; y < starty+6 ; y++) { if (((g_player[5-nx][ny])%2)==0) { lcd.clearPixel(x,y); } else { lcd.setPixel(x,y); } ny++; } ny=0; nx++; } nx=0; lcd.refresh(); lcd.drawRect(startx,starty,6,6,2); loop++; break; case 2: for( int x = startx; x < startx+6; x++) { for (int y = starty; y < starty+6 ; y++) { if (((g_player[5-ny][5-nx])%2)==0) { lcd.clearPixel(x,y); } else { lcd.setPixel(x,y); } ny++; } ny=0; nx++; } nx=0; lcd.refresh(); lcd.drawRect(startx,starty,6,6,2); loop++; break; case 3: for( int x = startx; x < startx+6; x++) { for (int y = starty; y < starty+6 ; y++) { if (((g_player[nx][5-ny])%2)==0) { lcd.clearPixel(x,y); } else { lcd.setPixel(x,y); } ny++; } ny=0; nx++; } nx=0; lcd.refresh(); lcd.drawRect(startx,starty,6,6,2); loop=0; break; } } sleep(); if (g_BAI_flag == 1) { g_BAI_flag = 0; wait(0.1); break; } } g_BAI_flag = 0; lcd.clear(); drawlines(); lcd.printString("The A button",6,0); lcd.printString("will attack",9,1); lcd.printString("with Zordo's",6,2); lcd.printString("Sword",27,3); startx=39; starty=36; loop = 0; while(1) { if (g_timer1_flag == 1) { g_timer1_flag = 0; switch(loop) { case 0: for( int x = startx; x < startx+6; x++) { for (int y = starty; y < starty+6 ; y++) { if (((g_player[ny][nx])%2)==0) { lcd.clearPixel(x,y); } else { lcd.setPixel(x,y); } ny++; } ny=0; nx++; } nx=0; lcd.refresh(); lcd.drawRect(startx,starty,6,6,2); loop++; break; case 1: for( int x = startx; x < startx+6; x++) { for (int y = starty; y < starty+6 ; y++) { if (((g_playerA[ny][nx])%2)==0) { lcd.clearPixel(x,y); } else { lcd.setPixel(x,y); } ny++; } ny=0; nx++; } nx=0; lcd.refresh(); lcd.drawRect(startx,starty,6,6,2); loop=0; break; } } sleep(); if (g_BAI_flag == 1) { g_BAI_flag = 0; wait(0.1); break; } } lcd.clear(); drawlines(); lcd.printString("You must kill",3,0); lcd.printString("all hostiles",6,1); lcd.printString("on a map to",9,2); lcd.printString("go through",12,3); lcd.printString("the door",18,4); startx=39; starty=41; while(1) { for( int x = startx; x < startx+6; x++) { for (int y = starty; y < starty+6 ; y++) { if (((g_door[ny][nx])%2)==0) { lcd.clearPixel(x,y); } else { lcd.setPixel(x,y); } ny++; } ny=0; nx++; } nx=0; lcd.refresh(); sleep(); if (g_BAI_flag == 1) { g_BAI_flag = 0; wait(0.1); break; } } g_BAI_flag = 0; lcd.clear(); lcd.printString("Be Swift,",15,0); lcd.printString("Be Brave,",15,1); lcd.printString("Dont Die.",15,2); lcd.printString("Praise the sun",0,3); lcd.printString("love from",15,4); lcd.printString("-Prince Lonk",6,5); while(1) { if (g_BAI_flag == 1) { g_BAI_flag = 0; wait(0.1); break; } } ticker1.detach(); } void timeoutsound() { Buzz.write(0.0); } void outidle() { g_idle_flag = 1; } void startscreen() { for( int x = 0; x < 84; x++) { for (int y = 0; y < 48 ; y++) { if (((g_LoZ[y][x])%2)==0) { lcd.clearPixel(x,y); } else { lcd.setPixel(x,y); } } } lcd.refresh(); wait(2); } void drawlines() { lcd.drawLine(0,0,0,47,1); lcd.drawLine(1,4,1,43,1); lcd.drawLine(2,10,2,37,1); lcd.drawLine(3,17,3,30,1); lcd.drawLine(83,0,83,47,1); lcd.drawLine(82,4,82,43,1); lcd.drawLine(81,10,81,37,1); lcd.drawLine(80,17,80,30,1); } void level2screen() { while(1) { lcd.clear(); lcd.printString("Level 2",21,1); lcd.printString("Press A",21,4); lcd.refresh(); if (g_BAI_flag) { g_BAI_flag = 0; break; } sleep(); } }