Wang Lin 201090174

Dependencies:   mbed Gamepad N5110 FXOS8700Q

Committer:
a1115921303
Date:
Fri May 03 17:12:37 2019 +0000
Revision:
12:121ba031343a
Child:
13:febf9fbb502f
Implement the basic movement of Snake and it could eat the food and become longer (finished 2 weeks ago. forget to commit)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
a1115921303 12:121ba031343a 1 #include <stdio.h>
a1115921303 12:121ba031343a 2 #include <stdlib.h>
a1115921303 12:121ba031343a 3 #include <time.h>
a1115921303 12:121ba031343a 4 #include "mbed.h"
a1115921303 12:121ba031343a 5 #include "Gamepad.h"
a1115921303 12:121ba031343a 6 #include "N5110.h"
a1115921303 12:121ba031343a 7 #define length 100
a1115921303 12:121ba031343a 8 #define SNAKE_SIZE 2
a1115921303 12:121ba031343a 9
a1115921303 12:121ba031343a 10 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
a1115921303 12:121ba031343a 11 Gamepad pad;
a1115921303 12:121ba031343a 12
a1115921303 12:121ba031343a 13 //////////STRUCTURE///////////////
a1115921303 12:121ba031343a 14 struct Coor {
a1115921303 12:121ba031343a 15 int x;
a1115921303 12:121ba031343a 16 int y;
a1115921303 12:121ba031343a 17 }COOR;
a1115921303 12:121ba031343a 18
a1115921303 12:121ba031343a 19 struct Snake {
a1115921303 12:121ba031343a 20 Coor snakezb[length]; //蛇每一届的坐标 蛇最大的长度
a1115921303 12:121ba031343a 21 int n; //number of snake points 当前节数
a1115921303 12:121ba031343a 22 }SNAKE;
a1115921303 12:121ba031343a 23 struct Food{
a1115921303 12:121ba031343a 24 Coor fc;
a1115921303 12:121ba031343a 25 }food;
a1115921303 12:121ba031343a 26
a1115921303 12:121ba031343a 27
a1115921303 12:121ba031343a 28
a1115921303 12:121ba031343a 29
a1115921303 12:121ba031343a 30
a1115921303 12:121ba031343a 31
a1115921303 12:121ba031343a 32
a1115921303 12:121ba031343a 33
a1115921303 12:121ba031343a 34
a1115921303 12:121ba031343a 35
a1115921303 12:121ba031343a 36
a1115921303 12:121ba031343a 37 void DrawSnake();
a1115921303 12:121ba031343a 38 //void DirSnake();
a1115921303 12:121ba031343a 39 void MoveSnake();
a1115921303 12:121ba031343a 40 int Dir;
a1115921303 12:121ba031343a 41 void RespawnFood();
a1115921303 12:121ba031343a 42 //void EatFood();
a1115921303 12:121ba031343a 43 //void BreakSnake();
a1115921303 12:121ba031343a 44 //void OverSnake();
a1115921303 12:121ba031343a 45 //void Speed();
a1115921303 12:121ba031343a 46 int waittime;
a1115921303 12:121ba031343a 47 Direction d;
a1115921303 12:121ba031343a 48
a1115921303 12:121ba031343a 49
a1115921303 12:121ba031343a 50
a1115921303 12:121ba031343a 51
a1115921303 12:121ba031343a 52
a1115921303 12:121ba031343a 53
a1115921303 12:121ba031343a 54
a1115921303 12:121ba031343a 55
a1115921303 12:121ba031343a 56 void initSnake(){
a1115921303 12:121ba031343a 57 for(int i = 1; i < SNAKE.n; i++){
a1115921303 12:121ba031343a 58 SNAKE.snakezb[i].x = SNAKE.snakezb[i-1].x;
a1115921303 12:121ba031343a 59 SNAKE.snakezb[i].y = SNAKE.snakezb[i-1].y-1;
a1115921303 12:121ba031343a 60 }
a1115921303 12:121ba031343a 61 }
a1115921303 12:121ba031343a 62
a1115921303 12:121ba031343a 63
a1115921303 12:121ba031343a 64 void DrawSnake()
a1115921303 12:121ba031343a 65 {
a1115921303 12:121ba031343a 66
a1115921303 12:121ba031343a 67 for(int i = 0; i < SNAKE.n; i++){
a1115921303 12:121ba031343a 68 lcd.drawRect(SNAKE.snakezb[i].x,SNAKE.snakezb[i].y,1,1,FILL_BLACK);
a1115921303 12:121ba031343a 69 }
a1115921303 12:121ba031343a 70
a1115921303 12:121ba031343a 71
a1115921303 12:121ba031343a 72 }
a1115921303 12:121ba031343a 73
a1115921303 12:121ba031343a 74 void MoveSnake()
a1115921303 12:121ba031343a 75 {
a1115921303 12:121ba031343a 76 d = pad.get_direction();
a1115921303 12:121ba031343a 77 if (pad.check_event(Gamepad::Y_PRESSED) || d == N){
a1115921303 12:121ba031343a 78 Dir = 1;//up
a1115921303 12:121ba031343a 79 }
a1115921303 12:121ba031343a 80 else if (pad.check_event(Gamepad::A_PRESSED) || d == S){
a1115921303 12:121ba031343a 81 Dir = 2;//down
a1115921303 12:121ba031343a 82 }
a1115921303 12:121ba031343a 83 else if (pad.check_event(Gamepad::X_PRESSED) || d == W){
a1115921303 12:121ba031343a 84 Dir = 3;//left
a1115921303 12:121ba031343a 85 }
a1115921303 12:121ba031343a 86 else if (pad.check_event(Gamepad::B_PRESSED) || d == E){
a1115921303 12:121ba031343a 87 Dir = 4;//right
a1115921303 12:121ba031343a 88 }
a1115921303 12:121ba031343a 89
a1115921303 12:121ba031343a 90 for(int i = SNAKE.n; i >0; i--){
a1115921303 12:121ba031343a 91 SNAKE.snakezb[i].x = SNAKE.snakezb[i-1].x;
a1115921303 12:121ba031343a 92 SNAKE.snakezb[i].y = SNAKE.snakezb[i-1].y;
a1115921303 12:121ba031343a 93 }
a1115921303 12:121ba031343a 94 if (Dir == 1){
a1115921303 12:121ba031343a 95 SNAKE.snakezb[0].x = SNAKE.snakezb[0].x;
a1115921303 12:121ba031343a 96 SNAKE.snakezb[0].y = SNAKE.snakezb[0].y-1;
a1115921303 12:121ba031343a 97 }
a1115921303 12:121ba031343a 98 else if (Dir == 2){
a1115921303 12:121ba031343a 99 SNAKE.snakezb[0].x = SNAKE.snakezb[0].x;
a1115921303 12:121ba031343a 100 SNAKE.snakezb[0].y = SNAKE.snakezb[0].y+1;
a1115921303 12:121ba031343a 101 }
a1115921303 12:121ba031343a 102 else if (Dir == 3){
a1115921303 12:121ba031343a 103 SNAKE.snakezb[0].x = SNAKE.snakezb[0].x-1;
a1115921303 12:121ba031343a 104 SNAKE.snakezb[0].y = SNAKE.snakezb[0].y;
a1115921303 12:121ba031343a 105 }
a1115921303 12:121ba031343a 106 else if (Dir == 4){
a1115921303 12:121ba031343a 107 SNAKE.snakezb[0].x = SNAKE.snakezb[0].x+1;
a1115921303 12:121ba031343a 108 SNAKE.snakezb[0].y = SNAKE.snakezb[0].y;
a1115921303 12:121ba031343a 109 }
a1115921303 12:121ba031343a 110
a1115921303 12:121ba031343a 111 }
a1115921303 12:121ba031343a 112
a1115921303 12:121ba031343a 113 void SpwanFood(){
a1115921303 12:121ba031343a 114 srand(unsigned (time(NULL)));
a1115921303 12:121ba031343a 115 food.fc.x = rand() % 80;
a1115921303 12:121ba031343a 116 food.fc.y = rand() % 40;
a1115921303 12:121ba031343a 117
a1115921303 12:121ba031343a 118
a1115921303 12:121ba031343a 119
a1115921303 12:121ba031343a 120
a1115921303 12:121ba031343a 121 }
a1115921303 12:121ba031343a 122 void drawFood(){
a1115921303 12:121ba031343a 123 lcd.drawRect(food.fc.x,food.fc.y,1,1,FILL_BLACK);
a1115921303 12:121ba031343a 124 }
a1115921303 12:121ba031343a 125 void EatFood(){
a1115921303 12:121ba031343a 126
a1115921303 12:121ba031343a 127 if(SNAKE.snakezb[0].x == food.fc.x && SNAKE.snakezb[0].y == food.fc.y ){
a1115921303 12:121ba031343a 128 SNAKE.n = SNAKE.n+1;
a1115921303 12:121ba031343a 129 SpwanFood();
a1115921303 12:121ba031343a 130 }
a1115921303 12:121ba031343a 131 }
a1115921303 12:121ba031343a 132 void DeadSnake(){
a1115921303 12:121ba031343a 133
a1115921303 12:121ba031343a 134 }
a1115921303 12:121ba031343a 135
a1115921303 12:121ba031343a 136
a1115921303 12:121ba031343a 137 void Speed()
a1115921303 12:121ba031343a 138 {
a1115921303 12:121ba031343a 139 if(pad.check_event(Gamepad::L_PRESSED))
a1115921303 12:121ba031343a 140 {
a1115921303 12:121ba031343a 141 waittime = 0.05;
a1115921303 12:121ba031343a 142 wait(waittime);
a1115921303 12:121ba031343a 143 }
a1115921303 12:121ba031343a 144 else if(pad.check_event(Gamepad::R_PRESSED))
a1115921303 12:121ba031343a 145 {
a1115921303 12:121ba031343a 146 waittime = 0.5;
a1115921303 12:121ba031343a 147 wait(waittime);
a1115921303 12:121ba031343a 148 }
a1115921303 12:121ba031343a 149 else
a1115921303 12:121ba031343a 150 {
a1115921303 12:121ba031343a 151 wait(0.3);
a1115921303 12:121ba031343a 152 }
a1115921303 12:121ba031343a 153 }