viernes, 5 de noviembre de 2021

Conecta 4 (Cuatro en raya)

Puede jugarse una versión en papel algo más compleja del 3 en raya que sería el 4 en raya. El número de filas y columnas es aquí de 4 ó 5, en cada caso. Las reglas son las mismas y gana quién primero alinee cuatro de sus fichas. 


 

Presentación:

Este juego es, en realidad, una variante del tres en raya múltiple adaptado a la posición vertical y aplicando a las fichas la ley de la gravedad, es decir, no podrá haber espacios vacíos en cada columna comenzada. Se comercializa con el nombre de "Conecta 4". 

Objetivo: 

Conseguir alinear (conectar) cuatro de tus fichas en línea (vertical, horizontal o diagonal) antes que tu adversario.

Regla:

Se introducen por turnos en las ranuras superiores una ficha por jugador de manera alternada. Las fichas caerán al fondo de la columna. Ganará el primero que logre una fila (horizontal, vertical o diagonal con 4 en línea)

Habilidades y destrezas:

(Las mismas que las del 3 en raya, es una variante algo más compleja)

Comentarios

Existe una versión comercial llamada "Conecta 4" realizado en plástico y comercializado como juguete. Es muy conocido, pero para disfrutar de la esencia de este interesante juego no es necesaria la parafernalia del plástico y el colorido (aunque si así algunos se animan a participar, bienvenido sea)              



Pero este el juego puede jugarse perfectamente usando papel y lápiz, como nos muestra el siguiente video: 


Veamos la versión comercial:


Cuatro en raya programado con Python  https://github.com/janselroa/juego-cuatro-raya-python



224 lines (184 sloc)  6.75 KB
   
"""
juego desarrollado en python
usando modulos simples como tkinter y numpy
juego desarrollado por Jansel Roa reyes xd
"""
from tkinter import *
import numpy
#Variables de jugadores
jugador1 = False
jugador2 = False
gana_J1 = False
gana_J2 = False
usados = 0
fin = False
#Para controlar que solo se comience el juego una vez.
juego_Comenzado = False
#Matriz para controlar que jugadores han colocado en que posicion
matrix = numpy.zeros((4, 4))
#ventana global
ventana = Tk() # Ventana Raíz donde se dibuja todo
canvas = Canvas(ventana, width=400, height=400) # Inicialización del canvas
#Label global para poder cambiarla con eventos.
texto = StringVar()
texto.set("Estado del juego: No Iniciado.")
label = Label(ventana, textvariable=texto)
def comenzar_Partida():
global juego_Comenzado
global jugador1
global jugador2
global texto
global canvas
global matrix
global fin
global usados
if juego_Comenzado == False:
jugador1 = True
#Reiniciamos la partida
elif juego_Comenzado == True:
jugador1 = True
jugador2 = False
canvas.delete("all")
#Canvas donde se dibuja todo
# Lineas que dibujan el tablero 4x4
canvas.create_line(0, 100, 400, 100)
canvas.create_line(0, 200, 400, 200)
canvas.create_line(0, 300, 400, 300)
canvas.create_line(0, 400, 400, 400)
canvas.create_line(100, 0, 100, 400)
canvas.create_line(200, 0, 200, 400)
canvas.create_line(300, 0, 300, 400)
canvas.create_line(400, 0, 400, 400)
matrix = numpy.zeros((4, 4))
fin = False
usados = 0
texto.set("Estado del juego: Turno jugador 1.")
juego_Comenzado = True
def getGanador():
#Para un jugador dado comprobar todas las
global matrix
ganador = -1
for i in range(0, 4):
suma = 0
for j in range(0, 4):
if matrix[i, j] == 0:
suma += -8
else:
suma += matrix[i, j]
if suma == 4:
return 1
elif suma == 8:
return 2
for j in range(0, 4):
suma = 0
for i in range(0, 4):
if matrix[i, j] == 0:
suma += -8
else:
suma += matrix[i, j]
if suma == 4:
return 1
elif suma == 8:
return 2
if(matrix[0, 0] == matrix[1, 1] == matrix[2, 2] == matrix[3, 3] == 1):
return 1
elif(matrix[0, 0] == matrix[1, 1] == matrix[2, 2] == matrix[3, 3] == 2):
return 2
elif(matrix[0, 3] == matrix[1, 2] == matrix[2, 1] == matrix[3, 0] == 1):
return 1
elif(matrix[0, 3] == matrix[1, 2] == matrix[2, 1] == matrix[3, 0] == 2):
return 2
def getPos(event):
#Variables globales para controlar el jugador actual
global jugador1
global jugador2
global gana_J1
global gana_J2
global texto
global usados
global fin
if jugador1 != False or jugador2 != False:
#Coordenadas del canvas por pantalla
#print("Coor:(",event.x,",",event.y,")")
canvas = event.widget
#Función para dibujar CRUZ o CIRCULO en función del jugador actual.
#Se va moviendo en función del tamaño de los cuadrados dibujados en el canvas
#para saber en que casilla estamos y dibujar correctamente dentro de dicha
#casilla.
for i in range(0, 400, 100):
for j in range(0, 400, 100):
if event.x < i+100 and event.y < j+100 and event.x > i and event.y > j:
if jugador1:
#Comprobar que no hay nada pintado antes de pintar
tupla = canvas.find_enclosed(i, j, i+100, j+100)
if len(tupla) == 0:
#Circulo
if(fin == False):
canvas.create_oval(
i+25, j+25, i+75, j+75, width=4, outline="#8258FA") # Púrpura
jugador1 = False
jugador2 = True
texto.set("Estado del juego: Turno jugador 2.")
#Rellenamos la matrix para comprobar la victoria
matrix[i//100, j//100] = 1
usados += 1
elif jugador2:
#Comprobar que no hay nada pintado antes de pintar
tupla = canvas.find_enclosed(i, j, i+100, j+100)
if len(tupla) == 0:
if(fin == False):
#Cruz creada con 2 lineas
canvas.create_line(
i+30, j+30, i+70, j+70, width=4, fill="#58ACFA") # Azul
canvas.create_line(
i+30, j+70, i+70, j+30, width=4, fill="#58ACFA")
jugador2 = False
jugador1 = True
texto.set("Estado del juego: Turno jugador 1.")
#Rellenamos la matrix para comprobar la victoria
matrix[i//100, j//100] = 2
usados += 1
print(matrix)
if getGanador() == 1:
texto.set("¡Gana el jugador 1!")
gana_J1 = False
fin = True
elif getGanador() == 2:
texto.set("¡Gana el jugador 2!")
gana_J2 = False
fin = True
elif usados == 16:
texto.set("¡EMPATE!")
fin = True
def main():
global ventana
ventana.title("Cuatro en Raya") # Título de la ventana
ventana.geometry("400x530") # Tamaño de la ventana
ventana.resizable(width=False, height=False)
ventana.iconbitmap("Juego.ico") # Tamaño de la ventana fijo
#Canvas donde se dibuja todo
canvas.create_line(0, 100, 400, 100) # Lineas que dibujan el tablero 4x4
canvas.create_line(0, 200, 400, 200)
canvas.create_line(0, 300, 400, 300)
canvas.create_line(0, 400, 400, 400)
canvas.create_line(100, 0, 100, 400)
canvas.create_line(200, 0, 200, 400)
canvas.create_line(300, 0, 300, 400)
canvas.create_line(400, 0, 400, 400)
#Todos los elementos de la ventana han de estar en una posición del grid
canvas.grid(row=0, column=0)
# Eventos para pulsar en las casillas
canvas.bind("<ButtonPress-1>", getPos)
#Label de estado del juego
label.grid(row=1, column=0)
label.config(height=3, width=55)
label.config(bg="#58ACFA") # Azul
#Boton de jugar
boton = Button(ventana, text="Click aquí para comenzar la partida",
command=comenzar_Partida)
boton.grid(row=2, column=0)
boton.config(height=4, width=55)
boton.config(bg="#8258FA") # Púrpura
#Se mete el programa en un loop que espera eventos programados anteriormente.
ventana.mainloop()
main()

No hay comentarios:

Publicar un comentario

Con lápiz y papel: "Math dice"

Math dice    Presentación: Un juego de dados para toda la familia pero sobre todo para que los más pequeños que les servirá para repasar la...