Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите сделать игру "змейка" 
:(
    Опции темы
Lehon
Дата 7.10.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день. Подскажите пожалуйста, как сделать так, что бы при нажатии стрелок обьект (например обычная кнопка) перемещался по форме? И вообще как назначать приложению кнопки? (Если нажата W то, если -> то...). 

(Гугл не рулит. Точнее рулит под dos приложения. Исходники обычной тупой змейки даже под консоль...)

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

Код

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
double x=Edit1->Text*1;
double y=Edit2->Text*1;
double z;
double z1;
double z2;
double z3;
z=x*y;
z1=x/y;
z2=x-y;
z3=x+y;


[C++ Error] Unit1.cpp(11): E2451 Undefined symbol 'Edit1'
[C++ Error] Unit1.cpp(12): E2451 Undefined symbol 'Edit2'
[C++ Error] Unit1.cpp(17): E2303 Type name expected
[C++ Error] Unit1.cpp(17): E2238 Multiple declaration for 'z'
[C++ Error] Unit1.cpp(13): E2344 Earlier declaration of 'z'
[C++ Error] Unit1.cpp(18): E2303 Type name expected
и т.д. однотипные ошибки, затем
[C++ Warning] Unit1.cpp(46): W8004 'z3' is assigned a value that is never used
[C++ Warning] Unit1.cpp(46): W8004 'z2' is assigned a value that is never used
[C++ Warning] Unit1.cpp(46): W8004 'z1' is assigned a value that is never used
и тд

Это сообщение отредактировал(а) Lehon - 7.10.2009, 19:16
PM MAIL   Вверх
SVN74
Дата 7.10.2009, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 5.5.2008
Где: Комсомольск на Дн епре

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



Цитата(Lehon @  7.10.2009,  19:13 Найти цитируемый пост)
double x=Edit1->Text*1;
double y=Edit2->Text*1;
double z;
double z1;
double z2;
double z3;
z=x*y;
z1=x/y;
z2=x-y;
z3=x+y;


Это надо поместить во внутрь класса

PM MAIL WWW   Вверх
Lehon
Дата 7.10.2009, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Внутрь кнопки? Так потому и хочу сразу задать глобальные переменные - слишком неэкономично в каждой кнопке писать переменные.
PM MAIL   Вверх
Anikmar
Дата 7.10.2009, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(SVN74 @  7.10.2009,  19:19 Найти цитируемый пост)
Это надо поместить во внутрь класса


Цитата(Lehon @  7.10.2009,  19:30 Найти цитируемый пост)
Внутрь кнопки? 


Можно создать класс для глобальных переменных. И глобальным сделать один его экземпляр.
Цитата(Lehon @  7.10.2009,  19:13 Найти цитируемый пост)
(Гугл не рулит. Точнее рулит под dos приложения. Исходники обычной тупой змейки даже под консоль...)

Вы сначала попробуйте змейку написать хоть под ДОС. Поверьте двигать кнопку намного проще, чем написать змейку.
PM MAIL ICQ   Вверх
Lehon
Дата 7.10.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



"Вы сначала попробуйте змейку написать хоть под ДОС. Поверьте двигать кнопку намного проще, чем написать змейку."

Ну, мне кнопка и нужна ) А не змейка. Я не понимаю ничего в консольном программировании, пусть это и один и тот же с++, мне именно приложение нужно ) С кнопкой двигающийся стрелками.

"Можно создать класс для глобальных переменных. И глобальным сделать один его экземпляр."

Попробую...
PM MAIL   Вверх
Usper
Дата 8.10.2009, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Переменные можно объявить и глобально вне класса, однако присваивать им значения надо в конструкторе формы:
Код

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
double x;
double y;
double z;
double z1;
double z2;
double z3;
z=x*y;
z1=x/y;
z2=x-y;
z3=x+y;


__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    x=Edit1->Text*1;
    y=Edit2->Text*1;
}

А двигать кнопку так:
Разместить на форме кнопку, свойство формы KeyPreview установить в true, в обработчик FormKeyDown формы написать код:
Код

............
if(Key==VK_RIGHT)
    {
        Button1->Left++;
        Key=0;
    }
............



Это сообщение отредактировал(а) Usper - 8.10.2009, 16:01


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Lehon
Дата 8.10.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Благодарю, Помогло! )

ПС
Вроде бы движение кнопки билдер нереализует. Шейпы двигаются, баттоны нет.

Это сообщение отредактировал(а) Lehon - 8.10.2009, 15:43
PM MAIL   Вверх
Anikmar
Дата 8.10.2009, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(Lehon @  8.10.2009,  15:42 Найти цитируемый пост)
Шейпы двигаются, баттоны нет.

 smile  smile А шкрабы ботают?  smile 

Посмотрите - не включено ли в кнопках автовыравнивание и привязка к родительскому контролу.

Добавлено через 55 секунд
Бедный русский язык. Был бы он реальным монстром - первым делом сожрал бы всех программистов.
PM MAIL ICQ   Вверх
Usper
Дата 8.10.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В примере было почему-то Key==0; надо, конечно же, Key=0; и вообще эту строчку можно выкинуть smile
А кнопка нормально двигается.

Это сообщение отредактировал(а) Usper - 8.10.2009, 16:03


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Lehon
Дата 8.10.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Еще вопрос! smile
Вот код. Компилятор ругается (и правильно делает) на то что я вписал кеи в таймер, а так же не понимает что на месте x как раз должно быть имя члена Тшейп. Вопрос  в том как правильно написать что б все работало? А именно:
1. Если жмем кнопку *** то на месте х в Shape1->x; Ставиться Top либо Left; Следовательно, в зависимости от того какую кнопку мы нажали, шейп раз в **милисекунд сдвигается в ту сторону какую кнопку мы нажали.
2. Как сдвигать не на ++ а на +20 к примеру? (У меня такое не работает...).


Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
char x;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Key==VK_RIGHT)
{Shape1->Left++; Key==0;}
if(Key==VK_LEFT)
{Shape1->Left--; Key==0;}
if(Key==VK_UP)
{Shape1->Top--; Key==0;}
if(Key==VK_DOWN)
{Shape1->Top++; Key==0;}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if (Key=VK_UP) x=Top;
if (Key=VK_DOWN) x=Top;
if (Key=VK_LEFT) x=Left;
if (Key=VK_RIGHT) x=Left;
Shape1->x;
}
//---------------------------------------------------------------------------


[C++ Error] Unit1.cpp(34): E2451 Undefined symbol 'Key'
[C++ Error] Unit1.cpp(38): E2316 'x' is not a member of 'TShape'
PM MAIL   Вверх
Anikmar
Дата 8.10.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Ох...  smile 
Лучше скажите, что вы хотите при помощи таймера сделать?

Добавлено через 3 минуты и 40 секунд
Если я правильно понял, то заведите 2 переменные в классе:
DirectionX и DirectionY

По перехвату соответствующей кнопки заносите в них значение сдвига, например:
нажата кнопка влево - DirectionX=-1, кнопка вправо - DirectionX = 1
и т.п.

Можно еще фичу сделать:
Нажали кнопку влево - уменьшили DirectX на 1, а вправо - увеличили. Тогда скорость движения менять будем.

А по таймеру - просто прибавляем к Left - DirectionX, а к Top DirectionY


PM MAIL ICQ   Вверх
Lehon
Дата 8.10.2009, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вообще я хотел научиться управлять клавишами обьектом, а теперь уже захотел написать змейку ) Таймер - обеспечение постоянного движения с постоянной скоростью, желательно так: каждые 0,5 или 1 секунду (пока не решил) происходит сдвиг на 1 длину сегмента змейки ( в моем случае 20). А стрелками теперь я задаю лишь направление движения по идее...
Про DirectionX и Y непонял, но попробую...

Это сообщение отредактировал(а) Lehon - 8.10.2009, 16:50
PM MAIL   Вверх
Anikmar
Дата 8.10.2009, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(Lehon @  8.10.2009,  16:49 Найти цитируемый пост)
Про DirectionX и Y непонял, но попробую...

Если не поняли, то как вы собираетесь пробовать?  smile  На вкус?  smile 

Лучше скажите что непонятно - дабы не плодить лишнего кода. 
PM MAIL ICQ   Вверх
Lehon
Дата 8.10.2009, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



"Если не поняли, то как вы собираетесь пробовать?    На вкус?   

Лучше скажите что непонятно - дабы не плодить лишнего кода. "

Да, ни на вкус ни на цвет не получилось ) Гугл вообще мне директх предлагает )))
Мне непонятно что за переменные такие DirectionX и Y и как вообще это запрогать. Я работал раньше тока с дабле и инт... Прогаю 3или 4ый день всего )
PM MAIL   Вверх
Usper
Дата 8.10.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Anikmar, предлагает создать переменные DirectionX и DirectionY и в обработчике FormKeyDown присваивать им соответствующие значения. А по таймеру, в соответствии со значениями в этих переменных, делать соответствующий сдвиг. Я в своё время при написании змейки тоже руководствовался похожим принципом, только у меня была одна переменная (см. вложение). За код прошу не пинать, писалось всё на заре программерской деятельности  smile Впрочем сейчас ситуация не сильно улучшилась :-(.

Это сообщение отредактировал(а) Usper - 16.10.2009, 07:45

Присоединённый файл ( Кол-во скачиваний: 54 )
Присоединённый файл  Udaff.zip 246,91 Kb


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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