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 | } |