Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   С чего начать разработку игр? (http://www.flasher.ru/forum/showthread.php?t=173742)

Dukobpa3 13.01.2012 17:06

Насчет исходников.
Вполне грамотно написано всё, даже неохота влазить с советами.

Слегка некошерный МВЦ, например геймвью имеет ссылку на контроллер, хотя там поидее должен быть просто диспатч события в контроллер а контроллер уже сам принимает решения. Вью должна иметь ссылку только на модель.

Вьюхи добавляются прямо на стейдж, что не есть правильно. В большинстве случаев особо не навредит, но так лучше не делать. Как по мне то лучше завести для всех слоев отдельный спрайт-контейнер, или как минимум один (например можно было все вьюхи пихать не на стейдж а в Tetris, он ведь тоже спрайт, и он лежит на стейдже, и это было бы куда правильнее)

Вот как-то так. Я видал исходники и похуже в разы, на фрилансе и не такого порою насмотришься))
А тут всё сравнительно круто) Дерзайте.

RunBeaver 13.01.2012 17:42

Спасибо за хороший отзыв.

Если браться за игру "на двоих" где ходы делаются пошагово, с прочтения чего лучше начать?
Особенно интересует серверная часть. С клиентом более-менее понятно, сокеты надо смотреть.
А вот с сервера - даже не знаю за что хвататься.

Dukobpa3 13.01.2012 18:00

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

Если делать сокетом то чуть сложнее будет сервер.
Через хттп запросы-ответы можно обойтись пачкой скриптов на ПХП.

Смысл таков что есть база данных некая, в ее роли может быть даже папка с файлами хмл или джейсон, это уже по вкусу. Понятное дело что файлы будут работать медленнее нежели тот же MySQL.

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

Ну и с клиентов приходят запросы, сервер на них отвечает. С этим справятся и скрипты.

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

Вот как-то так.

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

Добавлено через 7 минут
Цитата:

- сервер получает от клиента1 приглашение для клиента2, отправляет приглашение клиенту2
Блин, косяк))
Короче без сокета сервер не сможет ничего слать клиентам по своему усмотрению. Он может только отвечать на запросы.
Поэтому отправка чего-либо сервером клиенту в данном случае будет выглядеть как автообновление с неким периодом на клиенте, а сервер просто фиксирует очередь сообщений для него. Автообновление это клиент будет раз в сколько-то секунд слать запрос на сервер "ну что там, есть новости?" А сервер если очередь не пустая отвечает "да, есть, вот держи".

Ну и если ориентироваться на самый простой вариант сервера со скриптами, то логику туда вынести будет проблематично и всякие проверки адекватности ходов. Поэтому придется делать это всё на клиентах.

//***********************
Ну или разбираться с сокет-сервером.
Касательно серверов мой выбор python + MongoDB + Redis. Но это совсем другая тема. И для другого форума.

RunBeaver 13.01.2012 19:02

Очень приятно Ваше желание помочь.
Выбор пайтона мне очень близок. Во-первых есть небольшой опыт. Во-вторых... не буду говорить во-вторых что б не холиварить :-)

Я уже упоминал, что по работе знаком с разработкой. Я работаю тестировщиком. В работе иногда приходится и программить по чуть-чуть, в том числе и на пайтоне логи парсил.
Делать запросами - вообще не вижу смысла. Так как хоть сайты и не писал, а сервисы писал, и как это работает понимаю. Буду разбираться как написать сервер для работы через сокеты. На самом деле с моей стороны не честно просить всё расжевать. Не маленький уже.

Еще раз спасибо. Поддержку и вдохновение получил. Теперь дело за мной.

Dukobpa3 13.01.2012 19:14

Ну если питон не в новинку то ваша дорога в сокет-сервер))

Писать под него проще чем запрос-ответ, но к примеру если писать под социал то зачастую нужно дублировать и писать так чтобы была возможность и запрос-ответом работать и сокетом. Так как часто бывает такое что у пользователей то в конторе сокеты какие-то залочат или еще чего и они могут работать только через хттп. Стоит учитывать такое.

Vektor 14.01.2012 14:12

Посмотрел, твой код, по игре тетрис, что можно сказать.
package – разберись с этим.
public - это свойство должно появляется только в исключительных случаях, лучше использовать - internal, переменные если они должны быть видны в другом месте, для этого есть get и set.
Для такой не сильно сложной игры, слишком много классов.
Классы лучше использовать только в тех случаях, когда надо разбить игру на блоки или код настолько универсален, чтоб его не меняя можно вставить в другую игру или приложения.

Да, в блок могут входить несколько классов, но желательно, чтоб эти классы были универсальны, или улучшали читаемость и поддержку кода в будущем.

Блоки - это независимые классы, например, создается игра.
1) Делаем Prealader, блок независимый от того какая игра загружается.
2) Делаем Экран - Начало Игры, здесь игрок может перейти к просмотру рекордов, зарегистрироваться или выбрать своё имя, для новой игры или для загрузки игры, выбрать в какой режим игры играть, если есть такой выбор (здесь нужно создать сохранения и загрузку игроков, которые уже играли в игру или собираются в неё играть).
3) Рекорды – Он считывает результаты, достигнутые в игре, и отображает их на экране.
4) Сама игра – Здесь тоже, можно и нужно разбивать игру на классы, например класс - инвентарь , это отдельный блок, в котором персонаж может менять экипировку, рыться в рюкзаке и так далее, класс - магазин, класс - монстр, класс - ещё чего ни будь, главное не путать Блок-Класс, Класс-функция, и ещё ООП дело хорошее и нужное, но только если, игра большая, или код будет использоваться в продолжении игры, или в поддержке игры долгое время, типа онлайновых игр.

Ещё, вот о такого надо избавляться, при добавлении нового правила в игру, весь код надо будет, полностью перелопачивать, явно не правильно составлена логика кода.
Код AS3:

var collisionWithOtherObject:Boolean = _model.glass.blocksCont.hitTestPoint(bl.x + _model.figure.x + block.bl_size/2 + block.bl_size * direction,
  bl.y + _model.figure.y + block.bl_size/2, true);
  if (collisionWithOtherObject ||
    bl.x + _model.figure.x == _model.glass.x && direction == -1 ||
    bl.x + _model.figure.x + block.bl_size == _model.glass.x + block.bl_size*_model.glass.width_bl && direction == 1) {
        collision=true;
}

Удачи, в учебе и труде на поприще, разработки игр.


Часовой пояс GMT +4, время: 08:44.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.