Ejemplo n.º 1
0
def pedir_opcion():
    while True:
        opcion = gamelib.input(
            'Ingrese la cantidad de jugadores, puede ser entre 2 o 4: ')
        if ((opcion == None) or (opcion.isdigit() == False)
                or (int(opcion) < 2 or int(opcion) > 4)):
            gamelib.say('Opcion invalida, vuelva a ingresar')
        else:
            break
    return int(opcion)
Ejemplo n.º 2
0
def juego_pasar_nivel(nivel, niveles):
    '''Prosigue al siguiente nivel, devulve None con respecto a la grilla si supera el ultimo nivel'''
    nivel += 1
    if nivel == len(niveles):
        gamelib.say('Felicidades, compleataste todos los niveles')
        return nivel, None
    grilla = juego_crear(nivel, niveles)
    x, y = soko.dimensiones(grilla)
    gamelib.resize(x * PIXELES_GIF, y * PIXELES_GIF)
    return nivel, grilla
Ejemplo n.º 3
0
    def repartir_cartas(self):
        for _ in range(0, self.ronda_actual):
            for jugador in self.lista_jugadores:
                jugador.agregar_cartas(self.mazo.desapilar())

        if self.ronda_actual == self.rondas - 1:
            self.triunfo = 'AH'
        else:
            self.triunfo = self.mazo.desapilar()
        gamelib.say("Ronda " + str(self.ronda_actual))
Ejemplo n.º 4
0
 def validar_apuesta(self, jugador, apuesta):
     while True:
         if apuesta == None or apuesta.isdigit() == False or (
                 int(apuesta) > self.ronda_actual) or (0 > int(apuesta)):
             gamelib.say('Opcion incorrecta, vuelva a ingresar ')
             apuesta = gamelib.input('Cuantas bazas vas a obtener ' +
                                     jugador)
         else:
             break
     return int(apuesta)
Ejemplo n.º 5
0
def vuelta(juego):
    """
	Recibido un estado de juego, realiza la comprobacion final de la vuelta.
	Precondicion, todas las cartas de la "vuelta" deben estar sobre la mesa
	Aclaracion: No avanza la vuelta, eso lo hace la funcion avanzar_vuelta(juego)
	"""
    jugador_ganador = determinar_ganador_mano(juego)
    gamelib.say(f"EL GANADOR DE LA BAZA FUE\n{jugador_ganador}")
    juego.jugadores[jugador_ganador].sumar_bazas()
    juego.turno_actual = jugador_ganador
    return juego
Ejemplo n.º 6
0
def backtraking(numero, juego):
    '''
    Recibe el estado del juego, busca las soluciones del juego y lo devuelve.
    '''
    visitados = set()
    dibujar_juego(numero, juego, 3)  #pensando
    verdadero, resultado = backtrack(juego, visitados)
    if not verdadero:
        dibujar_juego(numero, juego, 4)
        gamelib.say(
            "No hay Pistas Disponibles, reinicie o deshaga los movimientos")
    else:
        dibujar_juego(numero, juego, 2)  #pista disponible
        return resultado
Ejemplo n.º 7
0
def buscar_pistas(pistas, grilla):
    '''Busca las pistas del backtracking, y las devuelve en una pila'''
    gamelib.draw_begin()
    mostrar_interfaz(grilla)
    gamelib.draw_text('Buscando pista',
                      PIXELES_GIF,
                      PIXELES_GIF // 2,
                      size=12,
                      fill='#00FF00')
    gamelib.draw_end()
    pistas = pista.movimientos_pista(grilla)
    if pistas.esta_vacia():
        pistas = None
        gamelib.say('No hay pistas')
    return pistas
Ejemplo n.º 8
0
def main():
    gamelib.title("Chase")
    gamelib.resize(600, 400)

    while gamelib.is_alive():
        n = 0
        juego  = chase.Juego(n)

        while not juego.terminado():
            juego = juego.inicializar_siguiente_nivel(n + 1)
            while not juego.nivel_terminado():
                gamelib.draw_begin()
                mostrar_estado_juego(juego)
                gamelib.draw_end()

                # Terminamos de dibujar la ventana, ahora procesamos los eventos (si el
                # usuario presionó una tecla o un botón del mouse, etc).

                # Esperamos hasta que ocurra un evento

                ev = gamelib.wait()

                if not ev:
                    # El usuario cerró la ventana.
                    break

                if ev.type == gamelib.EventType.KeyPress:
                    tecla = ev.key

                    if tecla in TECLAS:

                        juego.avanzar_un_step(tecla)

                        if juego.nivel_perdido():
                            gamelib.say('Te atrapo un robot, ¡Perdiste el juego!')
                            return

                        juego.mover_robots()

                        if juego.nivel_perdido():
                            gamelib.say('Te atrapo un robot, ¡Perdiste el juego!')
                            return



                if juego.nivel_terminado():

                    gamelib.say('Felicidades, pasaste al siguiente nivel')
                    n+=1
                    break

        gamelib.say('Felicidades, GANASTE EL JUEGO')
        return
Ejemplo n.º 9
0
    def inicializar_juego(self, cantidad_jugadores):
        palos = ('D', 'H', 'S', 'C')
        valores = ('2', '3', '4', '5', '6', '7', '8', '9', 'J', 'Q', 'K', 'A')
        for palo in palos:
            for valor in valores:
                self.mazo.apilar((str(valor) + str(palo)))

        self.cantidad_jugadores = cantidad_jugadores
        for numero_jugador in range(1, cantidad_jugadores + 1):
            while True:
                nombre_jugador = gamelib.input(
                    "Ingrese nombre del jugador numero " + str(numero_jugador))
                if ((nombre_jugador == None) or (len(nombre_jugador) == 0)):
                    gamelib.say(
                        'Se necesita un nombre para poder continuar,porfavor vuelva a ingresar'
                    )
                else:
                    jugador = Jugador(nombre_jugador, 0)
                    self.lista_jugadores.append(jugador)
                    break
Ejemplo n.º 10
0
 def pedir_apuestas(self):
     apuestas = {}
     suma_apuesta = 0
     for contador, jugador in enumerate(self.lista_jugadores):
         while True:
             a = jugador.pedir_apuesta()
             a = self.validar_apuesta(jugador.nombre, a)
             #apuesta=gamelib.input('Cuantas bazas vas a obtener '+jugador.nombre)
             #apuesta=self.validar_apuesta(jugador.nombre,apuesta)
             if contador == self.cantidad_jugadores - 1:
                 if suma_apuesta + int(a) == self.ronda_actual:
                     gamelib.say(
                         'La apuesta ingresada iguala el numero de ronda actual,ingrese un valor entre 0 y '
                         + str(self.ronda_actual) + '')
                 else:
                     apuestas[jugador.nombre] = int(a)
                     break
             else:
                 apuestas[jugador.nombre] = int(a)
                 suma_apuesta += int(a)
                 break
         self.rotar_jugadores()
     self.apuestas = apuestas
Ejemplo n.º 11
0
    def avanzar_un_step(self, accion):
        '''Segun la accion, actualiza la posicion del jugador, si
        colisiona con un obstaculo lo puede empujar, y si colisiona con un robot, 
        el jugador no está mas en la grilla'''
        grilla = self.grilla
        y, x = self.jugador
        if accion == 's':
            if esta_en_posicion_valida(y + 1, x, grilla):
                if hay_robot(y + 1, x, grilla):
                    grilla[y][x] = 2
                    #Jugador no esta mas en la grilla
                else:
                    grilla[y][x] = 0
                    grilla[y + 1][x] = 1
                    self.jugador = [y + 1, x]
            if x >= 0 and y + 1 >= 0:
                if x < 20 and y + 1 < 20:
                    if hay_obstaculo(y + 1, x, grilla):
                        if esta_en_posicion_valida(y + 2, x, grilla):
                            #el obstaculo puede ser desplazado por el jugador
                            grilla[y][x] = 0
                            grilla[y + 1][x] = 1
                            grilla[y + 2][x] = 3
                            self.jugador = [y + 1, x]

        if accion == 'a':
            if esta_en_posicion_valida(y, x - 1, grilla):
                if hay_robot(y, x - 1, grilla):
                    grilla[y][x] = 2
                else:
                    grilla[y][x] = 0
                    grilla[y][x - 1] = 1
                    self.jugador = [y, x - 1]
            if hay_obstaculo(y, x - 1, grilla):
                if esta_en_posicion_valida(y, x - 2, grilla):
                    #el obstaculo puede ser desplazado por el jugador
                    grilla[y][x] = 0
                    grilla[y][x - 1] = 1
                    grilla[y][x - 2] = 3
                    self.jugador = [y, x - 1]

        if accion == 'd':
            if esta_en_posicion_valida(y, x + 1, grilla):
                if hay_robot(y, x + 1, grilla):
                    grilla[y][x] = 2
                else:
                    grilla[y][x] = 0
                    grilla[y][x + 1] = 1
                    self.jugador = [y, x + 1]
            if x + 1 >= 0 and y >= 0:
                if x + 1 < 20 and y < 20:
                    if hay_obstaculo(y, x + 1, grilla):
                        if esta_en_posicion_valida(y, x + 2, grilla):
                            #el obstaculo puede ser desplazado por el jugador
                            grilla[y][x] = 0
                            grilla[y][x + 1] = 1
                            grilla[y][x + 2] = 3
                            self.jugador = [y, x + 1]

        if accion == 'w':
            if esta_en_posicion_valida(y - 1, x, grilla):
                if hay_robot(y - 1, x, grilla):
                    grilla[y][x] = 2
                else:
                    grilla[y][x] = 0
                    grilla[y - 1][x] = 1
                    self.jugador = [y - 1, x]
            if hay_obstaculo(y - 1, x, grilla):
                if esta_en_posicion_valida(y - 2, x, grilla):
                    #el obstaculo puede ser desplazado por el jugador
                    grilla[y][x] = 0
                    grilla[y - 1][x] = 1
                    grilla[y - 2][x] = 3
                    self.jugador = [y - 1, x]

        if accion == 't':
            #Jugador tiene una cantidad limitada de teletransportes
            if self.teletransportes == 0:
                gamelib.say('No te quedan mas teletransportes!')
                return
            else:
                dy = random.choice(range(20))
                dx = random.choice(range(20))
                if esta_en_posicion_valida(dy, dx, grilla):
                    if hay_robot(dy, dx, grilla):
                        grilla[y][x] = 2
                    else:
                        grilla[y][x] = 0
                        grilla[dy][dx] = 1
                        self.jugador = [dy, dx]
                        self.teletransportes -= 1

        if accion == 'q':
            if esta_en_posicion_valida(y - 1, x - 1, grilla):
                if hay_robot(y - 1, x - 1, grilla):
                    grilla[y][x] = 2
                else:
                    grilla[y][x] = 0
                    grilla[y - 1][x - 1] = 1
                    self.jugador = [y - 1, x - 1]
            if hay_obstaculo(y - 1, x - 1, grilla):
                if esta_en_posicion_valida(y - 2, x - 2, grilla):
                    #el obstaculo puede ser desplazado por el jugador
                    grilla[y][x] = 0
                    grilla[y - 1][x - 1] = 1
                    grilla[y - 2][x - 2] = 3
                    self.jugador = [y - 1, x - 1]

        if accion == 'e':
            if esta_en_posicion_valida(y - 1, x + 1, grilla):
                if hay_robot(y - 1, x + 1, grilla):
                    grilla[y][x] = 2
                else:
                    grilla[y][x] = 0
                    grilla[y - 1][x + 1] = 1
                    self.jugador = [y - 1, x + 1]
            if x + 1 >= 0 and y + 1 >= 0:
                if x + 1 < 20 and y + 1 < 20:
                    if hay_obstaculo(y - 1, x + 1, grilla):
                        if esta_en_posicion_valida(y - 2, x + 2, grilla):
                            #el obstaculo puede ser desplazado por el jugador
                            grilla[y][x] = 0
                            grilla[y - 1][x + 1] = 1
                            grilla[y - 2][x + 2] = 3
                            self.jugador = [y - 1, x + 1]

        if accion == 'x':
            if esta_en_posicion_valida(y + 1, x + 1, grilla):
                if hay_robot(y + 1, x + 1, grilla):
                    grilla[y][x] = 2
                else:
                    grilla[y][x] = 0
                    grilla[y + 1][x + 1] = 1
                    self.jugador = [y + 1, x + 1]
            if x + 1 >= 0 and y + 1 >= 0:
                if x + 1 < 20 and y + 1 < 20:
                    if hay_obstaculo(y + 1, x + 1, grilla):
                        if esta_en_posicion_valida(y + 2, x + 2, grilla):
                            #el obstaculo puede ser desplazado por el jugador
                            grilla[y][x] = 0
                            grilla[y + 1][x + 1] = 1
                            grilla[y + 2][x + 2] = 3
                            self.jugador = [y + 1, x + 1]

        if accion == 'z':
            if esta_en_posicion_valida(y + 1, x - 1, grilla):
                if hay_robot(y + 1, x - 1, grilla):
                    grilla[y][x] = 2
                else:
                    grilla[y][x] = 0
                    grilla[y + 1][x - 1] = 1
                    self.jugador = [y + 1, x - 1]
            if x - 1 >= 0 and y + 1 >= 0:
                if x - 1 < 20 and y + 1 < 20:
                    if hay_obstaculo(y + 1, x - 1, grilla):
                        if esta_en_posicion_valida(y + 2, x - 2, grilla):
                            #el obstaculo puede ser desplazado por el jugador
                            grilla[y][x] = 0
                            grilla[y + 1][x - 1] = 1
                            grilla[y + 2][x - 2] = 3
                            self.jugador = [y + 1, x - 1]
Ejemplo n.º 12
0
def main():
    # Inicializar el estado del juego
    deshacer = Pila()
    pistas = []

    teclas = archivo_teclas(RUTA_TECLAS)
    niveles = archivo_niveles(RUTA_NIVELES)

    contador = es_nivel(gamelib.input("Eliga un nivel:"), niveles)
    juego = emparejar(niveles[contador])  #lista de cadenas

    c, f = soko.dimensiones(juego)
    gamelib.resize(c * DIM_CELDA, f * DIM_CELDA)

    juego = soko.crear_grilla(juego)  #lista de listas
    dibujar_juego(contador, juego, 1)

    while gamelib.is_alive():
        ev = gamelib.wait(gamelib.EventType.KeyPress)
        if not ev:
            break
        # Actualizar el estado del juego, según la `tecla` presionada
        tecla = ev.key

        if es_tecla(tecla, teclas) == None:
            continue

        if tecla == 'Escape':
            gamelib.say("Gracias por jugar Sokoban :)")
            break

        if tecla == 'h':
            if len(pistas) == 0:
                pistas = backtraking(contador, juego)
                if pistas == None:
                    pistas = []
            else:
                pista = pistas.pop()
                juego = soko.mover(juego, pista)
                deshacer.apilar(juego)
                dibujar_juego(contador, juego, 2)  #pista disponible

        if soko.juego_ganado(juego):
            contador += 1
            while not deshacer.esta_vacia():
                deshacer.desapilar()
            gamelib.say("Pasaste al siguiente nivel :)")

            juego = emparejar(niveles[contador])
            c, f = soko.dimensiones(juego)
            gamelib.resize(c * DIM_CELDA, f * DIM_CELDA)
            juego = soko.crear_grilla(juego)
            dibujar_juego(contador, juego, 1)

        if tecla == 'r':
            if len(pistas) != 0:
                pistas = []
            juego = emparejar(niveles[contador])
            c, f = soko.dimensiones(juego)
            gamelib.resize(c * DIM_CELDA, f * DIM_CELDA)
            juego = soko.crear_grilla(juego)
            dibujar_juego(contador, juego, 1)

        if tecla == 'Control_L':
            if not deshacer.esta_vacia():
                juego = deshacer.desapilar()
            dibujar_juego(contador, juego, 1)

        if teclas[tecla] in DIRECCIONES:
            deshacer.apilar(juego)
            juego = soko.mover(juego, DIRECCIONES[teclas[tecla]])
            dibujar_juego(contador, juego, 1)

        if tecla != 'h':  #vaciar la lista
            if len(pistas) != 0:
                pistas = []