Título: Ayuda javascript ejercicio de estudiante Publicado por: masterkein en 11 Mayo 2018, 23:56 pm Buenas!
Soy un estudiante de programación en la universidad online y los profesores no prestan ayuda mas allá de los temarios que envían. El ejercicio trata de crear un juego en el que puedan jugar mínimo 2 jugadores, los cuales cada uno tiene una baraja de cartas mezcladas aleatoriamente. Los jugadores extraen cada carta a partir de un botón que he creado. La cosa es que puedo crear tantos jugadores como quiera pero a la hora de mostrar la partida de cada jugador siempre muestra la baraja del ultimo, sin importar a qué botón de jugador se clique. (https://scontent.fbcn4-1.fna.fbcdn.net/v/t1.15752-9/32260650_10216714853491535_4016280650712612864_n.jpg?_nc_cat=0&oh=95cc303af17257e779514b57a6e273a9&oe=5B8E4C0D) (https://scontent.fbcn4-1.fna.fbcdn.net/v/t1.15752-9/32222491_10216714853331531_4773290725649416192_n.jpg?_nc_cat=0&oh=fa73976909d6efdc91e62cc6d5da42b9&oe=5B88AE68) (https://scontent.fbcn4-1.fna.fbcdn.net/v/t1.15752-9/32266317_10216714853211528_454544824251449344_n.jpg?_nc_cat=0&oh=e02495d61ea18235bb7020bf18fa878f&oe=5B52C22E) Título: Re: Ayuda javascript ejercicio de estudiante Publicado por: Serapis en 12 Mayo 2018, 03:05 am Sin más explicaciones... asumo que no mantienes referencias de turnos.
Lo primero es que debes mantener la ronda, tanda. Una ronda es una fase donde cada jugador hace 'su apuesta', jugada, etc... cuando todos la han hecho, se pasa a la siguiente ronda, etc... En una ronda, según el juego, cada jugador puede o bien jugar siempre en un orden concreto o no. Sea como sea, a cada jugador se le otorga su 'turno', indistintamente de que jueguen en un orden específico o no. Una ronda entonces se compone de un simple array del tamaño del número de jugadores. Si juegan 6, ronda tiene 6 elementos, si juegan 8 jugadores ronda tiene 8 elementos. Cada elemento de la ronda mantiene una referencia a cada jugador... dicha referencia puede ser a un objeto jugador, o como mínimo a un índice que relaciona únivocamente a un jugador con (por ejemplo), un array de jugadores... Entonces cuando quieras conocer el estado de cada uno, basta consultar el objeto ronda, recorrerlo, para tener acceso a cada jugador. Ronda puede se rmás o menos sencillo o complejo, según lo que necesites y quiera shacer desde ese objeto... lo mínimo sería. Código: Ronda() array de bytes //string, objetos jugador, etc.. Como ves en el ejemplo, no hacemos uso del array... si solo se guía el objeto por un valor que señala un índice, y ese es siempre incremental, esto es sucede siempre en orden, no se precisa. En tal caso este objeto lo instancia la 'base del juego' (podría ser o llamarse objeto 'banca'). Así cuando se dispara el evento turno, la base del juego recibe el evento y como mantiene referencia a cada jugador sabrá derivar el turno al jugador que corresponda. Esto es sencillo, si se la forma de interacción fuera más complejo, porque os jugadores no precisan jugar por turnos, es cuando se precisa hacer uso del array... También en este caso quizás sea preferible que no sea el objeto banca quien utilice este objeto directamente, simplemente lo crea y luego pasa una referencia del mismo a cada jugador que se 'inscribe' en el juego, y es luego el jugador quien directamente haga su juego y lo anuncia a este objeto... No haré algo exhausitvo ni muy grande, solo lo suficiente para reflejar esta última idea... Código: Ronda() array de bytes //string, objetos jugador, etc.. Como ves, el código es casi el mismo, estos son las diferencias: - Se ha cambiado el nombre de la propiedad: TurnoJugador por TurnosJugados - el evento SuTurno, no se requiere. - La funcion TurnoJugador: ----- Ahora devuelve un bulenao en vez de dispara el evento 'suTurno' ----- Recibe como parámetro el índice del jugador que pretende jugar. ----- El array Rondas, mantiene quien ha jugado en esta ronda y quien no, sea cual sea el orden en que jueguen. Finalmente puedes usar un sencillo negociado con este objeto, en vez de usarlo solamente para obtener turno y recordar que jugadores jugaron ya en la ronda, también puedes añadir un método que recuerde 'la apuesta' del jugador... así la consulta como debe hacerse sí sí aquí, ya se tiene la respuesta sin una consulta posterior al jugador... En el siguiente pseudocodigo, solo pongo las ideas, los cambios que fueren precisos al resto queda a tu esfuerzo... verás (por ejemplo) que ahora el array en vez de ser de tipo byte es del tipo de una estructura de 'datos'... Código: enumeracion EstadoDeTurno Ahora el evento cambio de nombre, porque sucede justo al término de la ronda... pero antes de borrar los datos de la ronda, para dar ocasión a consultar la jugada de cada jugador... Si carta = 0 es para señalar que no ha jugado, los valores de cartas deberán comenzar de 1 en adelante, si es forzado que deba empezar en 0, usar el valor 255 para indicar que el jugador no ha apostado aún... Nota que ahora ase ha añadido además un método de consulta, y que el array Ronda ahora tiene pleno sentido... frente al primer pseudocódigo, quersultaba inútil, o en el segundo, que permitía ya liberar el orden de juego de los turnos, ahora... es más útil mantiendo info de la ronda actual... si eres inquieto, sabrás darle más utilidad. Un objeto ronda, pués puede ser muy útil para mantener los datos de la ronda actual... ...y bueno, para tú no haber puesto ni una línea de código, creo que yo ya he puesto suficiente pseudocódigo para aclarar alguna de tus dudas... Título: Re: Ayuda javascript ejercicio de estudiante Publicado por: masterkein en 12 Mayo 2018, 10:22 am Muchas gracias, en casa pongo en practica todo lo que me comentas.
El problema es que cada jugador tiene un array con sus cartas pero a la hora de jugar su turno todos los jugadores usan las cartas del array del jugador en ultimo lugar. Título: Re: Ayuda javascript ejercicio de estudiante Publicado por: Serapis en 12 Mayo 2018, 16:08 pm La baraja de cartas, debe mantenerla 'la banca'. El jugador a lo sumo debe mantener las suyas propias... aunque si (el juego) no es muy complejo, no resulta difícil hacer que la banca mantenga o sepa a quien pertenece cada carta que ha salido (esto libera en parte a cada jugador de dicha tarea (es más sencillo aquí), pero solo si resulta conveniendte según la dinámica del juego):
Código: estructura Cartas Cuando una carta es retirada por un jugador, no es preciso moverla a otro array, se intercambia por la última 'accesible' en el array... veámoslo (parcialmente) en un método de la banca... Nota que dependeindo del tipo de juego, el jugador toma la 'siguiente carta' que le reparten o a veces puede elegir él mismo, se asume el primer caso... están barajadas y sedescnoce cuales son. Código:
|