def dibujar_mano_tapada(n_posicion, jugador, juego): """ Recibida un n_posicion (1, 2, 3) un jugador, y un estado de juego, dibuja la mano tapad aen la posicion indicada Posicion 1: arriba, Posicion 2: derecha, Posicion 3: izquierda """ n_cartas = len(juego.jugadores[jugador].mano) if n_posicion == 1: separacion = ANCHO_CARTA // 2 x_inicial = (ANCHO_VENTANA - (n_cartas + 1) * (ANCHO_CARTA / 2)) // 2 y_inicial = 0 for _ in range(n_cartas): gamelib.draw_image(f"img/Back_Red_1_{ORIENTACION[n_posicion]}.gif", x_inicial, y_inicial) x_inicial += separacion else: separacion = ANCHO_CARTA // 3 * 2 #2/3 de separacion y_inicial = (ALTO_VENTANA - (n_cartas + 1) * (ANCHO_CARTA / 3) * 2) // 2 if n_posicion == 2: x_inicial = ANCHO_VENTANA - ALTO_CARTA if n_posicion == 3: x_inicial = 0 for _ in range(n_cartas): gamelib.draw_image(f"img/Back_Red_1_{ORIENTACION[n_posicion]}.gif", x_inicial, y_inicial) y_inicial += separacion
def nivel(grilla, accion=None): '''Recibe un nivel en forma de grilla (lista de listas), y dibuja en la ventana la representacion de esa grilla. ''' tamanio_x, tamanio_y = soko.dimensiones(grilla) for x in range(tamanio_x): for y in range(tamanio_y): px_x = (x * TAMANIO_CASILLA ) + 2 # Lo desplazo 2 pixeles, porque es lo que ocupan px_y = (y * TAMANIO_CASILLA) + 2 # los bordes de la ventana. gl.draw_image(IMG_SUELO, px_x, px_y) if soko.hay_jugador(grilla, x, y): gl.draw_image(IMG_JUGADOR.get(accion, "src/player_s.gif"), px_x, px_y) elif soko.hay_caja(grilla, x, y): gl.draw_image(IMG_CAJA, px_x, px_y) elif soko.hay_pared(grilla, x, y): gl.draw_image(IMG_PARED, px_x, px_y) if soko.hay_objetivo(grilla, x, y): gl.draw_image(IMG_OBJETIVO, px_x, px_y)
def main(): # Inicializar el estado del juego #siguiente_pieza = tetris.generar_pieza() siguiente = tetris.generar_pieza() t1= time.time() juego = tetris.crear_juego(tetris.generar_pieza()) ancho, alto = tetris.dimensiones(juego) lista_teclas = leer_teclas() gamelib.resize(800, 900) timer_bajar = ESPERA_DESCENDER while gamelib.loop(fps=30): gamelib.draw_begin() dibujar_superficie(juego) dibujar_pieza(juego) dibujar_siguiente(juego, siguiente) gamelib.draw_end() for event in gamelib.get_events(): if not event: break if event.type == gamelib.EventType.KeyPress: tecla = event.key if tecla == lista_teclas[1]: juego = tetris.mover(juego, -1) if tecla == lista_teclas[3]: juego = tetris.mover(juego, 1) if tecla == lista_teclas[5]: juego = tetris.mover(juego, 2) if tecla == lista_teclas[0]: return if tecla == lista_teclas[6]: juego = tetris.rotar(juego) if tecla == lista_teclas[4]: guardar_partida(juego) if tecla == lista_teclas[2]: juego = recuperar_partida() # Actualizar el juego, según la tecla presionada timer_bajar -= 1 if timer_bajar == 0: timer_bajar = ESPERA_DESCENDER juego, siguiente_pieza = tetris.avanzar(juego, siguiente) if siguiente_pieza: siguiente = tetris.generar_pieza() if tetris.terminado(juego): gamelib.draw_image('img/perdiste.gif', 50, 200) t2 = time.time() tiempo_final = t2- t1 gamelib.draw_rectangle(0, 0, 595, 60, outline='white', fill='salmon') gamelib.draw_text('Tu tiempo fue de {} segundos'.format(tiempo_final), 10, 17, fill='#000', size=18, anchor='nw') puntuaciones(tiempo_final) break while gamelib.is_alive(): ordenar_puntuaciones() event = gamelib.wait(gamelib.EventType.KeyPress)
def tablero(puntaje_actual): ''' Dibuja el tablero relativo al tamanio de la pantalla y el puntaje en el corner derecho ''' gamelib.draw_image("images/tetris_4.gif", 0, 0) gamelib.draw_rectangle( TABLERO_x1 - 5 , TABLERO_y1 - 5,\ TABLERO_x1 + 5 + TAM_PIEZA * tetris.ANCHO_JUEGO, TABLERO_y1 + 5 + TAM_PIEZA * tetris.ALTO_JUEGO, fill = "grey") gamelib.draw_rectangle( TABLERO_x1, TABLERO_y1,\ TABLERO_x1 + TAM_PIEZA * tetris.ANCHO_JUEGO, TABLERO_y1 + TAM_PIEZA * tetris.ALTO_JUEGO, fill = "black") ## Puntaje!: gamelib.draw_text("Puntaje:", TABLERO_x1 - TAM_PIEZA * 2, TABLERO_y1 - TAM_PIEZA) gamelib.draw_text(puntaje_actual, TABLERO_x1 - TAM_PIEZA, TABLERO_y1)
def dibujar_pantalla_de_inicio(): """ Esta función se encarga de dibujar la pantalla de inicio del juego. """ gamelib.draw_image('media/logointro.gif', 275, ALTO_INTERFAZ // 25) gamelib.draw_image('media/boton.gif', (ANCHO_INTERFAZ // 2) - MARGEN_SUPERIOR, (ALTO_INTERFAZ - ALTO_INTERFAZ // 5)) gamelib.draw_text('Jugar', ANCHO_INTERFAZ // 2, (ALTO_INTERFAZ // 2 + ALTO_INTERFAZ // 3 + 15), anchor='c', size=30)
def dibujar_superficie(juego): '''Se dibujara la grilla del tetris''' gamelib.draw_image('img/fondo6.gif', -80, 10) ancho, alto = tetris.dimensiones(juego) gamelib.draw_line(600, 250, 900, 250, fill='white', width=3) gamelib.draw_text('PRÓXIMA PIEZA:', 630, 10, fill='white', anchor='nw') for x in range (0, 600, 66): gamelib.draw_line(x, 0, x, 900, fill='white', width=2) for y in range (0, 900, 50): gamelib.draw_line(0, y, 595, y, fill='white', width=2) for y in range(alto): for x in range(ancho): if tetris.hay_superficie(juego, x, y): gamelib.draw_rectangle(x*66, y*50, (x+1)*66, (y+1)*50, outline='white', fill='purple')
def dibujar(juego): alto, ancho = soko.dimensiones(juego) pintar_piso(ancho, alto) for j in range(len(juego)): for i in range(len(juego[j])): x = TAMAÑO_IMAGEN*i y = TAMAÑO_IMAGEN*j if juego[j][i] == "*": gamelib.draw_image("img/goal.gif", x, y) gamelib.draw_image("img/box.gif", x, y) elif juego[j][i] == "+": gamelib.draw_image("img/goal.gif", x, y) gamelib.draw_image("img/player.gif", x, y) else: gamelib.draw_image("img/"+IMAGENES[juego[j][i]], x, y)
def juego_mostrar(grilla): ''' Recibe por parámetro una lista de listas y dibuja en pantalla. ''' for f in range(len(grilla)): for c in range(len(grilla[0])): y = f * DIM_CELDA x = c * DIM_CELDA gamelib.draw_image('img/ground.gif', x, y) if soko.hay_pared(grilla, c, f): gamelib.draw_image('img/wall.gif', x, y) if soko.hay_jugador(grilla, c, f): gamelib.draw_image('img/player.gif', x, y) if soko.hay_caja(grilla, c, f): gamelib.draw_image('img/box.gif', x, y) if soko.hay_objetivo(grilla, c, f): gamelib.draw_image('img/goal.gif', x, y)
def dibujar_panel_superior(juego): """ Esta función se encarga de dibujar todo lo que se encuentra en la parte superior del tablero del juego. """ # Dibujo logo del juego gamelib.draw_image("media/logo.gif", ANCHO_INTERFAZ // 2 - 200, 0) # Dibujo boton de teletransportación. gamelib.draw_image("media/botonchico.gif", 100, (MARGEN_SUPERIOR / 2) / 2) gamelib.draw_text("Teleport", 200, MARGEN_SUPERIOR / 2, size=20) # Dibujo nivel gamelib.draw_text("Nivel:", ANCHO_INTERFAZ - 250, MARGEN_SUPERIOR / 2, size=20) gamelib.draw_text(juego[3], ANCHO_INTERFAZ - 200, MARGEN_SUPERIOR / 2, size=20)
def mostrar_interfaz(grilla): '''Muestra la interfaz a partir de la grilla, en su estado actual, dependiendo de su simbolo se mostrara en la interfaz el gif correspondiente''' columnas, filas = soko.dimensiones(grilla) for fila in range(filas): for columna in range(columnas): gamelib.draw_image('img/ground.gif', columna * PIXELES_GIF, fila * PIXELES_GIF) if soko.hay_caja(grilla, columna, fila): gamelib.draw_image('img/box.gif', columna * PIXELES_GIF, fila * PIXELES_GIF) if soko.hay_objetivo(grilla, columna, fila): gamelib.draw_image('img/goal.gif', columna * PIXELES_GIF, fila * PIXELES_GIF) if soko.hay_jugador(grilla, columna, fila): gamelib.draw_image('img/player.gif', columna * PIXELES_GIF, fila * PIXELES_GIF) if soko.hay_pared(grilla, columna, fila): gamelib.draw_image('img/wall.gif', columna * PIXELES_GIF, fila * PIXELES_GIF)
def dibujar_juego(juego): """ Esta función se encarga de dibujar la grilla del juego, los escombros que hay en la grilla """ gamelib.draw_rectangle(0, 0, ANCHO_INTERFAZ, ALTO_INTERFAZ, fill='black') # Dibujo panel superior dibujar_panel_superior(juego) # Dibujo grilla dibujar_grilla() # Dibujo robots. robots = juego[1] for robot in robots: x_celda, y_celda = robot[0], robot[1] gamelib.draw_image("media/robot.gif", ANCHO_Y_ALTO_CELDA * x_celda, MARGEN_SUPERIOR + ANCHO_Y_ALTO_CELDA * y_celda) # Dibujo escombros escombros = buscar_n_en_tablero(3, juego[2]) for i in range(len(escombros)): x_celda, y_celda = escombros[i][0], escombros[i][1] gamelib.draw_image("media/escombros.gif", ANCHO_Y_ALTO_CELDA * x_celda, MARGEN_SUPERIOR + ANCHO_Y_ALTO_CELDA * y_celda) # Dibujo jugador jugador = juego[0] x_celda, y_celda = jugador[0], jugador[1] gamelib.draw_image("media/astronauta.gif", 1 + ANCHO_Y_ALTO_CELDA * x_celda, MARGEN_SUPERIOR + ANCHO_Y_ALTO_CELDA * y_celda)
def dibujar_game_over(): """ Esta función dibuja en pantalla un cartel que indica game over en pantalla una vez que ha terminado el juego y le pregunta al usuario si quiere volver a jugar. """ gamelib.draw_rectangle(0, 0, ANCHO_INTERFAZ, ALTO_INTERFAZ, fill='black') gamelib.draw_text('GAME OVER', ANCHO_INTERFAZ // 2, ALTO_INTERFAZ // 2 - MARGEN_SUPERIOR // 2, size=80, fill='red') gamelib.draw_image('media/boton.gif', ANCHO_INTERFAZ // 2 - MARGEN_SUPERIOR, ALTO_INTERFAZ // 2 + 50) gamelib.draw_text('Volver', ANCHO_INTERFAZ // 2, ALTO_INTERFAZ // 2 + 80, size=20) gamelib.draw_text('a jugar', ANCHO_INTERFAZ // 2, ALTO_INTERFAZ // 2 + 110, size=20)
def dibujar_pantalla_de_inicio(): """ Esta función se encarga de dibujar la pantalla de inicio del juego. A partir de ella, el jugador podrá iniciar una partida. """ gamelib.draw_image('media/logo.gif', ANCHO_INTERFAZ // 2, ALTO_INTERFAZ // 3) gamelib.draw_text('Bienvenido', ANCHO_INTERFAZ // 2, 250) #Dibujo los botones gamelib.draw_image('media/botonazul.gif', 55, 280) gamelib.draw_text('Jugar', 115, 310) gamelib.draw_image('media/botonrosa.gif', 220, 280) gamelib.draw_text('Cargar', 285, 300) gamelib.draw_text('partida', 285, 320)
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 dibujar_carta(carta, x, y): """ Recibida una Carta y coordenadas en pixeles, dibuja la carta en dicha posicion, no devuelve nada. """ ruta_imagen = sel_img_carta(carta) gamelib.draw_image(f"{ruta_imagen}", x, y)
def dibujar_fondo(): """ Dibuja de fondo la imagen img/fondo.gif """ gamelib.draw_image("img/fondo.gif", 0, 0)
def pintar_piso(ancho, alto): for i in range(alto): for j in range(ancho): gamelib.draw_image("img/ground.gif", i*TAMAÑO_IMAGEN, j*TAMAÑO_IMAGEN)
def dibujo_juego(grilla): '''Esta funcion recibe una grilla y dibuja el juego''' x_total, y_total = cargar_tamaño( grilla) #Tupla con el total de de px por pantalla x = 0 y = 0 casilleros_maximos_horizontales = y_total / PX_CELDA for fila in range(len(grilla)): for columna in range(int(casilleros_maximos_horizontales) + PX_CELDA): if columna < len(grilla[fila]): gamelib.draw_image('img/ground.gif', x_total, y_total) celda = grilla[fila][columna] if soko.hay_pared(grilla, columna, fila): gamelib.draw_image('img/wall.gif', x, y) elif soko.hay_jugador(grilla, columna, fila): gamelib.draw_image('img/player.gif', x, y) elif celda == " ": gamelib.draw_image('img/ground.gif', x, y) elif soko.hay_caja(grilla, columna, fila): gamelib.draw_image('img/box.gif', x, y) elif soko.hay_objetivo(grilla, columna, fila): gamelib.draw_image('img/goal.gif', x, y) else: gamelib.draw_image('img/ground.gif', x, y) x = x + PX_CELDA x = 0 y = y + PX_CELDA