Wang Lin 201090174
Dependencies: mbed Gamepad N5110 FXOS8700Q
main.h@12:121ba031343a, 2019-05-03 (annotated)
- 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?
User | Revision | Line number | New 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 | } |