El siguiente juego que vamos a crear usando pygame será un juego de cartas simple, posteriormente se harán otros tutoriales para juegos de cartas con grado de dificultad cada vez mayor y aprovechando la base que vamos a crear en este primer juego.
El juego
El objetivo será crear una aplicación que nos enfrente a una 'computadora', y nótese que lo pongo entre comillas pues no consta de inteligencia artificial, tendremos una fila de 5 cartas ocultas y nuestro rival también, dando clic sobre una de las cartas de nuestro lado la giramos y provocamos que la computadora gire una suya al azar, si nuestra carta es mayor ganamos un punto, en caso contrario lo gana la computadora, así con las 5 cartas. Al final ganará quien tenga más puntos.
A descargar
El siguiente enlace corresponde al fichero comprimido que vamos a utilizar.
Crédito de todas las imágenes contenidas -> Kenney.nl
Seleccionando una carta al azar
Lo primero que vamos a hacer será programar la selección de una carta al azar entre los cuatro mazos y entre las 13 posibilidades (sin contar el joker, en posteriores versiones lo añadiremos como comodín).
Para ello vamos a necesitar las imágenes de cada carta, que se encuentran dentro de la carpeta Cartas, dentro de esta carpeta encontramos otras 7 carpetas y la imagen correspondiente al joker, se recomienda no cambiar ningún nombre, o tener en cuenta los nombres que se cambiaron a la hora de escribir el código.
Lo módulos a utilizar serán
import pygame
from pygame.locals import *
import sys
import random
Primero creamos una función que será la encargada de seleccionar al azar una carta y retornar el path de la misma para luego cargarla.
# PATH_CARTAS será el path de la carpeta Cartas descargada
# en mi caso está en la carpeta Descargas, la definiremos
# global para acceder en todo momento
PATH_CARTAS = "/home/juan/Descargas/Cartas"
def seleccionar_carta():
# Definimos un diccionario con los mazos
palos = {0:"corazon", 1:"pica", 2:"diamante", 3:"trebol"}
x = random.randrange(0,4)
palo = palos[x]
y = random.randrange(2, 15)
# Retornamos el path
return PATH_CARTAS + "/" + palo + "/" + str(y) + ".png"
En la función creamos un diccionario que nos servirá para seleccionar un mazo al azar. Luego elegimos un número al azar entre 2 y 14 (el último número no se incluye), luego todo se une en un string y se retorna, quedando al final un path del tipo "/home/juan/Descargas/Cartas/corazon/2.png", de esta forma accedemos a cualquier combinación posible de mazo-valor, pero tiene un gran inconveniente, y es que no controlamos que no se repitan las cartas conforme salen, pero esto se solucionará luego.
Ahora vamos a definir nuestra clase carta que hereda de pygame.sprite.Sprite y será el sprite que represente cada una de las cartas del juego.
class carta(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
# Cuando creamos la carta seleccionamos una al azar
self.image = pygame.image.load(seleccionar_carta()).convert_alpha()
self.rect = self.image.get_rect()
# Esto es solo por ahora
self.rect.centery = 350
Podemos ver que al asignar la imagen a nuestro sprite llamamos la función que creamos antes para que nos retorne un path al azar entre nuestras 52 combinaciones posibles.
Por último creamos la función principal de nuestro juego y su respectivo bucle, con respecto a otros juegos el main es igual por el momento, solo creamos 5 cartas, las mostramos y las posicionamos para que se vean bien y así poder saber que está funcionando correctamente nuestra selección de cartas:
def main():
screen = pygame.display.set_mode((900, 700))
pygame.display.set_caption("Juego cartas - ANCODI VideoGames")
# Creamos un grupo para las cartas
cartas_jugador = pygame.sprite.Group()
# Vamos a crear 5 cartas por el momento
# para ver el resultado
for a in range(5):
c = carta()
# Esta posición es momentanea
# Es solo para ver el resultado mejor
# Por lo que no se explicará los números
c.rect.left = a*140+30
# Se añade al grupo
cartas_jugador.add(c)
while True:
# Eventos
for evento in pygame.event.get ():
if evento.type == pygame.QUIT:
sys.exit()
# Un fondo naranja
screen.fill((235,135,45))
cartas_jugador.draw(screen)
pygame.display.flip()
El resultado final sería el siguiente.
Y hasta aquí llega la primera parte de la creación de este juego. En la próxima entrega se corregirá el tema de la selección de cartas y se empezará a dar forma a la funcionalidad del juego.








No hay comentarios:
Publicar un comentario