ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el18ac

Dependencies:   mbed

Committer:
ale_carb0ni
Date:
Tue May 26 18:14:03 2020 +0000
Revision:
6:a2c72def99f9
Parent:
4:17d5b53b8815
Child:
7:8d381315f72c
commented version;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ale_carb0ni 2:7fa08670b1fc 1 #include "Menu.h"
ale_carb0ni 2:7fa08670b1fc 2 #include "mbed.h"
ale_carb0ni 2:7fa08670b1fc 3 #include "Gamepad.h"
ale_carb0ni 2:7fa08670b1fc 4 #include "N5110.h"
ale_carb0ni 2:7fa08670b1fc 5
ale_carb0ni 6:a2c72def99f9 6 //design of snake on initial page
ale_carb0ni 6:a2c72def99f9 7 int snake[28][26] {
ale_carb0ni 2:7fa08670b1fc 8 { 0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 9 { 0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 10 { 0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 11 { 0,0,1,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 12 { 0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 13 { 0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 14 { 0,0,0,0,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 15 { 0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 16 { 0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 17 { 0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 18 { 0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 19 { 0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 20 { 0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 },
ale_carb0ni 2:7fa08670b1fc 21 { 0,0,0,0,1,0,0,0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,0,1,0,1 },
ale_carb0ni 2:7fa08670b1fc 22 { 0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1 },
ale_carb0ni 2:7fa08670b1fc 23 { 0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1 },
ale_carb0ni 2:7fa08670b1fc 24 { 0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1 },
ale_carb0ni 2:7fa08670b1fc 25 { 0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,1 },
ale_carb0ni 2:7fa08670b1fc 26 { 0,1,0,0,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0 },
ale_carb0ni 2:7fa08670b1fc 27 { 1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0 },
ale_carb0ni 2:7fa08670b1fc 28 { 1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0 },
ale_carb0ni 2:7fa08670b1fc 29 { 1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0 },
ale_carb0ni 2:7fa08670b1fc 30 { 1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,0 },
ale_carb0ni 2:7fa08670b1fc 31 { 0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0 },
ale_carb0ni 2:7fa08670b1fc 32 { 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 },
ale_carb0ni 2:7fa08670b1fc 33 { 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 34 { 0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 35 { 0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 36 };
ale_carb0ni 2:7fa08670b1fc 37
ale_carb0ni 6:a2c72def99f9 38 //design of skull in the help page
ale_carb0ni 6:a2c72def99f9 39 int skull[23][23] {
ale_carb0ni 2:7fa08670b1fc 40 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0 },
ale_carb0ni 2:7fa08670b1fc 41 { 0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0 },
ale_carb0ni 2:7fa08670b1fc 42 { 1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1 },
ale_carb0ni 2:7fa08670b1fc 43 { 1,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1 },
ale_carb0ni 2:7fa08670b1fc 44 { 1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1 },
ale_carb0ni 2:7fa08670b1fc 45 { 0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 46 { 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 47 { 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 48 { 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 49 { 0,0,0,1,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 50 { 0,0,0,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,1,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 51 { 0,0,0,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 52 { 0,0,0,1,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,1,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 53 { 0,0,0,1,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,1,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 54 { 0,0,0,1,0,0,1,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 55 { 0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 56 { 0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 57 { 0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0 },
ale_carb0ni 2:7fa08670b1fc 58 { 1,1,1,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,1,1 },
ale_carb0ni 2:7fa08670b1fc 59 { 1,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1 },
ale_carb0ni 2:7fa08670b1fc 60 { 1,1,0,0,1,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,0,1,1 },
ale_carb0ni 2:7fa08670b1fc 61 { 0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0 },
ale_carb0ni 2:7fa08670b1fc 62 { 0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0 },
ale_carb0ni 2:7fa08670b1fc 63 };
ale_carb0ni 2:7fa08670b1fc 64
ale_carb0ni 6:a2c72def99f9 65 //design of the arrow in the menu function
ale_carb0ni 2:7fa08670b1fc 66 int selector[5][7] {
ale_carb0ni 2:7fa08670b1fc 67 { 0,0,0,0,1,0,0 },
ale_carb0ni 2:7fa08670b1fc 68 { 0,0,0,0,1,1,0 },
ale_carb0ni 2:7fa08670b1fc 69 { 1,1,1,1,1,1,1 },
ale_carb0ni 2:7fa08670b1fc 70 { 0,0,0,0,1,1,0 },
ale_carb0ni 2:7fa08670b1fc 71 { 0,0,0,0,1,0,0 },
ale_carb0ni 2:7fa08670b1fc 72 };
ale_carb0ni 2:7fa08670b1fc 73
ale_carb0ni 2:7fa08670b1fc 74
ale_carb0ni 2:7fa08670b1fc 75 Menu::Menu(N5110 &lcd,Gamepad &pad)
ale_carb0ni 2:7fa08670b1fc 76 {
ale_carb0ni 2:7fa08670b1fc 77 _lcd = lcd;
ale_carb0ni 2:7fa08670b1fc 78 _pad = pad;
ale_carb0ni 2:7fa08670b1fc 79 };
ale_carb0ni 2:7fa08670b1fc 80
ale_carb0ni 2:7fa08670b1fc 81 void Menu::initscreen()
ale_carb0ni 2:7fa08670b1fc 82 {
ale_carb0ni 2:7fa08670b1fc 83 while( _pad.start_held() == false) {
ale_carb0ni 2:7fa08670b1fc 84 _lcd.clear();
ale_carb0ni 2:7fa08670b1fc 85 _lcd.drawSprite(29,1,28,26,(int*)snake); //initial page
ale_carb0ni 2:7fa08670b1fc 86 _lcd.printString("SNAKE",WIDTH/2-15,4);
ale_carb0ni 2:7fa08670b1fc 87 _lcd.printString("Press Start",WIDTH/2-30,5);
ale_carb0ni 2:7fa08670b1fc 88 _lcd.setContrast( _pad.read_pot1());
ale_carb0ni 2:7fa08670b1fc 89 _lcd.refresh();
ale_carb0ni 2:7fa08670b1fc 90 wait(1/6);
ale_carb0ni 2:7fa08670b1fc 91 }
ale_carb0ni 2:7fa08670b1fc 92 _lcd.clear();
ale_carb0ni 2:7fa08670b1fc 93 }
ale_carb0ni 2:7fa08670b1fc 94
ale_carb0ni 2:7fa08670b1fc 95 void Menu::menu_screen()
ale_carb0ni 2:7fa08670b1fc 96 {
ale_carb0ni 4:17d5b53b8815 97 wait(0.1);
ale_carb0ni 4:17d5b53b8815 98 _lcd.drawSprite(WIDTH/2-26,25,5,7,(int*)selector);
ale_carb0ni 4:17d5b53b8815 99 _lcd.refresh();
ale_carb0ni 4:17d5b53b8815 100 while(_pad.A_held() == false) { //unitl A is pressed, the code
ale_carb0ni 6:a2c72def99f9 101 arrow(); //stays on the menu,
ale_carb0ni 4:17d5b53b8815 102 _lcd.refresh(); //executing only the code of the arrow
ale_carb0ni 2:7fa08670b1fc 103 wait(1/6);
ale_carb0ni 2:7fa08670b1fc 104 }
ale_carb0ni 2:7fa08670b1fc 105
ale_carb0ni 2:7fa08670b1fc 106 if (_lcd.getPixel(20,35)) { //if A is pressed and the arrow
ale_carb0ni 2:7fa08670b1fc 107 help(); //is corresponding to HELP,
ale_carb0ni 2:7fa08670b1fc 108 _lcd.refresh(); //the code executes help function
ale_carb0ni 2:7fa08670b1fc 109 wait(1/6);
ale_carb0ni 2:7fa08670b1fc 110 }
ale_carb0ni 2:7fa08670b1fc 111 }
ale_carb0ni 2:7fa08670b1fc 112
ale_carb0ni 2:7fa08670b1fc 113 void Menu::arrow()
ale_carb0ni 2:7fa08670b1fc 114 {
ale_carb0ni 2:7fa08670b1fc 115 _lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT); //main menu design
ale_carb0ni 2:7fa08670b1fc 116 _lcd.printString("MENU",WIDTH/2-15,1);
ale_carb0ni 2:7fa08670b1fc 117 _lcd.printString("Play",WIDTH/2-13,3);
ale_carb0ni 2:7fa08670b1fc 118 _lcd.printString("Help",WIDTH/2-13,4);
ale_carb0ni 2:7fa08670b1fc 119 _lcd.refresh();
ale_carb0ni 2:7fa08670b1fc 120 wait(1/6);
ale_carb0ni 2:7fa08670b1fc 121
ale_carb0ni 6:a2c72def99f9 122 if ( _pad.X_held() == true) { //position of arrow in the meun
ale_carb0ni 2:7fa08670b1fc 123 _lcd.clear(); //according to what button is pressed
ale_carb0ni 2:7fa08670b1fc 124 _lcd.drawSprite(WIDTH/2-26,25,5,7,(int*)selector);
ale_carb0ni 2:7fa08670b1fc 125 _lcd.refresh();
ale_carb0ni 2:7fa08670b1fc 126 wait(1/6);
ale_carb0ni 2:7fa08670b1fc 127 }
ale_carb0ni 2:7fa08670b1fc 128
ale_carb0ni 6:a2c72def99f9 129 if ( _pad.B_held() == true) { //position of arrow in the meun
ale_carb0ni 2:7fa08670b1fc 130 _lcd.clear(); //according to what button is pressed
ale_carb0ni 2:7fa08670b1fc 131 _lcd.drawSprite(WIDTH/2-26,33,5,7,(int*)selector);
ale_carb0ni 2:7fa08670b1fc 132 _lcd.refresh();
ale_carb0ni 2:7fa08670b1fc 133 wait(1/6);
ale_carb0ni 2:7fa08670b1fc 134 }
ale_carb0ni 2:7fa08670b1fc 135 }
ale_carb0ni 2:7fa08670b1fc 136
ale_carb0ni 2:7fa08670b1fc 137 void Menu::help()
ale_carb0ni 2:7fa08670b1fc 138 {
ale_carb0ni 2:7fa08670b1fc 139 while(1) {
ale_carb0ni 2:7fa08670b1fc 140 _lcd.clear(); //help instructions, page 1
ale_carb0ni 2:7fa08670b1fc 141 _lcd.printString("Use the",21,0);
ale_carb0ni 2:7fa08670b1fc 142 _lcd.printString("buttons",21,1);
ale_carb0ni 2:7fa08670b1fc 143 _lcd.printString("to move",21,2);
ale_carb0ni 2:7fa08670b1fc 144 _lcd.printString("(press B)",15,5);
ale_carb0ni 2:7fa08670b1fc 145 _lcd.refresh();
ale_carb0ni 2:7fa08670b1fc 146 wait(1/6);
ale_carb0ni 2:7fa08670b1fc 147 if (_pad.B_held()) {
ale_carb0ni 2:7fa08670b1fc 148 break;
ale_carb0ni 2:7fa08670b1fc 149 }
ale_carb0ni 2:7fa08670b1fc 150 }
ale_carb0ni 2:7fa08670b1fc 151 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 152
ale_carb0ni 2:7fa08670b1fc 153 while(1) {
ale_carb0ni 2:7fa08670b1fc 154 _lcd.clear(); //help instructions, page 2
ale_carb0ni 2:7fa08670b1fc 155 _lcd.printString("Eat the fruit",5,0);
ale_carb0ni 2:7fa08670b1fc 156 _lcd.printString("to score",15,1);
ale_carb0ni 2:7fa08670b1fc 157 _lcd.printString("(press B)",16,5);
ale_carb0ni 2:7fa08670b1fc 158 _lcd.refresh();
ale_carb0ni 2:7fa08670b1fc 159 wait(1/6);
ale_carb0ni 2:7fa08670b1fc 160
ale_carb0ni 2:7fa08670b1fc 161 if (_pad.B_held()) {
ale_carb0ni 2:7fa08670b1fc 162 break;
ale_carb0ni 2:7fa08670b1fc 163 }
ale_carb0ni 2:7fa08670b1fc 164 }
ale_carb0ni 2:7fa08670b1fc 165 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 166
ale_carb0ni 2:7fa08670b1fc 167 while(1) {
ale_carb0ni 2:7fa08670b1fc 168 _lcd.clear(); //help instructions, page 3
ale_carb0ni 2:7fa08670b1fc 169 _lcd.printString("If you hit",13,0);
ale_carb0ni 2:7fa08670b1fc 170 _lcd.printString("a wall",23,1);
ale_carb0ni 2:7fa08670b1fc 171 _lcd.printString("or your tail",5,2);
ale_carb0ni 2:7fa08670b1fc 172 _lcd.printString("...",WIDTH/2-7,3);
ale_carb0ni 2:7fa08670b1fc 173 _lcd.printString("(press B)",16,5);
ale_carb0ni 2:7fa08670b1fc 174 _lcd.refresh();
ale_carb0ni 2:7fa08670b1fc 175 wait(1/6);
ale_carb0ni 2:7fa08670b1fc 176
ale_carb0ni 2:7fa08670b1fc 177 if (_pad.B_held()) {
ale_carb0ni 2:7fa08670b1fc 178 break;
ale_carb0ni 2:7fa08670b1fc 179 }
ale_carb0ni 2:7fa08670b1fc 180 }
ale_carb0ni 2:7fa08670b1fc 181 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 182
ale_carb0ni 2:7fa08670b1fc 183 while(1) {
ale_carb0ni 2:7fa08670b1fc 184 _lcd.clear(); //help instructions, final page
ale_carb0ni 2:7fa08670b1fc 185 _lcd.printString("YOU DIE!",20,1);
ale_carb0ni 2:7fa08670b1fc 186 _lcd.drawSprite(30,16,23,23,(int*)skull);
ale_carb0ni 2:7fa08670b1fc 187 _lcd.refresh();
ale_carb0ni 2:7fa08670b1fc 188 wait(1/6);
ale_carb0ni 2:7fa08670b1fc 189
ale_carb0ni 2:7fa08670b1fc 190 if (_pad.B_held()) {
ale_carb0ni 2:7fa08670b1fc 191 break;
ale_carb0ni 2:7fa08670b1fc 192 }
ale_carb0ni 2:7fa08670b1fc 193 }
ale_carb0ni 2:7fa08670b1fc 194 wait(1/6);
ale_carb0ni 2:7fa08670b1fc 195 _lcd.clear();
ale_carb0ni 2:7fa08670b1fc 196 menu_screen(); //after help instructions, returns to main menu
ale_carb0ni 2:7fa08670b1fc 197 _lcd.refresh();
ale_carb0ni 2:7fa08670b1fc 198 wait(1/6);
ale_carb0ni 2:7fa08670b1fc 199 }