Возможно вы искали: 'Player's Palace'

May 09 2025 08:04:28
  • Как сделать 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
Главная » Статьи » Панель инструментов » Сеть

Сеть

Сигнал посылаем: «Вы что это там?» —­

А нас посылают... обратно.

(В.Высоцкий, «Тау-Кита»)


В последнее время рубрика «Игра своими руками» часто отсутствовала. Дело в том, что было принято решение переделать и усилить трехмерную версию движка ЛКИ-Creator. Вскоре он все же появится в нашем журнале, работы близятся к завершению. А пока мы решили ответить на один из самых частых запросов: рассказать, как приделать к игре сетевой режим.

Новые компоненты

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

Если вы все сделали правильно, у вас появилось в панели LKI несколько новых компонентов. Нас пока интересуют два: TLKIHost и TLKIClient. Первый понадобится в «серверной» части программы, второй — в «клиентской». Оба они никакого визуального эффекта не дают, поэтому, куда на форме их ставить — совершенно неважно.

У обоих есть общее свойство Port, определяющее для сервера, какой порт занимать, а для клиента — по какому порту подключаться. У хоста есть также свойство Active, определяющее, включен ли он в настоящий момент.

Замечание: не стоит выставлять его в true с самого начала. Лучше сделайте это после того, как все данные программы будут инициализированы. Иначе возможны ошибки и накладки, связанные с тем, что, предоставленный сам себе, Host немедленно начинает работу.

У клиента, чтобы соединиться, запускается процедура Connect. Предварительно надо установить значение IPAddress в соответствии с адресом вашей хост-программы (можете посмотреть ее в одноименном свойстве хоста).

Программа MUD

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

Замечание: если обозначение MUD вам ничего не говорит — загляните в статью «Куда катятся виртуальные миры». Она была у нас в февральском номере, а сейчас вы можете найти ее в разделе «Руководства» компакт-диска.

Итак, создаем два проекта: один будет MUD-клиентом, другой — серверной программой. Примеры эти лежат в каталоге «Клиент и сервер MUD» раздела «Игра своими руками» нашего диска, распакуйте их, как обычно.

Замечание: вовсе не всегда нужно ставить эти компоненты в разные программы. Например, большинство современных стратегий отлично совмещает их, и одна и та же программа по необходимости может служить тем и другим. Когда вы собираетесь поиграть по локальной сетке, скажем, в Heroes of Might & Magic, происходит именно это.

На клиентской форме стоят: TLKIClient, текстовое окно, в котором идут сообщения от сервера, и строка ввода. На серверной — TLKIHost, кнопочка активации (она вызывает включение хоста) и окошко, в которое пишутся поступающие от клиента сообщения (это совершенно необязательно, просто для удобства).

Ведение журналов

Чтобы следить за происходящим в нашей сети, есть несколько средств.

Первое использовано в примере. У TLKIHost и TLKIClient есть свойство LogMemo, по умолчанию оно равно nil. Но если присоединить к нему компонент типа TMemo, в его окошке будет отображаться журнал (log) поступивших / отправленных сообщений, а также список ошибок и так далее. Рекомендуется поначалу пользоваться им активно.

Оба компонента обладают также свойством LogOn. Если оно выставлено в true, то в файле net.log ведется тот же самый журнал. Только не забудьте снять с файлов защиту от записи, а то аналогичные функции ЛКИ-Creator’а вызывали у невнимательных пользователей регулярные ошибки...

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

Сделать это можно в том случае, если у вас подключен дешифровщик сообщений — компонент TLKIMessageParser. В нем вам надо установить в true параметр LogFiltered, а затем у каждой команды, которую вы хотите видеть в журнале, пометить свойство Log.

Ошибки и сбои будут регистрироваться в журнале даже при включенной фильтрации.

Это важно: большинство ошибок в сетевом обмене, вроде неверного соединения, неправильной команды и так далее, не вызывает ни падения программы, ни даже окна сообщения. Дело в том, что сбои в сетевом протоколе — дело нормальное, и зачастую программа сама справляется с автокоррекцией пакетов. Эти ошибки пишутся исключительно в «журналы» — в окно и в файл, если они включены. Поэтому крайне не рекомендуется отключать запись log-файла, пока программа не будет отлажена полностью; более того, очень многие даже коммерческие продукты не отключают ее и после этого, чтобы в случае чего информация об ошибке сохранилась. Конечно, в этом случае надо оставлять запись в log-файл только ошибок.

Уже описанного вполне достаточно, чтобы хост и клиент могли соединиться (это можно сделать с одной машины) и «поздороваться» между собой.

(У обоих компонентов есть свойство Greeting, определяющее, какая строка будет отправляться в качестве приветствия.)

Список соединившихся клиентов хранится у хоста в параметре ClientList. Его элементы имеют тип TLKIConnection.

Расшифровка команд

Теперь хорошо бы наладить какое-нибудь осмысленное общение между программами. Для этого существует еще один новый компонент — TLKIMessageParser.

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

Установив TLKIMessageParser на форму, следует проставить этот компонент в свойстве Parser у соответственно TLKIHost или TLKLIClient; у самого же компонента надо указать компонент хоста или клиента в параметре Connection.


Этот компонент — по сути своей список команд (TLKIInstruction). Каждая команда обладает такими свойствами:

Key. Это — ключевое слово, определяющее команду, так сказать оператор, посылаемый от одной программы к другой. Вы сами придумываете внутренний язык для вашего хоста и клиента. Рекомендуется для скорости работы делать команды короткими — 3-4 символа, не более. Например, пусть KILL означает «атаковать», W — «идти на запад», N — «идти на север»... Соmmand. Это свойство определяет процедуру, которую следует запустить при получении команды. Процедуру вы можете описать сами, но у нее обязательно должны быть такие параметры:

(Parser : TLKIMessageParser; Param: string);

Log. Определяет, записывать ли команду в журнал (смотрите «Ведение журналов»).

Замечание: порядок команд в списке важен. Самые употребительные рекомендуется ставить повыше, тогда программа будет работать заметно быстрее. Сравнение строк — не самая скоростная операция, и чем меньше их понадобится — тем лучше.

Обработчик команды — параметр Command — можно описывать, в принципе, как угодно. Param — это список параметров в текстовом виде, через запятую. Для удобства в ЛКИ-Сreator’е определены такие функции (параметр у всех этих функций — строка):

MoreParam : boolean выдает true, если в строке есть еще параметры (то есть, в ней есть хоть какие-то значащие символы); GetParamWord : string берет следующий параметр как строку и удаляет его из списка параметров; GetParamInt : integer берет следующий параметр, как целое число, и удаляет его из списка параметров; если это оказалось не целое число — выдается ошибка. GetParamReal : double, GetParamBool : boolean работают так же, но с другими типами данных.

Посылка сообщений

Тут вообще нет никаких хитростей. Простейшая команда TLKIConnection.Send(Msg: string) отправляет текстовое сообщение. Для добавления параметров пользуйтесь процедурой AddParam(var ParamList : string; Param); Param при этом может быть строкой, целым числом, вещественным числом или логической переменной.

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


* * *

Собственно говоря, это все, что необходимо для создания сетевого режима вашей игры. Остальное — «соль и перец по вкусу».

Кодирование

Пока что наши команды отправлялись открытым текстом. Для первого примера это вполне нормально, но может возникнуть законное желание зашифровать обмен. Для этого в ЛКИ-Creator есть несложная процедура (хотя в серьезном коммерческом продукте ее, конечно, придется усовершенствовать).

Установите вашим хосту и клиенту в true параметр Coding и укажите код в параметре CodeString : string. Ставьте его подлиннее, и лучше пусть это будет абракадабра. Только позаботьтесь, чтобы она была одинаковой у клиента и хоста...

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

Aelfrica MUD

27KB

Не так давно нами проводился конкурс по деланию игр; один из победителей, Евгений Кашин, представил нам проект MUD-игры по средневековой Европе. Сейчас проект продолжает развиваться, и через некоторое время будет выставлен на нашем сайте. Те примеры, которые приведены на диске к этой статье — фрагменты кода Евгения, приведенные к ЛКИ-стандарту.

Вскоре предполагается в рамках «Клуба интеллектуальных компьютерных игр» организовать набор миростроителей, world builders, для этой игры: такие проекты обычно делаются большой командой. Сам мир представляет собой сказочно-мифологическую Европу, примерно такую, как она описана в повести «Три сердца и три льва» Пола Андерсона. Это — фэнтези-мир, но в нем есть множество знакомых стран, народов и городов. Подробнее об этом мире можно узнать по адресу www.aelfrica.ru.

Евгений сделал в процессе подготовки проекта немало полезной работы, которая может пригодиться и нашим читателям. Хотя она нужна далеко не для всякой игры, мы решили включить ее в пакет ЛКИ-Creator. Установка дополнительного модуля LKIEdit.pas приведет к появлению у вас на панели LKI компонентов TLKIFlagEdit, позволяющем очень удобно редактировать длинный список свойств с текстовым описанием, считанным из файла, и TLKINameEdit — уникальным компонентом специально для написания игр по-русски.

TLKINameEdit

87KB

Этот компонент позволяет редактировать слово и все его падежи. Поскольку в русском языке слова склоняются, делать, скажем, диалоги с произвольным именем персонажа заметно сложнее, чем в английском. TLKINameEdit предложит пользователю выбрать разумный способ склонять имя по всем падежам (кнопка «По умолчанию») — и даст возможность исправить список, если что-то не так. Для MUD такая функция неоценима, но ее могут использовать и во многих других играх, где используются текстовые сообщения.

TLKIFlagEdit

24KB

А TLKIFlagEdit не раз пригодится при написании, например, редактора свойств монстров в ролевой игре или стратегии. В достаточно сложных играх список свойств очень длинен, и редактировать их средствами Delphi долго и неудобно.

Этот компонент нужен тогда, когда свойства занимают один бит — либо оно есть, либо нет — а список довольно велик. Хранятся такие свойства в TLKISet — обычном множестве байтовых чисел. При желании можно сократить диапазон множества, подредактировав тип TLKISet в модуле LKIString.pas.

Обратите внимание на параметр ScriptName — в нем содержится имя файла, который описывает список свойств. Каждому свойству соответствует число — это код, в который преобразуется флаг с таким названием. Например, строка: «7 Плавает» означает, что параметр «плавать» будет храниться в TLKISet как семерка. И код «if 7 in FlagEdit.Flags» означает: «если монстр плавает, то...».

776 Прочтений •  [Сеть] [15.08.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Премьеры октября: "Социальная сеть"... Ukraine Vova 16.09.2012
• Социальная сеть: Вфейсбуке Ukraine Vova 16.09.2012
• Сеть Ukraine Vova 15.08.2012
• Сеть — мой дом родной! Хромированна... Ukraine Vova 15.08.2012
• Сеть ( IGROK ) Ukraine Vova 28.05.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 | Донейт | Статистика | Команда | Техническая поддержка