C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Написание игры  (Прочитано 2565 раз)
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Написание игры
« : 14 Июль 2013, 19:46:26 »

Суть игры на прилагаемой картинке. Подскажите, пожалуйста, о правильном подходе - планировании написания такой игры. Хочется с самого начала двигаться правильно. Возникают вопросы…
Как хранить поля (готовые картинки или рисовать?), как ставить фишки (рисовать битмапы при щелчке?), запретить не правильные ходы (?), передача хода (по дополнительному щелчку на отдельной кнопке?) и т.д.
Интересует не готовый код, а план реализации – правильный подход. С чего бы вы начали?
правила игры
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Написание игры
« Ответ #1 : 15 Июль 2013, 15:28:39 »

Ну... Хранение поля в двумерном массиве (контейнере) напрашивается само собой. Можно в виде поля битов (битсета), можно как-то по-другому. Размерность генерировать (по условию) при помощи ГСЧ. Сама игра, понятно, д.б. обернута в класс. Рисование советую сделать на основе TDrawGrid, если не оговаривается в условии рисовать вручную. Это позволит также реализовать события мыши: при щелке мыши (с протягиванием или без) генерируется ход игрока, соответственно, след. ход за другим игроком. Если просто щелчок - расценивается как установка 1 фишки в соотв. клетке. Если протягивание по полю мышкой (удерживая ЛК) - соответствующее кол-во фишек в направлении движения курсора. Запрет неправильных ходов можно организовать в обработчике OnMouseUp - игрок отпустил мышь, значит, сделал ход. Далее ход проверяется и если все правильно, устанавливаются соответствующие биты в поле; если нет - сообщение об ошибке, устанавливаются только "правильные" биты. Рисование, естественно, - в OnDrawCell.
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Написание игры
« Ответ #2 : 15 Июль 2013, 16:07:42 »

Как вариант с чего начинать:
Код
class PACKAGE TGame : public TCustomDrawGrid
{
typedef TCustomDrawGrid Inherited;
 
private:
TWndMethod OldGridProc;
 
public:
__fastcall TGame(TComponent* AOwner) :
Inherited(AOwner), OldGridProc(0)
{
SetSize(4, 4); // установить размер поля по умолч. 4х4
OldGridProc = WindowProc; // сохранить оконную процедуру
WindowProc = &GridProc; // подменить оконную процедуру
}
virtual __fastcall ~TGame()
{ }
 
// установка размера поля
void __fastcall SetSize(unsigned int AColCount, unsigned int ARowCount)
{
RowCount = ARowCount;
ColCount = AColCount;
// и т.д.
}
 
// открытые методы от TCustomDrawGrid...
 
protected:
 
virtual void __fastcall GridProc(TMessage& msg)
{
if(msg.Msg==WM_LBUTTONDOWN) {
FLBDown = true;
// вычислить координаты мыши и клетки грида
}
else if(msg.Msg==WM_LBUTTONUP) {
FLBDown = false;
// вычислить координаты мыши и клетки грида
// проверка правильности хода и сам ход:
if (ValidateMove()) CommitMove();
}
else if(msg.Msg==WM_MOUSEMOVE && msg.WParam==MK_LBUTTON) {
// если курсор движется + зажаьа ЛК, вычислить координаты мыши:
const int x = GET_X_LPARAM(msg.LParam);
const int y = GET_Y_LPARAM(msg.LParam);
// вычислить координаты покрытых клеток
}
OldGridProc(msg); // обработать другие сообщение в очереди
}
 
// защищенные методы от TCustomDrawGrid...
};
 
 
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: Написание игры
« Ответ #3 : 16 Июль 2013, 12:36:08 »

Спасибо, буду пробовать. 
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: Написание игры
« Ответ #4 : 16 Июль 2013, 18:00:48 »

Возник еще такой вопрос:
Согласно этой ссылке ссылка в Дельфи 5 будет добавлена поддержка Андроида. Скорее всего к концу года такая поддержка появиться и в С++ Builder ХЕ5. Для разработки будет использоваться FireMonkey. Придется отказаться от сообщений Windows, да и TDrawGrid в FireMonkey  отсутствует. Просто со временем хочу иметь эту игрушку на устройстве с Андроид. Можно ли сейчас написать такую игру с помощью FireMonkey в C++ Builder XE4, ну и в последствии перекомпилировать в новой студии XE5 под платформу Андроид?
C чего начать писать такую игру в FireMonkey?

Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


« Ответ #5 : 18 Июль 2013, 06:16:30 »

Цитата: SilverFish от 16 Июль 2013, 18:00:48
Возник еще такой вопрос:
Согласно этой ссылке ссылка в Дельфи 5 будет добавлена поддержка Андроида. Скорее всего к концу года такая поддержка появиться и в С++ Builder ХЕ5. Для разработки будет использоваться FireMonkey. Придется отказаться от сообщений Windows, да и TDrawGrid в FireMonkey  отсутствует. Просто со временем хочу иметь эту игрушку на устройстве с Андроид. Можно ли сейчас написать такую игру с помощью FireMonkey в C++ Builder XE4, ну и в последствии перекомпилировать в новой студии XE5 под платформу Андроид?
C чего начать писать такую игру в FireMonkey?

С того же самого - только вместо Vcl.TCustomDrawGrid используй Fmx.TGrid. Для FMX компоненты пишутся так же, как и для VCL, только базовые классы другие. Что касается Android, я бы не стал (пока) писать для Android на Билдере или Делфи, а выбрал бы какой-то другой инструмент: например, Andromo (если нужна быстрая разработка с минимумом кода) или Qt (если нужен более "профессиональный" подход).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.133 секунд. Запросов: 21.