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)
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
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))
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)
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
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
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
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
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
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
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]
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 = []