В моем понимании у нас есть две логические сущности:
Игры: вовлекают интерактивность между двумя игроками в частных
игроков: Посетители (анонимно) на веб-сайте
Начну с игроками, потому что это легче. Посетитель приземляется на ваш сайт, и есть необходимость (однозначно) идентифицировать его. Самое простое решение - это руководство, которое может использоваться как параметр сеанса или как 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 более чем достаточно для вашего проекта.Что вы должны принять во внимание, так это то, что если вы не можете управлять повторной загрузкой пула приложений, вам также понадобится уровень сохранения, иначе вы можете потерять свои словари.
Если вам нужна дополнительная помощь, просто дайте мне знать.
Вопрос слишком широк. Вам действительно нужно сузить его. – Candide
Вы должны добавить дополнительную информацию, такую как слои, которые вы используете в своем приложении. Вы собираетесь использовать Silverlight? или простой asp.net? – Aphelion
Честно говоря, я не знаю, следует ли использовать серебро или нет. Вот почему я спрашиваю, что мне нужно, и достаточно ли использовать ASP.Net? – Ruba