2012-03-21 2 views
8

Существует игру под названием Многословность (это игра с целью), и это по этой ссылке
www.gwap.com
, как соединить два человека на вашем сайте

в игре они соединяют два игроков случайным образом играть друг с другом, игра состоит в том, что игрок1 должен описать слово своему партнеру (player2), а игрок2 должен занять слово.
Я пытаюсь создать веб-сайт, который сделает что-то подобное, но мне интересно
1- Как я могу случайно подключить двух игроков, чтобы они могли играть вместе, хотя они не являются зарегистрированными пользователями (они просто гости на сайте) ?
2. Как заставить их играть в приватной игре, я имею в виду, что каждый двое игроков играют в свою собственную игру?
3- Что мне нужно использовать? Достаточно ли использовать ASP.Net? Нужен ли мне серебристый свет?
Благодаря

+0

Вопрос слишком широк. Вам действительно нужно сузить его. – Candide

+0

Вы должны добавить дополнительную информацию, такую ​​как слои, которые вы используете в своем приложении. Вы собираетесь использовать Silverlight? или простой asp.net? – Aphelion

+0

Честно говоря, я не знаю, следует ли использовать серебро или нет. Вот почему я спрашиваю, что мне нужно, и достаточно ли использовать ASP.Net? – Ruba

ответ

3

В моем понимании у нас есть две логические сущности:

Игры: вовлекают интерактивность между двумя игроками в частных

игроков: Посетители (анонимно) на веб-сайте

Начну с игроками, потому что это легче. Посетитель приземляется на ваш сайт, и есть необходимость (однозначно) идентифицировать его. Самое простое решение - это руководство, которое может использоваться как параметр сеанса или как cookie сеанса (мое предложение). Guid не является нулевым типом, поэтому любой Guid из 32 нулей будет нашим неопределенным Руководством.

Имея ваших GUID-посетителей, вам нужна коллекция ключей/ценностей, которые будут подключать их к играм.

Сценарий 1: Каждый посетитель может быть игроком только за одну игру за раз. Словарь < игрок, игра> может сделать работу и посетителей, которые не игроки легко могут быть прослежены (игра = не определено Guid)

Сценарий 2: Каждый посетитель может стать игроком для многих игр одновременно. Словарь < плеер, список < игра >> это решение, но игра = undefinedGuid станет List.Count = 0

Теперь давайте посмотрим, что вы можете делать с играми. Прежде всего, вы можете использовать GUID для идентификации своих игр. Это означает, что вашим игровым словарем будет словарь < Guid, Guid> для сценария 1 или словарь < Руководство, список < Гильдия >> для сценария 2. Очевидно, вам понадобится коллекция ключей/значений для игр, скажем, в форме Словарь < gameGuid, gameDetails>. GameDetails должен быть классом, содержащим необходимую информацию, которая может определять интерактивность между игроками. В других мирах этот класс должен включать роль каждого игрока (роль 1: тот, кто спрашивает или роль 2: тот, кто угадывает), и сообщения, которые они обменивают, как коллекцию ключей/ценностей, где ключ является игроком. Guid и value строковое сообщение.

Чтобы подвести итог, вам понадобятся два статических словаря, определенных в вашем global.asax, один для игроков и один для игр. Вам также понадобится класс GameDetails, подобную этой (основной реализации концепции):

class GameDatails 
{ 
    public Guid Role1 { get; set; } // holds the guid of the player who asks 
    public Guid Role2 { get; set; } // holds the guid of the player who guesses 
    public List<KeyValuePair<Guid, string>> Messages; // holds the player/message pairs 
    public GameDetails(Guid role1, Guid role2) 
    { 
    this.Role1 = role1; 
    this.Role2 = role2; 
    this.Message = new List<KeyValuePair<Guid, string>>(); 
    } 
} 

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

Есть много других вещей, которые вы можете сделать (т. Е. Тот, кто догадывается о выходе, и вы произвольно назначаете другому игроку продолжение и т. Д.).

Более или менее это также способ сделать чат asp.net с отдельными комнатами. Возможно, вам будет полезно найти и проверить хороший образец простого сценария чата asp.net, увидеть логику и реализацию и адаптировать их к вышесказанному. Кроме того, вы можете расширить скрипт чата для поддержки частных комнат и иметь два приложения вместо одного.

Излишне говорить, что asp.net более чем достаточно для вашего проекта.Что вы должны принять во внимание, так это то, что если вы не можете управлять повторной загрузкой пула приложений, вам также понадобится уровень сохранения, иначе вы можете потерять свои словари.

Если вам нужна дополнительная помощь, просто дайте мне знать.

+0

Я попросил некоторых из моих друзей, и они сказали, что Silverlight будет намного проще построить этот проект, чем ASP.Net! Я так смущен! что мне делать? – Ruba

1

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

Чтобы контролировать количество одновременно работающих пользователей в сайте вы должны создать переменную состояния приложения и хранить два выбранные идентификаторы пользователя.

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

Конечно, вы должны писать много кода для

  1. добавить/удалить идентификатор пользователя для переменной состояния приложения в Global.ascx файл
  2. осуществлять аутентификацию, чтобы узнать, кто является пользователем и валидация пользователей.
  3. Если вы хотите, чтобы они автоматически выходили из системы через некоторое время (бездействующий/исправленный), вам нужно написать код в событии Session_End файла Global.ascx.

Позвоните мне, если вам нужен конкретный ответ.

Создать класс GameSession {int gameid; string player1; Строка player2}

предположит, что существует только одна игры и 2 пользователей Макс

Пользователь Процесс регистрации: если первый пользователь входит на ваш сайт, проверить пользователь, если он зарегистрирован проверить его идентификатор пользователя PWD и получить его идентификатор пользователя от table, если он гость генерирует случайный ключ (guid) или задает ему уникальный ключ (uniquenickname).

Управление государством: Создайте объект этого класса, присвойте gameid = 1 и назначьте player1 = уникальный ключ пользователя. Создайте коллекцию объекта GameSession, скажем, GameSessions, добавьте GameSession в GameSessions. Храните GameSessions в состоянии приложения.

В следующий раз, если другой пользователь входит в систему, выполните один и тот же процесс регистрации пользователей. Проверьте пустой слот (пустой плеер2) в GameSessions, если он найден, назначьте этого пользователя в первый или выбранный пустой слот GameSessions. Теперь этот GameSession готов служить.

Сохраните объект обратно в состояние приложения.

Разрешить пользователю играть в игру

Писать отрицательные случаи для вышеуказанных сценариев.

Таким образом, вы можете это сделать.

+0

1. Состояние приложения или переменная состояния сеанса? Поскольку переменные состояния приложения являются общими для всех пользователей. Правильно? 2. Как я узнаю, что конкретная игра является частной? Я имею в виду, предположим, что мы оба играем без использования базы данных. Как я могу запретить третьему пользователю разрешить доступ к этой игре? Пожалуйста, предложите ... – Pankaj

+0

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

+0

** Каждый раз, когда пользователь пытается играть в игру, вы должны проверить, существует ли его идентификатор в переменной состояния приложения или нет, если существует, то разрешить ему иначе. ** Какой идентификатор следует учитывать в случае с гостем? и какой идентификатор сохранить в переменной приложения? – Pankaj

1

Для обеспечения этого достаточно одного сервера ASP.NET и Ajax (javascript) на клиенте.

Грубо говоря, вы хотите настроить клиента для опроса сервера для получения информации с заданным интервалом. Сервер будет отвечать обновлениями состояния, на которые клиент реагирует.

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

Пример разговора:

Клиент: Регистрация

Сервер: Join-Принимается, Токен: 55164145

Client: Обновление 55164145

Сервер: Idle, "Ожидание противника"

Клиент: Обновление 55164145

сервер: Соперник найден, "Анонимный пользователь 31"

Client: Обновление 55164145

Сервер: Опиши "Цветок"

Client: Обновление 55164145

Сервер: Ожидание Описание

Клиент: Отправить-Описание 55164145, «Завод с лепестками»

Сервер: Принято-Описание

Client: Обновление 55164145

Сервер: Ожидание Противник

Client: Обновление 55164145

Сервер: Соперник отсоединен

Вы получаете идею.

1

Использование SingleIR для подключения двух пользователей через JavaScript работает в веб-браузере

http://signalr.net/

1

Я бы рекомендовал использовать NodeJS для этого. Goto http://nodejs.org/ скачать и установить

Теперь он хорошо работает на Windows (где я его использую), а также на Linux, и вы можете легко создать соответствующий микро-сайт.

Онлайн-книга http://www.nodebeginner.org/ поможет вам быстро и быстро.

2

1- Как я могу случайно соединить двух игроков, чтобы они могли играть вместе, хотя они не являются зарегистрированными пользователями (они просто гости на сайте)?

У зарегистрированного пользователя нет ничего волшебного. ASP.NET может отслеживать состояние анонимных пользователей.

2 Как заставить их играть в приватной игре, я имею в виду, что каждый из двух игроков играет в свою игру?

Вам просто нужно отслеживать, какие два пользователя играют вместе. Это так же просто, как хранить их SessionIDs

3- Что мне нужно использовать? Достаточно ли использовать ASP.Net? Нужен ли мне серебристый свет?

Не ходите в Silverlight, вам это не нужно для этого, и я считаю, что Microsoft отказывается от него в пользу HTML5. Кроме того, его market share составляет около 60%, тогда как Flash составляет около 100%, поэтому меньше людей смогут использовать ваш сайт, если вы подключаетесь к плагину Silverlight.

Как уже говорилось, ваша идея может быть выполнена с использованием комбинации AJAX на стороне клиента и стороне сервера ASP.NET. Я рекомендую jQuery для вашего кода на стороне клиента, это делает JavaScript и DOM-манипулирование легким.

Последнее, пожалуйста, зайдите на http://browserquest.mozilla.org/ и за пример того, что вы можете выполнить без плагинов в современной технологии браузера.

Смежные вопросы