def juego_mostrar(grilla, titulo): """ Dibuja la grilla recibida en la pantalla """ imagenes = { PARED: 'img/wall.gif', CAJA: 'img/box.gif', JUGADOR: 'img/player.gif', OBJETIVO: 'img/goal.gif', VACIO: 'img/ground.gif' } gamelib.title(titulo) for fila in range(len(grilla)): for celda in range(len(grilla[0])): gamelib.draw_image('img/ground.gif', 64 * celda, 64 * fila) if grilla[fila][celda] == OBJETIVO_CAJA: gamelib.draw_image(imagenes[CAJA], 64 * celda, 64 * fila) gamelib.draw_image(imagenes[OBJETIVO], 64 * celda, 64 * fila) continue if grilla[fila][celda] == OBJETIVO_JUGADOR: gamelib.draw_image(imagenes[JUGADOR], 64 * celda, 64 * fila) gamelib.draw_image(imagenes[OBJETIVO], 64 * celda, 64 * fila) continue gamelib.draw_image(imagenes[grilla[fila][celda]], 64 * celda, 64 * fila)
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 dibujar_juego(numero, juego, opcion): ''' Recibe el nivel del juego, el estado del juego y un numero (1,2,3 o 4) y dibuja de acuerdo al número pasado por parámetro. ''' opciones = { 1: '', 2: 'Pista Disponible', 3: 'Pensando....', 4: 'Pista No Disponible' } gamelib.draw_begin() gamelib.title(f'SOKOBAN Level : {numero}') juego_mostrar(juego) #muestra el juego en la ventana gamelib.draw_text(opciones[opcion], 10, 10, fill='yellow', anchor='nw') gamelib.draw_end()
def main(): gamelib.title("Game of life") life = life_create([ '..........', '..........', '..........', '.....#....', '......#...', '....###...', '..........', '..........', ]) gamelib.resize(len(life[0]) * CELL_SIZE, len(life) * CELL_SIZE) while gamelib.is_alive(): draw(life) gamelib.wait(gamelib.EventType.KeyPress) life = life_next(life)
def main(): gamelib.title("Pong") W, H = SIZE gamelib.resize(W, H) state = State( paddles=(H / 2, H / 2), ball_pos=(W / 2, H / 2), ball_vel=random_ball_velocity(), score=(0, 0), ) key_pressed = {} while gamelib.loop(): gamelib.draw_begin() draw_paddle(state, PADDLE1) draw_paddle(state, PADDLE2) draw_ball(state) draw_score(state) gamelib.draw_end() for event in gamelib.get_events(): if event.type == gamelib.EventType.KeyPress: key_pressed[event.key] = True if event.type == gamelib.EventType.KeyRelease: key_pressed[event.key] = False if key_pressed.get('q', False): state = move_paddle(state, PADDLE1, -1) if key_pressed.get('a', False): state = move_paddle(state, PADDLE1, +1) if key_pressed.get('Up', False): state = move_paddle(state, PADDLE2, -1) if key_pressed.get('Down', False): state = move_paddle(state, PADDLE2, +1) state = move_ball(state) state = check_goal(state)
def main(): '''Inicializa el juego''' gl.title("Sokoban") try: # Genera la lista de niveles, con la matriz de objetos, y el nombre del nivel. niveles = parser.lista_niveles(ARCHIVO_NIVELES) except (IOError, FileNotFoundError): render.error_archivo(ARCHIVO_NIVELES) ev = gl.wait(gl.EventType.KeyPress) return try: # Genera el diccionario con las teclas, y la accion que generan esas teclas controles = parser.dict_controles(ARCHIVO_CONTROLES) except (IOError, FileNotFoundError): render.error_archivo(ARCHIVO_CONTROLES) ev = gl.wait(gl.EventType.KeyPress) return nivel_nro = PRIMER_NIVEL - 1 # Empezar contador de tiempo para dar tiempo total luego de finalizados todos los niveles tiempo_inicial = time.time() # Itera por cada nivel while gl.is_alive(): nivel = niveles[nivel_nro].copy() grilla = nivel["grilla"] titulo = nivel["title"] nivel_actual = soko.crear_grilla(grilla) x, y = render.cambiar_tamanio_ventana(nivel_actual) render.titulo(titulo, (x, y)) time.sleep(1) accion = (0, 1) # Crea nuevas instancias, para que no genere errores cuando pase de nivel deshacer = Deshacer() backtraking = Backtracking() # Este ciclo solo espera al input del jugador while True: gl.draw_begin() render.nivel(nivel_actual, accion) gl.draw_end() ev = gl.wait(gl.EventType.KeyPress) if not ev: return tecla = ev.key if not tecla in controles: continue accion = controles[tecla] # Actualizar el estado del juego, según la `tecla` presionada if type(accion) == tuple: deshacer.agregar_estado(nivel_actual) backtraking.solucion_disponible = False nivel_actual = soko.mover(nivel_actual, accion) elif accion == "REINICIAR": deshacer.agregar_estado(nivel_actual) nivel_actual = soko.crear_grilla(grilla) backtraking.solucion_disponible = False elif accion == "PISTA": if not backtraking.solucion_disponible: render.pensando_solucion(nivel_actual) try: backtraking.generar_solucion(nivel_actual) except: render.error_backtracking() ev = gl.wait(gl.EventType.KeyPress) render.cambiar_tamanio_ventana(nivel_actual) else: deshacer.agregar_estado(nivel_actual) accion = backtraking.obtener_mov() nivel_actual = soko.mover(nivel_actual, accion) elif accion == "DESHACER": if deshacer.se_puede_deshacer(): nivel_actual = deshacer.deshacer_movimiento() backtraking.solucion_disponible = False else: gl.play_sound('src/alert.wav') elif accion == "SALIR": return if soko.juego_ganado(nivel_actual): break # Paso al siguiente nivel nivel_nro += 1 # Verifica que haya terminado todos los niveles if nivel_nro >= len(niveles): tiempo_final = time.time() tiempo_total = tiempo_final - tiempo_inicial # Genera horas, minutos y segundos tiempo = "Tiempo total " + convertir_segundos(tiempo_total) render.final((x, y), tiempo) ev = gl.wait(gl.EventType.KeyPress) return
def setear_juego(niveles, nivel): juego = soko.crear_grilla(niveles[nivel]) resize(juego) gamelib.title("Sokoban - Nivel: " + str(nivel)) return juego
def main(): gamelib.resize(chase.ANCHO_INTERFAZ, chase.ALTO_INTERFAZ) gamelib.title("Chase") while gamelib.is_alive(): #Dibujo pantalla de inicio gamelib.draw_begin() chase.dibujar_pantalla_de_inicio() gamelib.draw_end() # Esperamos hasta que ocurra un evento ev = gamelib.wait() if not ev: #El usuario cerró la ventana. break if ev.type == gamelib.EventType.KeyPress and ev.key == 'Escape': # El usuario presionó la tecla Escape, cerrar la aplicación. break if ev.type == gamelib.EventType.ButtonPress: # El usuario presionó un botón del mouse x, y = ev.x, ev.y # averiguamos la posición donde se hizo click if (x >= ((ANCHO_INTERFAZ//2)-150) and x <= (((ANCHO_INTERFAZ//2)-MARGEN_SUPERIOR)+MARGEN_SUPERIOR*2)) and (y >= (ALTO_INTERFAZ - ALTO_INTERFAZ//5) and y <= ((ALTO_INTERFAZ - ALTO_INTERFAZ//5)+100)): #Creo un un nuevo juego. juego = chase.crear_juego() chase.agregar_robots(juego) while gamelib.loop(fps=30): for event in gamelib.get_events(): if not chase.terminado(juego): ev = gamelib.wait() if ev.type == gamelib.EventType.ButtonPress: x, y = ev.x, ev.y if (x >= 0 and x <= ANCHO_INTERFAZ) and (y >= MARGEN_SUPERIOR and y <= ALTO_INTERFAZ): jugador, robots, tablero, puntaje = juego juego = chase.trasladar_jugador(juego, x, y) juego = chase.avanzar(juego) elif (x >= 100 and x <= 2 * MARGEN_SUPERIOR) and (y >= ((MARGEN_SUPERIOR/2)/2) and y <= (MARGEN_SUPERIOR/2)/2+75): juego = chase.teletransportar_jugador(juego) gamelib.draw_begin() chase.dibujar_juego(juego) gamelib.draw_end() if chase.terminado(juego): gamelib.draw_begin() chase.dibujar_game_over() gamelib.draw_end() ev = gamelib.wait() if ev.type == gamelib.EventType.ButtonPress: # El usuario presionó un botón del mouse x, y = ev.x, ev.y #Verifico si el usuario quiere volver a jugar if (x >= (ANCHO_INTERFAZ//2-150) and x <= ((ANCHO_INTERFAZ//2-150)+200)) and (y >= (ALTO_INTERFAZ//2+50) and y <= ((ALTO_INTERFAZ//2+50)+75)): juego = chase.crear_juego() chase.agregar_robots(juego)
def main(): ''' Funcion principal del juego. Mantiene la interfaz grafica y evalua las teclas recibidas y si el juego esta terminado ''' # Inicializar el estado del juego tetris.importar_piezas(tetris.RUTA_PIEZAS) juego = tetris.crear_juego(tetris.generar_pieza()) salir = False puntaje_juego = 0 ingreso_puntaje = False cambiar_ficha = False siguiente_ficha = tetris.generar_pieza() gamelib.resize(grafico.ANCHO_PANT, grafico.ALTO_PANT) gamelib.play_sound("sound/bradinsky.wav") teclas = importar_teclas(tetris.RUTA_TECLAS) timer_bajar = ESPERA_DESCENDER while gamelib.loop(fps=30): gamelib.draw_begin() gamelib.title("TETRIS") # Dibujar la pantalla grafico.tablero(puntaje_juego) grafico.piezas(juego, siguiente_ficha) if salir: break if tetris.terminado(juego): grafico.terminado() if not ingreso_puntaje: leaderboard = tetris.cargar_leaderboard() leaderboard, ingreso_puntaje = grafico.top_puntajes( leaderboard, puntaje_juego) grafico.imprimir_puntajes(leaderboard) gamelib.draw_end() for event in gamelib.get_events(): if not event: break if event.type == gamelib.EventType.KeyPress: tecla = event.key # Actualizar el juego, según la tecla presionada ( ROTAR ( w) , MOVER izq der abajo, guardar, cargar ) juego = actualizar_movimiento(juego, tecla, teclas) if tecla in teclas["GUARDAR"]: tetris.guardar_partida(juego, siguiente_ficha, puntaje_juego) if tecla in teclas["CARGAR"]: juego, siguiente_ficha, puntaje_juego = tetris.cargar_partida( ) if tecla in teclas["DESCENDER"]: juego, cambiar_ficha = tetris.avanzar( juego, siguiente_ficha) puntaje_juego += 1 continue if tecla in teclas["SALIR"]: salir = True timer_bajar -= 1 if timer_bajar == 0: timer_bajar = ESPERA_DESCENDER # Descender la pieza automáticamente if cambiar_ficha == True: siguiente_ficha = tetris.generar_pieza() juego, cambiar_ficha = tetris.avanzar(juego, siguiente_ficha) if not tetris.terminado(juego): puntaje_juego += 1