Возможно вы искали: 'iM1A2 Abrams: America'...'

May 09 2025 08:26:50
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 95949629
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18338
• Обзор The Walking ... 18776
• Обзор DMC: Devil M... 19857
• Обзор на игру Valk... 15861
• Обзор на игру Stars! 17745
• Обзор на Far Cry 3 17926
• Обзор на Resident ... 16005
• Обзор на Chivalry:... 17487
• Обзор на игру Kerb... 17962
• Обзор игры 007: Fr... 16592
Превью о играх
• Превью к игре Comp... 17938
• Превью о игре Mage... 14442
• Превью Incredible ... 14699
• Превью Firefall 13453
• Превью Dead Space 3 16318
• Превью о игре SimC... 14705
• Превью к игре Fuse 15422
• Превью Red Orche... 15526
• Превью Gothic 3 16327
• Превью Black & W... 17336
Главная » Статьи » Панель инструментов » Занятие четвертое: По вашим заявкам

Занятие четвертое: По вашим заявкам

- Будьте здоровы! - говорит король.

- Не могу отказать вам в вашей просьбе, - отвечает добрый волшебник старческим, дребезжащим голосом - и необычайно здоровеет.

Е.Шварц, "Золушка"

Напомним, что в 6-м номере журнала за этот год мы начали наш новый проект - "Игра своими руками". Начиная с июньского выпуска, на компакт-диске "Лучших компьютерных игр" публикуются свежие версии пакета для создания игр, написанного специально для нашего журнала - ЛКИ-Creator, работающего с Delphi 5-7 версий.

В двух предыдущих выпусках мы научились делать аркады и стратегии. По плану, нам надлежало заняться AI, но эта тема требует больше места, чем у нас сейчас есть. Поэтому мы займемся еще одной назревшей темой: вашими письмами, предложениями и идеями.

Материалы наших прошлых занятий вы можете найти на нашем компакт-диске, в специально созданном для этой цели разделе "Игра своими руками".

Первая читательская игра

Первым приславшим нам игры собственного исполнения на ЛКИ-Creator оказался господин Oct Opus АКА Ось Миног. Он прислал нам две своих игры: одна - ремейк логической игры Filler, другая - продукт собственного сочинения, "Оборотень". Второй мы разберем позднее, а сейчас займемся первым, потому что в нем есть несколько показательных моментов. Игру можно найти на нашем компакт-диске.

Особая польза этого примера - в том, что на его основании вы легко сможете конструировать собственные логические игры, вроде "Тетриса", Lines или "Сапера". По словам Oct Opus'а, программирование заняло у него вечер; так что, если у вас есть свежая идея логической игры, за воплощением дело не станет.

122KB
Игра Filler в исполнении читателя Oct Opus.
Для тех, кто не помнит, суть игры Filler достаточно проста. Поле разбито на цветные ромбы (см. картинку). Играют двое (один из них может быть представлен ИИ). Один начинает из нижнего левого угла, другой - из правого верхнего. Каждый в свой ход выбирает цвет, отличный от своего и вражеского "текущего" цветов, и в него перекрашиваются все ромбы, которые связаны сплошной цепочкой ромбов его текущего цвета. Например, если сейчас на картинке игрок 1 выберет оранжевый цвет, все желтые ромбы в левом нижнем углу станут оранжевыми. Задача - завоевать больше половины территории.

Первое, на что обращает внимание пример: игра походовая, плавных движений нет. Поэтому процедура Process игрового мира содержит только обращение к клавиатуре, проверку на кнопку Escape - и вызов встроенной Process. Все остальные функции лежат на нажатии кнопок, которым автор придал вид таких же цветных ромбов.

Рисование поля

Можно было бы сделать каждый ромб игровым объектом, и это было бы намного проще, чем то, что сделал автор. Но Oct Opus вспомнил, что в оригинальной игре одноцветные ромбы группировались в более крупные. Поэтому он сделал так, что все объекты создаются специальным методом GroupTiles и им же уничтожаются при каждом изменении на игровом поле.

GroupTiles

procedure TFillerWorld.GroupTiles;

var i,j,t : integer;

begin

while NObj>0 do

begin

RemoveObj(true, 0)

end;

btl := tiles;

for j:=1 to MaxTileY do

for i:=1 to MaxTileX do

begin

if Btl[i,j] = 255 then continue;

t := Btl[i,j];

if (Btl[RX(i,j),j+1] = t)

and (Btl[LX(i,j),j+1] = t)

and (Btl[i,j+2] = t)

then

begin

AddObj(true, 1, PX(i,j)-7,

PY(i,j), 0, Btl[i,j]+8, 1);

Btl[LX(i,j),j+1] := 255;

Btl[RX(i,j),j+1] := 255;

Btl[i,j+2] := 255;

continue;

end;

AddObj(true, 1, PX(i,j), PY(i,j),

0, Btl[i,j]+16, 1);

end;

end;

Посмотрим на эту процедуру (на врезке). Первым делом мы копируем массив ромбов Tiles во временную переменную Btl. Затем для каждого ромба из Btl проверяем, не находятся ли прямо под ним, слева внизу и справа внизу ромбы того же цвета, и если да - то создаем большой ромб (а задействованные перекрашиваем в несуществующий цвет, чтобы не отрисовывать их снова), если же нет - маленький. На самом деле на врезке приведен сокращенный вариант процедуры; у Oct Opus'а рассматриваются и более крупные ромбы, состоящие из 16 маленьких.

Это интересно: на ромбической карте нетривиально определять соседей каждого ромба. Для того, чтобы понять, какой ромб стоит слева от данного, автор написал функцию LX, справа - RX. Если воспользоваться картой (как рассказано в прошлом номере), будет проще, хотя придется переопределять процедуру ее рисования.

Перекрашивание и ИИ

Для перекраски ромбов при делании хода автор выбрал рекурсивный метод. Он, может, и не слишком быстр, но в данном случае работает достаточно хорошо, а главное - прост и понятен. См. фрагмент кода "Перекрашивание".

Перекрашивание

function TFillerWorld.Redraw(x,y : integer; c : byte) : integer;

var r : integer;

procedure Redr(ax,ay : integer; ac,ab : byte);

begin

if (Tiles[ax,ay] < ab) or (Tiles[ax,ay] = 255) then exit;

Tiles[ax,ay] := ac;

Redr(LX(ax,ay),ay+1,ac,ab);

Redr(RX(ax,ay),ay+1,ac,ab);

Redr(LX(ax,ay),ay-1,ac,ab);

Redr(RX(ax,ay),ay-1,ac,ab);

inc(r);

end;

begin

r := 0;

Redr(x,y,c,Tiles[x,y]);

GroupTiles;

Result := r;

end;

Суть в том, что локальная процедура Redr проверяет, относится ли данный ромб к перекрашиваемому цвету и лежит ли в границах поля; если нет, на этом ее действие прекращается, если да, то ромб перекрашивается, а процедура вызывает сама себя для соседних ромбов. Если какой-то из них оказался подходящим, там она снова вызывает сама себя для соседей... и так далее, пока цепочка не кончится.

Обратите внимание на переменную-счетчик R, которая увеличивается на единицу каждый раз, когда клетка перекрашивается. Этот счетчик в конце работы процедуры дает нам текущий размер домена (без учета новоприсоединившихся ромбов).

Для обсчета ИИ придуман простой способ: подсчитать, сколько клеточек присоединится к нашему домену при каждом из допустимых ходов, и выбрать наилучший вариант. (Это необязательно оптимальная стратегия, так как не учитывает двухходовых и более длинных комбинаций, но работает вполне прилично, в чем вы убедитесь, запустив программу.) См. фрагмент кода "Искусственный интеллект".

Искусственный интеллект

function TFillerWorld.CountAI : byte;

var i, k, mc, mn : integer;

begin

mc := 255;

mn := 0;

for i:=0 to 7 do

begin

if i = Tiles[1, MaxTileY] then continue;

if i = Tiles[MaxTileX,1] then continue;

k := Count(MaxTileX,1,i);

if kv class="silver"codep class="title"LightMutate/pp align="justify"bprocedure/b LightMutate(P : TLKIParticle);p align="justify" bbegin/bp align="justify" P.Angle := P.Angle + Random(21)-10;p align="justify" bif/b P.Angle < 0 bthen/b P.Angle := P.Angle + 360;p align="justify" bif/b P.Angle > 360 then P.Angle := P.Angle - 360;

P.MoveForward(80);

end;

Эта процедура прибавляет к углу случайную величину (Random дает число от 0 до 20, вычтя 10, получаем от минус 10 до 10), проверяет, не вышел ли угол за допустимые рамки, а затем двигает вперед частицу. Расстояние, на которое мы ее двигаем, большой роли не играет - главное, чтобы частица не успела полностью его пройти до следующего изменения.

Еще определена процедура NoChange, которая ничего не меняет. Она используется, если мы хотим, чтобы частицы продолжали лететь по прямой.

Пример

Попробуем сделать так, чтобы в нашем старом примере StarEscort инопланетяне, взрываясь, вместо спрайта оставляли разлетающиеся частички. Зададим для этого спрайт Sparkle.bmp, уберем у объектов инопланетян параметр RemoveSpr (нам ни к чему, чтобы оставался еще и спрайт вспышки) и напишем перед удалением объекта вражеского корабля такой код:

Emit(500, LightMutate, psCircle, 0, 40, 10, Sprites[15], Objects.x, Objects.y, 40, Tick + 1000, 0, 50);

Порождается 500 частиц со скоростью 40, которые живут 1 секунду (1000 миллисекунд, параметр Tick+1000), по кольцу с радиусами 10 и 40, на месте нашего объекта. Каждые 50 миллисекунд частица меняет угол полета на плюс-минус 20 градусов.

Попробуйте сами поэкспериментировать с разными видами частиц; это легко и приятно. Не забудьте, что правильно нарисовать саму частицу очень важно; у нас используются простейшие частицы, а с более красивыми получаются намного лучшие эффекты. Попробуйте испускать сразу несколько потоков разных частиц.

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

* * *

Как видите, мы учитываем ваши пожелания в новых версиях пакета. А в следующий раз мы все-таки поговорим о построении ИИ для нашей стратегии. До встречи через месяц!


В будущих номерах

В следующих номерах мы поговорим о:

работе с прозрачностью;

трехмерных движках;

основах AI;

отладке программы;

создании замысла и сценария игры,

написании дизайн-документа;

игровом балансе;

продумывании игровых персонажей и их реплик;

работе с Photoshop и трехмерными пакетами;

анимации;

музыке и озвучке;

и многом другом.

Все это вполне реально научиться делать своими руками. Вы скоро в этом убедитесь.

Пишите нам...

Все, кто хочет поделиться своими соображениями о пакете ЛКИ-Creator и этом цикле статей, сообщить о найденной ошибке, спросить совета или предложить какое-то усовершенствование - милости просим писать по адресу почтовый адрес. Кто-нибудь из авторов пакета постарается ответить вам.

Тем, кто считает, что пакет можно чем-то дополнить: во-первых, не забудьте, что на нашем диске сегодня еще не финальная версия пакета, а только та, в которой реализованы описанные в наших статьях функции. Возможно, что-то из ваших идей уже реализовано и ждет своей очереди (см. список "В будущих номерах"). И в любом случае: предлагая нам какую-то идею, попытайтесь обосновать, почему ваше предложение полезно сразу для многих игр, а не только для вашей конкретной.

956 Прочтений •  [Занятие четвертое: По вашим заявкам] [15.08.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Занятие четвертое: По вашим заявкам Ukraine Vova 15.08.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2024

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка