#define StX 24
#define StY 12
using namespace std;
class Part
{
public:
char data;
int X, Y;
Part *next, * prev;
Part()
{
X=StX;
Y=StY;
data='$';
next = prev = NULL;
}
};
class Snake:public Part
{
Part *Head;
Part *Tail;
int Count;
public:
Snake()
{
Head = Tail = NULL;
Count = 0;
}
void Add(char c = '$',int key = 75)
{
Part *temp = new Part;
temp->data = c;
temp->prev = 0;
temp->next = Tail;
// Если элементы есть?
if(Tail != 0){
Tail->prev = temp;
temp->X = Tail->X;
temp->Y = Tail->Y;
Tail->X = next->X;
Tail->Y = next->Y;
}
// Если элемент первый, то он одновременно и голова и хвост
if(Count == 0)
Head = Tail = temp;
else
// иначе новый элемент - tail
Tail = temp;
Count++;
}
void Move(int key = 75)
{
if(75 == key)// 75 Left
{
Head->X=45;
Tail->X=13;
}
Изменяется значения двух ссылок при изменении одной.
Не могу понять почему координата хвоста и головы меняются одновременно.
Т.Е. Head->X=45;
//то и Tail->X==45
Tail->X=13;
//то и Head->X==13
ПОЧЕМУ???????
Код:
Part *Head;
Part *Tail;
ты их вроде обявляеш, да не инициализируеш.
может быть я не прав.
Part *Head;
Part *Tail;
или, что я думаю в данном случае, будет лучше, объяви статично:
Part Head;
Part Tail;
И вообще, я бы тебе посоветовал использовать стандартный связный список, а не свой лепить.
То есть получаем в классе Snake кроме Part *next, * prev, еще и Part *Head с Part *Tail... зачем?
Ну да ладно... может чего то недопонял.
Из кода не видно как меняются этот next и prev.
Код:
Tail->X = next->X;
Tail->Y = next->Y;
Tail->Y = next->Y;
что выше происходит загадка.
Цитата:
И вообще, я бы тебе посоветовал использовать стандартный связный список, а не свой лепить.
Иногда студентов просят реализовать двусвязный список самостаятельно. Возможно это как раз такой случай?
Цитата: Odissey_
что выше происходит загадка.
Вот поэтому я и посоветовал STL использоватью:) Что это может идти в разрез с заданием как-то не подумал :o