Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] Juego de la ruleta rusa en C#

Estas en el tema de Juego de la ruleta rusa en C# en el foro de .NET en Foros del Web. Hola a todos, tengo una consulta para hacerles, sigo traduciendo códigos de java a c#, y entre los que tengo es el de la ruleta ...
  #1 (permalink)  
Antiguo 15/12/2018, 16:23
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 7 meses
Puntos: 6
Juego de la ruleta rusa en C#

Hola a todos, tengo una consulta para hacerles, sigo traduciendo códigos de java a c#, y entre los que tengo es el de la ruleta rusa, hasta 2 jugadores me funciona bien, pero cuando ingreso más de 2 nunca termina de ejecutar el código sino que queda parado:

acá pongo la relevante del código:

Código C#:
Ver original
  1. namespace _09_CLASES
  2. {
  3.     public class Jugador {
  4.         private int id;
  5.         private string nombre;
  6.         private bool vivo;
  7.         public int Id {
  8.             get => id;
  9.             set => id = value;
  10.         }
  11.         public string Nombre {
  12.             get => nombre;
  13.             set => nombre = value;
  14.         }
  15.         public bool Vivo {
  16.             get => vivo;
  17.             set => vivo = value;
  18.         }
  19.         //Contructor
  20.         public Jugador(int id) {
  21.             this.id = id;
  22.             this.nombre = "Jugador " + id;
  23.             this.vivo = true;
  24.         }
  25.         /**
  26.          * El jugador dispara el revolver
  27.          * @param r
  28.         */
  29.         public string disparar(Revolver r) {
  30.             string res = "El " + nombre + " se apunta con la pistola\n";
  31.             //El jugador se pone el revolver y...
  32.             if (r.disparar()) {
  33.                 this.vivo = false; //muere
  34.                 res += "El " + nombre + " ha muerto...\n";
  35.             } else {
  36.                 res += "El " + nombre + " se ha librado...\n"; //No muere
  37.             }
  38.             return res;
  39.         }
  40.     }
  41. }

Código C#:
Ver original
  1. namespace _09_CLASES
  2. {
  3.     public class Juego {
  4.         //atributos
  5.         private Jugador[] jugadores;
  6.         private Revolver revolver;
  7.         //Constructor
  8.         public Juego(int numJugadores) {
  9.             jugadores = new Jugador[comprobarJugadores(numJugadores)];
  10.             crearJugadores();
  11.             revolver = new Revolver();
  12.         }
  13.         //Comprueba que el numero de jugadores esta en el rango correcto
  14.         private int comprobarJugadores(int numJugadores) {
  15.             //Sino esta en el rango correcto se pone a 6
  16.             if (!(numJugadores >= 1 && numJugadores <= 6)) {
  17.                 numJugadores = 6;
  18.             }
  19.             return numJugadores;
  20.         }
  21.         //Crea los jugadores
  22.         private void crearJugadores() {
  23.             for (int i = 0; i < jugadores.Length; i++) {
  24.                 jugadores[i] = new Jugador(i + 1);
  25.             }
  26.         }
  27.         //indica si el juego acaba o no
  28.         public bool finJuego() {
  29.             int enjuego = jugadores.Length;
  30.             foreach (Jugador jugadore in jugadores) {
  31.                 if (jugadore == null) {
  32.                     enjuego--;                
  33.                 }
  34.             }
  35.             return enjuego == 1;
  36.         }
  37.         public string ronda() {
  38.             string res = "";
  39.             for(int i = 0; i < jugadores.Length; i++){
  40.                 if(jugadores[i] != null){
  41.                     res += jugadores[i].disparar(revolver);
  42.                     if(!jugadores[i].Vivo){
  43.                         jugadores[i] = null;
  44.                     }
  45.                 }
  46.             }
  47.             return res;
  48.         }
  49.         public string ganador() {
  50.             string res = "";
  51.             foreach (Jugador jugadore in jugadores) {
  52.                 if (jugadore != null) {
  53.                     res += jugadore;
  54.                 }
  55.             }
  56.             return res;
  57.         }
  58.     }
  59. }

Código C#:
Ver original
  1. namespace _09_CLASES
  2. {
  3.     public class Revolver
  4.     {
  5.         private int posicionBalaActual;
  6.         private int posicionBala;
  7.         public int PosicionBalaActual {
  8.             get => posicionBalaActual;
  9.             set => posicionBalaActual = value;
  10.         }
  11.         public int PosicionBala {
  12.             get => posicionBala;
  13.             set => posicionBala = value;
  14.         }
  15.         //Constructor
  16.         public Revolver() {
  17.             posicionBalaActual = Metodos.generaNumeroAleatorio(1, 6);
  18.             posicionBala = Metodos.generaNumeroAleatorio(1, 6);
  19.         }
  20.         //Metodos    
  21.         //Dispara el revolver
  22.         public bool disparar() {
  23.             bool exito = false;
  24.             if (posicionBalaActual == posicionBala) {
  25.                 exito = true; //Alguien va a morir...
  26.             }
  27.             siguienteBala();
  28.             return exito;
  29.         }
  30.         //Cambia a la siguiente posicion
  31.         public void siguienteBala() {
  32.             if (posicionBalaActual == 6) {
  33.                 posicionBalaActual = 1; //posicion incial
  34.             } else {
  35.                 posicionBalaActual++;
  36.             }    
  37.         }
  38.     }
  39. }

Código C#:
Ver original
  1. using System;
  2.  
  3. namespace _09_CLASES
  4. {
  5.     class Program
  6.     {
  7.         /**
  8.          * https://www.discoduroderoer.es/ejercicios-propuestos-y-resueltos-programacion-orientado-a-objetos-java/
  9.          *
  10.          * 9. Vamos a hacer el juego de la ruleta rusa en Java.
  11.          * Como muchos sabéis, se trata de un número de jugadores que con
  12.          * un revolver con un sola bala en el tambor se dispara en la cabeza.
  13.          * Las clases a hacer son:
  14.             - Revolver:
  15.                 - Atributos:
  16.                     - posición actual (posición del tambor donde se dispara,
  17.                       puede que esté la bala o no)
  18.                     - posición bala (la posición del tambor donde se encuentra
  19.                       la bala)
  20.                     Estas dos posiciones, se generaran aleatoriamente.
  21.                 - Funciones:
  22.                     - disparar(): devuelve true si la bala coincide con la
  23.                       posición actual
  24.                     - siguienteBala(): cambia a la siguiente posición del tambor
  25.                     - toString(): muestra información del revolver (posición
  26.                       actual y donde está la bala)
  27.             - Jugador:
  28.                 - Atributos
  29.                     - id (representa el número del jugador, empieza en 1)
  30.                     - nombre (Empezara con Jugador más su ID, “Jugador 1”
  31.                       por ejemplo)
  32.                     - vivo (indica si está vivo o no el jugador)
  33.                 - Funciones:
  34.                     - disparar(Revolver r): el jugador se apunta y se dispara, si
  35.                     la bala se dispara, el jugador muere.
  36.             - Juego:
  37.                 - Atributos:
  38.                     - Jugadores (conjunto de Jugadores)
  39.                     - Revolver
  40.                 - Funciones:
  41.                     - finJuego(): cuando un jugador muere, devuelve true
  42.                     - ronda(): cada jugador se apunta y se dispara, se informara
  43.                       del estado de la partida (El jugador se dispara, no ha muerto
  44.                       en esa ronda, etc.)
  45.          * El número de jugadores será decidido por el usuario, pero debe ser entre 1
  46.          * y 6. Si no está en este rango, por defecto será 6.
  47.          * En cada turno uno de los jugadores, dispara el revólver, si este tiene la
  48.          * bala  el jugador muere y el juego termina.
  49.          * NOTA: Aunque no lo haya comentado, recuerda usar una clase ejecutable
  50.          * para probarlo.
  51.         */
  52.         static void Main(string[] args) {
  53.             Console.Clear();
  54.             int jugadores = Mensajes.requestInt("Ingrese cantidad de jugadores");
  55.             Juego juego = new Juego(jugadores);
  56.             String res = "";
  57.             while(!juego.finJuego()){
  58.                 res += juego.ronda();
  59.             }
  60.             res += "\nGanador: " + juego.ganador();
  61.             res += "\nEl juego ha terminado";
  62.             Mensajes.info(res);
  63.         }
  64.     }
  65. }

Y creo que en esta función están mis problemas:

Código C#:
Ver original
  1. using System;
  2. namespace _09_CLASES
  3. {
  4.     public class Metodos {
  5.         public static int generaNumeroAleatorio(int minimo, int maximo) {
  6.             Random r = new Random();
  7.             int num = r.Next((maximo - minimo + 1) + (minimo));
  8.             return num;
  9.         }
  10.     }
  11. }

Esta es la original de java:

Código Java:
Ver original
  1. package ejercicio;
  2. public class Metodos {
  3.     /**
  4.      * Genera un numero aleatorio entre dos numeros
  5.      * @param minimo
  6.      * @param maximo
  7.      * @return
  8.      */
  9.     public static int generaNumeroAleatorio(int minimo, int maximo) {
  10.         int num = (int) Math.floor(Math.random() * (maximo - minimo + 1) + (minimo));
  11.         return num;
  12.     }
  13. }

Esta es mi situación, espero sus respuestas y saludos.
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias
  #2 (permalink)  
Antiguo 17/12/2018, 20:10
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: Juego de la ruleta rusa en C#

Hola a todos, para decirles que no sé que pasó pero a los 2 días después de ejecutar por sí solo se arregló el código. que raro pero cierto.

Gracias y Saludos.
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias
  #3 (permalink)  
Antiguo 30/12/2018, 03:20
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: Juego de la ruleta rusa en C#

Matemáticas malas:

a - b + 1 + b

Las b se cancelan y queda

a + 1

No es lo mismo

a - b + 1 + b

Que

c * (a - b + 1) + b

En tu traducción, reemplazas esta última expresión (en Java) por la primera (en C#).

Ademas, finJuego() no hace lo que la descripción de ese método dice.
__________________
Visita mi perfil en LinkedIn

Etiquetas: ios, juego
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:33.