SHEN NUOCHENG / SnakeEngine
Committer:
CreazyMiracle
Date:
Thu May 04 12:30:38 2017 +0000
Revision:
0:2851b575bf5d
sankeengine

Who changed what in which revision?

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