Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пожалуйста помогите с едой для змеи - на Delphi. 
V
    Опции темы
spamER
Дата 22.12.2008, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 14.11.2008

Репутация: нет
Всего: 1



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


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

Код

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 Vpravo;
    procedure VLevo;
    procedure VVerx;
    procedure Vniz;
  end;
const
  shag = 10;

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

{$R *.dfm}

//Процедура для начального      создания тела змеии, создаю вчерез список (изначально 3 Shape'a)

procedure TForm1.CreateListOfShape();     
var
   i: Integer;
   TopItem: Integer;
   Item:TShape;
begin
  TopItem:=10;
  List:= TList.Create;
  for i:=0 to 3 do
  begin
    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;

//Переменные для правильного поворота змеии при движении
a := 0;
max := 3;
b := max - 1;
n := max - 1;
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 > n  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 > n  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 > n  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 > n  then a := 0;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Item:TShape;
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 - 23.12.2008, 09:37
PM MAIL   Вверх
AntonN
Дата 23.12.2008, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



ну и создавай еще один Shape, как в коде
Код

Item:=TShape.Create(self);
    Item.Width:=10;
    Item.Height:=10;
    Item.Top:=TopItem;
    TopItem:=TopItem+Item.Height;
    Item.Parent:=Form1.Panel1;
    List.Add(Item);


PS там item.free не лишний?


--------------------
user posted image
PM MAIL WWW   Вверх
spamER
Дата 23.12.2008, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 14.11.2008

Репутация: нет
Всего: 1



AntonN просто не в том дело. Я пробовал был так создавать, но проблема у меня в следующем,
 
Новый Shape то появляется, но он не движется вместе с стальными. Так вот, как сделать что бы они уже все вместе двигались???



P.S. Один Item.free и действительно был лишним.
PM MAIL   Вверх
CodeMonkey
Дата 23.12.2008, 12:33 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



На главной напротив названия раздела форума показывается последняя тема, читаю:

Код
Разделы:                           Обновления:
Delphi: Для новичков        23.12.2008, 09:41
                                          Тема: Пожалуйста помогите с едой ...
                                          Автор: spamER


Первая мысль: кризис...



--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
AntonN
Дата 23.12.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



spamER, узнавай кол-во элементов динамически, ты в n пишешь максимальное кол-во элементов (при старте), а вместо n используй list.count


--------------------
user posted image
PM MAIL WWW   Вверх
spamER
Дата 23.12.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 14.11.2008

Репутация: нет
Всего: 1



Слы а когда я пишу вместо n ,  list.count , то у меня змея начинает увеличиваться без остановки.

Можеш пример привести?
PM MAIL   Вверх
AntonN
Дата 23.12.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



list.count-1


--------------------
user posted image
PM MAIL WWW   Вверх
spamER
Дата 23.12.2008, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 14.11.2008

Репутация: нет
Всего: 1



AntonN спс заработало.

Слы, AntonN, может подскажешь еще, как сделать что бы еда появлялась в произвольном месте и змея поедала еду??? Подскажи плз.
PM MAIL   Вверх
NewDima
Дата 23.12.2008, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: нет
Всего: 12



ты сам будешь думать? Змею тебе фактически написали, тут помогли, еще жратву для нее писать. Может сам попробуешь, тут ничего сложного
PM ICQ   Вверх
spamER
Дата 23.12.2008, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 14.11.2008

Репутация: нет
Всего: 1



Оки. 
Токо вот хотябы б сам алгоритм поедания змеей еды. Я не пойму как проверить что змея схавала еду???
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0758 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.