Хелп ... У меня змейка стераетса не правильно =(

  • Автор темы ProEvoAndrew
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

ProEvoAndrew

#1
[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]
 
Статус
Закрыто для дальнейших ответов.