| Гость |
Вы не зарегистрированны? Нажмите здесь для регистрации.
Забыли пароль? Запросите новый здесь.
|
|
| Сейчас на сайте |
Гостей: 2
На сайте нет зарегистрированных пользователей
Пользователей: 1,795
новичок: BlitzID
|
|
|
| Обсуждение «DLLWars (бои программистов)» |

|
| Опубликовано 29.07.2013 13:01 (12 лет назад) # |
Всем привет!
Жанр: стратегия/игра для программистов
Количество игроков: 2
Платформа: Delphi
Версия: глубокая альфа
Когда месяца три назад решил попробовать себя в игрострое, то выбрал не "банальный" платформер, а замахнулся сразу на игру для программистов. Впоследствии оказалось, что это не самый удачный выбор. >_<
Делал долго, делал мучительно. Изначально задуманная красивая архитектура не выдержала суровых реалий и потонула в говнокоде, спрайтики тоже получились так себе, часть свои, а часть потыренные.
Есть огромное желание удалить все нафиг и переписать заново --> то есть, превратить в очередной незавершенный проект.
Дабы избежать этого соблазна (ну и в целом, как ни странно, все это все же работает!), выкладываю свою поделку здесь.
В чем суть: игра для программистов, конкретно для дельфистов, потому что заголовочные файлы есть пока только для Delphi. Игра для двоих: вы пишете своего бота для игры в войнушку, собираете dll и запускаете ее против чужой. Кто лучше закодил, тот и победил. :)
Игрушка очень сырая, графику просьба критиковать умеренно, а вот предложения и замечания по правилам и реализации очень жажду получить. Выкладывайте своих ботов сюда.
Let the battle begins!
редакция от Xneg, 29.07.2013 13:03 |
|
|
|

|
| Опубликовано 29.07.2013 13:18 (12 лет назад) # |
Правила и описания интерфейсов:
Правила
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 |
|
|
|

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

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

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