2012-03-21 19 views
8

Hay un juego llamado verbosidad (es un juego con un Propósito) y es en este enlace
www.gwap.com
cómo conectar a dos personas en su sitio web

en el juego que se conectan dos jugadores al azar para jugar entre ellos, el juego es que el jugador1 debe describir una palabra a su compañero (jugador2) y el jugador2 debe adivinar la palabra.
Estoy tratando de crear un sitio web que haga algo así, pero me pregunto
1- cómo puedo conectar dos jugadores al azar para que puedan jugar juntos aunque no sean usuarios registrados (solo son invitados al sitio web) ?
2- ¿Cómo hacer que jueguen en un juego privado, quiero decir que cada dos jugadores juegan su propio juego?
3- ¿Qué necesitaría usar? ¿Es suficiente usar ASP.Net? ¿Necesito Silverlight?
Gracias

+0

La pregunta es demasiado amplia. Realmente necesitas reducirlo. – Candide

+0

Debe agregar algo más de información, como las capas que está utilizando en su aplicación. ¿Vas a usar Silverlight? o simple asp.net? – Aphelion

+0

Honestamente, no sé si debería usar Silverlight o no. Es por eso que estoy preguntando qué necesitaría, y ¿es suficiente usar ASP.Net? – Ruba

Respuesta

3

En mi entendimiento que tenemos dos entidades lógicas:

Juegos: involucrar a la interactividad entre los dos jugadores en privado

Jugadores: Visitantes (anónimo) de un sitio web

Voy a comenzar con jugadores porque es mas fácil. Un visitante aterriza en su sitio y existe la necesidad de (única) identificarlo. La solución más fácil es un Guid que se puede usar como un parámetro de sesión o como una cookie de sesión (mi sugerencia). Guid no es un tipo anulable, por lo que cualquier Guid de 32 ceros será nuestro Guid indefinido.

Al tener sus visitantes guiados, necesita una colección de clave/valor que los conectará a los juegos.

Escenario 1: Cada visitante puede ser un jugador para un solo juego a la vez. Un diccionario < jugador, juego> puede hacer el trabajo y los visitantes que no son jugadores pueden ser fácilmente rastreados (juego = indefinido Guid)

Escenario 2: Cada visitante puede ser un jugador para muchos juegos al mismo tiempo. Un juego de diccionario <, juego List < >> es la solución pero juego = undefinedGuid se convertirá en List.Count = 0

Ahora veamos qué puedes hacer con los juegos. En primer lugar, puede usar GUID para identificar sus juegos. Esto significa que su diccionario de jugadores será Dictionary < Guid, Guid> para el escenario 1 o Dictionary < Guid, List < Guild >> para el escenario 2. Obviamente necesitará una colección de clave/valor para los juegos, digamos en forma de Diccionario < gameGuid, juegoDetalles>. GameDetails debe ser una clase que contenga la información necesaria que pueda definir la interactividad entre los jugadores. En otros mundos, esta clase debe incluir el rol de cada jugador (rol 1: el que pregunta o rol 2: el que está adivinando) y los mensajes que intercambian como una colección clave/valor donde la clave es el jugador Guid y el valor es un mensaje de cadena.

Para resumir necesitarás dos diccionarios estáticos definidos en tu global.asax, uno para los jugadores y otro para los juegos. También necesitará una clase GameDetails similar a este (implementación básica concepto):

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>>(); 
    } 
} 

adición y eliminación de los jugadores es fácil, así como juegos (los jugadores están conectados a los juegos).

Hay muchas otras cosas que puede hacer (es decir, el que adivina deja de fumar y asigna aleatoriamente otro jugador para continuar, etc.).

Más o menos esta es también la manera de hacer un chat de asp.net con salas privadas. Puede ser útil para usted encontrar y verificar una buena muestra de una secuencia de comandos simple de chat asp.net, ver la lógica y la implementación y adaptarlas a lo anterior. Además, puede ampliar la secuencia de comandos de chat para admitir habitaciones privadas y tener dos aplicaciones en lugar de una.

No hace falta decir que asp.net es más que suficiente para su proyecto.Lo que debe tener en cuenta es que si no puede controlar el reciclaje de su grupo de aplicaciones, también necesitará una capa de persistencia, de lo contrario, puede perder sus diccionarios.

Si necesita más ayuda solo hágamelo saber.

+0

¡Le pregunté a algunos de mis amigos y dijeron que sería mucho más fácil construir este proyecto que ASP.Net! ¡Estoy tan confundido ahora! ¿que debería hacer? – Ruba

1

Creo que si dos personas tienen acceso a su sitio web que pueden acceder a los datos por separado y jugar el juego de forma independiente

Para controlar el número de usuarios simultáneos en un sitio que hay que crear una variable de estado de la aplicación y almacenar dos identificadores de usuario seleccionados para ello.

Cada vez que un usuario intenta jugar un juego, debe verificar si su ID existe en la variable Estado de la aplicación o no, si existe, de lo contrario, no lo permita.

Por supuesto, usted tiene que escribir mucho código a

  1. añadir/eliminar id de usuario a la variable de estado de la aplicación en el archivo Global.ascx
  2. implementar la autenticación de saber quién es el usuario y validaciones de usuario.
  3. si desea que se desconecten automáticamente después de algún tiempo (inactivo/fijo), debe escribir el código en el evento Session_End del archivo Global.ascx.

Quiero saber más detalles si quieres una respuesta específica.

Crea una clase GameSession {int gameid; string player1; cadena jugador2}

suponer que sólo hay un juego y 2 usuarios max Proceso de Registro

usuario: si un primer usuario entra a su sitio web, echa un usuario si se ha registrado comprobar su ID de usuario PWD y obtener su ID de usuario de tabla, si es invitado, genere una clave aleatoria (guid) o pídale la clave única (nombre de nombre único).

Gestión de estado: crea el objeto de esta clase, asigna gameid = 1 y asigna player1 = clave única del usuario. Crear colección del objeto GameSession decir GameSessions, agregar GameSession a GameSessions Almacenar GameSessions al estado de la aplicación.

La próxima vez que otro usuario inicie sesión, siga el mismo proceso de registro de usuario. Compruebe si hay una ranura vacía (player2 vacío) en GameSessions, si se encuentra, asigne este usuario a la primera ranura vacía o seleccionada de GameSessions. Ahora esta GameSession está lista para servir.

Guarde el objeto en Estado de la aplicación.

Permitir al usuario jugar el juego

casos negativos

de escritura para escenarios anteriores.

De esta forma puede hacerlo.

+0

1. ¿Estado de aplicación o variable de estado de sesión? Como variables de estado de aplicación son comunes para todos los usuarios. ¿Derecha? 2. ¿Cómo identificaré que un determinado juego es privado? Quiero decir, supongamos que ambos estamos jugando, sin usar la base de datos. ¿Cómo puedo evitar que un tercer usuario permita el acceso a este juego? Sugiera ... – Pankaj

+0

ver He actualizado mi respuesta, esta es la idea básica, por supuesto, tiene que escribir muchos más códigos y modificar algunos enfoques. Déjeme saber si usted necesita más información. –

+0

** Cada vez que un usuario intenta jugar un juego, debe verificar si su ID existe en la variable Estado de la aplicación o no, si existe, de lo contrario, no. ** ¿Qué ID debo considerar en caso de Invitado? y qué ID para guardar en la variable de la aplicación? – Pankaj

1

ASP.NET serverside y Ajax (javascript) en el cliente son suficientes para lograr esto.

Dicho en términos generales, desea configurar el cliente para sondear el servidor en busca de información en un intervalo determinado. El servidor responderá con actualizaciones de estado a las que el cliente reacciona.

Proporciona a los clientes tokens únicos y el servidor realiza un seguimiento de los tokens que se reproducen juntos. Querrá utilizar una base de datos de algún tipo para administrar actualizaciones de estado pendientes en los juegos.

Muestra conversación:

Cliente: Join

Servidor: Join-Aceptado, Token: 55164145

cliente: Actualización 55164145

servidor: Inactivo, "Waiting for oponente"

Cliente: Actualización 55164145

Servidor: Oponente encontró, "usuario Anónimo 31"

cliente: Actualización 55164145

Servidor: Describir la "flor"

cliente: Actualización 55164145

Servidor: Esperando Descripción

Cliente: Submit-Description 55164145, "planta con pétalos"

Servidor: aceptada-Descripción

cliente: Actualización 55164145

Servidor: Esperar oponente

cliente: Actualización 55164145

Servidor: Oponente desconectado

se entiende la idea.

1

Uso SingleIR para conectar dos usuarios a través de JavaScript que se ejecuta en el navegador web

http://signalr.net/

1

Yo recomendaría el uso de este NodeJS. Goto http://nodejs.org/ descarga e instala

Ahora funciona bien en Windows (donde lo uso) y en Linux, y puedes crear fácilmente un micro-sitio relevante.

El libro en línea http://www.nodebeginner.org/ le permitirá ponerse al día rápidamente.

2

1- ¿Cómo puedo conectar dos jugadores al azar para que puedan jugar juntos aunque no sean usuarios registrados (son solo invitados al sitio web)?

No hay nada de mágico en un usuario registrado. ASP.NET puede rastrear el estado de los usuarios anónimos.

2- ¿Cómo hacer que jueguen en un juego privado, quiero decir que cada dos jugadores juegan su propio juego?

Solo necesita hacer un seguimiento de los dos usuarios que están jugando juntos. Eso es tan fácil como almacenar su SessionIDs

3- ¿Qué necesitaría usar? ¿Es suficiente usar ASP.Net? ¿Necesito Silverlight?

No va Silverlight, no lo necesita para lograr esto, y creo que Microsoft lo está abandonando a favor de HTML5. Además, su market share es de alrededor del 60%, mientras que Flash es de alrededor del 100%, por lo que menos personas podrán usar su sitio si utiliza la ruta del complemento de Silverlight.

Como han dicho otros, su idea se puede implementar con una combinación de lado del cliente AJAX y lado del servidor ASP.NET. Recomiendo jQuery para su código del lado del cliente, hace que la manipulación de JavaScript y DOM sea muy fácil.

Una última cosa, echa un vistazo a http://browserquest.mozilla.org/ y un ejemplo de lo que puedes lograr sin complementos en la tecnología actual del navegador.

Cuestiones relacionadas