Snake game for a 5x5 LED matrix

Dependencies:   MCP23S17 mbed

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?

UserRevisionLine numberNew 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 }