Wang Lin 201090174
Dependencies: mbed Gamepad N5110 FXOS8700Q
Diff: main.h
- Revision:
- 12:121ba031343a
- Child:
- 13:febf9fbb502f
diff -r 1447cb7dce3c -r 121ba031343a main.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.h Fri May 03 17:12:37 2019 +0000 @@ -0,0 +1,153 @@ +#include <stdio.h> +#include <stdlib.h> +#include <time.h> +#include "mbed.h" +#include "Gamepad.h" +#include "N5110.h" +#define length 100 +#define SNAKE_SIZE 2 + +N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); +Gamepad pad; + +//////////STRUCTURE/////////////// +struct Coor { + int x; + int y; +}COOR; + +struct Snake { + Coor snakezb[length]; //蛇每一届的坐标 蛇最大的长度 + int n; //number of snake points 当前节数 +}SNAKE; +struct Food{ + Coor fc; +}food; + + + + + + + + + + + +void DrawSnake(); +//void DirSnake(); +void MoveSnake(); +int Dir; +void RespawnFood(); +//void EatFood(); +//void BreakSnake(); +//void OverSnake(); +//void Speed(); +int waittime; +Direction d; + + + + + + + + + void initSnake(){ + for(int i = 1; i < SNAKE.n; i++){ + SNAKE.snakezb[i].x = SNAKE.snakezb[i-1].x; + SNAKE.snakezb[i].y = SNAKE.snakezb[i-1].y-1; + } + } + + +void DrawSnake() +{ + + for(int i = 0; i < SNAKE.n; i++){ + lcd.drawRect(SNAKE.snakezb[i].x,SNAKE.snakezb[i].y,1,1,FILL_BLACK); + } + + +} + +void MoveSnake() +{ + d = pad.get_direction(); + if (pad.check_event(Gamepad::Y_PRESSED) || d == N){ + Dir = 1;//up + } + else if (pad.check_event(Gamepad::A_PRESSED) || d == S){ + Dir = 2;//down + } + else if (pad.check_event(Gamepad::X_PRESSED) || d == W){ + Dir = 3;//left + } + else if (pad.check_event(Gamepad::B_PRESSED) || d == E){ + Dir = 4;//right + } + + for(int i = SNAKE.n; i >0; i--){ + SNAKE.snakezb[i].x = SNAKE.snakezb[i-1].x; + SNAKE.snakezb[i].y = SNAKE.snakezb[i-1].y; + } + if (Dir == 1){ + SNAKE.snakezb[0].x = SNAKE.snakezb[0].x; + SNAKE.snakezb[0].y = SNAKE.snakezb[0].y-1; + } + else if (Dir == 2){ + SNAKE.snakezb[0].x = SNAKE.snakezb[0].x; + SNAKE.snakezb[0].y = SNAKE.snakezb[0].y+1; + } + else if (Dir == 3){ + SNAKE.snakezb[0].x = SNAKE.snakezb[0].x-1; + SNAKE.snakezb[0].y = SNAKE.snakezb[0].y; + } + else if (Dir == 4){ + SNAKE.snakezb[0].x = SNAKE.snakezb[0].x+1; + SNAKE.snakezb[0].y = SNAKE.snakezb[0].y; + } + + } + +void SpwanFood(){ + srand(unsigned (time(NULL))); + food.fc.x = rand() % 80; + food.fc.y = rand() % 40; + + + + + } +void drawFood(){ + lcd.drawRect(food.fc.x,food.fc.y,1,1,FILL_BLACK); + } +void EatFood(){ + + if(SNAKE.snakezb[0].x == food.fc.x && SNAKE.snakezb[0].y == food.fc.y ){ + SNAKE.n = SNAKE.n+1; + SpwanFood(); + } + } +void DeadSnake(){ + + } + + +void Speed() +{ + if(pad.check_event(Gamepad::L_PRESSED)) + { + waittime = 0.05; + wait(waittime); + } + else if(pad.check_event(Gamepad::R_PRESSED)) + { + waittime = 0.5; + wait(waittime); + } + else + { + wait(0.3); + } +} \ No newline at end of file