The classic game of snake. Control using a joystick and displayed on a VGA screen
Dependencies: 4DGL direction draw game list mbed
main.cpp
- Committer:
- lucoby
- Date:
- 2012-10-11
- Revision:
- 1:aa27e5ef379b
- Parent:
- 0:1ca938e58b91
File content as of revision 1:aa27e5ef379b:
#include "mbed.h" #include "direction.h" #include "list.h" #include "draw.h" #include "game.h" DigitalOut myled(LED1); DigitalOut myled2(LED2); DigitalIn pb(p17); int main() { pb.mode(PullUp); myled2 = 1; SDirection direction, newDirection; List snake = {NULL,NULL}; Apple apple; int points; int tempRow, tempCol; int draw_yes = 0; int draw_y2 = 0; int spx = 0; int spy = 0; int i; State game = splash; drawSetup(); while(1) { wait(0.016666667); myled = !myled; switch(game) { case splash: draw_y2++; if(draw_y2 == 19) { drawBlank(spy,spx); spx = rand() % COL; spy = rand() % ROW; drawApple(spy,spx); draw_y2 = 0; } if((direction = getDirection(none)) != none) game = start; break; case start: if((direction = getDirection(none)) != none) { deleteList(&snake); clearscr(); for(i = -1; i < COL + 2; i++){ drawPixel(-1,i,0xFFFFFF); } for(i = 0; i < ROW + 2; i++) { drawPixel(i,COL+1,0xFFFFFF); } for(i = COL + 1; i > -2; i--){ drawPixel(ROW+1,i,0xFFFFFF); } for(i = ROW + 1; i > -2; i--) { drawPixel(i,-1,0xFFFFFF); } addToHead(&snake, 5, 5); addToHead(&snake, 5, 6); addToHead(&snake, 5, 7); apple.row = rand() % (ROW - 1) + 1; apple.col = rand() % (COL - 3) + 3; points = 0; game = run; } break; case run: // control newDirection = getDirection(newDirection); draw_yes++; if(draw_yes == 14) game = draw; break; case draw: //model draw_yes = 0; game = run; //left if(newDirection == left && direction != right || newDirection == none && direction == left || direction == left && newDirection == right) { direction = left; //pc.printf("left\n\r"); addToHead(&snake, snake.head->row, snake.head->col - 1); if (snake.head->row == apple.row && snake.head->col == apple.col) { tempRow = -1; tempCol = -1; score(&apple, &points); } else { tempRow = snake.tail->row; tempCol = snake.tail->col; removeFromTail(&snake); } //right } else if (newDirection == right && direction != left || newDirection == none && direction == right || direction == right && newDirection == left) { addToHead(&snake, snake.head->row, snake.head->col + 1); direction = right; //pc.printf("right\n\r"); if (snake.head->row == apple.row && snake.head->col == apple.col) { tempRow = -1; tempCol = -1; score(&apple, &points); } else { tempRow = snake.tail->row; tempCol = snake.tail->col; removeFromTail(&snake); } //up } else if (newDirection == up && direction != down || newDirection == none && direction == up|| direction == up && newDirection == down) { addToHead(&snake, snake.head->row - 1, snake.head->col); direction = up; //pc.printf("up\n\r"); if (snake.head->row == apple.row && snake.head->col == apple.col) { tempRow = -1; tempCol = -1; score(&apple, &points); } else { tempRow = snake.tail->row; tempCol = snake.tail->col; removeFromTail(&snake); } //down } else if (newDirection == down && direction != up || newDirection == none && direction == down|| direction == down&& newDirection == up) { addToHead(&snake, snake.head->row + 1, snake.head->col); direction = down; //pc.printf("down\n\r"); if (snake.head->row == apple.row && snake.head->col == apple.col) { tempRow = -1; tempCol = -1; score(&apple, &points); } else { tempRow = snake.tail->row; tempCol = snake.tail->col; removeFromTail(&snake); } } if(!checkGameOver(&snake)){ game = end; break; } //view if(tempRow >= 0) { drawBlank(tempRow, tempCol); } drawApple(apple.row, apple.col); drawSnake(snake.head->row, snake.head->col); drawScore(points); break; case end: if(!pb) { game = splash; clearscr(); } break; } } }