Навигация
Поддержать материально
Steam Greenlight

Логотипы
Медальки
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Темы форума
185 - RPG
9.02.2024
 Vaskrol
В каком банке открыт…
24.01.2024
 Darthman
185 - ?
30.12.2023
 Mefistofel
TESTAMENT - Тактичес…
15.11.2023
 KregHek
WoL
13.10.2023
 Darthman
RES - Движок для пик…
27.09.2023
 rimush
177 - One Button Str…
20.09.2023
 VoroneTZ
JS 13k contest
13.09.2023
 Mefistofel
184 - Arcade II
14.08.2023
 tiger1025
184 - ?
14.07.2023
 Kaps
Сейчас на сайте
Гостей: 2
На сайте нет зарегистрированных пользователей

Пользователей: 1,788
новичок: svetalebedeva199
Обсуждение «DLLWars (бои программистов)»
Xneg
Avatar пользователя

Опубликовано 29.07.2013 13:01 (11 лет назад)    #
Всем привет!

Жанр: стратегия/игра для программистов
Количество игроков: 2
Платформа: Delphi
Версия: глубокая альфа


Когда месяца три назад решил попробовать себя в игрострое, то выбрал не "банальный" платформер, а замахнулся сразу на игру для программистов. Впоследствии оказалось, что это не самый удачный выбор. >_<
Делал долго, делал мучительно. Изначально задуманная красивая архитектура не выдержала суровых реалий и потонула в говнокоде, спрайтики тоже получились так себе, часть свои, а часть потыренные.
Есть огромное желание удалить все нафиг и переписать заново --> то есть, превратить в очередной незавершенный проект.
Дабы избежать этого соблазна (ну и в целом, как ни странно, все это все же работает!), выкладываю свою поделку здесь.
В чем суть: игра для программистов, конкретно для дельфистов, потому что заголовочные файлы есть пока только для Delphi. Игра для двоих: вы пишете своего бота для игры в войнушку, собираете dll и запускаете ее против чужой. Кто лучше закодил, тот и победил. :)

Игрушка очень сырая, графику просьба критиковать умеренно, а вот предложения и замечания по правилам и реализации очень жажду получить. Выкладывайте своих ботов сюда.
Let the battle begins!

редакция от Xneg, 29.07.2013 13:03

Xneg
Avatar пользователя

Опубликовано 29.07.2013 13:18 (11 лет назад)    #
Правила и описания интерфейсов:

Правила
1. Ходы делаются по очереди.

1а. Юнит сначала ходит, потом стреляет. Можно стрелять сразу без ходьбы, но после этого ход
юнита заканчиваеся, двигаться он не может.

2. Дальности движения:
танка - 3 клетки
солдата - 2 клетки
пушки - 1 клетка

3. Озера непроходимы, если юнит входит в лес, он останавливается. Передвижение по лесу - 1 клетка в ход.

4. Базовые показатели здоровья юнитов:
Солдаты - 6 хр
Танк - 9 хр
Артиллерия - 4 хр

5. Стрельба:
Солдаты - 2 максимум на 3 клетки по вертикали или горизонтали
Танк - 3 максимум на 3 клетки по вертикали или горизонтали
Артиллерия - бьет в любой квадрат 3х3 клетки. Центральная клетка - 2 повреждения,
остальные 8 - по 1 повреждению.

6. У солдат в лесу есть преимущество: повреждения по ним уменьшаются на 1.

Программные интерфейсы

TWarUnitType = (utError, utSoldier, utTank, utArtillery); // тип юнита
TDirection = (dRight, dLeft, dUp, dDown); //направление движения/стрельбы
TTerrain = (tError, tField, tForest, tLake); // тип местности
TUnitState = (usReady, usMoved, usDone); //состояние юнита

// вражеский юнит - им нельзя управлять
IEnemyWarUnit = interface(IUnknown)
function GetCoordinate: TPoint; // координата юнита
function GetHealth: Integer; //количество здоровья
function GetUnitType: TWarUnitType;//тип юнита
end;

// свой юнит
IWarUnit = interface(IEnemyWarUnit)
function Place(Coordinate: TPoint): Boolean; // функция размещает юнит на поле
function Move(Direction: TDirection): Boolean; // перемещение юнита на 1 клетку
function Shoot(X, Y: integer): Boolean; // выстрел по указанным координатам (для пушки)
или в указанном направлении
function MovePoints: Integer; // предел движения
function ShotPower: Integer; // сила выстрела
function UnitState: TUnitState; //состояние юнита
function Team: Integer; // номер команды юнита
function Health: Integer; // текущее здоровье юнита
function UnitType: TWarUnitType; // тип юнита
function IsPlaced: Boolean; // проверка, помещен юнит на поле или нет
end;

// интерфейс для поля боя
IWarField = interface(IUnknown)
function Height: Integer; //высота поля боя
function Width: Integer; //ширина поля боя
function Terrain(X, Y: Integer): TTerrain; //тип местности в указанной координате
end;

DLL должна реализовывать следующие две функции:

1. procedure PlaceUnits(TeamNumber: Integer; YourUnits: TList<IWarUnit>; WarField: IWarField)
// функция для размещения своих юнитов перед боем
// список юнитов - YourUnits, поле битвы - WarField
// команда определяет вертикаль расстановки юнитов
// для команды 1 - это первая вертикаль с X = 0
// для команды 2 - это последняя вертикаль с X = WarField.Width - 1
// После того, как юнит поставлен, его нельзя перемещать или переставлять.

2. function Proceed2(YourUnits: TList<IWarUnit>; EnemyUnits: TList<IEnemyWarUnit>;
WarField: IWarField): Boolean
- основная функция, которая управляет всеми юнитами игрока

Архив по ссылке
В архиве лежит программа-клиент, в которую и надо вставлять свои dll + заготовка под собственную dll.

Если будут какие-то вопросы, пишите!

редакция от Xneg, 06.08.2013 07:08

Dj_smart
Avatar пользователя

Опубликовано 29.07.2013 13:46 (11 лет назад)    #
Интересно звучит, только лучше наверное сделать не dll, а какой-нибудь скриптовый язык а-ля lua. Запилить рейтинг ботов с игрой по интернету. Пишешь своего бота - выбираешь достойного соперника — fight.
Xneg
Avatar пользователя

Опубликовано 29.07.2013 13:47 (11 лет назад)    #
Это как возможное логическое продолжение проекта. Пока dll)
ZblCoder
Главный Говнюк
Avatar пользователя

Опубликовано 30.07.2013 07:43 (11 лет назад)    #
Начал тестовую разработку библиотеки.
Первое, что показалось неудобным, это нехватка процедур инициализации и уничтожения ресурсов библиотеки. Приходится каждый хот создавать и уничтожать все объекты.

А так вполне забавно.
Перейти на форум:
Конкурсы
Открытые конкурсы:
Активных нет
Недавние конкурсы:
 185 - RPG XII
 184 - Arcade II
 183 - Novel
 182 - RPG XI
 181 - Pixel Craft 128
 Все конкурсы
Случайная игра
Мини-чат
Вам необходимо залогиниться.

Архив чата

25,321,706 уникальных посетителей

Создано на базе русской версии PHP-Fusion copyright © 2003-2006 by Nick Jones.
Released as free software under the terms of the GNU/GPL license.