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
00001 00002 ///////////// includes ///////////////////// 00003 #include "mbed.h" 00004 #include "platform/mbed_thread.h" 00005 #include "Joystick.h" 00006 #include "N5110.h" 00007 #include "ShiftReg.h" 00008 #include "PokeEngine.h" 00009 #include "Utils.h" 00010 //#include <cstdlib> 00011 #include "Tone.h" 00012 ///////////// defines ///////////////////// 00013 #define PADDLE_WIDTH 2 00014 #define PADDLE_HEIGHT 8 00015 #define BALL_SIZE 2 00016 #define BALL_SPEED 3 00017 ///////////// objects /////////////////// 00018 N5110 lcd(p14,p8,p9,p10,p11,p13,p21); 00019 Joystick joystick(p20,p19); 00020 DigitalIn buttonA(p29); 00021 BusOut leds(LED4,LED3,LED2,LED1); 00022 ShiftReg seven_seg; 00023 AnalogIn pot(p17); 00024 PokeEngine poke; 00025 Tone dac(p18); 00026 ///////////// prototypes /////////////////// 00027 void init(); 00028 void welcome(); 00029 void render(); 00030 void gameover(); 00031 void display_lives(int lives); 00032 00033 const int note_background []= { 00034 NOTE_FS3, NOTE_FS3, NOTE_CS4, NOTE_B3, NOTE_A3, 00035 NOTE_GS3, NOTE_GS3, NOTE_GS3, NOTE_B3, NOTE_A3, NOTE_GS3, 00036 NOTE_A3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00037 NOTE_A3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00038 00039 NOTE_FS3, NOTE_FS3, NOTE_CS4, NOTE_B3, NOTE_A3, 00040 NOTE_GS3, NOTE_GS3, NOTE_GS3, NOTE_B3, NOTE_A3, NOTE_GS3, 00041 NOTE_A3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00042 NOTE_A3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00043 00044 NOTE_FS3, NOTE_FS3, NOTE_CS4, NOTE_B3, NOTE_A3, 00045 NOTE_GS3, NOTE_GS3, NOTE_GS3, NOTE_B3, NOTE_A3, NOTE_GS3, 00046 NOTE_FS3, NOTE_FS3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00047 NOTE_FS3, NOTE_FS3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00048 00049 NOTE_FS3, NOTE_FS3, NOTE_CS4, NOTE_B3, NOTE_A3, 00050 NOTE_GS3, NOTE_GS3, NOTE_GS3, NOTE_B3, NOTE_A3, NOTE_GS3, 00051 NOTE_FS3, NOTE_FS3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00052 NOTE_FS3, NOTE_FS3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00053 00054 NOTE_FS3, NOTE_FS3, NOTE_CS4, NOTE_B3, NOTE_A3, 00055 NOTE_GS3, NOTE_GS3, NOTE_GS3, NOTE_B3, NOTE_A3, NOTE_GS3, 00056 NOTE_FS3, NOTE_FS3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00057 }; 00058 00059 const int duration_background[] = { 00060 4,8,8,4,4, 00061 4,8,8,4,4, 00062 4,4,8,8,8,8, 00063 4,4,8,8,8,8, 00064 00065 4,8,8,4,4, 00066 4,8,8,4,4, 00067 4,4,8,8,8,8, 00068 4,4,8,8,8,8, 00069 00070 4,8,8,4,4, 00071 4,8,8,4,4, 00072 4,4,8,8,8,8, 00073 4,4,8,8,8,8, 00074 00075 4,8,8,4,4, 00076 4,8,8,4,4, 00077 4,4,8,8,8,8, 00078 4,4,8,8,8,8, 00079 00080 4,8,8,4,4, 00081 4,8,8,4,4, 00082 4,4,8,8,8,8, 00083 }; 00084 /* 00085 const int duration_array[] = { 00086 4,8,8,4,4, 00087 4,8,8,4,4, 00088 4,4,8,8,8,8, 00089 4,4,8,8,8,8, 00090 00091 4,8,8,4,4, 00092 4,8,8,4,4, 00093 4,4,8,8,8,8, 00094 4,4,8,8,8,8, 00095 00096 4,8,8,4,4, 00097 4,8,8,4,4, 00098 4,4,8,8,8,8, 00099 4,4,8,8,8,8, 00100 00101 4,8,8,4,4, 00102 4,8,8,4,4, 00103 4,4,8,8,8,8, 00104 4,4,8,8,8,8, 00105 00106 4,8,8,4,4, 00107 4,8,8,4,4, 00108 4,4,8,8,8,8, 00109 }; 00110 00111 const int note_array[] = { 00112 NOTE_FS3, NOTE_FS3, NOTE_CS4, NOTE_B3, NOTE_A3, 00113 NOTE_GS3, NOTE_GS3, NOTE_GS3, NOTE_B3, NOTE_A3, NOTE_GS3, 00114 NOTE_A3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00115 NOTE_A3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00116 00117 NOTE_FS3, NOTE_FS3, NOTE_CS4, NOTE_B3, NOTE_A3, 00118 NOTE_GS3, NOTE_GS3, NOTE_GS3, NOTE_B3, NOTE_A3, NOTE_GS3, 00119 NOTE_A3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00120 NOTE_A3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00121 00122 NOTE_FS3, NOTE_FS3, NOTE_CS4, NOTE_B3, NOTE_A3, 00123 NOTE_GS3, NOTE_GS3, NOTE_GS3, NOTE_B3, NOTE_A3, NOTE_GS3, 00124 NOTE_FS3, NOTE_FS3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00125 NOTE_FS3, NOTE_FS3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00126 00127 NOTE_FS3, NOTE_FS3, NOTE_CS4, NOTE_B3, NOTE_A3, 00128 NOTE_GS3, NOTE_GS3, NOTE_GS3, NOTE_B3, NOTE_A3, NOTE_GS3, 00129 NOTE_FS3, NOTE_FS3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00130 NOTE_FS3, NOTE_FS3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00131 00132 NOTE_FS3, NOTE_FS3, NOTE_CS4, NOTE_B3, NOTE_A3, 00133 NOTE_GS3, NOTE_GS3, NOTE_GS3, NOTE_B3, NOTE_A3, NOTE_GS3, 00134 NOTE_FS3, NOTE_FS3, NOTE_A4, NOTE_GS4, NOTE_A4, NOTE_GS4, NOTE_A4, 00135 }; 00136 */ 00137 //volatile int g_gameover_flag = 0; 00138 //void gameover_isr(); 00139 00140 int main() { 00141 00142 init(); 00143 welcome(); 00144 render(); 00145 int fps = 10; 00146 int lives = 4; 00147 //poke.check_lives(lives); 00148 display_lives(lives); 00149 while (lives != 0) { // keep looping while lives remain 00150 // read the joystick input and store in a struct 00151 UserInput input = {joystick.get_direction(),joystick.get_mag()}; 00152 lives = poke.update(input); // update the game engine based on input 00153 printf("lives = %d ", lives); 00154 display_lives(lives); // display lives on LEDs 00155 render(); // draw frame on screen 00156 thread_sleep_for(1000/fps); // and wait for one frame period - ms 00157 } 00158 //int n = sizeof(note_array)/sizeof(int); 00159 //dac.play_melody(n,note_array,duration_array,72.0,true); 00160 gameover(); 00161 /* while (1) { 00162 00163 // check if flag is set i.e. interrupt has occured 00164 if (g_timer_flag) { 00165 g_timer_flag = 0; // if it has, clear the flag 00166 printf("Tick \n"); 00167 // DO TASK HERE 00168 } 00169 00170 // put the MCU to sleep until an interrupt wakes it up 00171 sleep(); 00172 00173 }*/ 00174 00175 } 00176 00177 void init() { 00178 lcd.clear(); 00179 seven_seg.write(0x00); // turn of 7-seg display 00180 lcd.init(); 00181 lcd.setContrast(0.4); 00182 joystick.init(); 00183 dac.init(); 00184 00185 poke.init(70,10,5,20,10,3,2); 00186 poke.init_rocket(50,40,4,2); 00187 } 00188 00189 void welcome() { // splash screen 00190 lcd.printString(" Pokemon go! ",0,1); 00191 lcd.printString(" Press A ",0,4); 00192 lcd.refresh(); 00193 //t n_background = sizeof(note_background)/sizeof(int); 00194 //c.play_melody(n_background,note_background,duration_background,72.0,true); 00195 while (buttonA.read() == 0) { 00196 leds = 0b1111; 00197 thread_sleep_for(100); 00198 leds = 0b0000; 00199 thread_sleep_for(100); 00200 } 00201 } 00202 00203 void render() { // clear screen, re-draw and refresh 00204 lcd.clear(); 00205 poke.draw(lcd); 00206 lcd.refresh(); 00207 } 00208 00209 void display_lives(int lives) { 00210 if (lives == 4) { 00211 leds = 0b1111; 00212 seven_seg.write(0x66); 00213 } else if (lives == 3) { 00214 leds = 0b1110; 00215 seven_seg.write(0x4F); 00216 } else if (lives == 2) { 00217 leds = 0b1100; 00218 seven_seg.write(0x5B); 00219 } else if (lives == 1) { 00220 leds = 0b1000; 00221 seven_seg.write(0x06); 00222 } else { 00223 leds = 0b0000; 00224 seven_seg.write(0x3F); 00225 } 00226 } 00227 00228 void gameover() { // splash screen 00229 //for (int i = 1; i < 10; i++) { 00230 while(1){ 00231 lcd.clear(); 00232 int score = poke.get_score(); 00233 char char_score = score + '0'; 00234 // char *char_score = new char[2]; 00235 //for (int i = 0; i < 2; i++){ 00236 // char_score[i] = score;} 00237 lcd.printString(" Game Over ",0,0); 00238 lcd.printString(" Your score: ",0,2); 00239 lcd.printChar(char_score,42,4); 00240 lcd.refresh(); 00241 leds = 0b1111; 00242 thread_sleep_for(250); 00243 lcd.clear(); 00244 lcd.refresh(); 00245 leds = 0b0000; 00246 thread_sleep_for(250); 00247 } 00248 } 00249 00250 /*void gameover_isr() 00251 { 00252 g_gameover_flag = 1; // set flag in ISR 00253 }*/
Generated on Wed Jul 13 2022 12:24:57 by
1.7.2