Snake game for a 5x5 LED matrix
main.cpp@2:9c075a0a6d4e, 2013-10-17 (annotated)
- Committer:
- dhamilton31
- Date:
- Thu Oct 17 22:09:22 2013 +0000
- Revision:
- 2:9c075a0a6d4e
- Parent:
- 1:5fcb94bb03db
Changed one stupid thing (cube) to (*cube) and it worked :P
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dhamilton31 | 2:9c075a0a6d4e | 1 | /* |
dhamilton31 | 2:9c075a0a6d4e | 2 | * 5x5 LED Snake Game |
dhamilton31 | 2:9c075a0a6d4e | 3 | * Author: Daniel Hamilton |
dhamilton31 | 2:9c075a0a6d4e | 4 | * ECE 4180 Lab 3 |
dhamilton31 | 2:9c075a0a6d4e | 5 | * |
dhamilton31 | 2:9c075a0a6d4e | 6 | */ |
dhamilton31 | 2:9c075a0a6d4e | 7 | |
dhamilton31 | 0:dc906408980e | 8 | #include "mbed.h" |
dhamilton31 | 0:dc906408980e | 9 | #include "ledCube.h" |
dhamilton31 | 0:dc906408980e | 10 | #include "snake.h" |
dhamilton31 | 1:5fcb94bb03db | 11 | #include "main.h" |
dhamilton31 | 1:5fcb94bb03db | 12 | |
dhamilton31 | 2:9c075a0a6d4e | 13 | snake mySnake(snakeStartRow,snakeStartCol); // Snake represents the coordinates making up the snake |
dhamilton31 | 2:9c075a0a6d4e | 14 | food myFood(foodStartRow, foodStartCol); // food pellet the snake is trying to eat |
dhamilton31 | 2:9c075a0a6d4e | 15 | ledCube cube; // Currently a square, but represents and controls the physical LEDs |
dhamilton31 | 2:9c075a0a6d4e | 16 | AnalogIn joyVer(p19); // vertical analog joystick input pin |
dhamilton31 | 2:9c075a0a6d4e | 17 | AnalogIn joyHor(p18); // Horizontal analog joystick input pin |
dhamilton31 | 2:9c075a0a6d4e | 18 | DigitalIn select(p17); // Pushbutton on the joystick (currently unused) |
dhamilton31 | 0:dc906408980e | 19 | |
dhamilton31 | 0:dc906408980e | 20 | int main() |
dhamilton31 | 0:dc906408980e | 21 | { |
dhamilton31 | 1:5fcb94bb03db | 22 | printf("Start\n"); |
dhamilton31 | 2:9c075a0a6d4e | 23 | int snakeUpdateCounter = 0; // keeps track of when we should move Snake |
dhamilton31 | 2:9c075a0a6d4e | 24 | cube.turnOnLed(snakeStartRow, snakeStartCol, 0); // Starts the snake at Row 0 Col 0 |
dhamilton31 | 2:9c075a0a6d4e | 25 | updateFoodLed(); // Lights up the food LED |
dhamilton31 | 1:5fcb94bb03db | 26 | printf("Setup Complete\n"); |
dhamilton31 | 2:9c075a0a6d4e | 27 | bool gameover = false; // Is set to true when the game is over and keeps the LEDs blinking |
dhamilton31 | 1:5fcb94bb03db | 28 | |
dhamilton31 | 0:dc906408980e | 29 | while(1) { |
dhamilton31 | 1:5fcb94bb03db | 30 | // Update snake position if we are greater than the set movement speed |
dhamilton31 | 1:5fcb94bb03db | 31 | if(snakeUpdateCounter++ >= mySnake.movementSpeed) { |
dhamilton31 | 1:5fcb94bb03db | 32 | snakeUpdateCounter = 0; |
dhamilton31 | 2:9c075a0a6d4e | 33 | if(mySnake.moveSnake(&cube) || gameover) { |
dhamilton31 | 2:9c075a0a6d4e | 34 | gameover = true; |
dhamilton31 | 1:5fcb94bb03db | 35 | cube.blink(); |
dhamilton31 | 1:5fcb94bb03db | 36 | } |
dhamilton31 | 2:9c075a0a6d4e | 37 | // See if the snake is on the Food's LED |
dhamilton31 | 1:5fcb94bb03db | 38 | if(checkForSnakeEating()) { |
dhamilton31 | 1:5fcb94bb03db | 39 | myFood.moveFood(rand() % 5, rand() % 5); |
dhamilton31 | 1:5fcb94bb03db | 40 | updateFoodLed(); |
dhamilton31 | 1:5fcb94bb03db | 41 | } |
dhamilton31 | 1:5fcb94bb03db | 42 | } |
dhamilton31 | 1:5fcb94bb03db | 43 | updateDirectionInput(); |
dhamilton31 | 1:5fcb94bb03db | 44 | wait(.1); |
dhamilton31 | 0:dc906408980e | 45 | } |
dhamilton31 | 1:5fcb94bb03db | 46 | |
dhamilton31 | 0:dc906408980e | 47 | } |
dhamilton31 | 1:5fcb94bb03db | 48 | |
dhamilton31 | 2:9c075a0a6d4e | 49 | // Return true if the snake is on a food, false otherwise |
dhamilton31 | 1:5fcb94bb03db | 50 | bool checkForSnakeEating() |
dhamilton31 | 1:5fcb94bb03db | 51 | { |
dhamilton31 | 1:5fcb94bb03db | 52 | return mySnake.isEating(myFood.currRow, myFood.currCol); |
dhamilton31 | 1:5fcb94bb03db | 53 | } |
dhamilton31 | 1:5fcb94bb03db | 54 | |
dhamilton31 | 2:9c075a0a6d4e | 55 | // Update the food's loction |
dhamilton31 | 1:5fcb94bb03db | 56 | void updateFoodLed() |
dhamilton31 | 1:5fcb94bb03db | 57 | { |
dhamilton31 | 1:5fcb94bb03db | 58 | cube.turnOnLed(myFood.currRow, myFood.currCol, 0); |
dhamilton31 | 2:9c075a0a6d4e | 59 | printf("FOOD: Row: %d Col: %d\n", myFood.currRow, myFood.currCol); |
dhamilton31 | 2:9c075a0a6d4e | 60 | if(mySnake.movementSpeed > 0){ |
dhamilton31 | 2:9c075a0a6d4e | 61 | mySnake.movementSpeed--; |
dhamilton31 | 2:9c075a0a6d4e | 62 | } |
dhamilton31 | 1:5fcb94bb03db | 63 | } |
dhamilton31 | 1:5fcb94bb03db | 64 | |
dhamilton31 | 2:9c075a0a6d4e | 65 | // Updates the direction the snake is traveling based on the analog controller's input |
dhamilton31 | 1:5fcb94bb03db | 66 | void updateDirectionInput(){ |
dhamilton31 | 1:5fcb94bb03db | 67 | float verValue, horValue; |
dhamilton31 | 1:5fcb94bb03db | 68 | int pushed; |
dhamilton31 | 1:5fcb94bb03db | 69 | select.mode(PullUp); |
dhamilton31 | 1:5fcb94bb03db | 70 | verValue = joyVer; |
dhamilton31 | 1:5fcb94bb03db | 71 | horValue = joyHor; |
dhamilton31 | 1:5fcb94bb03db | 72 | pushed = select; |
dhamilton31 | 1:5fcb94bb03db | 73 | if(horValue < .4){ |
dhamilton31 | 1:5fcb94bb03db | 74 | mySnake.movementDirection = Left; |
dhamilton31 | 2:9c075a0a6d4e | 75 | //printf("Left\n"); |
dhamilton31 | 1:5fcb94bb03db | 76 | } |
dhamilton31 | 1:5fcb94bb03db | 77 | else if(horValue > .6){ |
dhamilton31 | 1:5fcb94bb03db | 78 | mySnake.movementDirection = Right; |
dhamilton31 | 2:9c075a0a6d4e | 79 | //printf("Right\n"); |
dhamilton31 | 1:5fcb94bb03db | 80 | } |
dhamilton31 | 1:5fcb94bb03db | 81 | if(verValue < .4){ |
dhamilton31 | 1:5fcb94bb03db | 82 | mySnake.movementDirection = Down; |
dhamilton31 | 2:9c075a0a6d4e | 83 | //printf("Down\n"); |
dhamilton31 | 1:5fcb94bb03db | 84 | } |
dhamilton31 | 1:5fcb94bb03db | 85 | else if(verValue > .6){ |
dhamilton31 | 1:5fcb94bb03db | 86 | mySnake.movementDirection = Up; |
dhamilton31 | 2:9c075a0a6d4e | 87 | //printf("Up\n"); |
dhamilton31 | 1:5fcb94bb03db | 88 | } |
dhamilton31 | 1:5fcb94bb03db | 89 | } |