Zeyu Feng 201377605

Dependencies:   mbed

On Minerva

Committer:
el19zf
Date:
Mon May 11 14:43:16 2020 +0000
Revision:
12:009895f6b6e4
Parent:
11:494cc44777fe
Child:
13:eb60628db8bf
add a test file and optimzed code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el19zf 11:494cc44777fe 1 #include "Interface.h"
el19zf 11:494cc44777fe 2
el19zf 11:494cc44777fe 3 State fsm[3] = {
el19zf 11:494cc44777fe 4 {0,{2,1}},
el19zf 11:494cc44777fe 5 {1,{0,2}},
el19zf 11:494cc44777fe 6 {2,{1,0}},
el19zf 11:494cc44777fe 7 };
el19zf 11:494cc44777fe 8 const int pointer[3][2] = {
el19zf 11:494cc44777fe 9 {1,0},
el19zf 11:494cc44777fe 10 {1,1},
el19zf 11:494cc44777fe 11 {1,0}
el19zf 11:494cc44777fe 12 };
el19zf 11:494cc44777fe 13
el19zf 11:494cc44777fe 14 Interface::Interface()
el19zf 11:494cc44777fe 15 {
el19zf 11:494cc44777fe 16
el19zf 11:494cc44777fe 17 }
el19zf 11:494cc44777fe 18
el19zf 11:494cc44777fe 19 Interface::~Interface()
el19zf 11:494cc44777fe 20 {
el19zf 11:494cc44777fe 21
el19zf 11:494cc44777fe 22 }
el19zf 11:494cc44777fe 23
el19zf 11:494cc44777fe 24 void Interface::init()
el19zf 11:494cc44777fe 25 {
el19zf 12:009895f6b6e4 26 _gameover_flag = 0;
el19zf 12:009895f6b6e4 27 _sim_flag = 0;
el19zf 12:009895f6b6e4 28 _victory_flag = 0;
el19zf 11:494cc44777fe 29 }
el19zf 11:494cc44777fe 30
el19zf 11:494cc44777fe 31
el19zf 11:494cc44777fe 32 void Interface::Welcome(N5110 &lcd,Gamepad &pad)
el19zf 11:494cc44777fe 33 {
el19zf 11:494cc44777fe 34 lcd.printString(" Welcome! ",0,1);
el19zf 11:494cc44777fe 35 lcd.printString(" Game by ",0,2);
el19zf 11:494cc44777fe 36 lcd.printString(" Z. FENG ",0,3);
el19zf 11:494cc44777fe 37 lcd.refresh();
el19zf 11:494cc44777fe 38 while (!pad.start_pressed())
el19zf 11:494cc44777fe 39 {
el19zf 11:494cc44777fe 40 pad.leds_on();
el19zf 11:494cc44777fe 41 wait(0.1);
el19zf 11:494cc44777fe 42 pad.leds_off();
el19zf 11:494cc44777fe 43 wait(0.1);
el19zf 11:494cc44777fe 44 }
el19zf 11:494cc44777fe 45 }
el19zf 11:494cc44777fe 46
el19zf 11:494cc44777fe 47 int Interface::menu(N5110 &lcd,Gamepad &pad,int option_flag)
el19zf 11:494cc44777fe 48 {
el19zf 11:494cc44777fe 49 while (!pad.A_pressed())
el19zf 11:494cc44777fe 50 {
el19zf 11:494cc44777fe 51 lcd.clear();
el19zf 11:494cc44777fe 52 lcd.printString(" MENU",0,0);
el19zf 11:494cc44777fe 53 lcd.printString(" Start",0,2);
el19zf 11:494cc44777fe 54 lcd.printString(" Start(Hell)",0,3);
el19zf 11:494cc44777fe 55 lcd.printString(" Exit",0,4);
el19zf 11:494cc44777fe 56 _d = pad.get_direction();
el19zf 12:009895f6b6e4 57 if(_d == N||_d ==NE||_d==NW){
el19zf 11:494cc44777fe 58 option_flag = fsm[option_flag].next_state[0];
el19zf 12:009895f6b6e4 59 } else if(_d == S||_d==SE||_d==SW){
el19zf 11:494cc44777fe 60 option_flag = fsm[option_flag].next_state[1];
el19zf 11:494cc44777fe 61 }
el19zf 11:494cc44777fe 62 lcd.drawSprite(0,8*option_flag+18,3,2,(int*)pointer);
el19zf 11:494cc44777fe 63 lcd.refresh();
el19zf 11:494cc44777fe 64 pad.leds_on();
el19zf 11:494cc44777fe 65 wait(0.3);
el19zf 11:494cc44777fe 66 //printf("A_pressed\n");
el19zf 11:494cc44777fe 67 }
el19zf 11:494cc44777fe 68 return option_flag;
el19zf 11:494cc44777fe 69 }
el19zf 11:494cc44777fe 70
el19zf 11:494cc44777fe 71 void Interface::game_over(N5110 &lcd,Gamepad &pad)
el19zf 11:494cc44777fe 72 {
el19zf 11:494cc44777fe 73 lcd.clear();
el19zf 11:494cc44777fe 74 while(!pad.B_pressed()){
el19zf 11:494cc44777fe 75 lcd.printString(" Game over ",0,1);
el19zf 11:494cc44777fe 76 lcd.printString(" Press B to ",0,2);
el19zf 11:494cc44777fe 77 lcd.printString(" try again? ",0,3);
el19zf 11:494cc44777fe 78 lcd.refresh();
el19zf 11:494cc44777fe 79 wait(0.1);
el19zf 11:494cc44777fe 80 //printf("Not press B\n");
el19zf 11:494cc44777fe 81 }
el19zf 12:009895f6b6e4 82 _gameover_flag = 1;
el19zf 11:494cc44777fe 83 }
el19zf 11:494cc44777fe 84
el19zf 11:494cc44777fe 85 int Interface::check_pause(N5110 &lcd,Gamepad &pad,int paused_flag)
el19zf 11:494cc44777fe 86 {
el19zf 11:494cc44777fe 87 if(pad.start_pressed())
el19zf 11:494cc44777fe 88 paused_flag = 1;
el19zf 11:494cc44777fe 89 //printf("start press\n");
el19zf 11:494cc44777fe 90 while(paused_flag == 1){
el19zf 11:494cc44777fe 91 _timer.stop();
el19zf 11:494cc44777fe 92 lcd.printString("Paused",23,2);
el19zf 11:494cc44777fe 93 lcd.refresh();
el19zf 11:494cc44777fe 94 if(pad.start_pressed())
el19zf 11:494cc44777fe 95 paused_flag = 0;
el19zf 11:494cc44777fe 96 }
el19zf 11:494cc44777fe 97 _timer.start();
el19zf 11:494cc44777fe 98 return paused_flag;
el19zf 11:494cc44777fe 99 }
el19zf 11:494cc44777fe 100
el19zf 11:494cc44777fe 101 int Interface::count_down(N5110 &lcd,int count_flag)
el19zf 11:494cc44777fe 102 {
el19zf 11:494cc44777fe 103 char buffer[6];
el19zf 11:494cc44777fe 104 sprintf(buffer,"%d",(int)count_flag/6);
el19zf 11:494cc44777fe 105 lcd.printString(buffer,40,2);
el19zf 11:494cc44777fe 106 //printf("count: %d\n",count_flag);
el19zf 11:494cc44777fe 107 count_flag--;
el19zf 11:494cc44777fe 108 return count_flag;
el19zf 11:494cc44777fe 109 }
el19zf 11:494cc44777fe 110
el19zf 11:494cc44777fe 111 void Interface::exit(N5110 &lcd,Gamepad &pad)
el19zf 11:494cc44777fe 112 {
el19zf 11:494cc44777fe 113 lcd.clear();
el19zf 12:009895f6b6e4 114 pad.leds_off();
el19zf 11:494cc44777fe 115 while(!pad.B_pressed()){
el19zf 11:494cc44777fe 116 lcd.printString(" Press B back ",0,2);
el19zf 11:494cc44777fe 117 lcd.printString(" to menu ",0,3);
el19zf 11:494cc44777fe 118 lcd.refresh();
el19zf 11:494cc44777fe 119 wait(0.1);
el19zf 11:494cc44777fe 120 }
el19zf 11:494cc44777fe 121 }
el19zf 11:494cc44777fe 122
el19zf 11:494cc44777fe 123 void Interface::victory(N5110 &lcd,Gamepad &pad)
el19zf 11:494cc44777fe 124 {
el19zf 11:494cc44777fe 125 lcd.clear();
el19zf 11:494cc44777fe 126 while(!pad.B_pressed()){
el19zf 11:494cc44777fe 127 lcd.printString(" Victory! ",0,1);
el19zf 11:494cc44777fe 128 lcd.printString(" Press B back ",0,2);
el19zf 11:494cc44777fe 129 lcd.printString(" to menu ",0,3);
el19zf 11:494cc44777fe 130 lcd.refresh();
el19zf 11:494cc44777fe 131 wait(0.1);
el19zf 11:494cc44777fe 132 }
el19zf 12:009895f6b6e4 133 _victory_flag = 1;
el19zf 12:009895f6b6e4 134 }
el19zf 12:009895f6b6e4 135
el19zf 12:009895f6b6e4 136 void Interface::simple_game(N5110 &lcd,Gamepad &pad)
el19zf 12:009895f6b6e4 137 {
el19zf 12:009895f6b6e4 138 lcd.clear();
el19zf 12:009895f6b6e4 139 pad.init();
el19zf 12:009895f6b6e4 140 while(!pad.A_pressed()){
el19zf 12:009895f6b6e4 141 lcd.printString(" DO YOU WANT ",0,1);
el19zf 12:009895f6b6e4 142 lcd.printString(" MAKE IT EASY? ",0,2);
el19zf 12:009895f6b6e4 143 lcd.printString(" PRESS A to",0,3);
el19zf 12:009895f6b6e4 144 lcd.printString(" try again! ",0,4);
el19zf 12:009895f6b6e4 145 lcd.refresh();
el19zf 12:009895f6b6e4 146 wait(0.1);
el19zf 12:009895f6b6e4 147 }
el19zf 12:009895f6b6e4 148 _sim_flag = 1;
el19zf 12:009895f6b6e4 149 }
el19zf 12:009895f6b6e4 150
el19zf 12:009895f6b6e4 151 int Interface::get_sim_flag()
el19zf 12:009895f6b6e4 152 {
el19zf 12:009895f6b6e4 153 //printf("Get simple_flag %d\n",_sim_flag);
el19zf 12:009895f6b6e4 154 return _sim_flag;
el19zf 12:009895f6b6e4 155 }
el19zf 12:009895f6b6e4 156
el19zf 12:009895f6b6e4 157 int Interface::get_gameover_flag()
el19zf 12:009895f6b6e4 158 {
el19zf 12:009895f6b6e4 159 return _gameover_flag;
el19zf 12:009895f6b6e4 160 }
el19zf 12:009895f6b6e4 161
el19zf 12:009895f6b6e4 162 int Interface::get_victory_flag()
el19zf 12:009895f6b6e4 163 {
el19zf 12:009895f6b6e4 164 return _victory_flag;
el19zf 11:494cc44777fe 165 }