Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2010, 09:34   #1
ChEaTeR-abc
Заблокирован
 
Регистрация: 30.06.2010
Сообщений: 104
По умолчанию Змейка

Пишу программу - игра "Змейка".Правила, думаю, объяснять не нужно.Поле состоит из Shape'ов.
Проблема с этапом, когда змейка подбирает новый "квадратик".Длина змейки увеличивается, а квадратик там и остается.Не могу понять в чем ошибка.
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  I:byte;
begin
  case Way of
    1:
      begin
        Left(Snake[SnakeLength].X, Snake[SnakeLength].Y);
        Join(Snake[1].X-1, Snake[1].Y);
      end;
    2:
      begin
        Left(Snake[SnakeLength].X, Snake[SnakeLength].Y);
        Join(Snake[1].X, Snake[1].Y+1);
      end;
    3:
      begin
        Left(Snake[SnakeLength].X, Snake[SnakeLength].Y);
        Join(Snake[1].X+1, Snake[1].Y);
      end;
    4:
      begin
        Left(Snake[SnakeLength].X, Snake[SnakeLength].Y);
        Join(Snake[1].X, Snake[1].Y-1);
      end;
  end;
    IF ((Snake[1].X-1=NewPoint.X) AND (Snake[1].Y=NewPoint.Y) AND (Way=1)) OR
       ((Snake[1].X=NewPoint.X) AND (Snake[1].Y+1=NewPoint.Y) AND (Way=2)) OR
       ((Snake[1].X+1=NewPoint.X) AND (Snake[1].Y=NewPoint.Y) AND (Way=3)) OR
       ((Snake[1].X=NewPoint.X) AND (Snake[1].Y-1=NewPoint.Y) AND (Way=4)) THEN
      begin
        Inc(SnakeLength);
        Snake[1]:=NewPoint;
        I:=SnakeLength;
          while I>1 do
            begin
              Snake[I].X:=Snake[I-1].X;
              Snake[I].Y:=Snake[I-1].Y;
              Dec(I);
            end;
        Timer1.Enabled:=True;
      end;
   { IF (Snake[SnakeLength].X=NewPoint.X) AND (Snake[SnakeLength].Y=NewPoint.Y) THEN Left(NewPoint.X, NewPoint.Y);}
        {Snake[1].X:=NewPoint.X;
        Snake[1].Y:=NewPoint.Y;
        I:=SnakeLength+1;
        while I>1 do
          begin
            Snake[I].X:=Snake[I-1].X;
            Snake[I].Y:=Snake[I-1].Y;
            Dec(I);
          end;
        Left(NewPoint.X, NewPoint.Y);
      end;                           }
Пояснения к коду:
Snake - массив TPoints, с координатами каждого Shape'а змейки
NewPoint - новый квадратик
Join - процедура окраски Shape'а в новый цвет(при нахождении там змейки или NewPoint)
Left - процедура возвращения Shape'у исходного цвета
Way - направление движения(1 - налево, 2 - вниз, 3 - направо, 4 - вверх)

На всякий случай добавил полный проект
Вложения
Тип файла: rar Змейка2.rar (163.6 Кб, 14 просмотров)
ChEaTeR-abc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Змейка zamaevac Gamedev - cоздание игр: Unity, OpenGL, DirectX 20 01.07.2010 19:19
Змейка SAMY93 Общие вопросы Delphi 1 27.06.2010 19:58
змейка =) romiccccc Помощь студентам 0 12.05.2010 11:08
ЗМЕЙКА(((( mizantrop32 Общие вопросы C/C++ 2 07.04.2010 17:10