Snake game snake library
Snake.cpp@2:5e04e34a3b66, 2017-05-05 (annotated)
- Committer:
- Nefos
- Date:
- Fri May 05 11:55:34 2017 +0000
- Revision:
- 2:5e04e34a3b66
- Parent:
- 1:93a4cb86f100
- Child:
- 3:b24ef00836c5
food class has been made, snake can die
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Nefos | 0:2eb4d7e86e2f | 1 | #include "Snake.h" |
Nefos | 0:2eb4d7e86e2f | 2 | |
Nefos | 0:2eb4d7e86e2f | 3 | |
Nefos | 2:5e04e34a3b66 | 4 | #define WIDTH 84 |
Nefos | 2:5e04e34a3b66 | 5 | #define HEIGHT 48 |
Nefos | 2:5e04e34a3b66 | 6 | #define CEILING 8 |
Nefos | 2:5e04e34a3b66 | 7 | #define FLOOR 48 |
Nefos | 2:5e04e34a3b66 | 8 | |
Nefos | 0:2eb4d7e86e2f | 9 | //Snake snakePart; |
Nefos | 0:2eb4d7e86e2f | 10 | snakePart snek; |
Nefos | 0:2eb4d7e86e2f | 11 | |
Nefos | 1:93a4cb86f100 | 12 | |
Nefos | 1:93a4cb86f100 | 13 | |
Nefos | 0:2eb4d7e86e2f | 14 | Snake::Snake() |
Nefos | 0:2eb4d7e86e2f | 15 | { |
Nefos | 0:2eb4d7e86e2f | 16 | |
Nefos | 0:2eb4d7e86e2f | 17 | } |
Nefos | 0:2eb4d7e86e2f | 18 | Snake::~Snake() |
Nefos | 0:2eb4d7e86e2f | 19 | { |
Nefos | 0:2eb4d7e86e2f | 20 | |
Nefos | 0:2eb4d7e86e2f | 21 | |
Nefos | 0:2eb4d7e86e2f | 22 | //delete things create aboce in construcxtor |
Nefos | 0:2eb4d7e86e2f | 23 | } |
Nefos | 0:2eb4d7e86e2f | 24 | |
Nefos | 0:2eb4d7e86e2f | 25 | void Snake::init(int x, int y, int lenght){ |
Nefos | 0:2eb4d7e86e2f | 26 | |
Nefos | 0:2eb4d7e86e2f | 27 | |
Nefos | 1:93a4cb86f100 | 28 | |
Nefos | 0:2eb4d7e86e2f | 29 | //initalizing the starting variables |
Nefos | 0:2eb4d7e86e2f | 30 | snek._x[0]=x; |
Nefos | 0:2eb4d7e86e2f | 31 | snek._y[0]=y; |
Nefos | 2:5e04e34a3b66 | 32 | live=1; |
Nefos | 0:2eb4d7e86e2f | 33 | _length = lenght; |
Nefos | 0:2eb4d7e86e2f | 34 | counter=0; |
Nefos | 0:2eb4d7e86e2f | 35 | for (int i=0;_length>i;i++) |
Nefos | 0:2eb4d7e86e2f | 36 | { |
Nefos | 0:2eb4d7e86e2f | 37 | snek._x[i]=x+i; |
Nefos | 0:2eb4d7e86e2f | 38 | snek._y[i]=y; |
Nefos | 0:2eb4d7e86e2f | 39 | snek._dir[i]=1; |
Nefos | 0:2eb4d7e86e2f | 40 | } |
Nefos | 1:93a4cb86f100 | 41 | snek._x[_length]=x+_length; |
Nefos | 1:93a4cb86f100 | 42 | snek._y[_length]=y; |
Nefos | 1:93a4cb86f100 | 43 | |
Nefos | 1:93a4cb86f100 | 44 | /* snek._y[0]=y; |
Nefos | 1:93a4cb86f100 | 45 | snek._y[1]=y+1; |
Nefos | 1:93a4cb86f100 | 46 | snek._y[2]=y+2; |
Nefos | 1:93a4cb86f100 | 47 | snek._y[3]=y+2; |
Nefos | 1:93a4cb86f100 | 48 | snek._y[4]=y+3; |
Nefos | 1:93a4cb86f100 | 49 | snek._y[5]=y+3; |
Nefos | 1:93a4cb86f100 | 50 | snek._y[6]=y+4;*/ |
Nefos | 0:2eb4d7e86e2f | 51 | _direction = 1;//1 is East, 2 is South, 3 is West, 4 is North |
Nefos | 0:2eb4d7e86e2f | 52 | |
Nefos | 0:2eb4d7e86e2f | 53 | |
Nefos | 0:2eb4d7e86e2f | 54 | //putting food at middle of the map before randomizing |
Nefos | 1:93a4cb86f100 | 55 | printf("xog is %d ", snek._x[_length-1]); |
Nefos | 1:93a4cb86f100 | 56 | //printf("initalized"); |
Nefos | 0:2eb4d7e86e2f | 57 | } |
Nefos | 0:2eb4d7e86e2f | 58 | |
Nefos | 0:2eb4d7e86e2f | 59 | void Snake::draw(N5110 &lcd){ |
Nefos | 2:5e04e34a3b66 | 60 | checkWallCollision(lcd); |
Nefos | 2:5e04e34a3b66 | 61 | if (live==1){ |
Nefos | 0:2eb4d7e86e2f | 62 | lcd.clear(); |
Nefos | 2:5e04e34a3b66 | 63 | |
Nefos | 2:5e04e34a3b66 | 64 | lcd.drawRect(0,8,84,48-8,FILL_TRANSPARENT); |
Nefos | 0:2eb4d7e86e2f | 65 | for ( int i=0; _length>i;i++) |
Nefos | 0:2eb4d7e86e2f | 66 | { |
Nefos | 0:2eb4d7e86e2f | 67 | if (snek._x!=0) |
Nefos | 0:2eb4d7e86e2f | 68 | { |
Nefos | 0:2eb4d7e86e2f | 69 | if (snek._y!=0) |
Nefos | 0:2eb4d7e86e2f | 70 | { |
Nefos | 0:2eb4d7e86e2f | 71 | lcd.setPixel(snek._x[i],snek._y[i]); |
Nefos | 0:2eb4d7e86e2f | 72 | } |
Nefos | 0:2eb4d7e86e2f | 73 | } |
Nefos | 0:2eb4d7e86e2f | 74 | |
Nefos | 0:2eb4d7e86e2f | 75 | //draw the snake array |
Nefos | 0:2eb4d7e86e2f | 76 | //draw lines from breakpoint to breakpoint to head |
Nefos | 0:2eb4d7e86e2f | 77 | //draw food |
Nefos | 0:2eb4d7e86e2f | 78 | //lcd.setPixel(48,28); |
Nefos | 2:5e04e34a3b66 | 79 | |
Nefos | 0:2eb4d7e86e2f | 80 | lcd.refresh(); |
Nefos | 2:5e04e34a3b66 | 81 | //update(pad); |
Nefos | 1:93a4cb86f100 | 82 | //printf("drAwn"); |
Nefos | 0:2eb4d7e86e2f | 83 | } |
Nefos | 2:5e04e34a3b66 | 84 | }//live loop |
Nefos | 0:2eb4d7e86e2f | 85 | } |
Nefos | 0:2eb4d7e86e2f | 86 | void Snake::update(Gamepad &pad){ |
Nefos | 2:5e04e34a3b66 | 87 | |
Nefos | 2:5e04e34a3b66 | 88 | if (live==1){ |
Nefos | 0:2eb4d7e86e2f | 89 | |
Nefos | 0:2eb4d7e86e2f | 90 | d=pad.get_direction(); |
Nefos | 1:93a4cb86f100 | 91 | startx=snek._x[0]; |
Nefos | 0:2eb4d7e86e2f | 92 | |
Nefos | 0:2eb4d7e86e2f | 93 | counter=_length-2; |
Nefos | 1:93a4cb86f100 | 94 | |
Nefos | 1:93a4cb86f100 | 95 | printf("x is %d ", snek._x[_length-1]); |
Nefos | 1:93a4cb86f100 | 96 | if (snek._dir[_length-1]==1) |
Nefos | 0:2eb4d7e86e2f | 97 | { |
Nefos | 1:93a4cb86f100 | 98 | snek._x[_length]++; |
Nefos | 1:93a4cb86f100 | 99 | startx=0; |
Nefos | 1:93a4cb86f100 | 100 | //snek._dir[counter]=1; |
Nefos | 1:93a4cb86f100 | 101 | //counter--; |
Nefos | 0:2eb4d7e86e2f | 102 | //if (counter>0) |
Nefos | 0:2eb4d7e86e2f | 103 | //{counter--;} |
Nefos | 0:2eb4d7e86e2f | 104 | |
Nefos | 0:2eb4d7e86e2f | 105 | } |
Nefos | 1:93a4cb86f100 | 106 | if (snek._dir[_length-1]==2) |
Nefos | 0:2eb4d7e86e2f | 107 | { |
Nefos | 1:93a4cb86f100 | 108 | snek._y[_length]--; |
Nefos | 1:93a4cb86f100 | 109 | //snek._dir[counter]=2; |
Nefos | 1:93a4cb86f100 | 110 | //counter--; |
Nefos | 1:93a4cb86f100 | 111 | //if (i>0) |
Nefos | 1:93a4cb86f100 | 112 | //{counter--;} |
Nefos | 1:93a4cb86f100 | 113 | |
Nefos | 1:93a4cb86f100 | 114 | } |
Nefos | 1:93a4cb86f100 | 115 | if (snek._dir[_length-1]==3) |
Nefos | 1:93a4cb86f100 | 116 | { |
Nefos | 1:93a4cb86f100 | 117 | snek._x[_length]--; |
Nefos | 1:93a4cb86f100 | 118 | //snek._dir[counter]=2; |
Nefos | 1:93a4cb86f100 | 119 | //counter--; |
Nefos | 0:2eb4d7e86e2f | 120 | //if (i>0) |
Nefos | 0:2eb4d7e86e2f | 121 | //{counter--;} |
Nefos | 0:2eb4d7e86e2f | 122 | |
Nefos | 0:2eb4d7e86e2f | 123 | } |
Nefos | 1:93a4cb86f100 | 124 | if (snek._dir[_length-1]==4) |
Nefos | 1:93a4cb86f100 | 125 | { |
Nefos | 1:93a4cb86f100 | 126 | snek._y[_length]++; |
Nefos | 1:93a4cb86f100 | 127 | //snek._dir[counter]=2; |
Nefos | 1:93a4cb86f100 | 128 | //counter--; |
Nefos | 1:93a4cb86f100 | 129 | //if (i>0) |
Nefos | 1:93a4cb86f100 | 130 | //{counter--;} |
Nefos | 1:93a4cb86f100 | 131 | |
Nefos | 1:93a4cb86f100 | 132 | } |
Nefos | 1:93a4cb86f100 | 133 | |
Nefos | 1:93a4cb86f100 | 134 | for (int i=0 ;_length<i ;i++) |
Nefos | 1:93a4cb86f100 | 135 | { |
Nefos | 1:93a4cb86f100 | 136 | |
Nefos | 1:93a4cb86f100 | 137 | //printf(" x = %d", snek._x[i]); |
Nefos | 1:93a4cb86f100 | 138 | |
Nefos | 1:93a4cb86f100 | 139 | snek._x[i]=snek._x[i+1]; |
Nefos | 1:93a4cb86f100 | 140 | snek._y[i]=snek._y[i+1]; |
Nefos | 1:93a4cb86f100 | 141 | //printf("done"); |
Nefos | 1:93a4cb86f100 | 142 | |
Nefos | 1:93a4cb86f100 | 143 | |
Nefos | 1:93a4cb86f100 | 144 | } |
Nefos | 1:93a4cb86f100 | 145 | |
Nefos | 0:2eb4d7e86e2f | 146 | /* |
Nefos | 0:2eb4d7e86e2f | 147 | //snek._x[i]=snek._x[i+1]; |
Nefos | 0:2eb4d7e86e2f | 148 | // snek._y[i]=snek._y[i+1]; |
Nefos | 0:2eb4d7e86e2f | 149 | switch (snek._dir[i]) |
Nefos | 0:2eb4d7e86e2f | 150 | { |
Nefos | 0:2eb4d7e86e2f | 151 | case 1: |
Nefos | 0:2eb4d7e86e2f | 152 | snek._x[i]++; |
Nefos | 0:2eb4d7e86e2f | 153 | |
Nefos | 0:2eb4d7e86e2f | 154 | case 4: |
Nefos | 0:2eb4d7e86e2f | 155 | snek._y[i]--; |
Nefos | 0:2eb4d7e86e2f | 156 | |
Nefos | 0:2eb4d7e86e2f | 157 | } |
Nefos | 0:2eb4d7e86e2f | 158 | */ |
Nefos | 0:2eb4d7e86e2f | 159 | |
Nefos | 0:2eb4d7e86e2f | 160 | //check dpad which way it is pointing |
Nefos | 0:2eb4d7e86e2f | 161 | //set direction accordingly, 1 is right, up is 2, 3 is left and 4 is down |
Nefos | 0:2eb4d7e86e2f | 162 | //set a breakpoint at head by snakeX/Y[i] |
Nefos | 0:2eb4d7e86e2f | 163 | //switch case to make sure direction is good |
Nefos | 0:2eb4d7e86e2f | 164 | //if head == food, _length++, and -direction we add 1 length |
Nefos | 0:2eb4d7e86e2f | 165 | // if head==wall game over |
Nefos | 0:2eb4d7e86e2f | 166 | |
Nefos | 0:2eb4d7e86e2f | 167 | |
Nefos | 1:93a4cb86f100 | 168 | |
Nefos | 0:2eb4d7e86e2f | 169 | //if (counter>0) |
Nefos | 0:2eb4d7e86e2f | 170 | // {counter--;} |
Nefos | 0:2eb4d7e86e2f | 171 | if (d==N) |
Nefos | 0:2eb4d7e86e2f | 172 | { |
Nefos | 0:2eb4d7e86e2f | 173 | |
Nefos | 2:5e04e34a3b66 | 174 | if (snek._dir[_length-1]!=4) |
Nefos | 0:2eb4d7e86e2f | 175 | { |
Nefos | 0:2eb4d7e86e2f | 176 | snek._dir[_length-1] = 2; |
Nefos | 0:2eb4d7e86e2f | 177 | |
Nefos | 0:2eb4d7e86e2f | 178 | //snek._y[5]--; |
Nefos | 0:2eb4d7e86e2f | 179 | //return; |
Nefos | 0:2eb4d7e86e2f | 180 | |
Nefos | 0:2eb4d7e86e2f | 181 | } |
Nefos | 0:2eb4d7e86e2f | 182 | |
Nefos | 0:2eb4d7e86e2f | 183 | |
Nefos | 0:2eb4d7e86e2f | 184 | } |
Nefos | 0:2eb4d7e86e2f | 185 | if (d==E) |
Nefos | 0:2eb4d7e86e2f | 186 | { |
Nefos | 0:2eb4d7e86e2f | 187 | |
Nefos | 2:5e04e34a3b66 | 188 | if (snek._dir[_length-1]!=3) |
Nefos | 0:2eb4d7e86e2f | 189 | { |
Nefos | 0:2eb4d7e86e2f | 190 | snek._dir[_length-1] = 1; |
Nefos | 0:2eb4d7e86e2f | 191 | |
Nefos | 0:2eb4d7e86e2f | 192 | //snek._y[5]--; |
Nefos | 0:2eb4d7e86e2f | 193 | //return; |
Nefos | 0:2eb4d7e86e2f | 194 | |
Nefos | 0:2eb4d7e86e2f | 195 | } |
Nefos | 0:2eb4d7e86e2f | 196 | |
Nefos | 0:2eb4d7e86e2f | 197 | |
Nefos | 0:2eb4d7e86e2f | 198 | } |
Nefos | 1:93a4cb86f100 | 199 | if (d==W) |
Nefos | 1:93a4cb86f100 | 200 | { |
Nefos | 1:93a4cb86f100 | 201 | |
Nefos | 2:5e04e34a3b66 | 202 | if (snek._dir[_length-1]!=1) |
Nefos | 1:93a4cb86f100 | 203 | { |
Nefos | 1:93a4cb86f100 | 204 | snek._dir[_length-1] = 3; |
Nefos | 1:93a4cb86f100 | 205 | |
Nefos | 1:93a4cb86f100 | 206 | //snek._y[5]--; |
Nefos | 1:93a4cb86f100 | 207 | //return; |
Nefos | 1:93a4cb86f100 | 208 | |
Nefos | 1:93a4cb86f100 | 209 | } |
Nefos | 1:93a4cb86f100 | 210 | |
Nefos | 1:93a4cb86f100 | 211 | |
Nefos | 1:93a4cb86f100 | 212 | } |
Nefos | 1:93a4cb86f100 | 213 | if (d==S) |
Nefos | 1:93a4cb86f100 | 214 | { |
Nefos | 1:93a4cb86f100 | 215 | |
Nefos | 2:5e04e34a3b66 | 216 | if (snek._dir[_length-1]!=2) |
Nefos | 1:93a4cb86f100 | 217 | { |
Nefos | 1:93a4cb86f100 | 218 | snek._dir[_length-1] = 4; |
Nefos | 1:93a4cb86f100 | 219 | |
Nefos | 1:93a4cb86f100 | 220 | //snek._y[5]--; |
Nefos | 1:93a4cb86f100 | 221 | //return; |
Nefos | 1:93a4cb86f100 | 222 | |
Nefos | 1:93a4cb86f100 | 223 | } |
Nefos | 1:93a4cb86f100 | 224 | |
Nefos | 1:93a4cb86f100 | 225 | |
Nefos | 1:93a4cb86f100 | 226 | } |
Nefos | 0:2eb4d7e86e2f | 227 | /*switch (d) |
Nefos | 0:2eb4d7e86e2f | 228 | { |
Nefos | 0:2eb4d7e86e2f | 229 | case N: |
Nefos | 0:2eb4d7e86e2f | 230 | |
Nefos | 0:2eb4d7e86e2f | 231 | |
Nefos | 0:2eb4d7e86e2f | 232 | /*case E: |
Nefos | 0:2eb4d7e86e2f | 233 | if (snek._dir[_length]!=3) |
Nefos | 0:2eb4d7e86e2f | 234 | { |
Nefos | 0:2eb4d7e86e2f | 235 | snek._dir[_length-1] = 1; |
Nefos | 0:2eb4d7e86e2f | 236 | |
Nefos | 0:2eb4d7e86e2f | 237 | //snek._y[5]--; |
Nefos | 0:2eb4d7e86e2f | 238 | //return; |
Nefos | 0:2eb4d7e86e2f | 239 | |
Nefos | 0:2eb4d7e86e2f | 240 | }*/ |
Nefos | 0:2eb4d7e86e2f | 241 | |
Nefos | 0:2eb4d7e86e2f | 242 | |
Nefos | 0:2eb4d7e86e2f | 243 | |
Nefos | 0:2eb4d7e86e2f | 244 | // } |
Nefos | 0:2eb4d7e86e2f | 245 | //counter=0; |
Nefos | 1:93a4cb86f100 | 246 | printf("updated "); |
Nefos | 2:5e04e34a3b66 | 247 | }//live loop |
Nefos | 0:2eb4d7e86e2f | 248 | } |
Nefos | 0:2eb4d7e86e2f | 249 | |
Nefos | 0:2eb4d7e86e2f | 250 | snakePart Snake::add_point(int x, int y){ |
Nefos | 0:2eb4d7e86e2f | 251 | |
Nefos | 0:2eb4d7e86e2f | 252 | |
Nefos | 0:2eb4d7e86e2f | 253 | |
Nefos | 0:2eb4d7e86e2f | 254 | |
Nefos | 0:2eb4d7e86e2f | 255 | //snek._x=x; |
Nefos | 0:2eb4d7e86e2f | 256 | //snek._y=y; |
Nefos | 0:2eb4d7e86e2f | 257 | |
Nefos | 0:2eb4d7e86e2f | 258 | |
Nefos | 0:2eb4d7e86e2f | 259 | return; |
Nefos | 0:2eb4d7e86e2f | 260 | |
Nefos | 0:2eb4d7e86e2f | 261 | //_length++; |
Nefos | 0:2eb4d7e86e2f | 262 | |
Nefos | 0:2eb4d7e86e2f | 263 | } |
Nefos | 2:5e04e34a3b66 | 264 | void Snake::deadSnake(N5110 &lcd){ |
Nefos | 2:5e04e34a3b66 | 265 | lcd.clear(); |
Nefos | 2:5e04e34a3b66 | 266 | lcd.printString("Game Over",0,1); |
Nefos | 2:5e04e34a3b66 | 267 | lcd.refresh(); |
Nefos | 2:5e04e34a3b66 | 268 | live=0; |
Nefos | 2:5e04e34a3b66 | 269 | |
Nefos | 2:5e04e34a3b66 | 270 | } |
Nefos | 2:5e04e34a3b66 | 271 | void Snake::checkWallCollision(N5110 &lcd){ |
Nefos | 2:5e04e34a3b66 | 272 | |
Nefos | 2:5e04e34a3b66 | 273 | if (snek._x[_length]==WIDTH||snek._x[_length]==0) |
Nefos | 2:5e04e34a3b66 | 274 | { |
Nefos | 2:5e04e34a3b66 | 275 | |
Nefos | 2:5e04e34a3b66 | 276 | deadSnake(lcd); |
Nefos | 2:5e04e34a3b66 | 277 | } |
Nefos | 2:5e04e34a3b66 | 278 | if (snek._y[_length]==CEILING||snek._y[_length]==FLOOR) |
Nefos | 2:5e04e34a3b66 | 279 | { |
Nefos | 2:5e04e34a3b66 | 280 | |
Nefos | 2:5e04e34a3b66 | 281 | deadSnake(lcd); |
Nefos | 2:5e04e34a3b66 | 282 | } |
Nefos | 2:5e04e34a3b66 | 283 | |
Nefos | 0:2eb4d7e86e2f | 284 | |
Nefos | 0:2eb4d7e86e2f | 285 | //return _length; |
Nefos | 0:2eb4d7e86e2f | 286 | |
Nefos | 2:5e04e34a3b66 | 287 | } |
Nefos | 2:5e04e34a3b66 | 288 |