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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с управлением "Змейки" ! ! ! 
V
    Опции темы
spamER
Дата 17.12.2008, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Народ, пожалуйста помогите.
Пытаюсь написать игру "Змейка". В качестве тела змеии использую массив из компонентов TShape (создаю их в отдельной процедуре - конструктором). 

Проблема : как сделать управление змейкой (Вверх, Вниз, Вправо, Влево) ???

Вот то, что я сделал :
Цитата

unit Unit1;

interface

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

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

var
  Form1: TForm1;
  napravlenie: string[1];
  mas:array[0..999] of TShape;
  i:integer;
implementation

uses MaskUtils, Math;

{$R *.dfm}

procedure TForm1.CreateUdav();
begin
for i:=0 to 2 do
begin
  mas[i]:=TShape.Create(self);
  mas[i].Left:=150;
  mas[i].Width:=10;
  mas[i].Height:=10;
  mas[i].Left:=mas[i].Left+i*10;
  mas[i].Top:=150;
  mas[i].Parent:=Form1;
end;
end;

procedure TForm1.Vpravo();
begin
for i:=0 to 2 do
  mas[i].Left:=mas[i].Left+shag;
end;

procedure TForm1.VLevo();
begin
for i:=0 to 2 do
  mas[i].Left:=mas[i].Left-shag;
end;

procedure TForm1.VVerx();
begin
for i:=0 to 2 do
  mas[i].Top:=mas[i].Top-shag;
end;

procedure TForm1.Vniz();
begin
for i:=0 to 2 do
  mas[i].Top:=mas[i].Top+shag;
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
napravlenie := 'L';
CreateUdav();
end;

end.


PM MAIL   Вверх
Данкинг
Дата 17.12.2008, 00:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



А это у тебя для чего, если не для управления?
Код

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;



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
spamER
Дата 17.12.2008, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ты не понял. Сама змейка движется, только вот когда управляешь ей, она НЕ правильно движется. Например при движении вверх все Shape'ы начинают вдигатся как в тетрисе. А нада как в обычной змейке. что бы она умела поворачивать.

Как эт сделать?

Это сообщение отредактировал(а) spamER - 24.1.2009, 14:15
PM MAIL   Вверх
spamER
Дата 17.12.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Народ, ну что ни кто не может помочь??? Срочно нужно. ПЛЗ. Подскажите.
PM MAIL   Вверх
Christoph
Дата 17.12.2008, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 667
Регистрация: 23.1.2008
Где: Харьков

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



А как в тетрисе змейке поворачивает? smile


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


Шустрый
*


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

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



Цитата(Christoph @ 17.12.2008,  21:46)
А как в тетрисе змейке поворачивает? smile

Вы не поняли. У меня Shape'ы двигаются как в тетрисе. 

То есть, если я поварачиваю змейкой в какуюто сторону, то тело змеии не поворачивает.

Я прикрепил начатый проект, посмотрите что в нем нада исп

Люди ну плз, хелп.
PM MAIL   Вверх
SoWa
Дата 19.12.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: 2
Всего: 74



Если у тебя как в тетрисе- ты в самой структуре передвижения накосячил наверно.
Перепиши все заново smile
Вот с такой структурой:
голову змеи сдвинуть по направлению движения. Второе звено змеи поставить на место головы, третье на место второго и так далее.

Вот этим ты задал тетрисо-образность, это и есть твоя ошибка:
Код

procedure TForm1.Vpravo();
begin
for i:=0 to 2 do
  mas[i].Left:=mas[i].Left+shag;
end;

procedure TForm1.VLevo();
begin
for i:=0 to 2 do
  mas[i].Left:=mas[i].Left-shag;
end;

procedure TForm1.VVerx();
begin
for i:=0 to 2 do
  mas[i].Top:=mas[i].Top-shag;
end;

procedure TForm1.Vniz();
begin
for i:=0 to 2 do
  mas[i].Top:=mas[i].Top+shag;
end;


Это сообщение отредактировал(а) SoWa - 19.12.2008, 10:56


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
kazilop
Дата 1.2.2009, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



может тупо сделать 2х мерный массив и там координаты змейки прописывать ?
[x][y]     а лучше 3х мерный..  3 - длина змейки


PM MAIL   Вверх
Данкинг
Дата 1.2.2009, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



Цитата(kazilop @  1.2.2009,  01:08 Найти цитируемый пост)
может тупо сделать 2х мерный массив и там координаты змейки прописывать ?

Зачем? smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
kazilop
Дата 1.2.2009, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



как то замудренно сделано smile
разбивашь игровое поле на массив 
и потом где 0 - там не рисуешь ничего - где 1 там змейка

я так давно давно делал змейку - все прекрасно работало
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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