P
ProEvoAndrew
[codebox]class snake {
class node {
public :
int x ; int oldx ;
int y ; int oldy ;
node *next ;
node *prev ;
node(int _x = 0 , int _y = 0) {
x = oldx =_x ; y = oldy = _y ; next = 0 ; prev = 0 ;
}
};
node *pbeg , *pend ;
public :
int size ;
snake() ;
~snake() ;
void add(int , int) ;
int getX() ;
int getY() ;
void setX(int x) ;
void setY(int y) ;
bool step() ;
void draw() ;
};
snake::snake() {
pbeg = 0 ;
pend = 0 ;
size = 0 ;
}
snake::~snake() {
if(pbeg != 0) {
node *pv = pbeg ;
while(pv) {
pv = pv->next ;
delete pbeg ;
pbeg = pv ;
}
}
}
void snake::add(int _x , int _y) {
node *pv = new node(_x , _y) ;
if(pbeg == 0)pbeg = pend = pv ;
else {
pv -> prev = pend ;
pend -> next = pv ;
pend = pv ;
}
size++ ;
}
int snake::getX() {
return pbeg -> x ;
}
int snake::getY() {
return pbeg -> y ;
}
void snake::setX(int x) {
pbeg -> x = x ;
}
void snake::setY(int y) {
pbeg -> y = y ;
}
void snake::draw() {
setcolor(GREEN) ;
node *pv = pbeg ;
while(pv) {
rectangle(pv -> x , pv -> y , pv -> x + 5 , pv -> y + 5) ;
pv = pv -> next ;
}
}
bool snake::step() {
pbeg -> oldx = pbeg -> x ;
pbeg -> oldy = pbeg -> y ;
switch(getch()) {
case VK_UP :
pbeg -> y = pbeg -> y - 5 ;
break ;
case VK_DOWN :
pbeg -> y = pbeg -> y + 5 ;
break ;
case VK_LEFT :
pbeg -> x = pbeg -> x - 5 ;
break ;
case VK_RIGHT :
pbeg -> x = pbeg -> x + 5 ;
break ;
case VK_ESC :
exit(0) ;
}
node *pv = pbeg -> next ;
while(pv) {
pv -> oldx = pv -> x;
pv -> oldy = pv -> y;
pv -> x = pv -> prev -> oldx ;
pv -> y = pv -> prev -> oldy ;
pv = pv -> next ;
}
setcolor(BLACK) ;
rectangle(pend -> oldx , pend -> oldy , pend -> oldx + 5 , pend -> oldy + 5) ;
draw() ;
return true ;
}
[/codebox]
class node {
public :
int x ; int oldx ;
int y ; int oldy ;
node *next ;
node *prev ;
node(int _x = 0 , int _y = 0) {
x = oldx =_x ; y = oldy = _y ; next = 0 ; prev = 0 ;
}
};
node *pbeg , *pend ;
public :
int size ;
snake() ;
~snake() ;
void add(int , int) ;
int getX() ;
int getY() ;
void setX(int x) ;
void setY(int y) ;
bool step() ;
void draw() ;
};
snake::snake() {
pbeg = 0 ;
pend = 0 ;
size = 0 ;
}
snake::~snake() {
if(pbeg != 0) {
node *pv = pbeg ;
while(pv) {
pv = pv->next ;
delete pbeg ;
pbeg = pv ;
}
}
}
void snake::add(int _x , int _y) {
node *pv = new node(_x , _y) ;
if(pbeg == 0)pbeg = pend = pv ;
else {
pv -> prev = pend ;
pend -> next = pv ;
pend = pv ;
}
size++ ;
}
int snake::getX() {
return pbeg -> x ;
}
int snake::getY() {
return pbeg -> y ;
}
void snake::setX(int x) {
pbeg -> x = x ;
}
void snake::setY(int y) {
pbeg -> y = y ;
}
void snake::draw() {
setcolor(GREEN) ;
node *pv = pbeg ;
while(pv) {
rectangle(pv -> x , pv -> y , pv -> x + 5 , pv -> y + 5) ;
pv = pv -> next ;
}
}
bool snake::step() {
pbeg -> oldx = pbeg -> x ;
pbeg -> oldy = pbeg -> y ;
switch(getch()) {
case VK_UP :
pbeg -> y = pbeg -> y - 5 ;
break ;
case VK_DOWN :
pbeg -> y = pbeg -> y + 5 ;
break ;
case VK_LEFT :
pbeg -> x = pbeg -> x - 5 ;
break ;
case VK_RIGHT :
pbeg -> x = pbeg -> x + 5 ;
break ;
case VK_ESC :
exit(0) ;
}
node *pv = pbeg -> next ;
while(pv) {
pv -> oldx = pv -> x;
pv -> oldy = pv -> y;
pv -> x = pv -> prev -> oldx ;
pv -> y = pv -> prev -> oldy ;
pv = pv -> next ;
}
setcolor(BLACK) ;
rectangle(pend -> oldx , pend -> oldy , pend -> oldx + 5 , pend -> oldy + 5) ;
draw() ;
return true ;
}
[/codebox]