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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2008, 22:51   #1
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию Помогите с игрой "Змейка".

Создаю змею из компонентов TShape. Тело змеи хранится в списке, изначально 3 Shape'a.Движение реализовано.Ну вообщем почти все готово, токо вот........

Вопрос:
Подскажите, как сделать, чтобы змея поедала еду (едой также будет служить компонент TShape, который будет появляться в любом месте игрового поля) ???

Вот то что уже написал :

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Panel1: TPanel;
    Image1: TImage;
    MainMenu1: TMainMenu;
    Main: TMenuItem;
    NewGames: TMenuItem;
    N1: TMenuItem;
    Exit: TMenuItem;
    Cpravka: TMenuItem;
    About_program: TMenuItem;
    procedure Timer1Timer(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
    List:TList;
    
    procedure CreateListOfShape;
    procedure AddOfShape;
    procedure Vpravo;
    procedure VLevo;
    procedure VVerx;
    procedure Vniz;
  end;
const
  shag = 10;

var
  Form1: TForm1;
  var
  napravlenie: string[1];
  a,b:integer;
implementation

{$R *.dfm}
procedure TForm1.CreateListOfShape();
var
   i: Integer;
   TopItem: Integer;
   Item:TShape;
begin
  TopItem:=150;
  List:= TList.Create;
  for i:=0 to 2 do
  begin
    Item:=TShape.Create(self);
    Item.Width:=10;
    Item.Height:=10;
    Item.Top:=TopItem;
    Item.Left:=150;
    TopItem:=TopItem+Item.Height;
    Item.Parent:=Form1.Panel1;
    List.Add(Item);
  end;
a := 0;
b := List.Count - 1;
end;


procedure TForm1.AddOfShape();
var
 Item:TShape;
 TopItem: Integer;
begin
    TopItem:=150;
    Item:=TShape.Create(self);
    Item.Width:=10;
    Item.Height:=10;
    Item.Top:=TopItem;
    TopItem:=TopItem+Item.Height;
    Item.Parent:=Form1.Panel1;
    List.Add(Item);
end;

procedure TForm1.VPravo();
var
  Item:TShape;
  Item1:TShape;
begin
Item:= Form1.List[a];
Item1:= Form1.List[b];
Item.Top:=Item1.top;
Item.Left:=Item1.Left+shag;
  b := a;
  a := a + 1;
  if a > (List.Count-1)  then a := 0;
end;

procedure TForm1.VLevo();
var
  Item:TShape;
  Item1:TShape;
begin
Item:= Form1.List[a];
Item1:= Form1.List[b];
Item.Top:=Item1.top;
Item.Left:=Item1.Left-shag;
  b := a;
  a := a + 1;
  if a > (List.Count-1)  then a := 0;
end;

procedure TForm1.VVerx();
var
  Item:TShape;
  Item1:TShape;
begin
Item:= Form1.List[a];
Item1:= Form1.List[b];
Item.Top:=Item1.top-shag;
Item.Left:=Item1.Left;
  b := a;
  a := a + 1;
  if a > (List.Count-1)  then a := 0;
end;

procedure TForm1.Vniz();
var
  Item:TShape;
  Item1:TShape;
begin
Item:= Form1.List[a];
Item1:= Form1.List[b];
Item.Top:=Item1.top+shag;
Item.Left:=Item1.Left;
  b := a;
  a := a + 1;
  if a > (List.Count-1)  then a := 0;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if napravlenie = 'R' then Vpravo;
  if napravlenie = 'L' then VLevo;
  if napravlenie = 'D' then Vniz;
  if napravlenie = 'U' then VVerx;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case key of
    vk_RIGHT: napravlenie:='R';
    VK_LEFT:  napravlenie:='L';
    vk_DOWN:  napravlenie:='D';
    VK_UP:    napravlenie:='U';
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
CreateListOfShape;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  List.Free;
end;

end.
Плз помогите, если не тяжело напишите пример,а то я уже все перепробывал с этой ее едой.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 26.12.2008, 21:09   #2
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Люди ну кто то помогите плз.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 26.12.2008, 21:17   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

В случайную клетку помещай время от времени еду, проверяя не занята ли клетка чем-то другим, змеей или еще что у тебя там.
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 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49
Ещё одна игра "Змейка" Simply-Art Софт 17 05.07.2007 04:10