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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2010, 17:45   #1
SAMY93
Пользователь
 
Регистрация: 25.06.2010
Сообщений: 10
По умолчанию Змейка

Здравствуйте! Я в Delphi новичек и пытаюсь написать игру змейка. Написал уже много, но не получается сделать создание и присоединение сегментов. Не могли бы вы показать и объяснить мне как это сделать? Я уже везде искал, но нигде толком не могу понять как это сделать.Вот мой код
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm2 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure first;
    procedure vlevo;
    procedure vpravo;
    procedure vniz;
    procedure vverx;
    procedure  eda;
    procedure telo;
    procedure granica;
  end;

var
  Form2: TForm2;
  golova,chasti,eda1:tshape;
  napravlenie:string;
  posx,posy:integer;
implementation

{$R *.dfm}

{ TForm2 }

procedure TForm2.eda;
begin
eda1:=tshape.Create(self);
eda1.Shape:=stCircle;
eda1.Brush.Color:=clred;
eda1.Width:=20;
Eda1.Top:=random(33+1)*20;
Eda1.Left:=random(37+1)*20;
eda1.Parent:=form2;
end;

procedure TForm2.first;
begin
posx:=160;
posy:=160;
golova:=tshape.Create(self);
golova.Shape:=stCircle;
golova.Width:=20;
golova.Top:=posy;
golova.Left:=posx;
golova.Parent:=form2;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
first;
randomize;
 napravlenie:='U';
 eda;
 telo;
end;

procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (napravlenie='U')and (key=VK_RIGHT) then
napravlenie:='R';
if (napravlenie='U')and (key=VK_LEFT) then
napravlenie:='L';
if (napravlenie='U')and (key=VK_DOWN) then
napravlenie:='U';
if (napravlenie='R')and (key=VK_LEFT) then
napravlenie:='R';
if (napravlenie='R')and (key=VK_UP) then
napravlenie:='U';
if (napravlenie='R')and (key=VK_DOWN) then
napravlenie:='D';
if (napravlenie='L')and (key=VK_RIGHT) then
napravlenie:='L';
if (napravlenie='L')and (key=VK_DOWN) then
napravlenie:='D';
if (napravlenie='L')and (key=VK_UP) then
napravlenie:='U';
if (napravlenie='D')and (key=VK_UP) then
napravlenie:='D';
if (napravlenie='D')and (key=VK_RIGHT) then
napravlenie:='R';
if (napravlenie='D')and (key=VK_LEFT) then
napravlenie:='L';

end;

procedure TForm2.granica;
begin
 if eda1.Left<0 then Eda1.Left:=0;

  if (Eda1.Left+Eda1.Width)>Image1.Width then Eda1.Left:=Image1.Width-Eda1.Width;

  if Eda1.Top<0 then Eda1.Top:=0;

  if Eda1.Top+Eda1.Height>Image1.Height then Eda1.Left:=Image1.Height-Eda1.Height;

end;

procedure TForm2.telo;
begin
eda1.Destroy;
eda;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
if napravlenie = 'R' then Vpravo;
  if napravlenie = 'L' then VLevo;
  if napravlenie = 'D' then Vniz;
  if napravlenie = 'U' then VVerx;
  if (eda1.Top=golova.Top) and( eda1.Left=golova.Left) then
  telo;
  end;

procedure TForm2.vlevo;
begin
golova.Top:=golova.Top+0;
golova.Left:=golova.Left-20;
end;

procedure TForm2.vniz;
begin
golova.Top:=golova.Top+20;
golova.Left:=golova.Left;
end;

procedure TForm2.vpravo;
begin
golova.Top:=golova.Top+0;
golova.Left:=golova.Left+20;
end;

procedure TForm2.vverx;
begin
golova.Top:=golova.Top-20;
golova.Left:=golova.Left;
end;

end.
Заранее спасибо.
SAMY93 вне форума Ответить с цитированием
Старый 27.06.2010, 19:58   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Читайте журнал нашего форума, под названием Программист. Во втором кажется номере была статья про змейку.
http://www.procoder.info/
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


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



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