¿Qué puedo hacer para garantizar que uno de mis pines no se dispare si se dispara otro pines?

0

Estoy creando un juego de "piedra, papel, tijeras". El problema que tengo es que cuando el jugador A selecciona "Rock", y el jugador B selecciona "Papel" y "Tijeras", se activa mi pin "El jugador B gana", y mi pin "Entrada no válida, seleccionó solo uno opción ".

El "Jugador B gana" se activa debido a que el Jugador B selecciona "Papel", y el Jugador A selecciona "Rock" y Rock gana el papel. Sin embargo, ¿qué puedo hacer para asegurarme de que el Jugador B no ganará si selecciona varias opciones? Aquí está mi diagrama hasta ahora (es muy desordenado, ya que soy muy nuevo en logisim, diagramas de puertas, etc.):

    
pregunta Jaken Herman

1 respuesta

1

Considera usar un Codificador de prioridad para codificar las opciones del jugador. Si un jugador selecciona "Rock", las otras opciones se ignoran. Si el jugador no selecciona "Rock", pero selecciona "Papel", obtendrán "Papel" independientemente de si se ha seleccionado "Tijeras". Solo obtienen "Tijeras" si no seleccionaron "Papel" o "Piedra".

La tabla de verdad para codificar las opciones de un jugador se ve así:

Rock    Paper   scissors    encoded as
0       0       0           00 (nothing)
1       x       x           01 (rock)
0       1       x           10 (paper)
0       0       1           11 (scissors)

o completamente expandido para mostrar las ocho filas:

Rock    Paper   scissors    encoded as
0       0       0           00 (nothing)
1       0       0           01 (rock)
1       0       1           01 (rock)
1       1       0           01 (rock)
1       1       1           01 (rock)
0       1       0           10 (paper)
0       1       1           10 (paper)
0       0       1           11 (scissors)

Entonces (¡spoilers!) la lógica del juego compararía estas dos opciones codificadas de 2 bits para elegir al ganador:

Player A        Player B        Outcome
00 (nothing)    xx              (pending)
xx              00 (nothing)    (pending)
01 (rock)       01 (rock)       (tie)
01 (rock)       10 (paper)      (B wins: paper covers rock)
01 (rock)       11 (scissors)   (A wins: rock breaks scissors)
10 (paper)      01 (rock)       (A wins: paper covers rock)
10 (paper)      10 (paper)      (tie)
10 (paper)      11 (scissors)   (B wins: scissors cuts paper)
11 (scissors)   01 (rock)       (B wins: rock breaks scissors)
11 (scissors)   10 (paper)      (A wins: scissors cuts paper)
11 (scissors)   11 (scissors)   (tie)

de nuevo, X = no importa 0 o 1, por lo que XX es una abreviatura de cuatro filas de la tabla de verdad = 00, 01, 10 o 11.

  

Ejercicio adicional, a la izquierda para el estudiante: extienda este diseño para jugar Rock-Paper-Scissors-Spock-Lizard .

Me gusta esta pregunta, puedo comenzar a usar esto como una pregunta de entrevista de trabajo ...

    
respondido por el MarkU

Lea otras preguntas en las etiquetas