ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el18ac

Dependencies:   mbed

Committer:
ale_carb0ni
Date:
Tue May 26 22:53:42 2020 +0000
Revision:
7:8d381315f72c
Parent:
6:a2c72def99f9
Final Submission. I have read and agreed with Statement of Academic Integrity.

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 7:8d381315f72c 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 7:8d381315f72c 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 7:8d381315f72c 74 //initialising the gamepad and the screen
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 7:8d381315f72c 84 //initial page
ale_carb0ni 2:7fa08670b1fc 85 _lcd.clear();
ale_carb0ni 7:8d381315f72c 86 _lcd.drawSprite(29,1,28,26,(int*)snake);
ale_carb0ni 2:7fa08670b1fc 87 _lcd.printString("SNAKE",WIDTH/2-15,4);
ale_carb0ni 2:7fa08670b1fc 88 _lcd.printString("Press Start",WIDTH/2-30,5);
ale_carb0ni 2:7fa08670b1fc 89 _lcd.setContrast( _pad.read_pot1());
ale_carb0ni 2:7fa08670b1fc 90 _lcd.refresh();
ale_carb0ni 7:8d381315f72c 91 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 92 }
ale_carb0ni 2:7fa08670b1fc 93 _lcd.clear();
ale_carb0ni 2:7fa08670b1fc 94 }
ale_carb0ni 2:7fa08670b1fc 95
ale_carb0ni 2:7fa08670b1fc 96 void Menu::menu_screen()
ale_carb0ni 2:7fa08670b1fc 97 {
ale_carb0ni 4:17d5b53b8815 98 wait(0.1);
ale_carb0ni 4:17d5b53b8815 99 _lcd.drawSprite(WIDTH/2-26,25,5,7,(int*)selector);
ale_carb0ni 4:17d5b53b8815 100 _lcd.refresh();
ale_carb0ni 7:8d381315f72c 101 while(_pad.A_held() == false) {
ale_carb0ni 7:8d381315f72c 102 /*unitl A is pressed, the code
ale_carb0ni 7:8d381315f72c 103 stays on the menu,
ale_carb0ni 7:8d381315f72c 104 executing only the code of the arrow*/
ale_carb0ni 7:8d381315f72c 105 arrow();
ale_carb0ni 7:8d381315f72c 106 _lcd.refresh();
ale_carb0ni 7:8d381315f72c 107 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 108 }
ale_carb0ni 2:7fa08670b1fc 109
ale_carb0ni 7:8d381315f72c 110 /*if A is pressed and the arrow
ale_carb0ni 7:8d381315f72c 111 is corresponding to HELP,
ale_carb0ni 7:8d381315f72c 112 the code executes help function*/
ale_carb0ni 7:8d381315f72c 113 if (_lcd.getPixel(20,35)) {
ale_carb0ni 7:8d381315f72c 114 help();
ale_carb0ni 7:8d381315f72c 115 _lcd.refresh();
ale_carb0ni 7:8d381315f72c 116 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 117 }
ale_carb0ni 2:7fa08670b1fc 118 }
ale_carb0ni 2:7fa08670b1fc 119
ale_carb0ni 2:7fa08670b1fc 120 void Menu::arrow()
ale_carb0ni 2:7fa08670b1fc 121 {
ale_carb0ni 7:8d381315f72c 122 //main menu design
ale_carb0ni 7:8d381315f72c 123 _lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
ale_carb0ni 2:7fa08670b1fc 124 _lcd.printString("MENU",WIDTH/2-15,1);
ale_carb0ni 2:7fa08670b1fc 125 _lcd.printString("Play",WIDTH/2-13,3);
ale_carb0ni 2:7fa08670b1fc 126 _lcd.printString("Help",WIDTH/2-13,4);
ale_carb0ni 2:7fa08670b1fc 127 _lcd.refresh();
ale_carb0ni 7:8d381315f72c 128 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 129
ale_carb0ni 7:8d381315f72c 130 /*position of arrow in the meun
ale_carb0ni 7:8d381315f72c 131 according to what button is pressed*/
ale_carb0ni 7:8d381315f72c 132 if ( _pad.X_held() == true) {
ale_carb0ni 7:8d381315f72c 133 _lcd.clear();
ale_carb0ni 2:7fa08670b1fc 134 _lcd.drawSprite(WIDTH/2-26,25,5,7,(int*)selector);
ale_carb0ni 2:7fa08670b1fc 135 _lcd.refresh();
ale_carb0ni 7:8d381315f72c 136 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 137 }
ale_carb0ni 2:7fa08670b1fc 138
ale_carb0ni 7:8d381315f72c 139 /*position of arrow in the meun
ale_carb0ni 7:8d381315f72c 140 position of arrow in the meun
ale_carb0ni 7:8d381315f72c 141 according to what button is pressed*/
ale_carb0ni 7:8d381315f72c 142 if ( _pad.B_held() == true) {
ale_carb0ni 7:8d381315f72c 143 _lcd.clear();
ale_carb0ni 2:7fa08670b1fc 144 _lcd.drawSprite(WIDTH/2-26,33,5,7,(int*)selector);
ale_carb0ni 2:7fa08670b1fc 145 _lcd.refresh();
ale_carb0ni 7:8d381315f72c 146 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 147 }
ale_carb0ni 2:7fa08670b1fc 148 }
ale_carb0ni 2:7fa08670b1fc 149
ale_carb0ni 2:7fa08670b1fc 150 void Menu::help()
ale_carb0ni 2:7fa08670b1fc 151 {
ale_carb0ni 2:7fa08670b1fc 152 while(1) {
ale_carb0ni 7:8d381315f72c 153 //help instructions, page 1
ale_carb0ni 7:8d381315f72c 154 _lcd.clear();
ale_carb0ni 2:7fa08670b1fc 155 _lcd.printString("Use the",21,0);
ale_carb0ni 2:7fa08670b1fc 156 _lcd.printString("buttons",21,1);
ale_carb0ni 2:7fa08670b1fc 157 _lcd.printString("to move",21,2);
ale_carb0ni 2:7fa08670b1fc 158 _lcd.printString("(press B)",15,5);
ale_carb0ni 2:7fa08670b1fc 159 _lcd.refresh();
ale_carb0ni 7:8d381315f72c 160 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 161 if (_pad.B_held()) {
ale_carb0ni 7:8d381315f72c 162 //if B is pressed, go to next page
ale_carb0ni 2:7fa08670b1fc 163 break;
ale_carb0ni 2:7fa08670b1fc 164 }
ale_carb0ni 2:7fa08670b1fc 165 }
ale_carb0ni 2:7fa08670b1fc 166 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 167
ale_carb0ni 2:7fa08670b1fc 168 while(1) {
ale_carb0ni 7:8d381315f72c 169 //help instructions, page 2
ale_carb0ni 7:8d381315f72c 170 _lcd.clear();
ale_carb0ni 7:8d381315f72c 171 _lcd.printString("Use the",21,0);
ale_carb0ni 7:8d381315f72c 172 _lcd.printString("potentiometer",3,1);
ale_carb0ni 7:8d381315f72c 173 _lcd.printString("to control",13,2);
ale_carb0ni 7:8d381315f72c 174 _lcd.printString("the speed",17,3);
ale_carb0ni 7:8d381315f72c 175 _lcd.printString("(press B)",15,5);
ale_carb0ni 2:7fa08670b1fc 176 _lcd.refresh();
ale_carb0ni 7:8d381315f72c 177 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 178
ale_carb0ni 2:7fa08670b1fc 179 if (_pad.B_held()) {
ale_carb0ni 7:8d381315f72c 180 //if B is pressed, go to next page
ale_carb0ni 2:7fa08670b1fc 181 break;
ale_carb0ni 2:7fa08670b1fc 182 }
ale_carb0ni 2:7fa08670b1fc 183 }
ale_carb0ni 2:7fa08670b1fc 184 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 185
ale_carb0ni 2:7fa08670b1fc 186 while(1) {
ale_carb0ni 7:8d381315f72c 187 //help instructions, page 3
ale_carb0ni 7:8d381315f72c 188 _lcd.clear();
ale_carb0ni 7:8d381315f72c 189 _lcd.printString("Eat the fruit",5,0);
ale_carb0ni 7:8d381315f72c 190 _lcd.printString("to score",15,1);
ale_carb0ni 2:7fa08670b1fc 191 _lcd.printString("(press B)",16,5);
ale_carb0ni 2:7fa08670b1fc 192 _lcd.refresh();
ale_carb0ni 7:8d381315f72c 193 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 194
ale_carb0ni 2:7fa08670b1fc 195 if (_pad.B_held()) {
ale_carb0ni 7:8d381315f72c 196 //if B is pressed, go to next page
ale_carb0ni 2:7fa08670b1fc 197 break;
ale_carb0ni 2:7fa08670b1fc 198 }
ale_carb0ni 2:7fa08670b1fc 199 }
ale_carb0ni 2:7fa08670b1fc 200 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 201
ale_carb0ni 2:7fa08670b1fc 202 while(1) {
ale_carb0ni 7:8d381315f72c 203 //help instructions, page 4
ale_carb0ni 7:8d381315f72c 204 _lcd.clear();
ale_carb0ni 7:8d381315f72c 205 _lcd.printString("If you hit",13,0);
ale_carb0ni 7:8d381315f72c 206 _lcd.printString("a wall",23,1);
ale_carb0ni 7:8d381315f72c 207 _lcd.printString("or your tail",5,2);
ale_carb0ni 7:8d381315f72c 208 _lcd.printString("...",WIDTH/2-7,3);
ale_carb0ni 7:8d381315f72c 209 _lcd.printString("(press B)",16,5);
ale_carb0ni 7:8d381315f72c 210 _lcd.refresh();
ale_carb0ni 7:8d381315f72c 211 wait(0.2);
ale_carb0ni 7:8d381315f72c 212
ale_carb0ni 7:8d381315f72c 213 if (_pad.B_held()) {
ale_carb0ni 7:8d381315f72c 214 //if B is pressed, go to next page
ale_carb0ni 7:8d381315f72c 215 break;
ale_carb0ni 7:8d381315f72c 216 }
ale_carb0ni 7:8d381315f72c 217 }
ale_carb0ni 7:8d381315f72c 218 wait(0.2);
ale_carb0ni 7:8d381315f72c 219
ale_carb0ni 7:8d381315f72c 220 while(1) {
ale_carb0ni 7:8d381315f72c 221 //help instructions, final page
ale_carb0ni 7:8d381315f72c 222 _lcd.clear();
ale_carb0ni 2:7fa08670b1fc 223 _lcd.printString("YOU DIE!",20,1);
ale_carb0ni 2:7fa08670b1fc 224 _lcd.drawSprite(30,16,23,23,(int*)skull);
ale_carb0ni 2:7fa08670b1fc 225 _lcd.refresh();
ale_carb0ni 7:8d381315f72c 226 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 227
ale_carb0ni 2:7fa08670b1fc 228 if (_pad.B_held()) {
ale_carb0ni 7:8d381315f72c 229 //if B is pressed, go back to the menu
ale_carb0ni 2:7fa08670b1fc 230 break;
ale_carb0ni 2:7fa08670b1fc 231 }
ale_carb0ni 2:7fa08670b1fc 232 }
ale_carb0ni 7:8d381315f72c 233 wait(0.2);
ale_carb0ni 7:8d381315f72c 234 //after help instructions, returns to main menu
ale_carb0ni 2:7fa08670b1fc 235 _lcd.clear();
ale_carb0ni 7:8d381315f72c 236 menu_screen();
ale_carb0ni 2:7fa08670b1fc 237 _lcd.refresh();
ale_carb0ni 7:8d381315f72c 238 wait(0.2);
ale_carb0ni 2:7fa08670b1fc 239 }