Godot Engine – Hacer un juego rollo “Piedra Papel Tijera Lagarto Spock” Vol.2

Aquí está el código del juego: pptle001.zip

Se ha de importar en Godot y luego mirar el código. Si lo ejecutamos se verá algo así:

 

 

Se ha realizado de forma que todo parte de un nodo llamado juego. Luego tras ese nodo penden sprites animados y labels para la zona de puntuaciones y de texto.

 

La forma de jugarlo es con 3 teclas. Derecha para activar la elección, arriba para ir pasando entre las opciones e izquierda para resetear.

El código puede verse aquí:

 

extends Node

var puntuacion1 = 0
var puntuacion2 = 0

func _ready():
	reset()
	$puntos1.text = convert(puntuacion1, TYPE_STRING)
	$puntos2.text = convert(puntuacion2, TYPE_STRING)

func _process(delta):
	if (Input.is_action_just_pressed("ui_up")):
		seleccionar()
	if (Input.is_action_just_pressed("ui_right")):
		activar()
	if (Input.is_action_just_pressed("ui_left")):
		reset()

func seleccionar():
	if $player1.frame < 5:
		$player1.frame = $player1.frame + 1
	else:
		$player1.frame = 1

func reset():
	$player1.frame = 1
	$player2.frame = 0
	puntuacion1 = 0
	puntuacion2 = 0
	puntuacion()
	
func player2frame():
	$player2.frame = randi() % 5 + 1

func activar():
	player2frame()
	comprobar()
	puntuacion()

func puntuacion():
	$puntos1.text = convert(puntuacion1, TYPE_STRING)
	$puntos2.text = convert(puntuacion2, TYPE_STRING)

func comprobar():
	if $player1.frame == 1: # player 1 es piedra
		if $player1.frame == $player2.frame: # empate. Nadie suma.
			$letrero.text = "EMPATE"
		if $player2.frame == 3 or $player2.frame == 4: # Player1 es piedra y gana a tijeras y lagarto
			puntuacion1 = puntuacion1 + 1
			$letrero.text = "WIN P1 - La piedra aplasta al lagarto y a las tijeras"
		if $player2.frame == 2 or $player2.frame == 5: # Player2 es papel o spock y gana a piedra
			puntuacion2 = puntuacion2 + 1
			$letrero.text = "WIN P2 - El papel envuelve piedra y Spock desintegra piedra."

	if $player1.frame == 2: # player 1 es papel
		if $player1.frame == $player2.frame: # empate. Nadie suma.
			$letrero.text = "EMPATE"
		if $player2.frame == 1 or $player2.frame == 5: # Player1 es papel y gana a piedra y spock
			puntuacion1 = puntuacion1 + 1
			$letrero.text = "WIN P1 - El papel envuelve piedra y desaprueba a Spock."
		if $player2.frame == 3 or $player2.frame == 4: # Player2 es tijeras o lagarto y gana a papel
			puntuacion2 = puntuacion2 + 1
			$letrero.text = "WIN P2 - Las tijeras cortan el papel y el lagarto se lo come."

	if $player1.frame == 3: # player 1 es tijeras
		if $player1.frame == $player2.frame: # empate. Nadie suma.
			$letrero.text = "EMPATE"
		if $player2.frame == 2 or $player2.frame == 4: # Player1 es tijeras y gana a papel y lagarto
			puntuacion1 = puntuacion1 + 1
			$letrero.text = "WIN P1 - Las tijeras cortan el papel y decapitan lagarto."
		if $player2.frame == 1 or $player2.frame == 5: # Player2 es piedra o spock y gana a tijeras
			puntuacion2 = puntuacion2 + 1
			$letrero.text = "WIN P2 - La piedra y Spock aplastan las tijeras."

	if $player1.frame == 4: # player 1 es lagarto
		if $player1.frame == $player2.frame: # empate. Nadie suma.
			$letrero.text = "EMPATE"
		if $player2.frame == 5 or $player2.frame == 5: # Player1 es lagarto y gana a spock y papel
			puntuacion1 = puntuacion1 + 1
			$letrero.text = "WIN P1 - El lagarto evenena a Spock y se come el papel."
		if $player2.frame == 3 or $player2.frame == 1: # Player2 es tijeras o piedra
			puntuacion2 = puntuacion2 + 1
			$letrero.text = "WIN P2 - Las tijeras decapitan lagarto y la piedra lo aplasta."

	if $player1.frame == 5: # player 1 es Spock
		if $player1.frame == $player2.frame: # empate. Nadie suma.
			$letrero.text = "EMPATE"
		if $player2.frame == 3 or $player2.frame == 1: # Player1 es spock y gana a tijeras y piedra
			puntuacion1 = puntuacion1 + 1
			$letrero.text = "WIN P1 - Spock aplasta las tijeras y desintegra la piedra."
		if $player2.frame == 2 or $player2.frame == 4: # Player2 es papel o lagarto
			puntuacion2 = puntuacion2 + 1
			$letrero.text = "WIN P2 - El lagarto evenenena a Spock y el papel lo desaprueba."


# Orden de los frames
# 1 = piedra
# 2 = papel
# 3 = tijeras
# 4 = lagarto
# 5 = spock
#
# Las tijeras cortan el papel
# Las tijeras decapitan lagarto
# El papel envuelve piedra
# El papel desaprueba a Spock
# La piedra aplasta al lagarto
# la piedra aplasta las tijeras
# El lagarto envenena a Spock
# El lagarto se come el papel
# Spock aplasta las tijeras
# Spock desintegra piedra

 

 

Lo interesante es lo que he dejado comentado. Se puede hacer mejor desde luego la función comprobar pero esa es la que me salió el día que me puse con ello.

Cada opción gana a otras 2 posibles que el jugador 2 pueda sacar aleatoriamente y es ganada por 2 más.

Si sale lo mismo es empate.

 

Poco más que decir.

Ir a la barra de herramientas