Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
SnakeEngine.cpp@0:2851b575bf5d, 2017-05-04 (annotated)
- Committer:
- CreazyMiracle
- Date:
- Thu May 04 12:30:38 2017 +0000
- Revision:
- 0:2851b575bf5d
sankeengine
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| CreazyMiracle | 0:2851b575bf5d | 1 | #include "SnakeEngine.h" |
| CreazyMiracle | 0:2851b575bf5d | 2 | |
| CreazyMiracle | 0:2851b575bf5d | 3 | #define WIDTH 55 |
| CreazyMiracle | 0:2851b575bf5d | 4 | #define LENGTH 6 |
| CreazyMiracle | 0:2851b575bf5d | 5 | |
| CreazyMiracle | 0:2851b575bf5d | 6 | //this class is used to integrate the funtion of snake and food |
| CreazyMiracle | 0:2851b575bf5d | 7 | //integrate init |
| CreazyMiracle | 0:2851b575bf5d | 8 | //integrate draw |
| CreazyMiracle | 0:2851b575bf5d | 9 | //also the class give the main body to play the game |
| CreazyMiracle | 0:2851b575bf5d | 10 | //how to move snake |
| CreazyMiracle | 0:2851b575bf5d | 11 | //how to eat food |
| CreazyMiracle | 0:2851b575bf5d | 12 | //how to lose |
| CreazyMiracle | 0:2851b575bf5d | 13 | //how to win |
| CreazyMiracle | 0:2851b575bf5d | 14 | |
| CreazyMiracle | 0:2851b575bf5d | 15 | SnakeEngine::SnakeEngine() |
| CreazyMiracle | 0:2851b575bf5d | 16 | { |
| CreazyMiracle | 0:2851b575bf5d | 17 | |
| CreazyMiracle | 0:2851b575bf5d | 18 | } |
| CreazyMiracle | 0:2851b575bf5d | 19 | |
| CreazyMiracle | 0:2851b575bf5d | 20 | SnakeEngine::~SnakeEngine() |
| CreazyMiracle | 0:2851b575bf5d | 21 | { |
| CreazyMiracle | 0:2851b575bf5d | 22 | |
| CreazyMiracle | 0:2851b575bf5d | 23 | } |
| CreazyMiracle | 0:2851b575bf5d | 24 | |
| CreazyMiracle | 0:2851b575bf5d | 25 | //integrate init |
| CreazyMiracle | 0:2851b575bf5d | 26 | |
| CreazyMiracle | 0:2851b575bf5d | 27 | void SnakeEngine::init() |
| CreazyMiracle | 0:2851b575bf5d | 28 | { |
| CreazyMiracle | 0:2851b575bf5d | 29 | snake.init(); |
| CreazyMiracle | 0:2851b575bf5d | 30 | food.init(); |
| CreazyMiracle | 0:2851b575bf5d | 31 | } |
| CreazyMiracle | 0:2851b575bf5d | 32 | |
| CreazyMiracle | 0:2851b575bf5d | 33 | //function to let the sanke moving |
| CreazyMiracle | 0:2851b575bf5d | 34 | |
| CreazyMiracle | 0:2851b575bf5d | 35 | void SnakeEngine::moving() |
| CreazyMiracle | 0:2851b575bf5d | 36 | { |
| CreazyMiracle | 0:2851b575bf5d | 37 | // the next step which the snake will going |
| CreazyMiracle | 0:2851b575bf5d | 38 | nextPoint_X = 0; |
| CreazyMiracle | 0:2851b575bf5d | 39 | nextPoint_Y = 0; |
| CreazyMiracle | 0:2851b575bf5d | 40 | |
| CreazyMiracle | 0:2851b575bf5d | 41 | // if the sanke eat food and need to add tail |
| CreazyMiracle | 0:2851b575bf5d | 42 | addTail = false; |
| CreazyMiracle | 0:2851b575bf5d | 43 | // count of sanke body |
| CreazyMiracle | 0:2851b575bf5d | 44 | snakeBody = 0; |
| CreazyMiracle | 0:2851b575bf5d | 45 | |
| CreazyMiracle | 0:2851b575bf5d | 46 | //get the next loction according to the location and direction of the sanke head |
| CreazyMiracle | 0:2851b575bf5d | 47 | nextPoint_X = snake.snakePoint_X[snake.snakeLength -1] + 5*snake.snakeDirection[0][0]; |
| CreazyMiracle | 0:2851b575bf5d | 48 | nextPoint_Y = snake.snakePoint_Y[snake.snakeLength -1] + snake.snakeDirection[0][1]; |
| CreazyMiracle | 0:2851b575bf5d | 49 | |
| CreazyMiracle | 0:2851b575bf5d | 50 | //what happen when snake eat food |
| CreazyMiracle | 0:2851b575bf5d | 51 | if (SnakeEngine::isEatFood(nextPoint_X,nextPoint_Y)) |
| CreazyMiracle | 0:2851b575bf5d | 52 | { |
| CreazyMiracle | 0:2851b575bf5d | 53 | SnakeEngine::addLength(); |
| CreazyMiracle | 0:2851b575bf5d | 54 | } |
| CreazyMiracle | 0:2851b575bf5d | 55 | |
| CreazyMiracle | 0:2851b575bf5d | 56 | //what happen when snake crashwall |
| CreazyMiracle | 0:2851b575bf5d | 57 | if (SnakeEngine::isCrashWall(nextPoint_X,nextPoint_Y)) |
| CreazyMiracle | 0:2851b575bf5d | 58 | { |
| CreazyMiracle | 0:2851b575bf5d | 59 | over = true; |
| CreazyMiracle | 0:2851b575bf5d | 60 | printf("loose \n"); |
| CreazyMiracle | 0:2851b575bf5d | 61 | } |
| CreazyMiracle | 0:2851b575bf5d | 62 | |
| CreazyMiracle | 0:2851b575bf5d | 63 | //what happen when snake crash itself |
| CreazyMiracle | 0:2851b575bf5d | 64 | if (SnakeEngine::isSelf(nextPoint_X,nextPoint_Y)) |
| CreazyMiracle | 0:2851b575bf5d | 65 | { |
| CreazyMiracle | 0:2851b575bf5d | 66 | over = true; |
| CreazyMiracle | 0:2851b575bf5d | 67 | printf("loose \n"); |
| CreazyMiracle | 0:2851b575bf5d | 68 | } |
| CreazyMiracle | 0:2851b575bf5d | 69 | |
| CreazyMiracle | 0:2851b575bf5d | 70 | // if the sanke do not eat food it moves to the next point |
| CreazyMiracle | 0:2851b575bf5d | 71 | while (!addTail) |
| CreazyMiracle | 0:2851b575bf5d | 72 | { |
| CreazyMiracle | 0:2851b575bf5d | 73 | for( snakeBody = 0; snakeBody < snake.snakeLength -1; snakeBody++) |
| CreazyMiracle | 0:2851b575bf5d | 74 | { |
| CreazyMiracle | 0:2851b575bf5d | 75 | snake.snakePoint_X[snakeBody] = snake.snakePoint_X[snakeBody+1]; |
| CreazyMiracle | 0:2851b575bf5d | 76 | snake.snakePoint_Y[snakeBody] = snake.snakePoint_Y[snakeBody+1]; |
| CreazyMiracle | 0:2851b575bf5d | 77 | } |
| CreazyMiracle | 0:2851b575bf5d | 78 | if (snakeBody == snake.snakeLength -1) |
| CreazyMiracle | 0:2851b575bf5d | 79 | { |
| CreazyMiracle | 0:2851b575bf5d | 80 | printf("addTail = true"); |
| CreazyMiracle | 0:2851b575bf5d | 81 | addTail = true; |
| CreazyMiracle | 0:2851b575bf5d | 82 | break; |
| CreazyMiracle | 0:2851b575bf5d | 83 | } |
| CreazyMiracle | 0:2851b575bf5d | 84 | } |
| CreazyMiracle | 0:2851b575bf5d | 85 | |
| CreazyMiracle | 0:2851b575bf5d | 86 | //change the head of the snake |
| CreazyMiracle | 0:2851b575bf5d | 87 | snake.snakePoint_X[snake.snakeLength -1] = nextPoint_X; |
| CreazyMiracle | 0:2851b575bf5d | 88 | snake.snakePoint_Y[snake.snakeLength -1] = nextPoint_Y; |
| CreazyMiracle | 0:2851b575bf5d | 89 | } |
| CreazyMiracle | 0:2851b575bf5d | 90 | |
| CreazyMiracle | 0:2851b575bf5d | 91 | //bool if the snake point and food point equal return ture |
| CreazyMiracle | 0:2851b575bf5d | 92 | bool SnakeEngine::isEatFood(int x, int y) |
| CreazyMiracle | 0:2851b575bf5d | 93 | { |
| CreazyMiracle | 0:2851b575bf5d | 94 | return (x == food.foodPoint_X && y == food.foodPoint_Y)? true:false; |
| CreazyMiracle | 0:2851b575bf5d | 95 | } |
| CreazyMiracle | 0:2851b575bf5d | 96 | |
| CreazyMiracle | 0:2851b575bf5d | 97 | //bool if the snake point and wall point equal return ture |
| CreazyMiracle | 0:2851b575bf5d | 98 | bool SnakeEngine::isCrashWall(int x, int y) |
| CreazyMiracle | 0:2851b575bf5d | 99 | { |
| CreazyMiracle | 0:2851b575bf5d | 100 | if (x < 0 ||x >= WIDTH || y < 0 || y >= LENGTH) //gameWidth gameHight |
| CreazyMiracle | 0:2851b575bf5d | 101 | { |
| CreazyMiracle | 0:2851b575bf5d | 102 | return true; |
| CreazyMiracle | 0:2851b575bf5d | 103 | } |
| CreazyMiracle | 0:2851b575bf5d | 104 | return false; |
| CreazyMiracle | 0:2851b575bf5d | 105 | } |
| CreazyMiracle | 0:2851b575bf5d | 106 | |
| CreazyMiracle | 0:2851b575bf5d | 107 | //bool if the snake point and it self equal return ture |
| CreazyMiracle | 0:2851b575bf5d | 108 | |
| CreazyMiracle | 0:2851b575bf5d | 109 | bool SnakeEngine::isSelf(int x, int y) |
| CreazyMiracle | 0:2851b575bf5d | 110 | { |
| CreazyMiracle | 0:2851b575bf5d | 111 | for (int i = 0; i < snake.snakeLength - 1; i++) |
| CreazyMiracle | 0:2851b575bf5d | 112 | { |
| CreazyMiracle | 0:2851b575bf5d | 113 | if (x == snake.snakePoint_X[i] && y == snake.snakePoint_Y[i]) |
| CreazyMiracle | 0:2851b575bf5d | 114 | { |
| CreazyMiracle | 0:2851b575bf5d | 115 | return true; |
| CreazyMiracle | 0:2851b575bf5d | 116 | } |
| CreazyMiracle | 0:2851b575bf5d | 117 | } |
| CreazyMiracle | 0:2851b575bf5d | 118 | return false; |
| CreazyMiracle | 0:2851b575bf5d | 119 | } |
| CreazyMiracle | 0:2851b575bf5d | 120 | |
| CreazyMiracle | 0:2851b575bf5d | 121 | |
| CreazyMiracle | 0:2851b575bf5d | 122 | |
| CreazyMiracle | 0:2851b575bf5d | 123 | void SnakeEngine::addLength() |
| CreazyMiracle | 0:2851b575bf5d | 124 | { |
| CreazyMiracle | 0:2851b575bf5d | 125 | addTail = true; |
| CreazyMiracle | 0:2851b575bf5d | 126 | snake.snakeLength++; |
| CreazyMiracle | 0:2851b575bf5d | 127 | food.init(); |
| CreazyMiracle | 0:2851b575bf5d | 128 | } |
| CreazyMiracle | 0:2851b575bf5d | 129 | |
| CreazyMiracle | 0:2851b575bf5d | 130 | // give the need data from the joystick |
| CreazyMiracle | 0:2851b575bf5d | 131 | void SnakeEngine::getJoysitck() |
| CreazyMiracle | 0:2851b575bf5d | 132 | { |
| CreazyMiracle | 0:2851b575bf5d | 133 | Vector2D place = pad.get_coord(); |
| CreazyMiracle | 0:2851b575bf5d | 134 | |
| CreazyMiracle | 0:2851b575bf5d | 135 | Joysitck_X = (place.x)*10; // left -1 right 1 |
| CreazyMiracle | 0:2851b575bf5d | 136 | //printf("Joysitck_X = %f ", Joysitck_X); |
| CreazyMiracle | 0:2851b575bf5d | 137 | Joysitck_Y= (place.y)*10; //// up 1 down -1 |
| CreazyMiracle | 0:2851b575bf5d | 138 | //printf("Joysitck_Y = %f \n", Joysitck_Y); |
| CreazyMiracle | 0:2851b575bf5d | 139 | } |
| CreazyMiracle | 0:2851b575bf5d | 140 | |
| CreazyMiracle | 0:2851b575bf5d | 141 | // change the dirction of the snake accoring to the joystick |
| CreazyMiracle | 0:2851b575bf5d | 142 | void SnakeEngine::changeDirection() |
| CreazyMiracle | 0:2851b575bf5d | 143 | { |
| CreazyMiracle | 0:2851b575bf5d | 144 | _x = (int)Joysitck_X; |
| CreazyMiracle | 0:2851b575bf5d | 145 | _y = (int)Joysitck_Y; |
| CreazyMiracle | 0:2851b575bf5d | 146 | |
| CreazyMiracle | 0:2851b575bf5d | 147 | // { -1 = left 1 = right 0 = not this direction, 1 = down -1 = up 0 = not this direction} |
| CreazyMiracle | 0:2851b575bf5d | 148 | if ( snake.snakeDirection[0][0] != 0) |
| CreazyMiracle | 0:2851b575bf5d | 149 | { |
| CreazyMiracle | 0:2851b575bf5d | 150 | if ( _y > 7) |
| CreazyMiracle | 0:2851b575bf5d | 151 | { |
| CreazyMiracle | 0:2851b575bf5d | 152 | snake.snakeDirection[0][0] = 0; |
| CreazyMiracle | 0:2851b575bf5d | 153 | snake.snakeDirection[0][1] = -1; |
| CreazyMiracle | 0:2851b575bf5d | 154 | printf("go up\n"); |
| CreazyMiracle | 0:2851b575bf5d | 155 | } |
| CreazyMiracle | 0:2851b575bf5d | 156 | else if ( _y < -7) |
| CreazyMiracle | 0:2851b575bf5d | 157 | { |
| CreazyMiracle | 0:2851b575bf5d | 158 | snake.snakeDirection[0][0] = 0; |
| CreazyMiracle | 0:2851b575bf5d | 159 | snake.snakeDirection[0][1] = 1; |
| CreazyMiracle | 0:2851b575bf5d | 160 | printf("go down\n"); |
| CreazyMiracle | 0:2851b575bf5d | 161 | } |
| CreazyMiracle | 0:2851b575bf5d | 162 | else |
| CreazyMiracle | 0:2851b575bf5d | 163 | { |
| CreazyMiracle | 0:2851b575bf5d | 164 | snake.snakeDirection[0][0] = snake.snakeDirection[0][0]; |
| CreazyMiracle | 0:2851b575bf5d | 165 | snake.snakeDirection[0][1] = snake.snakeDirection[0][1]; |
| CreazyMiracle | 0:2851b575bf5d | 166 | } |
| CreazyMiracle | 0:2851b575bf5d | 167 | } |
| CreazyMiracle | 0:2851b575bf5d | 168 | else if ( snake.snakeDirection[0][1] != 0) |
| CreazyMiracle | 0:2851b575bf5d | 169 | { |
| CreazyMiracle | 0:2851b575bf5d | 170 | if ( _x > 7) |
| CreazyMiracle | 0:2851b575bf5d | 171 | { |
| CreazyMiracle | 0:2851b575bf5d | 172 | snake.snakeDirection[0][0] = 1; |
| CreazyMiracle | 0:2851b575bf5d | 173 | snake.snakeDirection[0][1] = 0; |
| CreazyMiracle | 0:2851b575bf5d | 174 | printf("go right\n"); |
| CreazyMiracle | 0:2851b575bf5d | 175 | } |
| CreazyMiracle | 0:2851b575bf5d | 176 | else if ( _x < -7) |
| CreazyMiracle | 0:2851b575bf5d | 177 | { |
| CreazyMiracle | 0:2851b575bf5d | 178 | snake.snakeDirection[0][0] = -1; |
| CreazyMiracle | 0:2851b575bf5d | 179 | snake.snakeDirection[0][1] = 0; |
| CreazyMiracle | 0:2851b575bf5d | 180 | printf("go left\n"); |
| CreazyMiracle | 0:2851b575bf5d | 181 | } |
| CreazyMiracle | 0:2851b575bf5d | 182 | else |
| CreazyMiracle | 0:2851b575bf5d | 183 | { |
| CreazyMiracle | 0:2851b575bf5d | 184 | snake.snakeDirection[0][0] = snake.snakeDirection[0][0]; |
| CreazyMiracle | 0:2851b575bf5d | 185 | snake.snakeDirection[0][1] = snake.snakeDirection[0][1]; |
| CreazyMiracle | 0:2851b575bf5d | 186 | } |
| CreazyMiracle | 0:2851b575bf5d | 187 | } |
| CreazyMiracle | 0:2851b575bf5d | 188 | |
| CreazyMiracle | 0:2851b575bf5d | 189 | } |
| CreazyMiracle | 0:2851b575bf5d | 190 | |
| CreazyMiracle | 0:2851b575bf5d | 191 | //integrate draw |
| CreazyMiracle | 0:2851b575bf5d | 192 | //also draw the frame of the game |
| CreazyMiracle | 0:2851b575bf5d | 193 | |
| CreazyMiracle | 0:2851b575bf5d | 194 | void SnakeEngine::draw(N5110 &lcd) |
| CreazyMiracle | 0:2851b575bf5d | 195 | { |
| CreazyMiracle | 0:2851b575bf5d | 196 | lcd.clear(); |
| CreazyMiracle | 0:2851b575bf5d | 197 | snake.draw(lcd); |
| CreazyMiracle | 0:2851b575bf5d | 198 | food.draw(lcd); |
| CreazyMiracle | 0:2851b575bf5d | 199 | lcd.drawLine(0,0,0,48,2); |
| CreazyMiracle | 0:2851b575bf5d | 200 | lcd.drawLine(0,0,60,0,2); |
| CreazyMiracle | 0:2851b575bf5d | 201 | lcd.drawLine(60,48,60,0,2); |
| CreazyMiracle | 0:2851b575bf5d | 202 | lcd.drawLine(60,47,0,47,2); |
| CreazyMiracle | 0:2851b575bf5d | 203 | lcd.refresh(); |
| CreazyMiracle | 0:2851b575bf5d | 204 | } |