New pokittolib with improved volume controls & better button handling
Dependencies: PokittoLib
Fork of Arcade by
main.cpp@22:25d0247917fc, 2018-10-07 (annotated)
- Committer:
- Pokitto
- Date:
- Sun Oct 07 10:36:20 2018 +0000
- Revision:
- 22:25d0247917fc
- Parent:
- 6:7e55f4fd3e4e
Removed compilation errors
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Pokitto | 6:7e55f4fd3e4e | 1 | //#include <iostream> |
Pokitto | 6:7e55f4fd3e4e | 2 | #include <string> |
Pokitto | 6:7e55f4fd3e4e | 3 | #include <stdlib.h> |
Pokitto | 0:2d2a3994d55d | 4 | #include "Pokitto.h" |
Pokitto | 6:7e55f4fd3e4e | 5 | #include "PokittoFonts.h" |
Pokitto | 0:2d2a3994d55d | 6 | |
Pokitto | 6:7e55f4fd3e4e | 7 | //create game object |
Pokitto | 6:7e55f4fd3e4e | 8 | Pokitto::Core game; |
Pokitto | 6:7e55f4fd3e4e | 9 | |
Pokitto | 6:7e55f4fd3e4e | 10 | //include textures |
Pokitto | 22:25d0247917fc | 11 | #include <../textures.h> |
Pokitto | 0:2d2a3994d55d | 12 | |
Pokitto | 6:7e55f4fd3e4e | 13 | //variable declarations |
Pokitto | 6:7e55f4fd3e4e | 14 | short gameMode = -2; //-2 = title, -1 = settings, 0 = menu, 1 = pong, 2 = breakout, 3 = snake, 4 = stacker, 5 = columns |
Pokitto | 22:25d0247917fc | 15 | int paddleA = 36; |
Pokitto | 22:25d0247917fc | 16 | int paddleB = 36; |
Pokitto | 22:25d0247917fc | 17 | int paddleBr = 46; |
Pokitto | 6:7e55f4fd3e4e | 18 | int paddleBMotion = 0; |
Pokitto | 6:7e55f4fd3e4e | 19 | int ballX = 52; |
Pokitto | 6:7e55f4fd3e4e | 20 | int ballY = 42; |
Pokitto | 6:7e55f4fd3e4e | 21 | float ballSpeed = 1.0f; |
Pokitto | 6:7e55f4fd3e4e | 22 | int bricksHit = 0; |
Pokitto | 6:7e55f4fd3e4e | 23 | int ballXR; |
Pokitto | 6:7e55f4fd3e4e | 24 | int ballYR; |
Pokitto | 6:7e55f4fd3e4e | 25 | short ballDX = 1; |
Pokitto | 6:7e55f4fd3e4e | 26 | short ballDY = 1; |
Pokitto | 6:7e55f4fd3e4e | 27 | int RNG = rand() % 100 + 1; |
Pokitto | 6:7e55f4fd3e4e | 28 | int RNGX = rand() % 25 + 1; |
Pokitto | 6:7e55f4fd3e4e | 29 | int RNGY = rand() % 18 + 1; |
Pokitto | 6:7e55f4fd3e4e | 30 | int difficulty = 70; |
Pokitto | 6:7e55f4fd3e4e | 31 | unsigned int scoreA = 0; |
Pokitto | 6:7e55f4fd3e4e | 32 | unsigned int scoreB = 0; |
Pokitto | 6:7e55f4fd3e4e | 33 | unsigned int scoreBr = 0; |
Pokitto | 6:7e55f4fd3e4e | 34 | unsigned short breakoutGrid [13][5]; //0=air, 1=redWide1, 2=redWide2, 3=yellowWide1, 4=yellowWide2, 5=greenWide, 6=cyanWide, 7=blueWide |
Pokitto | 6:7e55f4fd3e4e | 35 | bool secondLevel = false; |
Pokitto | 6:7e55f4fd3e4e | 36 | unsigned int lives = 3; |
Pokitto | 6:7e55f4fd3e4e | 37 | short gameMap [27][22]; //0 = air, -1 = wall, -2 = food, 1 = snake head, 2 = snake body |
Pokitto | 6:7e55f4fd3e4e | 38 | short snakeLength = 3; |
Pokitto | 6:7e55f4fd3e4e | 39 | short headX = 13; |
Pokitto | 6:7e55f4fd3e4e | 40 | short headY = 10; |
Pokitto | 6:7e55f4fd3e4e | 41 | short direction = 0; //0 = up, 1 = right, 2 = down, 3 = left |
Pokitto | 6:7e55f4fd3e4e | 42 | bool snakeUpdate = false; |
Pokitto | 6:7e55f4fd3e4e | 43 | bool foodPlacementSuccess = false; |
Pokitto | 6:7e55f4fd3e4e | 44 | short counter = 0; |
Pokitto | 6:7e55f4fd3e4e | 45 | bool snakeInitializing = true; |
Pokitto | 6:7e55f4fd3e4e | 46 | int breakoutHS = 0; |
Pokitto | 6:7e55f4fd3e4e | 47 | int snakeHS = 0; |
Pokitto | 6:7e55f4fd3e4e | 48 | unsigned short blockX = 0; |
Pokitto | 6:7e55f4fd3e4e | 49 | unsigned short blockSize = 4; |
Pokitto | 6:7e55f4fd3e4e | 50 | short blockDir = 1; |
Pokitto | 6:7e55f4fd3e4e | 51 | short blockH = 0; |
Pokitto | 6:7e55f4fd3e4e | 52 | short oldBlockData [20][2]; |
Pokitto | 6:7e55f4fd3e4e | 53 | short blockHOffset = 0; |
Pokitto | 6:7e55f4fd3e4e | 54 | short blockLoss = 0; |
Pokitto | 6:7e55f4fd3e4e | 55 | short blockMove = 0; |
Pokitto | 6:7e55f4fd3e4e | 56 | bool stackLost = false; |
Pokitto | 6:7e55f4fd3e4e | 57 | int stackerScore = 0; |
Pokitto | 6:7e55f4fd3e4e | 58 | int stackerHS = 0; |
Pokitto | 6:7e55f4fd3e4e | 59 | int stackerDelay = 3; |
Pokitto | 6:7e55f4fd3e4e | 60 | short menuSelection = 1; |
Pokitto | 6:7e55f4fd3e4e | 61 | bool grayscale = false; |
Pokitto | 6:7e55f4fd3e4e | 62 | short optionSelection = 1; |
Pokitto | 6:7e55f4fd3e4e | 63 | bool bsound = true; |
Pokitto | 6:7e55f4fd3e4e | 64 | double timeTime = 0.0; |
Pokitto | 6:7e55f4fd3e4e | 65 | /*short currentColumn [3]; |
Pokitto | 6:7e55f4fd3e4e | 66 | short currentColumnDupe [3]; |
Pokitto | 6:7e55f4fd3e4e | 67 | short nextColumn [3]; |
Pokitto | 6:7e55f4fd3e4e | 68 | short columnsMap [9][22];*/ |
Pokitto | 6:7e55f4fd3e4e | 69 | void resetPongValues() { |
Pokitto | 6:7e55f4fd3e4e | 70 | ballX = 52; |
Pokitto | 6:7e55f4fd3e4e | 71 | ballY = 42; |
Pokitto | 6:7e55f4fd3e4e | 72 | paddleBMotion = 0; |
Pokitto | 6:7e55f4fd3e4e | 73 | paddleA = 36; |
Pokitto | 6:7e55f4fd3e4e | 74 | paddleB = 36; |
Pokitto | 6:7e55f4fd3e4e | 75 | ballDX = 1; |
Pokitto | 6:7e55f4fd3e4e | 76 | ballDY = 1; |
Pokitto | 6:7e55f4fd3e4e | 77 | } |
Pokitto | 6:7e55f4fd3e4e | 78 | void pongLogic() { |
Pokitto | 6:7e55f4fd3e4e | 79 | //update difficulty |
Pokitto | 6:7e55f4fd3e4e | 80 | difficulty = 70 + 2.5*(scoreA - scoreB); |
Pokitto | 6:7e55f4fd3e4e | 81 | //input, move paddle 1 |
Pokitto | 6:7e55f4fd3e4e | 82 | if (game.buttons.repeat(BTN_UP,0) && paddleA > 0) { |
Pokitto | 6:7e55f4fd3e4e | 83 | paddleA -= 2; |
Pokitto | 6:7e55f4fd3e4e | 84 | } |
Pokitto | 6:7e55f4fd3e4e | 85 | if (game.buttons.repeat(BTN_DOWN,0) && paddleA < 66) { |
Pokitto | 6:7e55f4fd3e4e | 86 | paddleA += 2; |
Pokitto | 6:7e55f4fd3e4e | 87 | } |
Pokitto | 6:7e55f4fd3e4e | 88 | //move paddle 2 |
Pokitto | 6:7e55f4fd3e4e | 89 | if (paddleBMotion == 0) { |
Pokitto | 6:7e55f4fd3e4e | 90 | if (ballY < paddleB + 8 && paddleB > 0) { |
Pokitto | 6:7e55f4fd3e4e | 91 | if (RNG < difficulty) { |
Pokitto | 6:7e55f4fd3e4e | 92 | paddleB -= 1; |
Pokitto | 6:7e55f4fd3e4e | 93 | paddleBMotion = -6; |
Pokitto | 6:7e55f4fd3e4e | 94 | } else { |
Pokitto | 6:7e55f4fd3e4e | 95 | paddleB += 1; |
Pokitto | 6:7e55f4fd3e4e | 96 | paddleBMotion = 6; |
Pokitto | 6:7e55f4fd3e4e | 97 | } |
Pokitto | 6:7e55f4fd3e4e | 98 | } |
Pokitto | 6:7e55f4fd3e4e | 99 | if (ballY > paddleB + 8 && paddleB < 66) { |
Pokitto | 6:7e55f4fd3e4e | 100 | if (RNG < difficulty) { |
Pokitto | 6:7e55f4fd3e4e | 101 | paddleB += 1; |
Pokitto | 6:7e55f4fd3e4e | 102 | paddleBMotion = 6; |
Pokitto | 6:7e55f4fd3e4e | 103 | } else { |
Pokitto | 6:7e55f4fd3e4e | 104 | paddleB -= 1; |
Pokitto | 6:7e55f4fd3e4e | 105 | paddleBMotion = -6; |
Pokitto | 6:7e55f4fd3e4e | 106 | } |
Pokitto | 6:7e55f4fd3e4e | 107 | } |
Pokitto | 6:7e55f4fd3e4e | 108 | } else if (paddleBMotion < 0) { |
Pokitto | 6:7e55f4fd3e4e | 109 | paddleBMotion++; |
Pokitto | 6:7e55f4fd3e4e | 110 | if (paddleB > 0) |
Pokitto | 6:7e55f4fd3e4e | 111 | paddleB -= 1; |
Pokitto | 6:7e55f4fd3e4e | 112 | } else if (paddleBMotion > 0) { |
Pokitto | 6:7e55f4fd3e4e | 113 | paddleBMotion--; |
Pokitto | 6:7e55f4fd3e4e | 114 | if (paddleB < 66) |
Pokitto | 6:7e55f4fd3e4e | 115 | paddleB += 1; |
Pokitto | 6:7e55f4fd3e4e | 116 | } |
Pokitto | 6:7e55f4fd3e4e | 117 | //fix paddle locations |
Pokitto | 6:7e55f4fd3e4e | 118 | if (paddleA < 0) { |
Pokitto | 6:7e55f4fd3e4e | 119 | paddleA = 0; |
Pokitto | 6:7e55f4fd3e4e | 120 | } |
Pokitto | 6:7e55f4fd3e4e | 121 | if (paddleB < 0) { |
Pokitto | 6:7e55f4fd3e4e | 122 | paddleB = 0; |
Pokitto | 6:7e55f4fd3e4e | 123 | } |
Pokitto | 6:7e55f4fd3e4e | 124 | if (paddleA > 66) { |
Pokitto | 6:7e55f4fd3e4e | 125 | paddleA = 66; |
Pokitto | 6:7e55f4fd3e4e | 126 | } |
Pokitto | 6:7e55f4fd3e4e | 127 | if (paddleB > 66) { |
Pokitto | 6:7e55f4fd3e4e | 128 | paddleB = 66; |
Pokitto | 6:7e55f4fd3e4e | 129 | } |
Pokitto | 6:7e55f4fd3e4e | 130 | //move ball |
Pokitto | 6:7e55f4fd3e4e | 131 | ballX += ballDX; |
Pokitto | 6:7e55f4fd3e4e | 132 | ballY += ballDY; |
Pokitto | 6:7e55f4fd3e4e | 133 | //bounce off walls |
Pokitto | 6:7e55f4fd3e4e | 134 | if (ballX <= 0) {scoreB++; resetPongValues(); if (bsound) game.sound.playOK();} |
Pokitto | 6:7e55f4fd3e4e | 135 | if (ballX >= 106) {scoreA++; resetPongValues(); if (bsound) game.sound.playOK();} |
Pokitto | 6:7e55f4fd3e4e | 136 | if (ballX <= 4 && ballY >= paddleA && ballY <= paddleA + 16) { |
Pokitto | 6:7e55f4fd3e4e | 137 | ballDX = 1; |
Pokitto | 6:7e55f4fd3e4e | 138 | if (bsound) game.sound.playTick(); |
Pokitto | 6:7e55f4fd3e4e | 139 | } |
Pokitto | 6:7e55f4fd3e4e | 140 | if (ballX >= 102 && ballY >= paddleB && ballY <= paddleB + 16) { |
Pokitto | 6:7e55f4fd3e4e | 141 | ballDX = -1; |
Pokitto | 6:7e55f4fd3e4e | 142 | if (bsound) game.sound.playTick(); |
Pokitto | 6:7e55f4fd3e4e | 143 | } |
Pokitto | 6:7e55f4fd3e4e | 144 | if (ballY <= 0 || ballY >= 78) {ballDY *= -1; if (bsound) game.sound.playTick();} |
Pokitto | 6:7e55f4fd3e4e | 145 | } |
Pokitto | 6:7e55f4fd3e4e | 146 | void pongDraw() { |
Pokitto | 6:7e55f4fd3e4e | 147 | //line |
Pokitto | 6:7e55f4fd3e4e | 148 | game.display.color = 2; |
Pokitto | 6:7e55f4fd3e4e | 149 | game.display.drawFastVLine(55,0,82); |
Pokitto | 6:7e55f4fd3e4e | 150 | game.display.color = 13; |
Pokitto | 6:7e55f4fd3e4e | 151 | game.display.drawFastVLine(56,0,82); |
Pokitto | 6:7e55f4fd3e4e | 152 | //paddles & ball |
Pokitto | 6:7e55f4fd3e4e | 153 | game.display.drawBitmap(0,paddleA,paddle1); |
Pokitto | 6:7e55f4fd3e4e | 154 | game.display.drawBitmap(106,paddleB,paddle1); |
Pokitto | 6:7e55f4fd3e4e | 155 | game.display.drawBitmap(ballX,ballY,gray); |
Pokitto | 6:7e55f4fd3e4e | 156 | //score |
Pokitto | 6:7e55f4fd3e4e | 157 | game.display.color = 2; |
Pokitto | 6:7e55f4fd3e4e | 158 | game.display.fillRectangle(0,82,110,6); |
Pokitto | 6:7e55f4fd3e4e | 159 | game.display.setFont(font3x5); |
Pokitto | 6:7e55f4fd3e4e | 160 | game.display.setCursor(50,83); |
Pokitto | 6:7e55f4fd3e4e | 161 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 162 | game.display.print(scoreA); |
Pokitto | 6:7e55f4fd3e4e | 163 | game.display.print("-"); |
Pokitto | 6:7e55f4fd3e4e | 164 | game.display.print(scoreB); |
Pokitto | 6:7e55f4fd3e4e | 165 | } |
Pokitto | 6:7e55f4fd3e4e | 166 | void breakoutGridInit() { |
Pokitto | 6:7e55f4fd3e4e | 167 | //build basic grid by row |
Pokitto | 6:7e55f4fd3e4e | 168 | for (int x=0;x<13;x++) { |
Pokitto | 6:7e55f4fd3e4e | 169 | breakoutGrid[x][0] = 1; |
Pokitto | 6:7e55f4fd3e4e | 170 | } |
Pokitto | 6:7e55f4fd3e4e | 171 | for (int x=0;x<13;x++) { |
Pokitto | 6:7e55f4fd3e4e | 172 | breakoutGrid[x][1] = 3; |
Pokitto | 6:7e55f4fd3e4e | 173 | } |
Pokitto | 6:7e55f4fd3e4e | 174 | for (int x=0;x<13;x++) { |
Pokitto | 6:7e55f4fd3e4e | 175 | breakoutGrid[x][2] = 5; |
Pokitto | 6:7e55f4fd3e4e | 176 | } |
Pokitto | 6:7e55f4fd3e4e | 177 | for (int x=0;x<13;x++) { |
Pokitto | 6:7e55f4fd3e4e | 178 | breakoutGrid[x][3] = 6; |
Pokitto | 6:7e55f4fd3e4e | 179 | } |
Pokitto | 6:7e55f4fd3e4e | 180 | for (int x=0;x<13;x++) { |
Pokitto | 6:7e55f4fd3e4e | 181 | breakoutGrid[x][4] = 7; |
Pokitto | 6:7e55f4fd3e4e | 182 | } |
Pokitto | 6:7e55f4fd3e4e | 183 | } |
Pokitto | 6:7e55f4fd3e4e | 184 | void breakoutLogic() { |
Pokitto | 6:7e55f4fd3e4e | 185 | //input |
Pokitto | 6:7e55f4fd3e4e | 186 | if (game.buttons.repeat(BTN_LEFT,0) && paddleBr > 0) { |
Pokitto | 6:7e55f4fd3e4e | 187 | paddleBr -= 2; |
Pokitto | 6:7e55f4fd3e4e | 188 | } |
Pokitto | 6:7e55f4fd3e4e | 189 | if (game.buttons.repeat(BTN_RIGHT,0) && paddleBr < 94) { |
Pokitto | 6:7e55f4fd3e4e | 190 | paddleBr += 2; |
Pokitto | 6:7e55f4fd3e4e | 191 | } |
Pokitto | 6:7e55f4fd3e4e | 192 | //fix paddle position |
Pokitto | 6:7e55f4fd3e4e | 193 | if (paddleBr < 0) paddleBr = 0; |
Pokitto | 6:7e55f4fd3e4e | 194 | if (paddleBr > 94) paddleBr = 94; |
Pokitto | 6:7e55f4fd3e4e | 195 | //move ball, bounce off walls & paddle |
Pokitto | 6:7e55f4fd3e4e | 196 | ballX += ballDX * ballSpeed; |
Pokitto | 6:7e55f4fd3e4e | 197 | ballY += ballDY * ballSpeed; |
Pokitto | 6:7e55f4fd3e4e | 198 | if (ballX <= 0 || ballX >= 106) {ballDX *= -1; if (bsound) game.sound.playTick();} |
Pokitto | 6:7e55f4fd3e4e | 199 | if (ballY <= 0) {ballDY = 1; if (bsound) game.sound.playTick();} |
Pokitto | 6:7e55f4fd3e4e | 200 | if (ballY >= 78) {lives--; ballX = 52; ballY = 42; ballDX = 1; ballDY = 1; paddleBr = 46; if (bsound) game.sound.playCancel();} |
Pokitto | 6:7e55f4fd3e4e | 201 | if (ballY >= 74 && ballX >= paddleBr && ballX <= paddleBr + 16) {ballDY = -1; if (bsound) game.sound.playTick();} |
Pokitto | 6:7e55f4fd3e4e | 202 | //hiscore |
Pokitto | 6:7e55f4fd3e4e | 203 | if (scoreBr > breakoutHS) { |
Pokitto | 6:7e55f4fd3e4e | 204 | breakoutHS = scoreBr; |
Pokitto | 6:7e55f4fd3e4e | 205 | } |
Pokitto | 6:7e55f4fd3e4e | 206 | //reset game if lives out |
Pokitto | 6:7e55f4fd3e4e | 207 | if (lives == 0) { |
Pokitto | 6:7e55f4fd3e4e | 208 | scoreBr = 0; ballX = 52; ballY = 42; ballDX = 1; ballDY = 1; paddleBr = 46; lives = 3; |
Pokitto | 6:7e55f4fd3e4e | 209 | breakoutGridInit(); |
Pokitto | 6:7e55f4fd3e4e | 210 | } |
Pokitto | 6:7e55f4fd3e4e | 211 | //check for brick collision |
Pokitto | 6:7e55f4fd3e4e | 212 | if (ballY <= 20) { |
Pokitto | 6:7e55f4fd3e4e | 213 | ballYR = ballY / 4; |
Pokitto | 6:7e55f4fd3e4e | 214 | if (ballYR % 2 == 0) { |
Pokitto | 6:7e55f4fd3e4e | 215 | ballXR = ballX / 8; |
Pokitto | 6:7e55f4fd3e4e | 216 | } else { |
Pokitto | 6:7e55f4fd3e4e | 217 | ballXR = (ballX - 4) / 8; |
Pokitto | 6:7e55f4fd3e4e | 218 | } |
Pokitto | 6:7e55f4fd3e4e | 219 | if (ballYR <= 4) { |
Pokitto | 6:7e55f4fd3e4e | 220 | switch (breakoutGrid[ballXR][ballYR]) { |
Pokitto | 6:7e55f4fd3e4e | 221 | case 0 : |
Pokitto | 6:7e55f4fd3e4e | 222 | break; |
Pokitto | 6:7e55f4fd3e4e | 223 | case 1 : |
Pokitto | 6:7e55f4fd3e4e | 224 | breakoutGrid[ballXR][ballYR] = 2; |
Pokitto | 6:7e55f4fd3e4e | 225 | ballDY *= -1; |
Pokitto | 6:7e55f4fd3e4e | 226 | scoreBr += 4; |
Pokitto | 6:7e55f4fd3e4e | 227 | bricksHit++; |
Pokitto | 6:7e55f4fd3e4e | 228 | if (ballSpeed <= 1.75f) { |
Pokitto | 6:7e55f4fd3e4e | 229 | ballSpeed = 2.0f; |
Pokitto | 6:7e55f4fd3e4e | 230 | if (bsound) game.sound.playOK(); |
Pokitto | 6:7e55f4fd3e4e | 231 | } else { |
Pokitto | 6:7e55f4fd3e4e | 232 | if (bsound) game.sound.playTick(); |
Pokitto | 6:7e55f4fd3e4e | 233 | } |
Pokitto | 6:7e55f4fd3e4e | 234 | break; |
Pokitto | 6:7e55f4fd3e4e | 235 | case 2 : |
Pokitto | 6:7e55f4fd3e4e | 236 | breakoutGrid[ballXR][ballYR] = 0; |
Pokitto | 6:7e55f4fd3e4e | 237 | ballDY *= -1; |
Pokitto | 6:7e55f4fd3e4e | 238 | scoreBr += 4; |
Pokitto | 6:7e55f4fd3e4e | 239 | bricksHit++; |
Pokitto | 6:7e55f4fd3e4e | 240 | if (bsound) game.sound.playTick(); |
Pokitto | 6:7e55f4fd3e4e | 241 | break; |
Pokitto | 6:7e55f4fd3e4e | 242 | case 3 : |
Pokitto | 6:7e55f4fd3e4e | 243 | breakoutGrid[ballXR][ballYR] = 4; |
Pokitto | 6:7e55f4fd3e4e | 244 | ballDY *= -1; |
Pokitto | 6:7e55f4fd3e4e | 245 | scoreBr += 3; |
Pokitto | 6:7e55f4fd3e4e | 246 | bricksHit++; |
Pokitto | 6:7e55f4fd3e4e | 247 | if (ballSpeed <= 1.5f) { |
Pokitto | 6:7e55f4fd3e4e | 248 | ballSpeed = 1.75f; |
Pokitto | 6:7e55f4fd3e4e | 249 | if (bsound) game.sound.playOK(); |
Pokitto | 6:7e55f4fd3e4e | 250 | } else { |
Pokitto | 6:7e55f4fd3e4e | 251 | if (bsound) game.sound.playTick(); |
Pokitto | 6:7e55f4fd3e4e | 252 | } |
Pokitto | 6:7e55f4fd3e4e | 253 | break; |
Pokitto | 6:7e55f4fd3e4e | 254 | case 4 : |
Pokitto | 6:7e55f4fd3e4e | 255 | breakoutGrid[ballXR][ballYR] = 0; |
Pokitto | 6:7e55f4fd3e4e | 256 | ballDY *= -1; |
Pokitto | 6:7e55f4fd3e4e | 257 | scoreBr += 3; |
Pokitto | 6:7e55f4fd3e4e | 258 | bricksHit++; |
Pokitto | 6:7e55f4fd3e4e | 259 | if (bsound) game.sound.playTick(); |
Pokitto | 6:7e55f4fd3e4e | 260 | break; |
Pokitto | 6:7e55f4fd3e4e | 261 | case 5 : |
Pokitto | 6:7e55f4fd3e4e | 262 | breakoutGrid[ballXR][ballYR] = 0; |
Pokitto | 6:7e55f4fd3e4e | 263 | ballDY *= -1; |
Pokitto | 6:7e55f4fd3e4e | 264 | scoreBr += 3; |
Pokitto | 6:7e55f4fd3e4e | 265 | bricksHit++; |
Pokitto | 6:7e55f4fd3e4e | 266 | if (bsound) game.sound.playTick(); |
Pokitto | 6:7e55f4fd3e4e | 267 | break; |
Pokitto | 6:7e55f4fd3e4e | 268 | case 6 : |
Pokitto | 6:7e55f4fd3e4e | 269 | breakoutGrid[ballXR][ballYR] = 0; |
Pokitto | 6:7e55f4fd3e4e | 270 | ballDY *= -1; |
Pokitto | 6:7e55f4fd3e4e | 271 | scoreBr += 2; |
Pokitto | 6:7e55f4fd3e4e | 272 | bricksHit++; |
Pokitto | 6:7e55f4fd3e4e | 273 | if (bsound) game.sound.playTick(); |
Pokitto | 6:7e55f4fd3e4e | 274 | break; |
Pokitto | 6:7e55f4fd3e4e | 275 | case 7 : |
Pokitto | 6:7e55f4fd3e4e | 276 | breakoutGrid[ballXR][ballYR] = 0; |
Pokitto | 6:7e55f4fd3e4e | 277 | ballDY *= -1; |
Pokitto | 6:7e55f4fd3e4e | 278 | scoreBr += 1; |
Pokitto | 6:7e55f4fd3e4e | 279 | bricksHit++; |
Pokitto | 6:7e55f4fd3e4e | 280 | if (bsound) game.sound.playTick(); |
Pokitto | 6:7e55f4fd3e4e | 281 | break; |
Pokitto | 6:7e55f4fd3e4e | 282 | } |
Pokitto | 6:7e55f4fd3e4e | 283 | } |
Pokitto | 6:7e55f4fd3e4e | 284 | } |
Pokitto | 6:7e55f4fd3e4e | 285 | //second level |
Pokitto | 6:7e55f4fd3e4e | 286 | if (scoreBr == 260 && !secondLevel) { |
Pokitto | 6:7e55f4fd3e4e | 287 | secondLevel = true; |
Pokitto | 6:7e55f4fd3e4e | 288 | paddleBr = 46; |
Pokitto | 6:7e55f4fd3e4e | 289 | ballX = 52; |
Pokitto | 6:7e55f4fd3e4e | 290 | ballY = 42; |
Pokitto | 6:7e55f4fd3e4e | 291 | ballDX = 1; |
Pokitto | 6:7e55f4fd3e4e | 292 | ballDY = 1; |
Pokitto | 6:7e55f4fd3e4e | 293 | breakoutGridInit(); |
Pokitto | 6:7e55f4fd3e4e | 294 | } |
Pokitto | 6:7e55f4fd3e4e | 295 | //change speeds |
Pokitto | 6:7e55f4fd3e4e | 296 | if (ballSpeed == 1.0f && bricksHit == 4) { |
Pokitto | 6:7e55f4fd3e4e | 297 | ballSpeed = 1.25f; |
Pokitto | 6:7e55f4fd3e4e | 298 | if (bsound) game.sound.playOK(); |
Pokitto | 6:7e55f4fd3e4e | 299 | } else if (ballSpeed <= 1.25f && bricksHit == 12) { |
Pokitto | 22:25d0247917fc | 300 | ballSpeed = 1.5f; |
Pokitto | 6:7e55f4fd3e4e | 301 | if (bsound) game.sound.playOK(); |
Pokitto | 6:7e55f4fd3e4e | 302 | } |
Pokitto | 6:7e55f4fd3e4e | 303 | } |
Pokitto | 6:7e55f4fd3e4e | 304 | void breakoutDraw() { |
Pokitto | 6:7e55f4fd3e4e | 305 | //draw bricks |
Pokitto | 6:7e55f4fd3e4e | 306 | for(int y=0;y<5;y++) { |
Pokitto | 6:7e55f4fd3e4e | 307 | for(int x=0;x<13;x++) { |
Pokitto | 6:7e55f4fd3e4e | 308 | switch (breakoutGrid[x][y]) { |
Pokitto | 6:7e55f4fd3e4e | 309 | case 0 : |
Pokitto | 6:7e55f4fd3e4e | 310 | break; |
Pokitto | 6:7e55f4fd3e4e | 311 | case 1 : |
Pokitto | 6:7e55f4fd3e4e | 312 | if (y%2==0) { |
Pokitto | 6:7e55f4fd3e4e | 313 | game.display.drawBitmap(x*8 + 1,y*4,redWide1); |
Pokitto | 6:7e55f4fd3e4e | 314 | } else { |
Pokitto | 6:7e55f4fd3e4e | 315 | game.display.drawBitmap(x*8 + 5,y*4,redWide1); |
Pokitto | 6:7e55f4fd3e4e | 316 | } |
Pokitto | 6:7e55f4fd3e4e | 317 | break; |
Pokitto | 6:7e55f4fd3e4e | 318 | case 2 : |
Pokitto | 6:7e55f4fd3e4e | 319 | if (y%2==0) { |
Pokitto | 6:7e55f4fd3e4e | 320 | game.display.drawBitmap(x*8 + 1,y*4,redWide2); |
Pokitto | 6:7e55f4fd3e4e | 321 | } else { |
Pokitto | 6:7e55f4fd3e4e | 322 | game.display.drawBitmap(x*8 + 5,y*4,redWide2); |
Pokitto | 6:7e55f4fd3e4e | 323 | } |
Pokitto | 6:7e55f4fd3e4e | 324 | break; |
Pokitto | 6:7e55f4fd3e4e | 325 | case 3 : |
Pokitto | 6:7e55f4fd3e4e | 326 | if (y%2==0) { |
Pokitto | 6:7e55f4fd3e4e | 327 | game.display.drawBitmap(x*8 + 1,y*4,yellowWide1); |
Pokitto | 6:7e55f4fd3e4e | 328 | } else { |
Pokitto | 6:7e55f4fd3e4e | 329 | game.display.drawBitmap(x*8 + 5,y*4,yellowWide1); |
Pokitto | 6:7e55f4fd3e4e | 330 | } |
Pokitto | 6:7e55f4fd3e4e | 331 | break; |
Pokitto | 6:7e55f4fd3e4e | 332 | case 4 : |
Pokitto | 6:7e55f4fd3e4e | 333 | if (y%2==0) { |
Pokitto | 6:7e55f4fd3e4e | 334 | game.display.drawBitmap(x*8 + 1,y*4,yellowWide2); |
Pokitto | 6:7e55f4fd3e4e | 335 | } else { |
Pokitto | 6:7e55f4fd3e4e | 336 | game.display.drawBitmap(x*8 + 5,y*4,yellowWide2); |
Pokitto | 6:7e55f4fd3e4e | 337 | } |
Pokitto | 6:7e55f4fd3e4e | 338 | break; |
Pokitto | 6:7e55f4fd3e4e | 339 | case 5 : |
Pokitto | 6:7e55f4fd3e4e | 340 | if (y%2==0) { |
Pokitto | 6:7e55f4fd3e4e | 341 | game.display.drawBitmap(x*8 + 1,y*4,greenWide); |
Pokitto | 6:7e55f4fd3e4e | 342 | } else { |
Pokitto | 6:7e55f4fd3e4e | 343 | game.display.drawBitmap(x*8 + 5,y*4,greenWide); |
Pokitto | 6:7e55f4fd3e4e | 344 | } |
Pokitto | 6:7e55f4fd3e4e | 345 | break; |
Pokitto | 6:7e55f4fd3e4e | 346 | case 6 : |
Pokitto | 6:7e55f4fd3e4e | 347 | if (y%2==0) { |
Pokitto | 6:7e55f4fd3e4e | 348 | game.display.drawBitmap(x*8 + 1,y*4,cyanWide); |
Pokitto | 6:7e55f4fd3e4e | 349 | } else { |
Pokitto | 6:7e55f4fd3e4e | 350 | game.display.drawBitmap(x*8 + 5,y*4,cyanWide); |
Pokitto | 6:7e55f4fd3e4e | 351 | } |
Pokitto | 6:7e55f4fd3e4e | 352 | break; |
Pokitto | 6:7e55f4fd3e4e | 353 | case 7 : |
Pokitto | 6:7e55f4fd3e4e | 354 | if (y%2==0) { |
Pokitto | 6:7e55f4fd3e4e | 355 | game.display.drawBitmap(x*8 + 1,y*4,blueWide); |
Pokitto | 6:7e55f4fd3e4e | 356 | } else { |
Pokitto | 6:7e55f4fd3e4e | 357 | game.display.drawBitmap(x*8 + 5,y*4,blueWide); |
Pokitto | 6:7e55f4fd3e4e | 358 | } |
Pokitto | 6:7e55f4fd3e4e | 359 | break; |
Pokitto | 6:7e55f4fd3e4e | 360 | } |
Pokitto | 6:7e55f4fd3e4e | 361 | } |
Pokitto | 6:7e55f4fd3e4e | 362 | } |
Pokitto | 6:7e55f4fd3e4e | 363 | //draw paddle & ball |
Pokitto | 6:7e55f4fd3e4e | 364 | game.display.drawBitmap(paddleBr,78,paddle2); |
Pokitto | 6:7e55f4fd3e4e | 365 | game.display.drawBitmap(ballX,ballY,gray); |
Pokitto | 6:7e55f4fd3e4e | 366 | //draw score |
Pokitto | 6:7e55f4fd3e4e | 367 | game.display.color = 2; |
Pokitto | 6:7e55f4fd3e4e | 368 | game.display.fillRectangle(0,82,110,6); |
Pokitto | 6:7e55f4fd3e4e | 369 | game.display.setFont(font3x5); |
Pokitto | 6:7e55f4fd3e4e | 370 | game.display.setCursor(1,83); |
Pokitto | 6:7e55f4fd3e4e | 371 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 372 | game.display.print("SCORE "); |
Pokitto | 6:7e55f4fd3e4e | 373 | game.display.print(scoreBr); |
Pokitto | 6:7e55f4fd3e4e | 374 | game.display.setCursor(37,83); |
Pokitto | 6:7e55f4fd3e4e | 375 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 376 | game.display.print("HISCORE "); |
Pokitto | 6:7e55f4fd3e4e | 377 | game.display.print(breakoutHS); |
Pokitto | 6:7e55f4fd3e4e | 378 | //draw HP |
Pokitto | 6:7e55f4fd3e4e | 379 | game.display.drawBitmap(97,84,gray); |
Pokitto | 6:7e55f4fd3e4e | 380 | game.display.setCursor(102,83); |
Pokitto | 6:7e55f4fd3e4e | 381 | game.display.print("x"); |
Pokitto | 6:7e55f4fd3e4e | 382 | game.display.print(lives); |
Pokitto | 6:7e55f4fd3e4e | 383 | } |
Pokitto | 6:7e55f4fd3e4e | 384 | void snakePlaceFood() { |
Pokitto | 6:7e55f4fd3e4e | 385 | foodPlacementSuccess = false; |
Pokitto | 6:7e55f4fd3e4e | 386 | while (!foodPlacementSuccess) { |
Pokitto | 6:7e55f4fd3e4e | 387 | RNGX = rand() % 25 + 1; |
Pokitto | 6:7e55f4fd3e4e | 388 | RNGY = rand() % 18 + 1; |
Pokitto | 6:7e55f4fd3e4e | 389 | if (gameMap [RNGX][RNGY] == 0) { |
Pokitto | 6:7e55f4fd3e4e | 390 | gameMap [RNGX][RNGY] = -2; |
Pokitto | 6:7e55f4fd3e4e | 391 | foodPlacementSuccess = true; |
Pokitto | 6:7e55f4fd3e4e | 392 | } |
Pokitto | 6:7e55f4fd3e4e | 393 | } |
Pokitto | 6:7e55f4fd3e4e | 394 | } |
Pokitto | 6:7e55f4fd3e4e | 395 | void snakeGridInit() { |
Pokitto | 6:7e55f4fd3e4e | 396 | for (int y=0;y<20;y++) { |
Pokitto | 6:7e55f4fd3e4e | 397 | for (int x=0;x<27;x++) { |
Pokitto | 6:7e55f4fd3e4e | 398 | gameMap [x][y] = 0; |
Pokitto | 6:7e55f4fd3e4e | 399 | } |
Pokitto | 6:7e55f4fd3e4e | 400 | } |
Pokitto | 6:7e55f4fd3e4e | 401 | for (int y=0;y<22;y++) { |
Pokitto | 6:7e55f4fd3e4e | 402 | gameMap [0][y] = -1; |
Pokitto | 6:7e55f4fd3e4e | 403 | gameMap [26][y] = -1; |
Pokitto | 6:7e55f4fd3e4e | 404 | } |
Pokitto | 6:7e55f4fd3e4e | 405 | for (int x=0;x<27;x++) { |
Pokitto | 6:7e55f4fd3e4e | 406 | gameMap [x][0] = -1; |
Pokitto | 6:7e55f4fd3e4e | 407 | gameMap [x][19] = -1; |
Pokitto | 6:7e55f4fd3e4e | 408 | } |
Pokitto | 6:7e55f4fd3e4e | 409 | for (int i=0;i<snakeLength;i++) { |
Pokitto | 6:7e55f4fd3e4e | 410 | gameMap [13][10 + i] = 1 + i; |
Pokitto | 6:7e55f4fd3e4e | 411 | } |
Pokitto | 6:7e55f4fd3e4e | 412 | snakePlaceFood(); |
Pokitto | 6:7e55f4fd3e4e | 413 | snakeInitializing = false; |
Pokitto | 6:7e55f4fd3e4e | 414 | } |
Pokitto | 6:7e55f4fd3e4e | 415 | void snakeInput() { |
Pokitto | 6:7e55f4fd3e4e | 416 | //input |
Pokitto | 6:7e55f4fd3e4e | 417 | if (game.buttons.held(BTN_UP,1) && direction != 2) { |
Pokitto | 6:7e55f4fd3e4e | 418 | direction = 0; |
Pokitto | 6:7e55f4fd3e4e | 419 | } |
Pokitto | 6:7e55f4fd3e4e | 420 | if (game.buttons.held(BTN_DOWN,1) && direction != 0) { |
Pokitto | 6:7e55f4fd3e4e | 421 | direction = 2; |
Pokitto | 6:7e55f4fd3e4e | 422 | } |
Pokitto | 6:7e55f4fd3e4e | 423 | if (game.buttons.held(BTN_RIGHT,1) && direction != 3) { |
Pokitto | 6:7e55f4fd3e4e | 424 | direction = 1; |
Pokitto | 6:7e55f4fd3e4e | 425 | } |
Pokitto | 6:7e55f4fd3e4e | 426 | if (game.buttons.held(BTN_LEFT,1) && direction != 1) { |
Pokitto | 6:7e55f4fd3e4e | 427 | direction = 3; |
Pokitto | 6:7e55f4fd3e4e | 428 | } |
Pokitto | 6:7e55f4fd3e4e | 429 | } |
Pokitto | 6:7e55f4fd3e4e | 430 | void snakeLogic() { |
Pokitto | 6:7e55f4fd3e4e | 431 | if (counter == 0) { |
Pokitto | 6:7e55f4fd3e4e | 432 | counter = 2; |
Pokitto | 6:7e55f4fd3e4e | 433 | //move |
Pokitto | 6:7e55f4fd3e4e | 434 | snakeUpdate = false; |
Pokitto | 6:7e55f4fd3e4e | 435 | gameMap [headX][headY] = 2; |
Pokitto | 6:7e55f4fd3e4e | 436 | if (direction == 0 && gameMap [headX][headY - 1] != -1 && gameMap [headX][headY - 1] < 2) { |
Pokitto | 6:7e55f4fd3e4e | 437 | headY--; |
Pokitto | 6:7e55f4fd3e4e | 438 | snakeUpdate = true; |
Pokitto | 6:7e55f4fd3e4e | 439 | } else if (direction == 1 && gameMap [headX + 1][headY] != -1 && gameMap [headX + 1][headY] < 2) { |
Pokitto | 6:7e55f4fd3e4e | 440 | headX++; |
Pokitto | 6:7e55f4fd3e4e | 441 | snakeUpdate = true; |
Pokitto | 6:7e55f4fd3e4e | 442 | } else if (direction == 2 && gameMap [headX][headY + 1] != -1 && gameMap [headX][headY + 1] < 2) { |
Pokitto | 6:7e55f4fd3e4e | 443 | headY++; |
Pokitto | 6:7e55f4fd3e4e | 444 | snakeUpdate = true; |
Pokitto | 6:7e55f4fd3e4e | 445 | } else if (direction == 3 && gameMap [headX - 1][headY] != -1 && gameMap [headX - 1][headY] < 2) { |
Pokitto | 6:7e55f4fd3e4e | 446 | headX--; |
Pokitto | 6:7e55f4fd3e4e | 447 | snakeUpdate = true; |
Pokitto | 6:7e55f4fd3e4e | 448 | } |
Pokitto | 6:7e55f4fd3e4e | 449 | //collision w/ food |
Pokitto | 6:7e55f4fd3e4e | 450 | if (gameMap [headX][headY] == -2) { |
Pokitto | 6:7e55f4fd3e4e | 451 | snakeLength += 1; |
Pokitto | 6:7e55f4fd3e4e | 452 | snakePlaceFood(); |
Pokitto | 6:7e55f4fd3e4e | 453 | if (bsound) game.sound.playOK(); |
Pokitto | 6:7e55f4fd3e4e | 454 | } |
Pokitto | 6:7e55f4fd3e4e | 455 | gameMap [headX][headY] = 1; |
Pokitto | 6:7e55f4fd3e4e | 456 | //destroy old snake bricks |
Pokitto | 6:7e55f4fd3e4e | 457 | for (int y=0;y<20;y++) { |
Pokitto | 6:7e55f4fd3e4e | 458 | for (int x=0;x<27;x++) { |
Pokitto | 6:7e55f4fd3e4e | 459 | if (snakeUpdate) { |
Pokitto | 6:7e55f4fd3e4e | 460 | if (gameMap [x][y] >= snakeLength + 1) { |
Pokitto | 6:7e55f4fd3e4e | 461 | gameMap [x][y] = 0; |
Pokitto | 6:7e55f4fd3e4e | 462 | } else if (gameMap [x][y] >= 2) { |
Pokitto | 6:7e55f4fd3e4e | 463 | gameMap [x][y] += 1; |
Pokitto | 6:7e55f4fd3e4e | 464 | } |
Pokitto | 6:7e55f4fd3e4e | 465 | } |
Pokitto | 6:7e55f4fd3e4e | 466 | if (gameMap [x][y] == 1 && !(x == headX && y == headY)) { |
Pokitto | 6:7e55f4fd3e4e | 467 | gameMap [x][y] = 0; |
Pokitto | 6:7e55f4fd3e4e | 468 | } |
Pokitto | 6:7e55f4fd3e4e | 469 | } |
Pokitto | 6:7e55f4fd3e4e | 470 | } |
Pokitto | 6:7e55f4fd3e4e | 471 | if (snakeLength - 3 > snakeHS) { |
Pokitto | 6:7e55f4fd3e4e | 472 | snakeHS = snakeLength - 3; |
Pokitto | 6:7e55f4fd3e4e | 473 | } |
Pokitto | 6:7e55f4fd3e4e | 474 | //death |
Pokitto | 6:7e55f4fd3e4e | 475 | if (!snakeUpdate) { |
Pokitto | 6:7e55f4fd3e4e | 476 | snakeLength = 3; |
Pokitto | 6:7e55f4fd3e4e | 477 | headX = 13; |
Pokitto | 6:7e55f4fd3e4e | 478 | headY = 10; |
Pokitto | 6:7e55f4fd3e4e | 479 | snakeInitializing = true; |
Pokitto | 22:25d0247917fc | 480 | snakeGridInit(); |
Pokitto | 6:7e55f4fd3e4e | 481 | if (bsound) game.sound.playCancel(); |
Pokitto | 6:7e55f4fd3e4e | 482 | } |
Pokitto | 6:7e55f4fd3e4e | 483 | } else { |
Pokitto | 6:7e55f4fd3e4e | 484 | counter--; |
Pokitto | 6:7e55f4fd3e4e | 485 | } |
Pokitto | 6:7e55f4fd3e4e | 486 | } |
Pokitto | 6:7e55f4fd3e4e | 487 | void snakeDraw() { |
Pokitto | 6:7e55f4fd3e4e | 488 | //draw BG |
Pokitto | 6:7e55f4fd3e4e | 489 | game.display.color = 14; |
Pokitto | 6:7e55f4fd3e4e | 490 | game.display.fillRectangle(4,4,100,72); |
Pokitto | 6:7e55f4fd3e4e | 491 | //draw map |
Pokitto | 6:7e55f4fd3e4e | 492 | for (int y=0;y<20;y++) { |
Pokitto | 6:7e55f4fd3e4e | 493 | for (int x=0;x<27;x++) { |
Pokitto | 6:7e55f4fd3e4e | 494 | switch (gameMap[x][y]) { |
Pokitto | 6:7e55f4fd3e4e | 495 | case -2 : |
Pokitto | 6:7e55f4fd3e4e | 496 | game.display.drawBitmap(x*4,y*4,pink); |
Pokitto | 6:7e55f4fd3e4e | 497 | break; |
Pokitto | 6:7e55f4fd3e4e | 498 | case -1 : |
Pokitto | 6:7e55f4fd3e4e | 499 | game.display.drawBitmap(x*4,y*4,red); |
Pokitto | 6:7e55f4fd3e4e | 500 | break; |
Pokitto | 6:7e55f4fd3e4e | 501 | case 0 : |
Pokitto | 6:7e55f4fd3e4e | 502 | //game.display.drawBitmap(x*4,y*4,yellow); |
Pokitto | 6:7e55f4fd3e4e | 503 | break; |
Pokitto | 6:7e55f4fd3e4e | 504 | case 1 : |
Pokitto | 6:7e55f4fd3e4e | 505 | game.display.drawBitmap(x*4,y*4,cyan); |
Pokitto | 6:7e55f4fd3e4e | 506 | break; |
Pokitto | 6:7e55f4fd3e4e | 507 | default : |
Pokitto | 6:7e55f4fd3e4e | 508 | if (gameMap[x][y] % 2 == 1) { |
Pokitto | 6:7e55f4fd3e4e | 509 | game.display.drawBitmap(x*4,y*4,blue); |
Pokitto | 6:7e55f4fd3e4e | 510 | } else { |
Pokitto | 6:7e55f4fd3e4e | 511 | game.display.drawBitmap(x*4,y*4,green); |
Pokitto | 6:7e55f4fd3e4e | 512 | } |
Pokitto | 6:7e55f4fd3e4e | 513 | break; |
Pokitto | 6:7e55f4fd3e4e | 514 | } |
Pokitto | 6:7e55f4fd3e4e | 515 | } |
Pokitto | 6:7e55f4fd3e4e | 516 | |
Pokitto | 6:7e55f4fd3e4e | 517 | } |
Pokitto | 6:7e55f4fd3e4e | 518 | //draw score |
Pokitto | 6:7e55f4fd3e4e | 519 | game.display.color = 2; |
Pokitto | 6:7e55f4fd3e4e | 520 | game.display.fillRectangle(0,80,110,8); |
Pokitto | 6:7e55f4fd3e4e | 521 | game.display.setFont(font3x5); |
Pokitto | 6:7e55f4fd3e4e | 522 | game.display.setCursor(1,82); |
Pokitto | 6:7e55f4fd3e4e | 523 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 524 | game.display.print("SCORE "); |
Pokitto | 6:7e55f4fd3e4e | 525 | game.display.print(snakeLength - 3); |
Pokitto | 6:7e55f4fd3e4e | 526 | game.display.setCursor(65,82); |
Pokitto | 6:7e55f4fd3e4e | 527 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 528 | game.display.print("HISCORE "); |
Pokitto | 6:7e55f4fd3e4e | 529 | game.display.print(snakeHS); |
Pokitto | 6:7e55f4fd3e4e | 530 | } |
Pokitto | 6:7e55f4fd3e4e | 531 | void stackerDataInit() { |
Pokitto | 6:7e55f4fd3e4e | 532 | //initialize data list |
Pokitto | 6:7e55f4fd3e4e | 533 | for (int y=0;y<2;y++) { |
Pokitto | 6:7e55f4fd3e4e | 534 | for (int x=0;x<20;x++) { |
Pokitto | 6:7e55f4fd3e4e | 535 | oldBlockData[x][y] = 0; |
Pokitto | 6:7e55f4fd3e4e | 536 | } |
Pokitto | 6:7e55f4fd3e4e | 537 | } |
Pokitto | 6:7e55f4fd3e4e | 538 | } |
Pokitto | 6:7e55f4fd3e4e | 539 | void stackerInput() { |
Pokitto | 6:7e55f4fd3e4e | 540 | if (game.buttons.held(BTN_A,1)) { |
Pokitto | 6:7e55f4fd3e4e | 541 | if (bsound) game.sound.playTick(); |
Pokitto | 6:7e55f4fd3e4e | 542 | if (blockH >= 0) { |
Pokitto | 6:7e55f4fd3e4e | 543 | //place old blocks |
Pokitto | 6:7e55f4fd3e4e | 544 | oldBlockData[blockH - blockHOffset][0] = blockX; |
Pokitto | 6:7e55f4fd3e4e | 545 | oldBlockData[blockH - blockHOffset][1] = blockSize; |
Pokitto | 6:7e55f4fd3e4e | 546 | blockH += 1; |
Pokitto | 6:7e55f4fd3e4e | 547 | if (blockH > 1) { |
Pokitto | 6:7e55f4fd3e4e | 548 | stackLost = false; |
Pokitto | 6:7e55f4fd3e4e | 549 | //basic block reduction algorithm |
Pokitto | 6:7e55f4fd3e4e | 550 | switch (blockX - oldBlockData[blockH - blockHOffset - 2][0]) { |
Pokitto | 6:7e55f4fd3e4e | 551 | case -3 : |
Pokitto | 6:7e55f4fd3e4e | 552 | blockLoss = 3; |
Pokitto | 6:7e55f4fd3e4e | 553 | blockMove = 3; |
Pokitto | 6:7e55f4fd3e4e | 554 | break; |
Pokitto | 6:7e55f4fd3e4e | 555 | case -2 : |
Pokitto | 6:7e55f4fd3e4e | 556 | blockLoss = 2; |
Pokitto | 6:7e55f4fd3e4e | 557 | blockMove = 2; |
Pokitto | 6:7e55f4fd3e4e | 558 | break; |
Pokitto | 6:7e55f4fd3e4e | 559 | case -1 : |
Pokitto | 6:7e55f4fd3e4e | 560 | blockLoss = 1; |
Pokitto | 6:7e55f4fd3e4e | 561 | blockMove = 1; |
Pokitto | 6:7e55f4fd3e4e | 562 | break; |
Pokitto | 6:7e55f4fd3e4e | 563 | case 0 : |
Pokitto | 6:7e55f4fd3e4e | 564 | blockLoss = 0; |
Pokitto | 6:7e55f4fd3e4e | 565 | blockMove = 0; |
Pokitto | 6:7e55f4fd3e4e | 566 | break; |
Pokitto | 6:7e55f4fd3e4e | 567 | case 1 : |
Pokitto | 6:7e55f4fd3e4e | 568 | blockLoss = 1; |
Pokitto | 6:7e55f4fd3e4e | 569 | blockMove = 0; |
Pokitto | 6:7e55f4fd3e4e | 570 | break; |
Pokitto | 6:7e55f4fd3e4e | 571 | case 2 : |
Pokitto | 6:7e55f4fd3e4e | 572 | blockLoss = 2; |
Pokitto | 6:7e55f4fd3e4e | 573 | blockMove = 0; |
Pokitto | 6:7e55f4fd3e4e | 574 | break; |
Pokitto | 6:7e55f4fd3e4e | 575 | case 3 : |
Pokitto | 6:7e55f4fd3e4e | 576 | blockLoss = 3; |
Pokitto | 6:7e55f4fd3e4e | 577 | blockMove = 0; |
Pokitto | 6:7e55f4fd3e4e | 578 | break; |
Pokitto | 6:7e55f4fd3e4e | 579 | default : |
Pokitto | 6:7e55f4fd3e4e | 580 | blockLoss = 4; |
Pokitto | 6:7e55f4fd3e4e | 581 | stackLost = true; |
Pokitto | 6:7e55f4fd3e4e | 582 | |
Pokitto | 6:7e55f4fd3e4e | 583 | } |
Pokitto | 6:7e55f4fd3e4e | 584 | //score |
Pokitto | 6:7e55f4fd3e4e | 585 | stackerScore += (4-blockLoss); |
Pokitto | 6:7e55f4fd3e4e | 586 | //block reduction in action! |
Pokitto | 6:7e55f4fd3e4e | 587 | if (!stackLost) { |
Pokitto | 6:7e55f4fd3e4e | 588 | blockSize -= blockLoss; |
Pokitto | 6:7e55f4fd3e4e | 589 | blockX += blockMove; |
Pokitto | 6:7e55f4fd3e4e | 590 | oldBlockData[blockH - blockHOffset - 1][1] -= blockLoss; |
Pokitto | 6:7e55f4fd3e4e | 591 | oldBlockData[blockH - blockHOffset - 1][0] += blockMove; |
Pokitto | 6:7e55f4fd3e4e | 592 | } |
Pokitto | 6:7e55f4fd3e4e | 593 | } else { |
Pokitto | 6:7e55f4fd3e4e | 594 | stackerScore += 4; |
Pokitto | 6:7e55f4fd3e4e | 595 | } |
Pokitto | 6:7e55f4fd3e4e | 596 | //scroll through blocks |
Pokitto | 6:7e55f4fd3e4e | 597 | if (blockH >= 13) { |
Pokitto | 6:7e55f4fd3e4e | 598 | blockHOffset += 1; |
Pokitto | 6:7e55f4fd3e4e | 599 | for (int y=0;y<15;y++) { |
Pokitto | 6:7e55f4fd3e4e | 600 | oldBlockData[y][0] = oldBlockData[y+1][0]; |
Pokitto | 6:7e55f4fd3e4e | 601 | oldBlockData[y][1] = oldBlockData[y+1][1]; |
Pokitto | 6:7e55f4fd3e4e | 602 | } |
Pokitto | 6:7e55f4fd3e4e | 603 | } |
Pokitto | 6:7e55f4fd3e4e | 604 | } |
Pokitto | 6:7e55f4fd3e4e | 605 | } |
Pokitto | 6:7e55f4fd3e4e | 606 | } |
Pokitto | 6:7e55f4fd3e4e | 607 | void stackerLogic() { |
Pokitto | 6:7e55f4fd3e4e | 608 | if (counter == 0) { |
Pokitto | 6:7e55f4fd3e4e | 609 | counter = stackerDelay; |
Pokitto | 6:7e55f4fd3e4e | 610 | //loss |
Pokitto | 6:7e55f4fd3e4e | 611 | if (stackLost || blockSize <= 0) { |
Pokitto | 6:7e55f4fd3e4e | 612 | if (bsound) game.sound.playCancel(); |
Pokitto | 6:7e55f4fd3e4e | 613 | stackerDataInit(); |
Pokitto | 6:7e55f4fd3e4e | 614 | blockSize = 4; |
Pokitto | 6:7e55f4fd3e4e | 615 | blockDir = 1; |
Pokitto | 6:7e55f4fd3e4e | 616 | blockH = 0; |
Pokitto | 6:7e55f4fd3e4e | 617 | blockX = 0; |
Pokitto | 6:7e55f4fd3e4e | 618 | blockHOffset = 0; |
Pokitto | 6:7e55f4fd3e4e | 619 | stackerScore = 0; |
Pokitto | 6:7e55f4fd3e4e | 620 | stackLost = false; |
Pokitto | 6:7e55f4fd3e4e | 621 | } |
Pokitto | 6:7e55f4fd3e4e | 622 | //move blocks |
Pokitto | 6:7e55f4fd3e4e | 623 | blockX += blockDir; |
Pokitto | 6:7e55f4fd3e4e | 624 | if (blockX == 0) { |
Pokitto | 6:7e55f4fd3e4e | 625 | blockDir = 1; |
Pokitto | 6:7e55f4fd3e4e | 626 | } else if (blockX == 27 - blockSize) { |
Pokitto | 6:7e55f4fd3e4e | 627 | blockDir = -1; |
Pokitto | 6:7e55f4fd3e4e | 628 | } |
Pokitto | 6:7e55f4fd3e4e | 629 | //hiscore |
Pokitto | 6:7e55f4fd3e4e | 630 | if (stackerScore > stackerHS) { |
Pokitto | 6:7e55f4fd3e4e | 631 | stackerHS = stackerScore; |
Pokitto | 6:7e55f4fd3e4e | 632 | } |
Pokitto | 6:7e55f4fd3e4e | 633 | //speed up |
Pokitto | 6:7e55f4fd3e4e | 634 | if (blockH >= 15) { |
Pokitto | 6:7e55f4fd3e4e | 635 | if (bsound && stackerDelay == 1) game.sound.playOK(); |
Pokitto | 6:7e55f4fd3e4e | 636 | stackerDelay = 0; |
Pokitto | 6:7e55f4fd3e4e | 637 | } else if (blockH >= 10) { |
Pokitto | 6:7e55f4fd3e4e | 638 | if (bsound && stackerDelay == 2) game.sound.playOK(); |
Pokitto | 6:7e55f4fd3e4e | 639 | stackerDelay = 1; |
Pokitto | 6:7e55f4fd3e4e | 640 | } else if (blockH >= 5) { |
Pokitto | 6:7e55f4fd3e4e | 641 | if (bsound && stackerDelay == 3) game.sound.playOK(); |
Pokitto | 6:7e55f4fd3e4e | 642 | stackerDelay = 2; |
Pokitto | 6:7e55f4fd3e4e | 643 | } else { |
Pokitto | 6:7e55f4fd3e4e | 644 | stackerDelay = 3; |
Pokitto | 6:7e55f4fd3e4e | 645 | } |
Pokitto | 6:7e55f4fd3e4e | 646 | } else { |
Pokitto | 6:7e55f4fd3e4e | 647 | counter--; |
Pokitto | 6:7e55f4fd3e4e | 648 | } |
Pokitto | 6:7e55f4fd3e4e | 649 | } |
Pokitto | 6:7e55f4fd3e4e | 650 | void stackerDraw() { |
Pokitto | 6:7e55f4fd3e4e | 651 | //draw old blocks |
Pokitto | 6:7e55f4fd3e4e | 652 | for (int indx=0;indx<22;indx++) { |
Pokitto | 6:7e55f4fd3e4e | 653 | for (int a=0;a<oldBlockData[indx][1];a++) { |
Pokitto | 6:7e55f4fd3e4e | 654 | switch ((blockHOffset + indx) % 6) { |
Pokitto | 6:7e55f4fd3e4e | 655 | case 0 : |
Pokitto | 6:7e55f4fd3e4e | 656 | game.display.drawBitmap((oldBlockData[indx][0] + a) * 4,80 - (indx + 1) * 4,red); |
Pokitto | 6:7e55f4fd3e4e | 657 | break; |
Pokitto | 6:7e55f4fd3e4e | 658 | case 1 : |
Pokitto | 6:7e55f4fd3e4e | 659 | game.display.drawBitmap((oldBlockData[indx][0] + a) * 4,80 - (indx + 1) * 4,yellow); |
Pokitto | 6:7e55f4fd3e4e | 660 | break; |
Pokitto | 6:7e55f4fd3e4e | 661 | case 2 : |
Pokitto | 6:7e55f4fd3e4e | 662 | game.display.drawBitmap((oldBlockData[indx][0] + a) * 4,80 - (indx + 1) * 4,green); |
Pokitto | 6:7e55f4fd3e4e | 663 | break; |
Pokitto | 6:7e55f4fd3e4e | 664 | case 3 : |
Pokitto | 6:7e55f4fd3e4e | 665 | game.display.drawBitmap((oldBlockData[indx][0] + a) * 4,80 - (indx + 1) * 4,cyan); |
Pokitto | 6:7e55f4fd3e4e | 666 | break; |
Pokitto | 6:7e55f4fd3e4e | 667 | case 4 : |
Pokitto | 6:7e55f4fd3e4e | 668 | game.display.drawBitmap((oldBlockData[indx][0] + a) * 4,80 - (indx + 1) * 4,blue); |
Pokitto | 6:7e55f4fd3e4e | 669 | break; |
Pokitto | 6:7e55f4fd3e4e | 670 | case 5 : |
Pokitto | 6:7e55f4fd3e4e | 671 | game.display.drawBitmap((oldBlockData[indx][0] + a) * 4,80 - (indx + 1) * 4,pink); |
Pokitto | 6:7e55f4fd3e4e | 672 | break; |
Pokitto | 6:7e55f4fd3e4e | 673 | } |
Pokitto | 6:7e55f4fd3e4e | 674 | |
Pokitto | 6:7e55f4fd3e4e | 675 | } |
Pokitto | 6:7e55f4fd3e4e | 676 | } |
Pokitto | 6:7e55f4fd3e4e | 677 | //draw current blocks |
Pokitto | 6:7e55f4fd3e4e | 678 | for (int a=0;a<blockSize;a++) { |
Pokitto | 6:7e55f4fd3e4e | 679 | switch (blockH % 6) { |
Pokitto | 6:7e55f4fd3e4e | 680 | case 0 : |
Pokitto | 6:7e55f4fd3e4e | 681 | game.display.drawBitmap((blockX + a) * 4,80 - ((blockH - blockHOffset) + 1) * 4,red); |
Pokitto | 6:7e55f4fd3e4e | 682 | break; |
Pokitto | 6:7e55f4fd3e4e | 683 | case 1 : |
Pokitto | 6:7e55f4fd3e4e | 684 | game.display.drawBitmap((blockX + a) * 4,80 - ((blockH - blockHOffset) + 1) * 4,yellow); |
Pokitto | 6:7e55f4fd3e4e | 685 | break; |
Pokitto | 6:7e55f4fd3e4e | 686 | case 2 : |
Pokitto | 6:7e55f4fd3e4e | 687 | game.display.drawBitmap((blockX + a) * 4,80 - ((blockH - blockHOffset) + 1) * 4,green); |
Pokitto | 6:7e55f4fd3e4e | 688 | break; |
Pokitto | 6:7e55f4fd3e4e | 689 | case 3 : |
Pokitto | 6:7e55f4fd3e4e | 690 | game.display.drawBitmap((blockX + a) * 4,80 - ((blockH - blockHOffset) + 1) * 4,cyan); |
Pokitto | 6:7e55f4fd3e4e | 691 | break; |
Pokitto | 6:7e55f4fd3e4e | 692 | case 4 : |
Pokitto | 6:7e55f4fd3e4e | 693 | game.display.drawBitmap((blockX + a) * 4,80 - ((blockH - blockHOffset) + 1) * 4,blue); |
Pokitto | 6:7e55f4fd3e4e | 694 | break; |
Pokitto | 6:7e55f4fd3e4e | 695 | case 5 : |
Pokitto | 6:7e55f4fd3e4e | 696 | game.display.drawBitmap((blockX + a) * 4,80 - ((blockH - blockHOffset) + 1) * 4,pink); |
Pokitto | 6:7e55f4fd3e4e | 697 | break; |
Pokitto | 6:7e55f4fd3e4e | 698 | } |
Pokitto | 6:7e55f4fd3e4e | 699 | |
Pokitto | 6:7e55f4fd3e4e | 700 | } |
Pokitto | 6:7e55f4fd3e4e | 701 | //score |
Pokitto | 6:7e55f4fd3e4e | 702 | game.display.color = 2; |
Pokitto | 6:7e55f4fd3e4e | 703 | game.display.fillRectangle(0,80,110,8); |
Pokitto | 6:7e55f4fd3e4e | 704 | game.display.setFont(font3x5); |
Pokitto | 6:7e55f4fd3e4e | 705 | game.display.setCursor(1,82); |
Pokitto | 6:7e55f4fd3e4e | 706 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 707 | game.display.print("SCORE "); |
Pokitto | 6:7e55f4fd3e4e | 708 | game.display.print(stackerScore); |
Pokitto | 6:7e55f4fd3e4e | 709 | game.display.setCursor(65,82); |
Pokitto | 6:7e55f4fd3e4e | 710 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 711 | game.display.print("HISCORE "); |
Pokitto | 6:7e55f4fd3e4e | 712 | game.display.print(stackerHS); |
Pokitto | 6:7e55f4fd3e4e | 713 | } |
Pokitto | 6:7e55f4fd3e4e | 714 | void menuLogic() { |
Pokitto | 6:7e55f4fd3e4e | 715 | if (game.buttons.held(BTN_RIGHT,1)) { |
Pokitto | 6:7e55f4fd3e4e | 716 | menuSelection++; |
Pokitto | 6:7e55f4fd3e4e | 717 | if (bsound) game.sound.playTick(); |
Pokitto | 6:7e55f4fd3e4e | 718 | if (menuSelection == 5) { |
Pokitto | 6:7e55f4fd3e4e | 719 | menuSelection = 1; |
Pokitto | 6:7e55f4fd3e4e | 720 | } |
Pokitto | 6:7e55f4fd3e4e | 721 | } |
Pokitto | 6:7e55f4fd3e4e | 722 | if (game.buttons.held(BTN_LEFT,1)) { |
Pokitto | 6:7e55f4fd3e4e | 723 | menuSelection--; |
Pokitto | 6:7e55f4fd3e4e | 724 | if (bsound) game.sound.playTick(); |
Pokitto | 6:7e55f4fd3e4e | 725 | if (menuSelection == 0) { |
Pokitto | 6:7e55f4fd3e4e | 726 | menuSelection = 4; |
Pokitto | 6:7e55f4fd3e4e | 727 | } |
Pokitto | 6:7e55f4fd3e4e | 728 | } |
Pokitto | 6:7e55f4fd3e4e | 729 | if (game.buttons.held(BTN_A,1)) { |
Pokitto | 6:7e55f4fd3e4e | 730 | if (bsound) game.sound.playOK(); |
Pokitto | 6:7e55f4fd3e4e | 731 | switch (menuSelection) { |
Pokitto | 6:7e55f4fd3e4e | 732 | case 1 : |
Pokitto | 6:7e55f4fd3e4e | 733 | scoreA = 0; |
Pokitto | 6:7e55f4fd3e4e | 734 | scoreB = 0; |
Pokitto | 6:7e55f4fd3e4e | 735 | resetPongValues(); |
Pokitto | 6:7e55f4fd3e4e | 736 | gameMode = 1; |
Pokitto | 6:7e55f4fd3e4e | 737 | break; |
Pokitto | 6:7e55f4fd3e4e | 738 | case 2 : |
Pokitto | 6:7e55f4fd3e4e | 739 | scoreBr = 0; |
Pokitto | 6:7e55f4fd3e4e | 740 | secondLevel = false; |
Pokitto | 6:7e55f4fd3e4e | 741 | lives = 3; |
Pokitto | 6:7e55f4fd3e4e | 742 | resetPongValues(); |
Pokitto | 6:7e55f4fd3e4e | 743 | ballSpeed = 1.0f; |
Pokitto | 6:7e55f4fd3e4e | 744 | breakoutGridInit(); |
Pokitto | 6:7e55f4fd3e4e | 745 | gameMode = 2; |
Pokitto | 6:7e55f4fd3e4e | 746 | break; |
Pokitto | 6:7e55f4fd3e4e | 747 | case 3 : |
Pokitto | 6:7e55f4fd3e4e | 748 | snakeLength = 3; |
Pokitto | 6:7e55f4fd3e4e | 749 | headX = 13; |
Pokitto | 6:7e55f4fd3e4e | 750 | headY = 10; |
Pokitto | 6:7e55f4fd3e4e | 751 | direction = 0; |
Pokitto | 6:7e55f4fd3e4e | 752 | snakeUpdate = false; |
Pokitto | 6:7e55f4fd3e4e | 753 | foodPlacementSuccess = false; |
Pokitto | 6:7e55f4fd3e4e | 754 | snakeInitializing = true; |
Pokitto | 6:7e55f4fd3e4e | 755 | snakeGridInit(); |
Pokitto | 6:7e55f4fd3e4e | 756 | gameMode = 3; |
Pokitto | 6:7e55f4fd3e4e | 757 | break; |
Pokitto | 6:7e55f4fd3e4e | 758 | case 4 : |
Pokitto | 6:7e55f4fd3e4e | 759 | blockX = 0; |
Pokitto | 6:7e55f4fd3e4e | 760 | blockSize = 4; |
Pokitto | 6:7e55f4fd3e4e | 761 | blockDir = 1; |
Pokitto | 6:7e55f4fd3e4e | 762 | blockH = 0; |
Pokitto | 6:7e55f4fd3e4e | 763 | blockHOffset = 0; |
Pokitto | 6:7e55f4fd3e4e | 764 | blockLoss = 0; |
Pokitto | 6:7e55f4fd3e4e | 765 | blockMove = 0; |
Pokitto | 6:7e55f4fd3e4e | 766 | stackLost = false; |
Pokitto | 6:7e55f4fd3e4e | 767 | stackerScore = 0; |
Pokitto | 6:7e55f4fd3e4e | 768 | stackerDelay = 3; |
Pokitto | 6:7e55f4fd3e4e | 769 | stackerDataInit(); |
Pokitto | 6:7e55f4fd3e4e | 770 | gameMode = 4; |
Pokitto | 6:7e55f4fd3e4e | 771 | break; |
Pokitto | 6:7e55f4fd3e4e | 772 | } |
Pokitto | 6:7e55f4fd3e4e | 773 | } |
Pokitto | 6:7e55f4fd3e4e | 774 | if (game.buttons.held(BTN_B,1)) { |
Pokitto | 6:7e55f4fd3e4e | 775 | gameMode = -1; |
Pokitto | 6:7e55f4fd3e4e | 776 | } |
Pokitto | 6:7e55f4fd3e4e | 777 | } |
Pokitto | 6:7e55f4fd3e4e | 778 | void menuDraw() { |
Pokitto | 6:7e55f4fd3e4e | 779 | game.display.drawBitmap(30,10,logo); |
Pokitto | 6:7e55f4fd3e4e | 780 | switch (menuSelection) { |
Pokitto | 6:7e55f4fd3e4e | 781 | case 1 : |
Pokitto | 6:7e55f4fd3e4e | 782 | game.display.drawBitmap(28,30,pongSS); |
Pokitto | 6:7e55f4fd3e4e | 783 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 784 | game.display.setCursor(40,70); |
Pokitto | 6:7e55f4fd3e4e | 785 | game.display.setFont(font3x5); |
Pokitto | 6:7e55f4fd3e4e | 786 | game.display.print("Pong \n"); |
Pokitto | 6:7e55f4fd3e4e | 787 | break; |
Pokitto | 6:7e55f4fd3e4e | 788 | case 2 : |
Pokitto | 6:7e55f4fd3e4e | 789 | game.display.drawBitmap(28,30,breakoutSS); |
Pokitto | 6:7e55f4fd3e4e | 790 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 791 | game.display.setCursor(40,70); |
Pokitto | 6:7e55f4fd3e4e | 792 | game.display.setFont(font3x5); |
Pokitto | 6:7e55f4fd3e4e | 793 | game.display.print("Breakout \n"); |
Pokitto | 6:7e55f4fd3e4e | 794 | break; |
Pokitto | 6:7e55f4fd3e4e | 795 | case 3 : |
Pokitto | 6:7e55f4fd3e4e | 796 | game.display.drawBitmap(28,30,snakeSS); |
Pokitto | 6:7e55f4fd3e4e | 797 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 798 | game.display.setCursor(40,70); |
Pokitto | 6:7e55f4fd3e4e | 799 | game.display.setFont(font3x5); |
Pokitto | 6:7e55f4fd3e4e | 800 | game.display.print("Snake \n"); |
Pokitto | 6:7e55f4fd3e4e | 801 | break; |
Pokitto | 6:7e55f4fd3e4e | 802 | case 4 : |
Pokitto | 6:7e55f4fd3e4e | 803 | game.display.drawBitmap(28,30,stackerSS); |
Pokitto | 6:7e55f4fd3e4e | 804 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 805 | game.display.setCursor(40,70); |
Pokitto | 6:7e55f4fd3e4e | 806 | game.display.setFont(font3x5); |
Pokitto | 6:7e55f4fd3e4e | 807 | game.display.print("Stacker \n"); |
Pokitto | 6:7e55f4fd3e4e | 808 | break; |
Pokitto | 6:7e55f4fd3e4e | 809 | } |
Pokitto | 6:7e55f4fd3e4e | 810 | game.display.print("A: Play \n"); |
Pokitto | 6:7e55f4fd3e4e | 811 | game.display.print("B: Settings \n"); |
Pokitto | 6:7e55f4fd3e4e | 812 | |
Pokitto | 6:7e55f4fd3e4e | 813 | } |
Pokitto | 6:7e55f4fd3e4e | 814 | void optionsLogic() { |
Pokitto | 6:7e55f4fd3e4e | 815 | if (game.buttons.held(BTN_UP,1)) { |
Pokitto | 6:7e55f4fd3e4e | 816 | optionSelection--; |
Pokitto | 6:7e55f4fd3e4e | 817 | if (bsound) game.sound.playTick(); |
Pokitto | 6:7e55f4fd3e4e | 818 | if (optionSelection == 0) { |
Pokitto | 6:7e55f4fd3e4e | 819 | optionSelection = 3; |
Pokitto | 6:7e55f4fd3e4e | 820 | } |
Pokitto | 6:7e55f4fd3e4e | 821 | } |
Pokitto | 6:7e55f4fd3e4e | 822 | if (game.buttons.held(BTN_DOWN,1)) { |
Pokitto | 6:7e55f4fd3e4e | 823 | optionSelection++; |
Pokitto | 6:7e55f4fd3e4e | 824 | if (bsound) game.sound.playTick(); |
Pokitto | 6:7e55f4fd3e4e | 825 | if (optionSelection == 4) { |
Pokitto | 6:7e55f4fd3e4e | 826 | optionSelection = 1; |
Pokitto | 6:7e55f4fd3e4e | 827 | } |
Pokitto | 6:7e55f4fd3e4e | 828 | } |
Pokitto | 6:7e55f4fd3e4e | 829 | if (game.buttons.held(BTN_A,1)) { |
Pokitto | 6:7e55f4fd3e4e | 830 | if (bsound) game.sound.playOK(); |
Pokitto | 6:7e55f4fd3e4e | 831 | switch (optionSelection) { |
Pokitto | 6:7e55f4fd3e4e | 832 | case 1 : |
Pokitto | 6:7e55f4fd3e4e | 833 | if (grayscale) { |
Pokitto | 6:7e55f4fd3e4e | 834 | grayscale = false; |
Pokitto | 6:7e55f4fd3e4e | 835 | game.display.load565Palette(color_pal); |
Pokitto | 6:7e55f4fd3e4e | 836 | } else { |
Pokitto | 6:7e55f4fd3e4e | 837 | grayscale = true; |
Pokitto | 6:7e55f4fd3e4e | 838 | game.display.load565Palette(grayscale_pal); |
Pokitto | 6:7e55f4fd3e4e | 839 | } |
Pokitto | 6:7e55f4fd3e4e | 840 | break; |
Pokitto | 6:7e55f4fd3e4e | 841 | case 2 : |
Pokitto | 6:7e55f4fd3e4e | 842 | bsound = !bsound; |
Pokitto | 6:7e55f4fd3e4e | 843 | break; |
Pokitto | 6:7e55f4fd3e4e | 844 | case 3 : |
Pokitto | 6:7e55f4fd3e4e | 845 | gameMode = 0; |
Pokitto | 6:7e55f4fd3e4e | 846 | break; |
Pokitto | 6:7e55f4fd3e4e | 847 | } |
Pokitto | 6:7e55f4fd3e4e | 848 | } |
Pokitto | 6:7e55f4fd3e4e | 849 | } |
Pokitto | 6:7e55f4fd3e4e | 850 | void optionsDraw() { |
Pokitto | 6:7e55f4fd3e4e | 851 | game.display.setCursor(0,30); |
Pokitto | 6:7e55f4fd3e4e | 852 | game.display.setFont(font5x7); |
Pokitto | 6:7e55f4fd3e4e | 853 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 854 | game.display.print("OPTIONS \n"); |
Pokitto | 6:7e55f4fd3e4e | 855 | game.display.setFont(font3x5); |
Pokitto | 6:7e55f4fd3e4e | 856 | if (optionSelection == 1) { |
Pokitto | 6:7e55f4fd3e4e | 857 | if (grayscale) { |
Pokitto | 6:7e55f4fd3e4e | 858 | game.display.color = 2; |
Pokitto | 6:7e55f4fd3e4e | 859 | } else { |
Pokitto | 6:7e55f4fd3e4e | 860 | game.display.color = 11; |
Pokitto | 6:7e55f4fd3e4e | 861 | } |
Pokitto | 6:7e55f4fd3e4e | 862 | } else { |
Pokitto | 6:7e55f4fd3e4e | 863 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 864 | } |
Pokitto | 6:7e55f4fd3e4e | 865 | if (grayscale) { |
Pokitto | 6:7e55f4fd3e4e | 866 | game.display.print("GRAYSCALE \n"); |
Pokitto | 6:7e55f4fd3e4e | 867 | } else { |
Pokitto | 6:7e55f4fd3e4e | 868 | game.display.print("COLOR \n"); |
Pokitto | 6:7e55f4fd3e4e | 869 | } |
Pokitto | 6:7e55f4fd3e4e | 870 | if (optionSelection == 2) { |
Pokitto | 6:7e55f4fd3e4e | 871 | if (grayscale) { |
Pokitto | 6:7e55f4fd3e4e | 872 | game.display.color = 2; |
Pokitto | 6:7e55f4fd3e4e | 873 | } else { |
Pokitto | 6:7e55f4fd3e4e | 874 | game.display.color = 11; |
Pokitto | 6:7e55f4fd3e4e | 875 | } |
Pokitto | 6:7e55f4fd3e4e | 876 | } else { |
Pokitto | 6:7e55f4fd3e4e | 877 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 878 | } |
Pokitto | 6:7e55f4fd3e4e | 879 | if (bsound) { |
Pokitto | 6:7e55f4fd3e4e | 880 | game.display.print("SOUND \n"); |
Pokitto | 6:7e55f4fd3e4e | 881 | } else { |
Pokitto | 6:7e55f4fd3e4e | 882 | game.display.print("MUTE \n"); |
Pokitto | 6:7e55f4fd3e4e | 883 | } |
Pokitto | 6:7e55f4fd3e4e | 884 | if (optionSelection == 3) { |
Pokitto | 6:7e55f4fd3e4e | 885 | if (grayscale) { |
Pokitto | 6:7e55f4fd3e4e | 886 | game.display.color = 2; |
Pokitto | 6:7e55f4fd3e4e | 887 | } else { |
Pokitto | 6:7e55f4fd3e4e | 888 | game.display.color = 11; |
Pokitto | 6:7e55f4fd3e4e | 889 | } |
Pokitto | 6:7e55f4fd3e4e | 890 | } else { |
Pokitto | 6:7e55f4fd3e4e | 891 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 892 | } |
Pokitto | 6:7e55f4fd3e4e | 893 | game.display.print("BACK TO MENU \n"); |
Pokitto | 6:7e55f4fd3e4e | 894 | } |
Pokitto | 6:7e55f4fd3e4e | 895 | void gameTitle() { |
Pokitto | 6:7e55f4fd3e4e | 896 | timeTime++; |
Pokitto | 6:7e55f4fd3e4e | 897 | game.display.drawBitmap(30,25+5*sin(timeTime/15),logo); |
Pokitto | 6:7e55f4fd3e4e | 898 | game.display.color = 15; |
Pokitto | 6:7e55f4fd3e4e | 899 | game.display.setCursor(25,45+5*sin(timeTime/15)); |
Pokitto | 6:7e55f4fd3e4e | 900 | game.display.setFont(font3x5); |
Pokitto | 6:7e55f4fd3e4e | 901 | game.display.print("Press A to begin"); |
Pokitto | 6:7e55f4fd3e4e | 902 | if (game.buttons.held(BTN_A,1)) { |
Pokitto | 6:7e55f4fd3e4e | 903 | gameMode = 0; |
Pokitto | 6:7e55f4fd3e4e | 904 | if (bsound) game.sound.playOK(); |
Pokitto | 6:7e55f4fd3e4e | 905 | } |
Pokitto | 6:7e55f4fd3e4e | 906 | } |
Pokitto | 6:7e55f4fd3e4e | 907 | int main() { |
Pokitto | 6:7e55f4fd3e4e | 908 | //initialization |
Pokitto | 6:7e55f4fd3e4e | 909 | game.begin(); |
Pokitto | 6:7e55f4fd3e4e | 910 | game.display.load565Palette(color_pal); |
Pokitto | 6:7e55f4fd3e4e | 911 | game.display.width = 110; |
Pokitto | 6:7e55f4fd3e4e | 912 | game.display.height = 88; |
Pokitto | 6:7e55f4fd3e4e | 913 | breakoutGridInit(); |
Pokitto | 6:7e55f4fd3e4e | 914 | snakeGridInit(); |
Pokitto | 6:7e55f4fd3e4e | 915 | stackerDataInit(); |
Pokitto | 6:7e55f4fd3e4e | 916 | game.sound.playMusicStream("MENU.SND"); |
Pokitto | 6:7e55f4fd3e4e | 917 | //game.sound.playMusicStream("Menu.snd"); |
Pokitto | 6:7e55f4fd3e4e | 918 | // columnsGridInit(); |
Pokitto | 6:7e55f4fd3e4e | 919 | //main game loop |
Pokitto | 6:7e55f4fd3e4e | 920 | while (game.isRunning) { |
Pokitto | 6:7e55f4fd3e4e | 921 | if (game.update()) { |
Pokitto | 6:7e55f4fd3e4e | 922 | //update RNG |
Pokitto | 6:7e55f4fd3e4e | 923 | RNG = rand() % 100 + 1; |
Pokitto | 6:7e55f4fd3e4e | 924 | switch (gameMode) { |
Pokitto | 6:7e55f4fd3e4e | 925 | case -2 : |
Pokitto | 6:7e55f4fd3e4e | 926 | //Title |
Pokitto | 6:7e55f4fd3e4e | 927 | gameTitle(); |
Pokitto | 6:7e55f4fd3e4e | 928 | break; |
Pokitto | 6:7e55f4fd3e4e | 929 | case -1 : |
Pokitto | 6:7e55f4fd3e4e | 930 | //Options |
Pokitto | 6:7e55f4fd3e4e | 931 | optionsLogic(); |
Pokitto | 6:7e55f4fd3e4e | 932 | optionsDraw(); |
Pokitto | 6:7e55f4fd3e4e | 933 | break; |
Pokitto | 6:7e55f4fd3e4e | 934 | case 0 : |
Pokitto | 6:7e55f4fd3e4e | 935 | //Menu |
Pokitto | 6:7e55f4fd3e4e | 936 | menuLogic(); |
Pokitto | 6:7e55f4fd3e4e | 937 | menuDraw(); |
Pokitto | 6:7e55f4fd3e4e | 938 | break; |
Pokitto | 6:7e55f4fd3e4e | 939 | case 1 : |
Pokitto | 6:7e55f4fd3e4e | 940 | //Pong |
Pokitto | 6:7e55f4fd3e4e | 941 | pongLogic(); |
Pokitto | 6:7e55f4fd3e4e | 942 | pongDraw(); |
Pokitto | 6:7e55f4fd3e4e | 943 | break; |
Pokitto | 6:7e55f4fd3e4e | 944 | case 2 : |
Pokitto | 6:7e55f4fd3e4e | 945 | //Breakout |
Pokitto | 6:7e55f4fd3e4e | 946 | breakoutLogic(); |
Pokitto | 6:7e55f4fd3e4e | 947 | breakoutDraw(); |
Pokitto | 6:7e55f4fd3e4e | 948 | break; |
Pokitto | 6:7e55f4fd3e4e | 949 | case 3 : |
Pokitto | 6:7e55f4fd3e4e | 950 | //Snake |
Pokitto | 6:7e55f4fd3e4e | 951 | snakeInput(); |
Pokitto | 6:7e55f4fd3e4e | 952 | snakeLogic(); |
Pokitto | 6:7e55f4fd3e4e | 953 | snakeDraw(); |
Pokitto | 6:7e55f4fd3e4e | 954 | break; |
Pokitto | 6:7e55f4fd3e4e | 955 | case 4 : |
Pokitto | 6:7e55f4fd3e4e | 956 | //Stacker |
Pokitto | 6:7e55f4fd3e4e | 957 | stackerInput(); |
Pokitto | 6:7e55f4fd3e4e | 958 | stackerLogic(); |
Pokitto | 6:7e55f4fd3e4e | 959 | stackerDraw(); |
Pokitto | 6:7e55f4fd3e4e | 960 | break; |
Pokitto | 6:7e55f4fd3e4e | 961 | case 5 : |
Pokitto | 6:7e55f4fd3e4e | 962 | //Columns |
Pokitto | 6:7e55f4fd3e4e | 963 | // columnsLogic(); |
Pokitto | 6:7e55f4fd3e4e | 964 | // columnsDraw(); |
Pokitto | 6:7e55f4fd3e4e | 965 | break; |
Pokitto | 6:7e55f4fd3e4e | 966 | } |
Pokitto | 6:7e55f4fd3e4e | 967 | if (game.buttons.held(BTN_C,1)) { |
Pokitto | 6:7e55f4fd3e4e | 968 | if (gameMode > 0) { |
Pokitto | 6:7e55f4fd3e4e | 969 | game.sound.playCancel(); |
Pokitto | 6:7e55f4fd3e4e | 970 | gameMode = 0; |
Pokitto | 6:7e55f4fd3e4e | 971 | } |
Pokitto | 6:7e55f4fd3e4e | 972 | } |
Pokitto | 6:7e55f4fd3e4e | 973 | } |
Pokitto | 6:7e55f4fd3e4e | 974 | } |
Pokitto | 6:7e55f4fd3e4e | 975 | } |