Peng Jingran / Mbed 2 deprecated Snake_copy

Dependencies:   mbed FXOS8700Q

Committer:
VivianDu
Date:
Sun May 05 14:14:58 2019 +0000
Revision:
1:b34f1b9b2b62
Parent:
0:bc1d36f5f772
Child:
14:f898d37428b1
version_final

Who changed what in which revision?

UserRevisionLine numberNew contents of line
VivianDu 0:bc1d36f5f772 1 #include "Snake.h"
VivianDu 0:bc1d36f5f772 2
VivianDu 0:bc1d36f5f772 3 #define HEIGHT 48
VivianDu 0:bc1d36f5f772 4 #define CEILING 8
VivianDu 0:bc1d36f5f772 5 #define FLOOR 48
VivianDu 0:bc1d36f5f772 6 #define WIDTH 84
VivianDu 0:bc1d36f5f772 7
VivianDu 0:bc1d36f5f772 8
VivianDu 0:bc1d36f5f772 9 snakePart snek;
VivianDu 0:bc1d36f5f772 10
VivianDu 0:bc1d36f5f772 11
VivianDu 0:bc1d36f5f772 12
VivianDu 0:bc1d36f5f772 13 Snake::Snake()
VivianDu 0:bc1d36f5f772 14 {
VivianDu 0:bc1d36f5f772 15
VivianDu 0:bc1d36f5f772 16 }
VivianDu 0:bc1d36f5f772 17 Snake::~Snake()
VivianDu 0:bc1d36f5f772 18 {
VivianDu 0:bc1d36f5f772 19
VivianDu 0:bc1d36f5f772 20 }
VivianDu 0:bc1d36f5f772 21
VivianDu 0:bc1d36f5f772 22
VivianDu 0:bc1d36f5f772 23 void Snake::init(int x, int y, int lenght, int _live){
VivianDu 0:bc1d36f5f772 24
VivianDu 0:bc1d36f5f772 25 startx=x;
VivianDu 0:bc1d36f5f772 26 starty=y;
VivianDu 0:bc1d36f5f772 27
VivianDu 0:bc1d36f5f772 28 startl=lenght;
VivianDu 0:bc1d36f5f772 29 live=_live;
VivianDu 0:bc1d36f5f772 30 _length = lenght;
VivianDu 0:bc1d36f5f772 31 _food.init();
VivianDu 0:bc1d36f5f772 32
VivianDu 0:bc1d36f5f772 33 int lowerBound=_length;
VivianDu 0:bc1d36f5f772 34 for (int i=0;lowerBound>i;i++)
VivianDu 0:bc1d36f5f772 35 {
VivianDu 0:bc1d36f5f772 36 snek._x[i]=x+i;
VivianDu 0:bc1d36f5f772 37 snek._y[i]=y;
VivianDu 0:bc1d36f5f772 38 snek._dir[i]=1;
VivianDu 0:bc1d36f5f772 39 }
VivianDu 0:bc1d36f5f772 40
VivianDu 0:bc1d36f5f772 41 snek._x[_length]=x+_length;
VivianDu 0:bc1d36f5f772 42 snek._x[_length+1]=x+_length+1;
VivianDu 0:bc1d36f5f772 43 snek._y[_length]=y;
VivianDu 0:bc1d36f5f772 44 snek._dir[_length]=1;
VivianDu 0:bc1d36f5f772 45 printf("xog is %d ", snek._x[_length-1]);
VivianDu 0:bc1d36f5f772 46
VivianDu 0:bc1d36f5f772 47 }
VivianDu 0:bc1d36f5f772 48
VivianDu 1:b34f1b9b2b62 49 void Snake::draw(N5110 &lcd){//condition of the collasion function
VivianDu 0:bc1d36f5f772 50
VivianDu 0:bc1d36f5f772 51 checkWallCollision(lcd);
VivianDu 0:bc1d36f5f772 52 checkTailCollision(lcd);
VivianDu 0:bc1d36f5f772 53
VivianDu 0:bc1d36f5f772 54 if (live!=0){
VivianDu 0:bc1d36f5f772 55 lcd.clear();
VivianDu 0:bc1d36f5f772 56 waitCount=((float)_length/3)+5;
VivianDu 0:bc1d36f5f772 57 waitTime=(1/waitCount);
VivianDu 0:bc1d36f5f772 58 wait(waitTime);
VivianDu 0:bc1d36f5f772 59 _food.draw(lcd);
VivianDu 0:bc1d36f5f772 60 lcd.drawRect(0,7,80,48-8,FILL_TRANSPARENT);
VivianDu 0:bc1d36f5f772 61 drawScore(lcd);
VivianDu 0:bc1d36f5f772 62
VivianDu 0:bc1d36f5f772 63 int lowerBound=_length;
VivianDu 0:bc1d36f5f772 64 for (int i=0; lowerBound>i;i++){
VivianDu 0:bc1d36f5f772 65
VivianDu 0:bc1d36f5f772 66 bool ifcondition(snek._x!=0);
VivianDu 0:bc1d36f5f772 67 if (ifcondition)
VivianDu 0:bc1d36f5f772 68 {
VivianDu 0:bc1d36f5f772 69 bool ifcondition(snek._y!=0);
VivianDu 0:bc1d36f5f772 70 if (ifcondition)
VivianDu 0:bc1d36f5f772 71 {
VivianDu 0:bc1d36f5f772 72 lcd.setPixel(snek._x[i],snek._y[i]);
VivianDu 0:bc1d36f5f772 73 }
VivianDu 0:bc1d36f5f772 74 }
VivianDu 0:bc1d36f5f772 75
VivianDu 0:bc1d36f5f772 76 lcd.refresh();
VivianDu 0:bc1d36f5f772 77
VivianDu 0:bc1d36f5f772 78 }
VivianDu 0:bc1d36f5f772 79 }
VivianDu 0:bc1d36f5f772 80
VivianDu 0:bc1d36f5f772 81 }
VivianDu 0:bc1d36f5f772 82 void Snake::update(Gamepad &pad){
VivianDu 0:bc1d36f5f772 83 bool ifcondition(live!=0);
VivianDu 0:bc1d36f5f772 84 if (ifcondition){
VivianDu 0:bc1d36f5f772 85
VivianDu 0:bc1d36f5f772 86 d=pad.get_direction();
VivianDu 1:b34f1b9b2b62 87 printf("x+1 is %d", snek._x[_length+2]);
VivianDu 1:b34f1b9b2b62 88 printf("y+1 is %d", snek._y[_length+2]);
VivianDu 1:b34f1b9b2b62 89 printf("dir+1 is %d", snek._dir[_length+2]);
VivianDu 0:bc1d36f5f772 90 printf("length is %d", _length);
VivianDu 0:bc1d36f5f772 91
VivianDu 0:bc1d36f5f772 92 bool ifcondition(snek._dir[_length-1]==1);
VivianDu 1:b34f1b9b2b62 93 if (ifcondition)//check thecconditions that snake eat the food
VivianDu 0:bc1d36f5f772 94 {
VivianDu 0:bc1d36f5f772 95 snek._x[_length]++;
VivianDu 0:bc1d36f5f772 96 }
VivianDu 0:bc1d36f5f772 97
VivianDu 0:bc1d36f5f772 98 if (snek._dir[_length-1]==2)
VivianDu 0:bc1d36f5f772 99 {
VivianDu 0:bc1d36f5f772 100 snek._y[_length]--;
VivianDu 0:bc1d36f5f772 101
VivianDu 0:bc1d36f5f772 102 }
VivianDu 0:bc1d36f5f772 103
VivianDu 0:bc1d36f5f772 104 if (snek._dir[_length-1]==3)
VivianDu 0:bc1d36f5f772 105 {
VivianDu 0:bc1d36f5f772 106 snek._x[_length]--;
VivianDu 0:bc1d36f5f772 107 }
VivianDu 0:bc1d36f5f772 108
VivianDu 0:bc1d36f5f772 109 if (snek._dir[_length-1]==4)
VivianDu 0:bc1d36f5f772 110 {
VivianDu 0:bc1d36f5f772 111 snek._y[_length]++;
VivianDu 0:bc1d36f5f772 112 }
VivianDu 0:bc1d36f5f772 113
VivianDu 0:bc1d36f5f772 114 for (int i=0 ;_length<i ;i++)
VivianDu 0:bc1d36f5f772 115 {
VivianDu 0:bc1d36f5f772 116 snek._x[i]=snek._x[i+1];
VivianDu 0:bc1d36f5f772 117 snek._y[i]=snek._y[i+1];
VivianDu 0:bc1d36f5f772 118
VivianDu 0:bc1d36f5f772 119 }
VivianDu 0:bc1d36f5f772 120
VivianDu 0:bc1d36f5f772 121 if (d==N){
VivianDu 0:bc1d36f5f772 122
VivianDu 0:bc1d36f5f772 123 if (snek._dir[_length-1]!=4)
VivianDu 0:bc1d36f5f772 124 {
VivianDu 0:bc1d36f5f772 125 snek._dir[_length-1] = 2;
VivianDu 0:bc1d36f5f772 126 }
VivianDu 0:bc1d36f5f772 127
VivianDu 0:bc1d36f5f772 128 }
VivianDu 0:bc1d36f5f772 129
VivianDu 0:bc1d36f5f772 130 if (d==E){
VivianDu 0:bc1d36f5f772 131
VivianDu 0:bc1d36f5f772 132 if (snek._dir[_length-1]!=3)
VivianDu 0:bc1d36f5f772 133 {
VivianDu 0:bc1d36f5f772 134 snek._dir[_length-1] = 1;
VivianDu 0:bc1d36f5f772 135 }
VivianDu 0:bc1d36f5f772 136
VivianDu 0:bc1d36f5f772 137 }
VivianDu 0:bc1d36f5f772 138
VivianDu 0:bc1d36f5f772 139 if (d==W){
VivianDu 0:bc1d36f5f772 140
VivianDu 0:bc1d36f5f772 141 if (snek._dir[_length-1]!=1)
VivianDu 0:bc1d36f5f772 142 {
VivianDu 0:bc1d36f5f772 143 snek._dir[_length-1] = 3;
VivianDu 0:bc1d36f5f772 144 }
VivianDu 0:bc1d36f5f772 145
VivianDu 0:bc1d36f5f772 146
VivianDu 0:bc1d36f5f772 147 }
VivianDu 0:bc1d36f5f772 148
VivianDu 0:bc1d36f5f772 149 if (d==S){
VivianDu 0:bc1d36f5f772 150
VivianDu 0:bc1d36f5f772 151 if (snek._dir[_length-1]!=2)
VivianDu 0:bc1d36f5f772 152 {
VivianDu 0:bc1d36f5f772 153 snek._dir[_length-1] = 4;
VivianDu 0:bc1d36f5f772 154 }
VivianDu 0:bc1d36f5f772 155
VivianDu 0:bc1d36f5f772 156
VivianDu 0:bc1d36f5f772 157 }
VivianDu 0:bc1d36f5f772 158
VivianDu 0:bc1d36f5f772 159 printf("updated ");
VivianDu 0:bc1d36f5f772 160 addPoint();
VivianDu 0:bc1d36f5f772 161 }
VivianDu 0:bc1d36f5f772 162 }
VivianDu 0:bc1d36f5f772 163
VivianDu 0:bc1d36f5f772 164 void Snake::addPoint(){
VivianDu 0:bc1d36f5f772 165
VivianDu 0:bc1d36f5f772 166 pos foodPos = _food.returnPos();
VivianDu 0:bc1d36f5f772 167
VivianDu 0:bc1d36f5f772 168 bool ifcondition=(snek._x[_length-1]==foodPos.x && snek._y[_length-1]== foodPos.y);
VivianDu 0:bc1d36f5f772 169 if (ifcondition)
VivianDu 0:bc1d36f5f772 170 {
VivianDu 0:bc1d36f5f772 171 snek._x[_length+1]=snek._x[_length];
VivianDu 0:bc1d36f5f772 172 snek._y[_length+1]=snek._y[_length];
VivianDu 0:bc1d36f5f772 173 snek._dir[_length+1]=snek._dir[_length-1];
VivianDu 0:bc1d36f5f772 174 _length=_length+1;
VivianDu 0:bc1d36f5f772 175 _food.response();
VivianDu 0:bc1d36f5f772 176 }
VivianDu 0:bc1d36f5f772 177 }
VivianDu 0:bc1d36f5f772 178
VivianDu 1:b34f1b9b2b62 179 void Snake::deadSnake(N5110 &lcd){//check the condition that the life reduces
VivianDu 0:bc1d36f5f772 180
VivianDu 0:bc1d36f5f772 181
VivianDu 0:bc1d36f5f772 182 live--;
VivianDu 0:bc1d36f5f772 183 while (live==!1){
VivianDu 0:bc1d36f5f772 184 lcd.clear();
VivianDu 0:bc1d36f5f772 185 lcd.init();
VivianDu 0:bc1d36f5f772 186 lcd.printString("Game Over",0,1);
VivianDu 0:bc1d36f5f772 187 lcd.printString("Press Reset",0,2);
VivianDu 0:bc1d36f5f772 188 lcd.printString("To restart",0,3);
VivianDu 0:bc1d36f5f772 189 lcd.refresh();
VivianDu 0:bc1d36f5f772 190
VivianDu 0:bc1d36f5f772 191 }
VivianDu 0:bc1d36f5f772 192 init(startx,starty,startl,live);
VivianDu 0:bc1d36f5f772 193
VivianDu 0:bc1d36f5f772 194 }
VivianDu 0:bc1d36f5f772 195
VivianDu 0:bc1d36f5f772 196 void Snake::checkWallCollision(N5110 &lcd){
VivianDu 0:bc1d36f5f772 197
VivianDu 0:bc1d36f5f772 198 bool ifcondition=(snek._x[_length]==WIDTH||snek._x[_length]==0);
VivianDu 0:bc1d36f5f772 199 if (ifcondition)
VivianDu 0:bc1d36f5f772 200 {
VivianDu 0:bc1d36f5f772 201 deadSnake(lcd);
VivianDu 0:bc1d36f5f772 202 }
VivianDu 0:bc1d36f5f772 203
VivianDu 0:bc1d36f5f772 204 if (snek._y[_length]==CEILING||snek._y[_length]==FLOOR)//if snake hits top or bottom walls
VivianDu 0:bc1d36f5f772 205 {
VivianDu 0:bc1d36f5f772 206 deadSnake(lcd);
VivianDu 0:bc1d36f5f772 207 }
VivianDu 0:bc1d36f5f772 208
VivianDu 0:bc1d36f5f772 209 }
VivianDu 0:bc1d36f5f772 210
VivianDu 0:bc1d36f5f772 211 void Snake::checkTailCollision(N5110 &lcd){
VivianDu 0:bc1d36f5f772 212 int upperBound=_length;
VivianDu 1:b34f1b9b2b62 213 for (int i=0 ;upperBound<i ;i++){//check the snake crushes its nail
VivianDu 0:bc1d36f5f772 214
VivianDu 0:bc1d36f5f772 215 bool ifcondition=(snek._x[_length-1]==snek._x[i] && snek._y[_length-1]==snek._y[i]);
VivianDu 0:bc1d36f5f772 216 if (ifcondition)
VivianDu 0:bc1d36f5f772 217 {
VivianDu 0:bc1d36f5f772 218 deadSnake(lcd);
VivianDu 0:bc1d36f5f772 219 }
VivianDu 0:bc1d36f5f772 220 }
VivianDu 0:bc1d36f5f772 221
VivianDu 0:bc1d36f5f772 222
VivianDu 0:bc1d36f5f772 223 }
VivianDu 0:bc1d36f5f772 224
VivianDu 0:bc1d36f5f772 225 void Snake::drawScore(N5110 &lcd){
VivianDu 0:bc1d36f5f772 226 char buffer1[14];
VivianDu 0:bc1d36f5f772 227 char buffer2[14];
VivianDu 0:bc1d36f5f772 228 sprintf(buffer1,"%2d",live);
VivianDu 0:bc1d36f5f772 229 sprintf(buffer2,"%2d",_length-4);
VivianDu 0:bc1d36f5f772 230 lcd.printString(buffer1,20,0);
VivianDu 0:bc1d36f5f772 231 lcd.printString(buffer2,60,0);
VivianDu 0:bc1d36f5f772 232 lcd.printString("Life:",0,0);
VivianDu 0:bc1d36f5f772 233 lcd.printString("Score:",42,0);
VivianDu 0:bc1d36f5f772 234
VivianDu 0:bc1d36f5f772 235 }