A retro gaming programme, designed for use on a portable embedded system. Incorporates power saving techniques.

Dependencies:   ConfigFile N5110 PowerControl beep mbed

Committer:
el13drt
Date:
Tue Apr 14 22:56:49 2015 +0000
Revision:
6:fa2928bcec17
Parent:
5:a0e4a67266d6
Child:
7:217810c90306
post scores

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el13drt 0:a8bc3aac5f69 1 /**
el13drt 0:a8bc3aac5f69 2 @file main.cpp
el13drt 0:a8bc3aac5f69 3 @brief Program implementation
el13drt 0:a8bc3aac5f69 4 */
el13drt 0:a8bc3aac5f69 5
el13drt 0:a8bc3aac5f69 6 #include "mbed.h"
el13drt 0:a8bc3aac5f69 7 #include "N5110.h"
el13drt 0:a8bc3aac5f69 8
el13drt 0:a8bc3aac5f69 9 #include <ctime>
el13drt 0:a8bc3aac5f69 10 #include <cstdlib>
el13drt 0:a8bc3aac5f69 11
el13drt 0:a8bc3aac5f69 12 // change this to alter tolerance of joystick direction
el13drt 0:a8bc3aac5f69 13 #define DIRECTION_TOLERANCE 0.05
el13drt 0:a8bc3aac5f69 14
el13drt 0:a8bc3aac5f69 15 // VCC,SCE,RST,D/C,MOSI,SCLK,LED - set pins for LCD
el13drt 0:a8bc3aac5f69 16 N5110 lcd(p7,p8,p9,p10,p11,p13,p22);
el13drt 0:a8bc3aac5f69 17
el13drt 0:a8bc3aac5f69 18 // navigation/action buttons
el13drt 0:a8bc3aac5f69 19 DigitalIn buttonA(p19);
el13drt 0:a8bc3aac5f69 20 DigitalIn buttonB(p20);
el13drt 0:a8bc3aac5f69 21
el13drt 3:57bab3b1c974 22 // LED indicators
el13drt 3:57bab3b1c974 23 AnalogOut ledR(p18);// RED LED
el13drt 3:57bab3b1c974 24 DigitalOut ledY(p24);// YELLOW LED
el13drt 3:57bab3b1c974 25
el13drt 0:a8bc3aac5f69 26 // connections for joystick
el13drt 3:57bab3b1c974 27 DigitalIn button(p17);
el13drt 0:a8bc3aac5f69 28 AnalogIn xPot(p15);
el13drt 0:a8bc3aac5f69 29 AnalogIn yPot(p16);
el13drt 0:a8bc3aac5f69 30
el13drt 4:c6305031f80d 31 // create local file system
el13drt 4:c6305031f80d 32 //LocalFileSytem local("local");
el13drt 4:c6305031f80d 33
el13drt 0:a8bc3aac5f69 34 // boundary conditions
el13drt 0:a8bc3aac5f69 35 int cells [84][48];
el13drt 0:a8bc3aac5f69 36
el13drt 0:a8bc3aac5f69 37 // Globabl Variables /////////////////////////
el13drt 0:a8bc3aac5f69 38
el13drt 4:c6305031f80d 39 // player's score
el13drt 4:c6305031f80d 40 int score = 0;
el13drt 4:c6305031f80d 41
el13drt 4:c6305031f80d 42 // global variables for movement (pixelNinja)
el13drt 0:a8bc3aac5f69 43 int a1 = 22;
el13drt 0:a8bc3aac5f69 44 int a2 = 24;
el13drt 0:a8bc3aac5f69 45 int a3 = 23;
el13drt 0:a8bc3aac5f69 46 int a4 = 25;
el13drt 0:a8bc3aac5f69 47 int a5 = 20;
el13drt 0:a8bc3aac5f69 48 int a6 = 26;
el13drt 0:a8bc3aac5f69 49 int a7 = 19;
el13drt 0:a8bc3aac5f69 50 int a8 = 21;
el13drt 0:a8bc3aac5f69 51
el13drt 0:a8bc3aac5f69 52 //global variable for random X co-ordinates
el13drt 0:a8bc3aac5f69 53 int randX1;
el13drt 0:a8bc3aac5f69 54 int randX2;
el13drt 0:a8bc3aac5f69 55 int randX3;
el13drt 0:a8bc3aac5f69 56 int randX4;
el13drt 0:a8bc3aac5f69 57 int randX5;
el13drt 0:a8bc3aac5f69 58 int randX6;
el13drt 0:a8bc3aac5f69 59
el13drt 0:a8bc3aac5f69 60 // global variable for random Y co-ordinates
el13drt 0:a8bc3aac5f69 61 int randY1 = 0;
el13drt 0:a8bc3aac5f69 62 int randY2 = 0;
el13drt 0:a8bc3aac5f69 63 int randY3 = 0;
el13drt 0:a8bc3aac5f69 64 int randY4 = 0;
el13drt 0:a8bc3aac5f69 65 int randY5 = 0;
el13drt 0:a8bc3aac5f69 66 int randY6 = 0;
el13drt 0:a8bc3aac5f69 67
el13drt 0:a8bc3aac5f69 68 // timer to regularly read the joystick
el13drt 0:a8bc3aac5f69 69 Ticker pollJoystick;
el13drt 1:352c50e88ffa 70
el13drt 3:57bab3b1c974 71 // serial for debug
el13drt 0:a8bc3aac5f69 72 Serial serial(USBTX,USBRX);
el13drt 0:a8bc3aac5f69 73
el13drt 0:a8bc3aac5f69 74 // create enumerated type (0,1,2,3 etc. for direction)
el13drt 0:a8bc3aac5f69 75 // could be extended for diagonals etc.
el13drt 0:a8bc3aac5f69 76 enum DirectionName {
el13drt 0:a8bc3aac5f69 77 UP,
el13drt 0:a8bc3aac5f69 78 DOWN,
el13drt 0:a8bc3aac5f69 79 LEFT,
el13drt 0:a8bc3aac5f69 80 RIGHT,
el13drt 0:a8bc3aac5f69 81 CENTRE,
el13drt 0:a8bc3aac5f69 82 UNKNOWN
el13drt 0:a8bc3aac5f69 83 };
el13drt 0:a8bc3aac5f69 84
el13drt 0:a8bc3aac5f69 85 // struct for Joystick
el13drt 0:a8bc3aac5f69 86 typedef struct JoyStick Joystick;
el13drt 0:a8bc3aac5f69 87 struct JoyStick {
el13drt 0:a8bc3aac5f69 88 float x; // current x value
el13drt 0:a8bc3aac5f69 89 float x0; // 'centred' x value
el13drt 0:a8bc3aac5f69 90 float y; // current y value
el13drt 0:a8bc3aac5f69 91 float y0; // 'centred' y value
el13drt 0:a8bc3aac5f69 92 int button; // button state (assume pull-down used, so 1 = pressed, 0 = unpressed)
el13drt 0:a8bc3aac5f69 93 DirectionName direction; // current direction
el13drt 0:a8bc3aac5f69 94 };
el13drt 0:a8bc3aac5f69 95
el13drt 0:a8bc3aac5f69 96 // create struct variable
el13drt 0:a8bc3aac5f69 97 Joystick joystick;
el13drt 0:a8bc3aac5f69 98
el13drt 0:a8bc3aac5f69 99 int printFlag = 0;
el13drt 0:a8bc3aac5f69 100
el13drt 0:a8bc3aac5f69 101 // function prototypes
el13drt 0:a8bc3aac5f69 102 void calibrateJoystick();
el13drt 0:a8bc3aac5f69 103 void updateJoystick();
el13drt 0:a8bc3aac5f69 104
el13drt 0:a8bc3aac5f69 105 //intro screen
el13drt 0:a8bc3aac5f69 106 void welcome()
el13drt 0:a8bc3aac5f69 107 {
el13drt 0:a8bc3aac5f69 108 //bottom border
el13drt 0:a8bc3aac5f69 109 lcd.drawRect(0,44,84,2,1);
el13drt 0:a8bc3aac5f69 110
el13drt 0:a8bc3aac5f69 111 //top border
el13drt 0:a8bc3aac5f69 112 lcd.drawRect(0,1,84,2,1);
el13drt 0:a8bc3aac5f69 113
el13drt 0:a8bc3aac5f69 114 //print initials 'DRT'
el13drt 0:a8bc3aac5f69 115 lcd.printChar('D',30,14);
el13drt 0:a8bc3aac5f69 116 wait(0.6);
el13drt 0:a8bc3aac5f69 117 lcd.printChar('R',37,14);
el13drt 0:a8bc3aac5f69 118 wait(0.6);
el13drt 0:a8bc3aac5f69 119 lcd.printChar('T',44,14);
el13drt 0:a8bc3aac5f69 120 wait(0.6);
el13drt 0:a8bc3aac5f69 121
el13drt 0:a8bc3aac5f69 122 //print 'presents...'
el13drt 0:a8bc3aac5f69 123 lcd.printString("presents...",8,21);
el13drt 0:a8bc3aac5f69 124 wait(1.0);
el13drt 0:a8bc3aac5f69 125
el13drt 0:a8bc3aac5f69 126 //dramatic flashing
el13drt 0:a8bc3aac5f69 127 lcd.inverseMode();
el13drt 0:a8bc3aac5f69 128 wait(0.2);
el13drt 0:a8bc3aac5f69 129 lcd.normalMode();
el13drt 0:a8bc3aac5f69 130 wait(0.2);
el13drt 0:a8bc3aac5f69 131 lcd.inverseMode();
el13drt 0:a8bc3aac5f69 132 wait(0.2);
el13drt 0:a8bc3aac5f69 133 lcd.normalMode();
el13drt 0:a8bc3aac5f69 134 wait(1.0);
el13drt 0:a8bc3aac5f69 135
el13drt 0:a8bc3aac5f69 136 //more dramatic flashing
el13drt 0:a8bc3aac5f69 137 lcd.inverseMode();
el13drt 0:a8bc3aac5f69 138 wait(0.2);
el13drt 0:a8bc3aac5f69 139 lcd.normalMode();
el13drt 0:a8bc3aac5f69 140 wait(0.2);
el13drt 0:a8bc3aac5f69 141 lcd.inverseMode();
el13drt 0:a8bc3aac5f69 142 wait(0.2);
el13drt 0:a8bc3aac5f69 143 lcd.normalMode();
el13drt 0:a8bc3aac5f69 144 wait(0.6);
el13drt 0:a8bc3aac5f69 145 }
el13drt 0:a8bc3aac5f69 146
el13drt 0:a8bc3aac5f69 147 //selection menu///////////////////////////////////////////
el13drt 0:a8bc3aac5f69 148 void mainMenu()
el13drt 0:a8bc3aac5f69 149 {
el13drt 0:a8bc3aac5f69 150 //bottom border
el13drt 0:a8bc3aac5f69 151 lcd.drawRect(0,47,84,0,1);
el13drt 0:a8bc3aac5f69 152 //top border
el13drt 0:a8bc3aac5f69 153 lcd.drawRect(0,0,84,2,1);
el13drt 0:a8bc3aac5f69 154
el13drt 0:a8bc3aac5f69 155 //print 'Xtreme Tower'
el13drt 0:a8bc3aac5f69 156 lcd.printString("Xtreme",4,25);
el13drt 0:a8bc3aac5f69 157 lcd.printString("Tower",44,25);
el13drt 0:a8bc3aac5f69 158
el13drt 0:a8bc3aac5f69 159 //title outline
el13drt 0:a8bc3aac5f69 160 lcd.drawRect(3,6,77,10,0);
el13drt 0:a8bc3aac5f69 161
el13drt 0:a8bc3aac5f69 162 ////castle //x, y, w, h, fill//////////////////////
el13drt 0:a8bc3aac5f69 163
el13drt 0:a8bc3aac5f69 164 //castle main bulk
el13drt 0:a8bc3aac5f69 165 lcd.drawRect(59,32,21,8,1);
el13drt 0:a8bc3aac5f69 166
el13drt 0:a8bc3aac5f69 167 //left window bulk
el13drt 0:a8bc3aac5f69 168 lcd.drawRect(59,22,2,10,1);
el13drt 0:a8bc3aac5f69 169 //centre left window bulk
el13drt 0:a8bc3aac5f69 170 lcd.drawRect(65,22,2,10,1);
el13drt 0:a8bc3aac5f69 171 //centre right window bulk
el13drt 0:a8bc3aac5f69 172 lcd.drawRect(72,22,2,10,1);
el13drt 0:a8bc3aac5f69 173 //right window bulk
el13drt 0:a8bc3aac5f69 174 lcd.drawRect(78,22,2,10,1);
el13drt 0:a8bc3aac5f69 175 //central window bulk
el13drt 0:a8bc3aac5f69 176 lcd.drawRect(68,25,3,7,1);
el13drt 0:a8bc3aac5f69 177
el13drt 0:a8bc3aac5f69 178 //central window bulk
el13drt 0:a8bc3aac5f69 179 lcd.drawRect(75,28,0,0,1);
el13drt 0:a8bc3aac5f69 180 lcd.drawRect(77,28,0,0,1);
el13drt 0:a8bc3aac5f69 181 lcd.drawRect(64,28,0,0,1);
el13drt 0:a8bc3aac5f69 182 lcd.drawRect(62,28,0,0,1);
el13drt 0:a8bc3aac5f69 183
el13drt 0:a8bc3aac5f69 184 //above left window bulk
el13drt 0:a8bc3aac5f69 185 lcd.drawRect(62,25,3,2,1);
el13drt 0:a8bc3aac5f69 186 //above right window bulk
el13drt 0:a8bc3aac5f69 187 lcd.drawRect(75,25,2,2,1);
el13drt 0:a8bc3aac5f69 188
el13drt 0:a8bc3aac5f69 189 //lower right line
el13drt 0:a8bc3aac5f69 190 lcd.drawRect(71,42,9,0,1);
el13drt 0:a8bc3aac5f69 191 //upper right line
el13drt 0:a8bc3aac5f69 192 lcd.drawRect(70,41,10,0,1);
el13drt 0:a8bc3aac5f69 193
el13drt 0:a8bc3aac5f69 194 //upper left line
el13drt 0:a8bc3aac5f69 195 lcd.drawRect(59,41,10,0,1);
el13drt 0:a8bc3aac5f69 196 //lower left line
el13drt 0:a8bc3aac5f69 197 lcd.drawRect(59,42,9,0,1);
el13drt 0:a8bc3aac5f69 198
el13drt 0:a8bc3aac5f69 199 //bottom left bulk
el13drt 0:a8bc3aac5f69 200 lcd.drawRect(59,43,8,3,1);
el13drt 0:a8bc3aac5f69 201 //bottom right bulk
el13drt 0:a8bc3aac5f69 202 lcd.drawRect(72,43,8,3,1);
el13drt 0:a8bc3aac5f69 203
el13drt 0:a8bc3aac5f69 204 //option arrows - lower
el13drt 0:a8bc3aac5f69 205 lcd.drawRect(27,42,4,0,1);
el13drt 0:a8bc3aac5f69 206 lcd.drawRect(28,43,2,0,1);
el13drt 0:a8bc3aac5f69 207 lcd.drawRect(29,44,0,0,1);
el13drt 0:a8bc3aac5f69 208
el13drt 0:a8bc3aac5f69 209 //option arrows - higher
el13drt 0:a8bc3aac5f69 210 lcd.drawRect(27,29,4,0,1);
el13drt 0:a8bc3aac5f69 211 lcd.drawRect(28,28,2,0,1);
el13drt 0:a8bc3aac5f69 212 lcd.drawRect(29,27,0,0,1);
el13drt 0:a8bc3aac5f69 213 }
el13drt 0:a8bc3aac5f69 214
el13drt 0:a8bc3aac5f69 215 // static background
el13drt 0:a8bc3aac5f69 216 void backGround()
el13drt 0:a8bc3aac5f69 217 {
el13drt 0:a8bc3aac5f69 218 // x, y, w, h, fill - draw ground
el13drt 0:a8bc3aac5f69 219 lcd.drawRect(0,47,84,0,1);
el13drt 0:a8bc3aac5f69 220
el13drt 0:a8bc3aac5f69 221 // x, y, w, h, fill - draw left wall
el13drt 0:a8bc3aac5f69 222 lcd.drawRect(2,0,0,47,1);
el13drt 0:a8bc3aac5f69 223 // left wall - brick line 1
el13drt 0:a8bc3aac5f69 224 for(int x=0; x<47; x+=4)
el13drt 0:a8bc3aac5f69 225 lcd.drawLine(1,1,1,48,2);
el13drt 0:a8bc3aac5f69 226 // left wall - brick line 2
el13drt 0:a8bc3aac5f69 227 for(int x=0; x<47; x+=4)
el13drt 0:a8bc3aac5f69 228 lcd.drawLine(0,0,0,48,2);
el13drt 0:a8bc3aac5f69 229
el13drt 0:a8bc3aac5f69 230 // x, y, w, h, fill - draw right wall
el13drt 0:a8bc3aac5f69 231 lcd.drawRect(81,0,0,47,1);
el13drt 0:a8bc3aac5f69 232 // right wall - brick line 1
el13drt 0:a8bc3aac5f69 233 for(int x=0; x<WIDTH; x+=4)
el13drt 0:a8bc3aac5f69 234 lcd.drawLine(82,0,82,48,2);
el13drt 0:a8bc3aac5f69 235 // right wall - brick line 2
el13drt 0:a8bc3aac5f69 236 for(int x=0; x<WIDTH; x+=4)
el13drt 0:a8bc3aac5f69 237 lcd.drawLine(83,1,83,48,2);
el13drt 0:a8bc3aac5f69 238
el13drt 0:a8bc3aac5f69 239 lcd.refresh();
el13drt 0:a8bc3aac5f69 240 }
el13drt 0:a8bc3aac5f69 241
el13drt 0:a8bc3aac5f69 242 //pixel ninja character
el13drt 0:a8bc3aac5f69 243 void pixelNinja()
el13drt 0:a8bc3aac5f69 244 {
el13drt 0:a8bc3aac5f69 245 //x, y, w, h, fill - left leg
el13drt 0:a8bc3aac5f69 246 lcd.drawRect(a1,39,0,7,1);
el13drt 0:a8bc3aac5f69 247 //right leg
el13drt 0:a8bc3aac5f69 248 lcd.drawRect(a2,39,0,7,1);
el13drt 0:a8bc3aac5f69 249 //centre stick
el13drt 0:a8bc3aac5f69 250 lcd.drawRect(a3,37,0,7,1);
el13drt 0:a8bc3aac5f69 251 //back of the head
el13drt 0:a8bc3aac5f69 252 lcd.drawRect(a1,33,0,4,1);
el13drt 0:a8bc3aac5f69 253 //top of the head
el13drt 0:a8bc3aac5f69 254 lcd.drawRect(a1,33,4,0,1);
el13drt 0:a8bc3aac5f69 255 //jaw
el13drt 0:a8bc3aac5f69 256 lcd.drawRect(a2,38,2,0,1);
el13drt 0:a8bc3aac5f69 257 //right shoulder
el13drt 0:a8bc3aac5f69 258 lcd.drawRect(a4,40,1,0,1);
el13drt 0:a8bc3aac5f69 259 //left shoulder
el13drt 0:a8bc3aac5f69 260 lcd.drawRect(a5,40,1,0,1);
el13drt 0:a8bc3aac5f69 261 //left arm
el13drt 0:a8bc3aac5f69 262 lcd.drawRect(a5,41,0,1,1);
el13drt 0:a8bc3aac5f69 263 //right arm
el13drt 0:a8bc3aac5f69 264 lcd.drawRect(a6,41,0,1,1);
el13drt 0:a8bc3aac5f69 265 //right eye
el13drt 0:a8bc3aac5f69 266 lcd.drawRect(a6,35,0,0,1);
el13drt 0:a8bc3aac5f69 267 //mouth piece
el13drt 0:a8bc3aac5f69 268 lcd.drawRect(a6,37,0,0,1);
el13drt 0:a8bc3aac5f69 269 //left eye
el13drt 0:a8bc3aac5f69 270 lcd.drawRect(a2,35,0,0,1);
el13drt 0:a8bc3aac5f69 271 //sword handle
el13drt 0:a8bc3aac5f69 272 lcd.drawRect(a7,36,0,0,1);
el13drt 0:a8bc3aac5f69 273 lcd.drawRect(a5,37,0,0,1);
el13drt 0:a8bc3aac5f69 274 lcd.drawRect(a8,38,0,0,1);
el13drt 0:a8bc3aac5f69 275 }
el13drt 0:a8bc3aac5f69 276
el13drt 4:c6305031f80d 277 // resets back to initial values
el13drt 4:c6305031f80d 278 void resetGame()
el13drt 0:a8bc3aac5f69 279 {
el13drt 4:c6305031f80d 280 score = 0;
el13drt 0:a8bc3aac5f69 281
el13drt 4:c6305031f80d 282 a1 = 22;
el13drt 4:c6305031f80d 283 a2 = 24;
el13drt 4:c6305031f80d 284 a3 = 23;
el13drt 4:c6305031f80d 285 a4 = 25;
el13drt 4:c6305031f80d 286 a5 = 20;
el13drt 4:c6305031f80d 287 a6 = 26;
el13drt 4:c6305031f80d 288 a7 = 19;
el13drt 4:c6305031f80d 289 a8 = 21;
el13drt 0:a8bc3aac5f69 290
el13drt 4:c6305031f80d 291 // in this case the X values are given a
el13drt 4:c6305031f80d 292 // new random variable each time the player
el13drt 4:c6305031f80d 293 // dies or exits and starts a new game
el13drt 4:c6305031f80d 294 randX1 = rand() % 74 + 5;
el13drt 4:c6305031f80d 295 randX2 = rand() % 74 + 5;
el13drt 4:c6305031f80d 296 randX3 = rand() % 74 + 5;
el13drt 4:c6305031f80d 297 randX4 = rand() % 74 + 5;
el13drt 4:c6305031f80d 298 randX5 = rand() % 74 + 5;
el13drt 4:c6305031f80d 299 randX6 = rand() % 74 + 5;
el13drt 3:57bab3b1c974 300
el13drt 4:c6305031f80d 301 randY1 = 0;
el13drt 4:c6305031f80d 302 randY2 = 0;
el13drt 4:c6305031f80d 303 randY3 = 0;
el13drt 4:c6305031f80d 304 randY4 = 0;
el13drt 4:c6305031f80d 305 randY5 = 0;
el13drt 4:c6305031f80d 306 randY6 = 0;
el13drt 4:c6305031f80d 307 lcd.clear();
el13drt 4:c6305031f80d 308
el13drt 0:a8bc3aac5f69 309 }
el13drt 0:a8bc3aac5f69 310
el13drt 0:a8bc3aac5f69 311 // draws falling hazards
el13drt 0:a8bc3aac5f69 312 void hazards()
el13drt 0:a8bc3aac5f69 313 {
el13drt 0:a8bc3aac5f69 314 // X, Y, radius, fill
el13drt 0:a8bc3aac5f69 315 lcd.drawCircle(randX1,randY1,2,1);
el13drt 0:a8bc3aac5f69 316 lcd.drawCircle(randX2,randY2,2,1);
el13drt 0:a8bc3aac5f69 317 lcd.drawCircle(randX3,randY3,2,1);
el13drt 0:a8bc3aac5f69 318 lcd.drawCircle(randX4,randY4,2,1);
el13drt 0:a8bc3aac5f69 319 lcd.drawCircle(randX5,randY5,2,1);
el13drt 0:a8bc3aac5f69 320 lcd.drawCircle(randX6,randY6,2,1);
el13drt 0:a8bc3aac5f69 321
el13drt 0:a8bc3aac5f69 322 lcd.refresh();
el13drt 0:a8bc3aac5f69 323 }
el13drt 0:a8bc3aac5f69 324
el13drt 0:a8bc3aac5f69 325 // makes hazards fall - randomises X axis co-ordinates
el13drt 0:a8bc3aac5f69 326 void hazardFall()
el13drt 0:a8bc3aac5f69 327 {
el13drt 0:a8bc3aac5f69 328 // increments randY1 variables
el13drt 0:a8bc3aac5f69 329 // appearing to make them fall
el13drt 0:a8bc3aac5f69 330 randY1 = randY1+=2;
el13drt 0:a8bc3aac5f69 331 randY2 = randY2+=2;
el13drt 0:a8bc3aac5f69 332 randY3 = randY3+=2;
el13drt 0:a8bc3aac5f69 333 randY4 = randY4+=2;
el13drt 0:a8bc3aac5f69 334 randY5 = randY5+=2;
el13drt 0:a8bc3aac5f69 335 randY6 = randY6+=2;
el13drt 0:a8bc3aac5f69 336
el13drt 0:a8bc3aac5f69 337 // loops the objects once they 'hit the floor'
el13drt 0:a8bc3aac5f69 338 // this imitates a new set of objects falling
el13drt 0:a8bc3aac5f69 339
el13drt 0:a8bc3aac5f69 340 if (randY1>=48)
el13drt 0:a8bc3aac5f69 341 randY1=0;
el13drt 0:a8bc3aac5f69 342
el13drt 0:a8bc3aac5f69 343 if (randY2>=48)
el13drt 0:a8bc3aac5f69 344 randY2=0;
el13drt 0:a8bc3aac5f69 345
el13drt 0:a8bc3aac5f69 346 if (randY3>=48)
el13drt 0:a8bc3aac5f69 347 randY3=0;
el13drt 0:a8bc3aac5f69 348
el13drt 0:a8bc3aac5f69 349 if (randY4>=48)
el13drt 0:a8bc3aac5f69 350 randY4=0;
el13drt 0:a8bc3aac5f69 351
el13drt 0:a8bc3aac5f69 352 if (randY5>=48)
el13drt 0:a8bc3aac5f69 353 randY5=0;
el13drt 0:a8bc3aac5f69 354
el13drt 0:a8bc3aac5f69 355 // each time the objects loop, a new pseudo random value
el13drt 0:a8bc3aac5f69 356 // is assigned to the global variables (randX) to
el13drt 0:a8bc3aac5f69 357 // randomise their positions
el13drt 0:a8bc3aac5f69 358
el13drt 0:a8bc3aac5f69 359 if (randY6>=48) {
el13drt 0:a8bc3aac5f69 360 randY6=0;
el13drt 0:a8bc3aac5f69 361
el13drt 6:fa2928bcec17 362 score = score++;//increment score by 1 after each wave of hazards
el13drt 4:c6305031f80d 363
el13drt 0:a8bc3aac5f69 364 randX1 = rand() % 74 + 5;// psuedo random number
el13drt 0:a8bc3aac5f69 365 randX2 = rand() % 74 + 5;// between 5 and 74
el13drt 0:a8bc3aac5f69 366 randX3 = rand() % 74 + 5;
el13drt 0:a8bc3aac5f69 367 randX4 = rand() % 74 + 5;
el13drt 0:a8bc3aac5f69 368 randX5 = rand() % 74 + 5;
el13drt 0:a8bc3aac5f69 369 randX6 = rand() % 74 + 5;
el13drt 0:a8bc3aac5f69 370 }
el13drt 0:a8bc3aac5f69 371 }
el13drt 0:a8bc3aac5f69 372
el13drt 0:a8bc3aac5f69 373 // clears old pixels and keeps set pixels
el13drt 0:a8bc3aac5f69 374 void startrek()
el13drt 0:a8bc3aac5f69 375 {
el13drt 0:a8bc3aac5f69 376 for (int i=3; i<81; i++)// loops through rows
el13drt 0:a8bc3aac5f69 377 for (int j=0; j<47; j++)
el13drt 0:a8bc3aac5f69 378 if (cells[i][j]) {// if there's a pixel then keep it
el13drt 0:a8bc3aac5f69 379 lcd.setPixel(i,j);
el13drt 0:a8bc3aac5f69 380 } else {
el13drt 0:a8bc3aac5f69 381 lcd.clearPixel(i,j);// else remove the old ones
el13drt 0:a8bc3aac5f69 382 }
el13drt 0:a8bc3aac5f69 383 lcd.refresh();
el13drt 0:a8bc3aac5f69 384 }
el13drt 0:a8bc3aac5f69 385
el13drt 3:57bab3b1c974 386 // sound / light when buttonA is closed
el13drt 3:57bab3b1c974 387 void actionButton()
el13drt 3:57bab3b1c974 388 {
el13drt 3:57bab3b1c974 389 buttonA.mode(PullDown);
el13drt 3:57bab3b1c974 390 if (buttonA == 1) {
el13drt 3:57bab3b1c974 391 ledY = 1;
el13drt 3:57bab3b1c974 392 } else {
el13drt 3:57bab3b1c974 393 ledY = 0;
el13drt 3:57bab3b1c974 394 }
el13drt 3:57bab3b1c974 395 }
el13drt 3:57bab3b1c974 396
el13drt 3:57bab3b1c974 397 // sound / light when buttonB is closed
el13drt 3:57bab3b1c974 398 void backButton()
el13drt 3:57bab3b1c974 399 {
el13drt 3:57bab3b1c974 400 buttonB.mode(PullDown);
el13drt 3:57bab3b1c974 401 if (buttonA == 1) {
el13drt 3:57bab3b1c974 402 ledY = 1;
el13drt 3:57bab3b1c974 403 } else {
el13drt 3:57bab3b1c974 404 ledY = 0;
el13drt 3:57bab3b1c974 405 }
el13drt 3:57bab3b1c974 406 }
el13drt 3:57bab3b1c974 407
el13drt 4:c6305031f80d 408 //// MAIN /////////////////////////////////////////////////
el13drt 3:57bab3b1c974 409
el13drt 0:a8bc3aac5f69 410 int main()
el13drt 0:a8bc3aac5f69 411 {
el13drt 0:a8bc3aac5f69 412 //////// set initial values - configurate joystick /////////////////////////////////
el13drt 1:352c50e88ffa 413
el13drt 3:57bab3b1c974 414 // Power indicator - RED LED
el13drt 3:57bab3b1c974 415 ledR = 1;
el13drt 3:57bab3b1c974 416
el13drt 5:a0e4a67266d6 417 int exitFlag = 0;
el13drt 5:a0e4a67266d6 418
el13drt 3:57bab3b1c974 419 // initialize time seed for psuedo randomaisation
el13drt 0:a8bc3aac5f69 420 srand (time(NULL));
el13drt 0:a8bc3aac5f69 421
el13drt 0:a8bc3aac5f69 422 // generate random x co-ordinates for falling hazards
el13drt 0:a8bc3aac5f69 423 // (initial values only)
el13drt 0:a8bc3aac5f69 424 // value between 3 and 76
el13drt 0:a8bc3aac5f69 425 randX1 = rand() % 74 + 5;
el13drt 0:a8bc3aac5f69 426 randX2 = rand() % 74 + 5;
el13drt 0:a8bc3aac5f69 427 randX3 = rand() % 74 + 5;
el13drt 0:a8bc3aac5f69 428 randX4 = rand() % 74 + 5;
el13drt 0:a8bc3aac5f69 429 randX5 = rand() % 74 + 5;
el13drt 0:a8bc3aac5f69 430 randX6 = rand() % 74 + 5;
el13drt 0:a8bc3aac5f69 431
el13drt 6:fa2928bcec17 432 // char buffer[14];
el13drt 6:fa2928bcec17 433 // int length = sprintf(buffer,"Level:%2d",score);//insert int level
el13drt 6:fa2928bcec17 434
el13drt 0:a8bc3aac5f69 435 calibrateJoystick(); // get centred values of joystick
el13drt 0:a8bc3aac5f69 436 pollJoystick.attach(&updateJoystick,1.0/10.0); // read joystick 10 times per second
el13drt 0:a8bc3aac5f69 437
el13drt 1:352c50e88ffa 438 /////// initiate main menu //////////////////////////////////////////////////////////////
el13drt 1:352c50e88ffa 439
el13drt 0:a8bc3aac5f69 440 lcd.init();//initialise screen
el13drt 0:a8bc3aac5f69 441 welcome();//welcome screen
el13drt 0:a8bc3aac5f69 442 lcd.clear();//clear pixels
el13drt 0:a8bc3aac5f69 443
el13drt 1:352c50e88ffa 444 /////// Menu Selection Loop ////////////////////////////////////////////////////////////
el13drt 1:352c50e88ffa 445
el13drt 5:a0e4a67266d6 446 // option counters
el13drt 5:a0e4a67266d6 447 int mainOption = 0;//counter for main menu
el13drt 5:a0e4a67266d6 448 int exitOption = 0;//counter for exit menu
el13drt 3:57bab3b1c974 449
el13drt 3:57bab3b1c974 450 // loop 1 - menu
el13drt 1:352c50e88ffa 451 while(1) {
el13drt 1:352c50e88ffa 452
el13drt 4:c6305031f80d 453 mainMenu();
el13drt 5:a0e4a67266d6 454 actionButton();
el13drt 4:c6305031f80d 455
el13drt 3:57bab3b1c974 456 // joystick selection
el13drt 3:57bab3b1c974 457 if (printFlag) { //if flag set, clear flag and print joystick values to serial port
el13drt 1:352c50e88ffa 458 printFlag = 0;
el13drt 1:352c50e88ffa 459 serial.printf("x = %f y = %f button = %d ",joystick.x,joystick.y,joystick.button);
el13drt 0:a8bc3aac5f69 460
el13drt 3:57bab3b1c974 461 // option up
el13drt 2:8fac5562ed1e 462 if (joystick.direction == UP) {
el13drt 1:352c50e88ffa 463 serial.printf(" UP\n");
el13drt 5:a0e4a67266d6 464 mainOption = mainOption--;
el13drt 5:a0e4a67266d6 465 if (mainOption < 0)mainOption = 0;
el13drt 2:8fac5562ed1e 466 }
el13drt 3:57bab3b1c974 467 // option down
el13drt 2:8fac5562ed1e 468 if (joystick.direction == DOWN) {
el13drt 2:8fac5562ed1e 469 serial.printf(" DOWN\n");
el13drt 5:a0e4a67266d6 470 mainOption = mainOption++;
el13drt 5:a0e4a67266d6 471 if (mainOption > 2)mainOption = 2;
el13drt 1:352c50e88ffa 472 }
el13drt 2:8fac5562ed1e 473 // Centre / Unknown orientation
el13drt 2:8fac5562ed1e 474 if (joystick.direction == CENTRE)
el13drt 2:8fac5562ed1e 475 serial.printf(" CENTRE\n");
el13drt 2:8fac5562ed1e 476 if (joystick.direction == UNKNOWN)
el13drt 2:8fac5562ed1e 477 serial.printf(" Unsupported direction\n");
el13drt 3:57bab3b1c974 478
el13drt 3:57bab3b1c974 479 // 'Play Game' option 1
el13drt 5:a0e4a67266d6 480 if (mainOption == 0) {
el13drt 1:352c50e88ffa 481 lcd.printString("Play Game",3,4);
el13drt 1:352c50e88ffa 482 }
el13drt 4:c6305031f80d 483 // 'High Scores' option 2
el13drt 5:a0e4a67266d6 484 if (mainOption == 1) {
el13drt 4:c6305031f80d 485 lcd.printString(" Scores ",3,4);
el13drt 4:c6305031f80d 486 }
el13drt 4:c6305031f80d 487 // 'Options' option 3
el13drt 5:a0e4a67266d6 488 if (mainOption == 2) {
el13drt 1:352c50e88ffa 489 lcd.printString(" Options ",3,4);
el13drt 1:352c50e88ffa 490 }
el13drt 3:57bab3b1c974 491 }
el13drt 4:c6305031f80d 492
el13drt 3:57bab3b1c974 493 //////////// Game Loop /////////////////////////////////////////////////////////////
el13drt 3:57bab3b1c974 494
el13drt 3:57bab3b1c974 495 // 'Play Game' selected
el13drt 5:a0e4a67266d6 496 if ((mainOption == 0)&&(buttonA == 1)) {
el13drt 3:57bab3b1c974 497
el13drt 4:c6305031f80d 498 lcd.clear();
el13drt 4:c6305031f80d 499
el13drt 4:c6305031f80d 500 actionButton();
el13drt 4:c6305031f80d 501 backButton();
el13drt 3:57bab3b1c974 502 backGround();
el13drt 3:57bab3b1c974 503
el13drt 6:fa2928bcec17 504 // if (length <= 12) // if string < 12 characters
el13drt 6:fa2928bcec17 505 // lcd.printString(buffer,3,0);// display on screen
el13drt 6:fa2928bcec17 506
el13drt 4:c6305031f80d 507 // loop 3 - Game loop
el13drt 3:57bab3b1c974 508 while(1) {
el13drt 3:57bab3b1c974 509
el13drt 6:fa2928bcec17 510 // print score - top left of display
el13drt 6:fa2928bcec17 511 char buffer[14];//create buffer for string
el13drt 6:fa2928bcec17 512 int length = sprintf(buffer,"Level:%d",score);//insert buffer
el13drt 6:fa2928bcec17 513 if (length <= 14) //ensure length is smaller than screen
el13drt 6:fa2928bcec17 514 lcd.printString(buffer,3,0);//display
el13drt 6:fa2928bcec17 515
el13drt 4:c6305031f80d 516 actionButton();
el13drt 4:c6305031f80d 517 backButton();
el13drt 4:c6305031f80d 518
el13drt 4:c6305031f80d 519 pixelNinja();//set character
el13drt 4:c6305031f80d 520 hazards();//initiates hazards
el13drt 4:c6305031f80d 521 hazardFall();//increments hazards towards floor
el13drt 4:c6305031f80d 522
el13drt 4:c6305031f80d 523 if (printFlag) { //if flag set, clear flag and print joystick values to serial port
el13drt 4:c6305031f80d 524 printFlag = 0;
el13drt 4:c6305031f80d 525 serial.printf("x = %f y = %f button = %d \n",joystick.x,joystick.y,joystick.button);
el13drt 3:57bab3b1c974 526
el13drt 4:c6305031f80d 527 // check joystick direction
el13drt 4:c6305031f80d 528 if (joystick.direction == LEFT) {
el13drt 4:c6305031f80d 529 serial.printf(" LEFT\n");
el13drt 4:c6305031f80d 530 a1 = a1-=2;
el13drt 4:c6305031f80d 531 a2 = a2-=2;
el13drt 4:c6305031f80d 532 a3 = a3-=2;
el13drt 4:c6305031f80d 533 a4 = a4-=2;
el13drt 4:c6305031f80d 534 a5 = a5-=2;
el13drt 4:c6305031f80d 535 a6 = a6-=2;
el13drt 4:c6305031f80d 536 a7 = a7-=2;
el13drt 4:c6305031f80d 537 a8 = a8-=2;
el13drt 4:c6305031f80d 538 }
el13drt 4:c6305031f80d 539 if (joystick.direction == RIGHT) {
el13drt 4:c6305031f80d 540 serial.printf(" RIGHT\n");
el13drt 4:c6305031f80d 541 a1 = a1+=2;
el13drt 4:c6305031f80d 542 a2 = a2+=2;
el13drt 4:c6305031f80d 543 a3 = a3+=2;
el13drt 4:c6305031f80d 544 a4 = a4+=2;
el13drt 4:c6305031f80d 545 a5 = a5+=2;
el13drt 4:c6305031f80d 546 a6 = a6+=2;
el13drt 4:c6305031f80d 547 a7 = a7+=2;
el13drt 4:c6305031f80d 548 a8 = a8+=2;
el13drt 4:c6305031f80d 549 }
el13drt 4:c6305031f80d 550 if (joystick.direction == CENTRE)
el13drt 4:c6305031f80d 551 serial.printf(" CENTRE\n");
el13drt 4:c6305031f80d 552 if (joystick.direction == UNKNOWN)
el13drt 4:c6305031f80d 553 serial.printf(" Unsupported direction\n");
el13drt 3:57bab3b1c974 554
el13drt 5:a0e4a67266d6 555 // integer to represent character being
el13drt 5:a0e4a67266d6 556 // struck by falling object
el13drt 5:a0e4a67266d6 557 int contactPoint = 0;
el13drt 4:c6305031f80d 558
el13drt 4:c6305031f80d 559 // contact points
el13drt 4:c6305031f80d 560 if(lcd.getPixel((a1+4),32))
el13drt 5:a0e4a67266d6 561 contactPoint++;
el13drt 4:c6305031f80d 562 if(lcd.getPixel((a1),32))
el13drt 5:a0e4a67266d6 563 contactPoint++;
el13drt 4:c6305031f80d 564 if(lcd.getPixel((a7),32))
el13drt 5:a0e4a67266d6 565 contactPoint++;
el13drt 3:57bab3b1c974 566
el13drt 5:a0e4a67266d6 567 // if contact point is not zero
el13drt 5:a0e4a67266d6 568 // character has been hit
el13drt 5:a0e4a67266d6 569 // and the game ends
el13drt 5:a0e4a67266d6 570 if ( contactPoint !=0) {
el13drt 6:fa2928bcec17 571 lcd.printString("Game Over",17,2);
el13drt 4:c6305031f80d 572 wait(0.5);
el13drt 4:c6305031f80d 573 lcd.inverseMode();
el13drt 4:c6305031f80d 574 wait(0.5);
el13drt 4:c6305031f80d 575 lcd.normalMode();
el13drt 4:c6305031f80d 576 wait(0.5);
el13drt 4:c6305031f80d 577 lcd.inverseMode();
el13drt 4:c6305031f80d 578 wait(0.5);
el13drt 4:c6305031f80d 579 lcd.normalMode();
el13drt 4:c6305031f80d 580 wait(0.5);
el13drt 4:c6305031f80d 581 resetGame();
el13drt 4:c6305031f80d 582 break;
el13drt 4:c6305031f80d 583 }
el13drt 4:c6305031f80d 584 startrek();//clears unset pixels, keeps set pixels
el13drt 4:c6305031f80d 585
el13drt 5:a0e4a67266d6 586 ///////////////////// Exit Menu (Back button pressed)///////////////////////////////////////////
el13drt 5:a0e4a67266d6 587
el13drt 4:c6305031f80d 588 if(buttonB == 1) {
el13drt 5:a0e4a67266d6 589
el13drt 5:a0e4a67266d6 590 // set exit menu
el13drt 5:a0e4a67266d6 591 lcd.clear();
el13drt 5:a0e4a67266d6 592 lcd.drawRect(8,6,70,30,0);//title outline
el13drt 5:a0e4a67266d6 593 lcd.printString("Exit Game?",10,25);
el13drt 5:a0e4a67266d6 594 backGround();
el13drt 5:a0e4a67266d6 595
el13drt 6:fa2928bcec17 596 // option arrow - right
el13drt 6:fa2928bcec17 597 lcd.drawRect(55,25,0,4,1);
el13drt 6:fa2928bcec17 598 lcd.drawRect(56,26,0,2,1);
el13drt 6:fa2928bcec17 599 lcd.drawRect(57,27,0,0,1);
el13drt 6:fa2928bcec17 600
el13drt 6:fa2928bcec17 601 // option arrow - left
el13drt 6:fa2928bcec17 602 lcd.drawRect(27,25,0,4,1);
el13drt 6:fa2928bcec17 603 lcd.drawRect(26,26,0,2,1);
el13drt 6:fa2928bcec17 604 lcd.drawRect(25,27,0,0,1);
el13drt 6:fa2928bcec17 605
el13drt 6:fa2928bcec17 606
el13drt 6:fa2928bcec17 607
el13drt 5:a0e4a67266d6 608 while(1) {
el13drt 5:a0e4a67266d6 609
el13drt 5:a0e4a67266d6 610 if (printFlag) { //if flag set, clear flag and print joystick values to serial port
el13drt 5:a0e4a67266d6 611 printFlag = 0;
el13drt 5:a0e4a67266d6 612 serial.printf("x = %f y = %f button = %d \n",joystick.x,joystick.y,joystick.button);
el13drt 5:a0e4a67266d6 613
el13drt 5:a0e4a67266d6 614 // check joystick direction
el13drt 5:a0e4a67266d6 615 if (joystick.direction == LEFT) {
el13drt 5:a0e4a67266d6 616 serial.printf(" LEFT\n");
el13drt 5:a0e4a67266d6 617 exitOption--;
el13drt 5:a0e4a67266d6 618 if(exitOption < 0)exitOption = 0;
el13drt 5:a0e4a67266d6 619 }
el13drt 5:a0e4a67266d6 620 if (joystick.direction == RIGHT) {
el13drt 5:a0e4a67266d6 621 serial.printf(" RIGHT\n");
el13drt 5:a0e4a67266d6 622 exitOption++;
el13drt 5:a0e4a67266d6 623 if(exitOption > 1)exitOption = 1;
el13drt 5:a0e4a67266d6 624 }
el13drt 5:a0e4a67266d6 625 if (joystick.direction == CENTRE)
el13drt 5:a0e4a67266d6 626 serial.printf(" CENTRE\n");
el13drt 5:a0e4a67266d6 627 if (joystick.direction == UNKNOWN)
el13drt 5:a0e4a67266d6 628 serial.printf(" Unsupported direction\n");
el13drt 5:a0e4a67266d6 629 }
el13drt 5:a0e4a67266d6 630 // draws option cursor
el13drt 5:a0e4a67266d6 631 if(exitOption == 0) {
el13drt 6:fa2928bcec17 632 lcd.printString("YES",29,27);
el13drt 5:a0e4a67266d6 633 }
el13drt 5:a0e4a67266d6 634 if(exitOption == 1) {
el13drt 6:fa2928bcec17 635 lcd.printString(" NO",29,27);
el13drt 5:a0e4a67266d6 636 }
el13drt 5:a0e4a67266d6 637
el13drt 5:a0e4a67266d6 638 // exits game
el13drt 5:a0e4a67266d6 639 if((buttonA == 1)&&(exitOption == 0)) { //returns to menu
el13drt 5:a0e4a67266d6 640 actionButton();
el13drt 5:a0e4a67266d6 641 lcd.clear();//clears screen
el13drt 5:a0e4a67266d6 642 resetGame();//resets scores/objects
el13drt 5:a0e4a67266d6 643 exitFlag = 1;//sets exit flag
el13drt 5:a0e4a67266d6 644 break;
el13drt 5:a0e4a67266d6 645 }
el13drt 5:a0e4a67266d6 646 // returns to game
el13drt 5:a0e4a67266d6 647 if((buttonA == 1)&&(exitOption == 1)) {
el13drt 5:a0e4a67266d6 648 break;
el13drt 5:a0e4a67266d6 649 }
el13drt 5:a0e4a67266d6 650 }
el13drt 5:a0e4a67266d6 651 // GAME LOOP
el13drt 5:a0e4a67266d6 652
el13drt 5:a0e4a67266d6 653 if (exitFlag!=0) { //if exit flag set
el13drt 5:a0e4a67266d6 654 exitFlag = 0;//reset flag
el13drt 5:a0e4a67266d6 655 break;//break to main menu
el13drt 5:a0e4a67266d6 656 }
el13drt 4:c6305031f80d 657 }
el13drt 4:c6305031f80d 658 serial.printf("Score: %i \n",score);
el13drt 5:a0e4a67266d6 659 }
el13drt 5:a0e4a67266d6 660 }
el13drt 5:a0e4a67266d6 661 }
el13drt 4:c6305031f80d 662
el13drt 4:c6305031f80d 663 ////////// High Scores Loop //////////////////////////////////////////////////
el13drt 4:c6305031f80d 664
el13drt 5:a0e4a67266d6 665 if((mainOption == 1)&&(buttonA == 1)) {
el13drt 3:57bab3b1c974 666
el13drt 4:c6305031f80d 667 actionButton();
el13drt 4:c6305031f80d 668 backButton();
el13drt 5:a0e4a67266d6 669
el13drt 4:c6305031f80d 670 lcd.clear();//clear screen
el13drt 4:c6305031f80d 671 backGround();//set background
el13drt 6:fa2928bcec17 672 lcd.printString("High Scores",10,0);//title
el13drt 6:fa2928bcec17 673
el13drt 6:fa2928bcec17 674 // players high scores - highest first
el13drt 6:fa2928bcec17 675 char highScore1[14];//create buffer for strings
el13drt 6:fa2928bcec17 676 char highScore2[14];
el13drt 6:fa2928bcec17 677 char highScore3[14];
el13drt 6:fa2928bcec17 678
el13drt 6:fa2928bcec17 679 int player1 = sprintf(highScore1,"1.DRT.....99",score);//insert buffer
el13drt 6:fa2928bcec17 680 int player2 = sprintf(highScore2,"2.NRG.....98",score);//insert buffer
el13drt 6:fa2928bcec17 681 int player3 = sprintf(highScore3,"3.GRT.....10",score);//insert buffer
el13drt 6:fa2928bcec17 682
el13drt 6:fa2928bcec17 683 if (player1 <= 14) //ensure length is smaller than screen
el13drt 6:fa2928bcec17 684 lcd.printString(highScore1,5,2);//display
el13drt 6:fa2928bcec17 685 if (player2 <= 14) //ensure length is smaller than screen
el13drt 6:fa2928bcec17 686 lcd.printString(highScore2,5,3);//display
el13drt 6:fa2928bcec17 687 if (player3 <= 14) //ensure length is smaller than screen
el13drt 6:fa2928bcec17 688 lcd.printString(highScore3,5,4);//display
el13drt 5:a0e4a67266d6 689
el13drt 4:c6305031f80d 690 while(1) {
el13drt 3:57bab3b1c974 691
el13drt 4:c6305031f80d 692 actionButton();
el13drt 4:c6305031f80d 693 backButton();
el13drt 4:c6305031f80d 694
el13drt 4:c6305031f80d 695 // back to menu
el13drt 4:c6305031f80d 696 if(buttonB == 1) {
el13drt 4:c6305031f80d 697 lcd.clear();
el13drt 4:c6305031f80d 698 break;
el13drt 4:c6305031f80d 699 }
el13drt 4:c6305031f80d 700 }
el13drt 4:c6305031f80d 701 }
el13drt 4:c6305031f80d 702
el13drt 4:c6305031f80d 703 ////////// OPTIONS LOOP /////////////////////////////////////////////////////
el13drt 3:57bab3b1c974 704
el13drt 5:a0e4a67266d6 705 if((mainOption == 2)&&(buttonA == 1)) {
el13drt 4:c6305031f80d 706
el13drt 4:c6305031f80d 707 actionButton();
el13drt 4:c6305031f80d 708 backButton();
el13drt 3:57bab3b1c974 709
el13drt 4:c6305031f80d 710 lcd.clear();//clear screen
el13drt 5:a0e4a67266d6 711
el13drt 4:c6305031f80d 712 lcd.drawRect(3,6,77,10,0);//title outline
el13drt 4:c6305031f80d 713 lcd.drawRect(0,47,84,0,1);//bottom border
el13drt 4:c6305031f80d 714 lcd.drawRect(0,0,84,2,1);//top border
el13drt 4:c6305031f80d 715 lcd.printString("Options",20,7);//title
el13drt 4:c6305031f80d 716 lcd.printString("Difficulty",5,3);//difficulty menu
el13drt 4:c6305031f80d 717 lcd.printString("Sound FX",5,4);//sounf fx on / off
el13drt 5:a0e4a67266d6 718
el13drt 4:c6305031f80d 719 while(1) {
el13drt 4:c6305031f80d 720
el13drt 4:c6305031f80d 721 actionButton();
el13drt 4:c6305031f80d 722 backButton();
el13drt 4:c6305031f80d 723
el13drt 4:c6305031f80d 724 // back to menu
el13drt 4:c6305031f80d 725 if(buttonB == 1) {
el13drt 4:c6305031f80d 726 lcd.clear();
el13drt 4:c6305031f80d 727 break;
el13drt 3:57bab3b1c974 728 }
el13drt 3:57bab3b1c974 729 }
el13drt 1:352c50e88ffa 730 }
el13drt 0:a8bc3aac5f69 731 }
el13drt 3:57bab3b1c974 732 }
el13drt 1:352c50e88ffa 733
el13drt 0:a8bc3aac5f69 734
el13drt 0:a8bc3aac5f69 735 // read default positions of the joystick to calibrate later readings
el13drt 0:a8bc3aac5f69 736 void calibrateJoystick()
el13drt 0:a8bc3aac5f69 737 {
el13drt 0:a8bc3aac5f69 738 button.mode(PullDown);
el13drt 0:a8bc3aac5f69 739 // must not move during calibration
el13drt 3:57bab3b1c974 740 joystick.x0 = xPot; //initial positions in the range 0.0 to 1.0 (0.5 if centred exactly)
el13drt 0:a8bc3aac5f69 741 joystick.y0 = yPot;
el13drt 0:a8bc3aac5f69 742 }
el13drt 0:a8bc3aac5f69 743
el13drt 0:a8bc3aac5f69 744 void updateJoystick()
el13drt 0:a8bc3aac5f69 745 {
el13drt 0:a8bc3aac5f69 746 // read current joystick values relative to calibrated values (in range -0.5 to 0.5, 0.0 is centred)
el13drt 0:a8bc3aac5f69 747 joystick.x = xPot - joystick.x0;
el13drt 0:a8bc3aac5f69 748 joystick.y = yPot - joystick.y0;
el13drt 0:a8bc3aac5f69 749 // read button state
el13drt 0:a8bc3aac5f69 750 joystick.button = button;
el13drt 0:a8bc3aac5f69 751
el13drt 0:a8bc3aac5f69 752 // calculate direction depending on x,y values
el13drt 0:a8bc3aac5f69 753 // tolerance allows a little lee-way in case joystick not exactly in the stated direction
el13drt 0:a8bc3aac5f69 754 if ( fabs(joystick.y) < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13drt 0:a8bc3aac5f69 755 joystick.direction = CENTRE;
el13drt 0:a8bc3aac5f69 756 } else if ( joystick.y > DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13drt 0:a8bc3aac5f69 757 joystick.direction = UP;
el13drt 0:a8bc3aac5f69 758 } else if ( joystick.y < DIRECTION_TOLERANCE && fabs(joystick.x) < DIRECTION_TOLERANCE) {
el13drt 0:a8bc3aac5f69 759 joystick.direction = DOWN;
el13drt 0:a8bc3aac5f69 760 } else if ( joystick.x > DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
el13drt 0:a8bc3aac5f69 761 joystick.direction = RIGHT;
el13drt 0:a8bc3aac5f69 762 } else if ( joystick.x < DIRECTION_TOLERANCE && fabs(joystick.y) < DIRECTION_TOLERANCE) {
el13drt 0:a8bc3aac5f69 763 joystick.direction = LEFT;
el13drt 0:a8bc3aac5f69 764 } else {
el13drt 0:a8bc3aac5f69 765 joystick.direction = UNKNOWN;
el13drt 0:a8bc3aac5f69 766 }
el13drt 0:a8bc3aac5f69 767
el13drt 0:a8bc3aac5f69 768 // set flag for printing
el13drt 0:a8bc3aac5f69 769 printFlag = 1;
el13drt 0:a8bc3aac5f69 770 }
el13drt 0:a8bc3aac5f69 771
el13drt 0:a8bc3aac5f69 772