Balint Bogdan 2645 project, 200966741
Snake.cpp
- Committer:
- Nefos
- Date:
- 2017-05-05
- Revision:
- 3:b24ef00836c5
- Parent:
- 2:5e04e34a3b66
- Child:
- 4:c74ec3f409f9
File content as of revision 3:b24ef00836c5:
#include "Snake.h" #define WIDTH 84 #define HEIGHT 48 #define CEILING 8 #define FLOOR 48 snakePart snek; Snake::Snake() { } Snake::~Snake() { } void Snake::init(int x, int y, int lenght, int _live){ //initalizing the starting variables //snek._x[0]=x; //snek._y[0]=y; startx=x; starty=y; startl=lenght; live=_live; if (live==0){ live=3; } _length = lenght; _food.init(); for (int i=0;_length>i;i++) { snek._x[i]=x+i; snek._y[i]=y; snek._dir[i]=1; } snek._x[_length]=x+_length; snek._y[_length]=y; /* snek._y[0]=y; snek._y[1]=y+1; snek._y[2]=y+2; snek._y[3]=y+2; snek._y[4]=y+3; snek._y[5]=y+3; snek._y[6]=y+4;*/ _direction = 1;//1 is East, 2 is South, 3 is West, 4 is North printf("xog is %d ", snek._x[_length-1]); //printf("initalized"); } void Snake::draw(N5110 &lcd){ checkWallCollision(lcd); if (live!=0){ lcd.clear(); char buffer1[14]; char buffer2[14]; sprintf(buffer1,"%2d",live); sprintf(buffer2,"%2d",_length); lcd.printString(buffer1,25,0); lcd.printString(buffer2,70,0); _food.draw(lcd); lcd.drawRect(0,8,84,48-8,FILL_TRANSPARENT); lcd.printString("Life:",0,0); lcd.printString("Pts:",40,0); for ( int i=0; _length>i;i++){ if (snek._x!=0) { if (snek._y!=0) { lcd.setPixel(snek._x[i],snek._y[i]); } } lcd.refresh(); //printf("drawn"); } }//live loop } void Snake::update(Gamepad &pad){ if (live!=0){ d=pad.get_direction(); startx=snek._x[0]; printf("x+1 is %d", snek._x[_length+1]); printf("y+1 is %d", snek._y[_length+1]); printf("dir+1 is %d", snek._dir[_length+1]); printf("length is %d", _length); /*if ( pad.check_event(Gamepad::A_PRESSED) == true)//testing the add_point manually { snek._x[_length+1]=snek._x[_length];//-1 snek._y[_length+1]=snek._y[_length]; snek._dir[_length+1]=snek._dir[_length-1]; _length=_length+1; printf("length+1 is %d", _length); } */ //printf("x is %d ", snek._x[_length-1]); if (snek._dir[_length-1]==1) { snek._x[_length]++; } if (snek._dir[_length-1]==2) { snek._y[_length]--; } if (snek._dir[_length-1]==3) { snek._x[_length]--; } if (snek._dir[_length-1]==4) { snek._y[_length]++; } for (int i=0 ;_length<i ;i++) { snek._x[i]=snek._x[i+1]; snek._y[i]=snek._y[i+1]; //printf("done"); } //check dpad which way it is pointing //set direction accordingly, 1 is right, up is 2, 3 is left and 4 is down //set a breakpoint at head by snakeX/Y[i] //switch case to make sure direction is good //if head == food, _length++, and -direction we add 1 length // if head==wall game over if (d==N){ if (snek._dir[_length-1]!=4) { snek._dir[_length-1] = 2; } } if (d==E){ if (snek._dir[_length-1]!=3) { snek._dir[_length-1] = 1; } } if (d==W){ if (snek._dir[_length-1]!=1) { snek._dir[_length-1] = 3; } } if (d==S){ if (snek._dir[_length-1]!=2) { snek._dir[_length-1] = 4; } } printf("updated "); add_point(); }//live loop } void Snake::add_point(){ posXY foodPos = _food.returnPos(); if(snek._x[_length-1]==foodPos.x && snek._y[_length-1]== foodPos.y) { snek._x[_length+1]=snek._x[_length];//-1 snek._y[_length+1]=snek._y[_length]; snek._dir[_length+1]=snek._dir[_length-1]; _length=_length+1; _food.respawn(); } }//end of add_point void Snake::deadSnake(N5110 &lcd){ /*if (live!=0){ lcd.clear(); lcd.printString("Game Over",0,1); lcd.printString("Press Start",0,2); lcd.printString("To Continue",0,3); lcd.refresh(); live--; while ( pad.check_event(Gamepad::START_PRESSED) == false){ pad.leds_on(); wait(0.05); pad.leds_off(); wait(0.05); } init(startx,starty,startl,live); }*/ //live--; init(startx,starty,startl,live); if (live==0){ lcd.clear(); lcd.printString("Game Over",0,1); lcd.printString("Press Start",0,2); lcd.printString("To restart",0,3); lcd.refresh(); /* live--; while ( pad.check_event(Gamepad::START_PRESSED) == false){ pad.leds_on(); wait(0.2); pad.leds_off(); wait(0.2); }*/ // init(startx,starty,startl,live); } lcd.clear(); lcd.printString("Game Over",0,1); lcd.refresh(); live--; }//end of deadSnake void Snake::checkWallCollision(N5110 &lcd){ if (snek._x[_length]==WIDTH||snek._x[_length]==0)//if snake head hits side walls { deadSnake(lcd); } if (snek._y[_length]==CEILING||snek._y[_length]==FLOOR)//if snake hits top or bottom walls { deadSnake(lcd); } }//end of checkWallCollision