ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el18ac

Dependencies:   mbed

Committer:
ale_carb0ni
Date:
Tue May 26 17:13:20 2020 +0000
Revision:
4:17d5b53b8815
Parent:
2:7fa08670b1fc
Child:
6:a2c72def99f9
working game

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