1

#PlatziCodingChallenge - Real Multiplayer

Mejorando nuestro juego parte 1 y parte 2. Crear un videojuego de piedra papel o tijera que se pueda jugar con N jugadores.

Escribe tu comentario
+ 2
Ordenar por:
1
7689Puntos

Solución con js

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><script>classjugador{
    constructor(id, eleccion, resultado){
      this.id = id,
      this.eleccion = eleccion
      this.resultado = resultado
    }
  }
  let numJugadores = parseInt(prompt('Bienvenido a Rock Paper Scissors Multiplayer, indica cuantos jugadores habrán en el torneo.'))
  alert('Los jugadores empiezan desde 0, o sea jugador 0, jugador 1, jugador 2, etc etc')
  alert('Los jugadores deberan escoger entre pi -> piedra, pa -> papel, ti -> tijera, por favor, escoga correctamente!')
  alert('Si la cantidad de contendientes es impar, el último jugará en la siguiente ronda como el primer participante!')
  let jugadores = []
  let sobrante = []
  // Se crean mis jugadoresfor (let i = 0; i < numJugadores; i++){
    jugadores.push(new jugador(i))
  }
  juego()
  functionjuego(partida) {
    if (jugadores.length % 2 !== 0){
      sobrante = jugadores.pop()
    }
    let contador = 0while (contador < jugadores.length){
      jugadores[contador].eleccion = prompt(`Indique que escogera el jugador ${jugadores[contador].id}`)
      jugadores[contador + 1].eleccion = prompt(`Indique que escogera el jugador ${jugadores[contador + 1].id}`)
      if ((jugadores[contador].eleccion === 'pi' && jugadores[contador + 1].eleccion === 'ti') || (jugadores[contador].eleccion === 'ti' && jugadores[contador + 1].eleccion === 'pa') || (jugadores[contador].eleccion === 'pa' && jugadores[contador + 1].eleccion === 'pi')) {
        jugadores[contador].resultado = 1
        jugadores[contador + 1].resultado = 0
      } elseif ((jugadores[contador].eleccion === 'pi' && jugadores[contador + 1].eleccion === 'pa') || (jugadores[contador].eleccion === 'ti' && jugadores[contador + 1].eleccion === 'pi') || (jugadores[contador].eleccion === 'pa' && jugadores[contador + 1].eleccion === 'ti')) {
        jugadores[contador].resultado = 0
        jugadores[contador + 1].resultado = 1
      }
      if (jugadores[contador].resultado === 1){
        alert(`Gano el jugador ${jugadores[contador].id}`)
        contador = contador + 2
      } elseif (jugadores[contador + 1].resultado === 1){
        alert(`Gano el jugador ${jugadores[contador + 1].id}`)
        contador = contador + 2
      } else {
        alert('Empate se vuelve a jugar')
      }
    }
    for (let i = 0; i < jugadores.length; i++){
      if (jugadores[i].resultado === 0){
        alert(`El jugador ${jugadores[i].id} es eliminado del torneo`)
        jugadores.splice(i, 1)
      }
    }
    if (sobrante.length !== 0){
      jugadores.unshift(sobrante)
      sobrante = []
    }
    if (jugadores.length === 1){
      alert(`El ganador del torneo es el jugador ${jugadores[0].id}`)
    } else {
      jugadores.forEach(jugador => {
        alert(`El jugador ${jugador.id} sigue en el torneo`)
      });
      juego()
    }
  }
</script></body></html>

Recuerdo que el código se encuentra en https://github.com/Edmundo0994/PlatziCodeChallenge

1
28285Puntos
import getpass

scores = {'pa-pi','pi-ti', 'ti-pa'}

defwho_won(player1, player2, player1_id, player2_id ):if f'{player1}-{player2}'in scores:
        return player1_id
    if f'{player2}-{player1}'in scores:
        return player2_id
    return"tie"defto_int(val, msg):try:
        return int(val)
    except:
        print(msg)

defget_selection(player):    
    result = getpass.getpass(f"Player {player} select an option:\n" \
        "1. Stone\n" \
        "2. Paper\n" \
        "3. Scissors\n: ").strip()
    if result == '1':
        return"pi"if result == '2':
        return"pa"if result == '3':
        return"ti"returnNonedefto_value(code):if code == 'pi':
        return"Stone"if code == 'pa':
        return"Paper"return"Scissors"defgame(multiplayer):
    def_msg = "No players today. It's OK!"    
    print("Welcome to Stone - Paper - Scissors!")
    players = 2if multiplayer:
        print("""This is a multiplayer game.""")
        players = to_int(input("Number of Players? "), def_msg)
    if players == 0:
        print(def_msg)
        returnNoneif players == 1:
        print("\u001b[32mPlayer 1 won by default\u001b[0m")
        returnNone
    p1 = 1
    p2 = 2
    matches = players - 1whileTrue:
        if matches == 0:
            break
        print(f"Player {p1} vs {p2}")
        p1_value = get_selection(p1)
        if p1_value == None:
            print(f"\u001b[32mPlayer {p2} win\u001b[0m")
            p1 = 2
            p2 += 1#next player
            matches -= 1continue        
        p2_value = get_selection(p2)
        if p2_value == None:
            print(f"\u001b[32mPlayer {p1} win\u001b[0m")
            p2 += 1#next player
            matches -= 1continue        
        match_winner = who_won(p1_value, p2_value, p1, p2)
        if match_winner == 'tie':
            print(f"\u001b[33m{to_value(p1_value)} vs {to_value(p2_value)} we have a tie lets go to a rematch\u001b[0m")        
            continue
        p1 = match_winner
        p2 += 1
        matches -= 1
        print(f"\u001b[32m{to_value(p1_value)} vs {to_value(p2_value)} the winner is Player {p1}\u001b[0m")
        
if __name__ == "__main__":
    game(True)
Capture.PNG
1
19943Puntos

Reto 60 en JavaScript

// Real Multiplayer en JavaScriptconst PIEDRA = 1const PAPEL = 2const TIJERAS = 3classPPT_Multiplayer{
  constructor(numPlayers) {
    this.initPlayers(numPlayers) // Se crean los jugadoresthis.currentGame = 0while (this.players.length > 1) { // Se toman turnos mientras hayan más de 1 jugadorthis.currentGame++
      alert('Juego ' + this.currentGame)
      this.getChoices() // Se obtienen las elecciones de los jugadoreslet losers = this.getLosers() // Se obtienen los jugadores que perdieron (los perdedores se eliminan)if (losers.length > 0) {
        alert(`Perdieron: ${losers.map(p => p.name).join(', ')}`)
      } else {
        alert(`No perdió nadie`)
      }
    }
    alert('Gana ' + this.players[0].name) // Se dice quien ganó
  }
  initPlayers(numPlayers) {
    this.players = newArray()
    for (let p = 0; p < numPlayers; p++) {
      this.players.push({
        name: 'Jugador ' + (p + 1)
      })
    }
  }
  getChoices() {
    this.players.forEach(p => {
      let choice
      do {
        choice = parseInt(prompt(`${p.name}: ¿Piedra(1) Papel(2) o Tijera(3)`))
        if (choice < 1 || choice > 3 || isNaN(choice)) {
          alert(`${p.name}: Debe escoger un número entre 1 y 3`)
        }
      } while (choice < 1 || choice > 3 || isNaN(choice));
      p.choice = choice
    })
  }
  getLosers() {
    let losers = newArray()
    // Se obtienen las opciones escogidas entre todoslet choices = Array.from(newSet(this.players.map(player => player.choice)))
    if (choices.length === 2) { // Si se escogieron entre 2 opcioneslet winnerChoice = this.getWinnerChoice(choices) // Se busca la opción ganadora (Reto 58)this.players.forEach(p => { // Se buscan los jugadores que perdieronif(p.choice !== winnerChoice) {
          losers.push(p)
        }
      })
      losers.forEach(p => { // Se eliminan los perdedoresthis.players.splice(this.players.indexOf(p), 1)
      })
    }
    return losers
  }
  getWinnerChoice(choices) { // Reto 58 (no permite empates)switch (choices[0]) {
      case PIEDRA:
        switch (choices[1]) {
          case PAPEL: return choices[1]
          case TIJERAS: return choices[0]
        }
      case PAPEL:
        switch (choices[1]) {
          case PIEDRA: return choices[0]
          case TIJERAS: return choices[1]
        }
      case TIJERAS:
        switch (choices[1]) {
          case PIEDRA: return choices[1]
          case PAPEL: return choices[0]
        }
    }
  }
}

const Juego = new PPT_Multiplayer(3)