- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Entrada destacada
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Veamos como dibujar un tablero de ajedrez utilizando rectángulos y que pueda adecuarse a las medidas de la ventana.
Primero se muestra una forma sencilla de dibujar los cuadros y poder ir intercalando los colores de cada rectángulo, después haremos otro ejemplo para poder detectar que cuadro se ha seleccionado con el ratón.
El código completo para dibujar un tablero de 8x8 es el siguiente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import pygame NEGRO = (0, 0, 0) BLANCO = (255, 255, 255) pygame.init() dimensiones = [500, 400] pantalla = pygame.display.set_mode(dimensiones) pygame.display.set_caption("TABLERO") juego_terminado = False reloj = pygame.time.Clock() ancho = int(dimensiones[0] / 8) alto = int(dimensiones[1] / 8) while juego_terminado is False: for evento in pygame.event.get(): if evento.type == pygame.QUIT: juego_terminado = True pantalla.fill(BLANCO) color = 0 for i in range(0, dimensiones[0], ancho): for j in range(0, dimensiones[1], alto): if color % 2 == 0: pygame.draw.rect(pantalla, NEGRO, [i, j, ancho, alto], 0) else: pygame.draw.rect(pantalla, BLANCO, [i, j, ancho, alto], 0) color += 1 color += 1 pygame.display.flip() reloj.tick(5) pygame.quit() |
Ejemplos con distintas medidas, la primera de 400x600 y la segunda de 600x600.
A partir de aquí se vuelve un poco complejo, así que iremos separando el código en funciones.
Lo primero es pasar el código que dibuja el tablero en una función en específico.
def dibujarTablero(screen, dimension, p_inicio, tamanio_fuente, fuente, seleccion): color = 0 for i in range(8): for j in range(8): x = i * dimension + p_inicio[0] y = j * dimension + p_inicio[1] if color % 2 == 0: pygame.draw.rect(screen, NEGRO, [x, y, dimension, dimension], 0) else: pygame.draw.rect(screen, BLANCO, [x, y, dimension, dimension], 0) if seleccion[0] == LETRAS[i] and j == seleccion[1] - 1: pygame.draw.rect(screen, SELECCIONA, [x, y, dimension, dimension], 0) color += 1
color += 1 dibujarTexto(screen, LETRAS[i], [x, p_inicio[1] - tamanio_fuente], fuente) dibujarTexto(screen, str(i + 1), [p_inicio[0] - tamanio_fuente, x], fuente)
Para dibujar los números y las letras usamos la siguiente función.
def dibujarTexto(screen, texto, posicion, fuente): Texto = fuente.render(texto, 1, AZUL) screen.blit(Texto, posicion)
Con la siguiente función obtenemos la coordenadas adecuadas para dibujar el tablero según el tamaño de la fuente.
def ajustarMedidas(tamanio_fuente): if DIMENCIONES[1] < DIMENCIONES[0]: ancho = int((DIMENCIONES[1] - (tamanio_fuente * 2)) / 8) inicio = ((DIMENCIONES[0] - DIMENCIONES[1]) / 2) + tamanio_fuente, tamanio_fuente else: ancho = int((DIMENCIONES[0] - (tamanio_fuente * 2)) / 8) inicio = tamanio_fuente, ((DIMENCIONES[1] - DIMENCIONES[0]) / 2) + tamanio_fuente return [inicio, ancho]
Una función más para obtener en que coordenada se a pulsado con el puntero del ratón.
def obtenerPosicion(mouse, dimension, p_inicio, actual): xr, yr = mouse[0], mouse[1] for i in range(8): for j in range(8): x = i * dimension + p_inicio[0] y = j * dimension + p_inicio[1] if (xr >= x) and (xr <= x + dimension) and (yr >= y) and (yr <= y + dimension): actual = [LETRAS[i], j + 1] return actual
Y para finalizar el código principal de programa lo podremos en una función main.
def main(): pygame.init() screen = pygame.display.set_mode(DIMENCIONES) pygame.display.set_caption("__Tablero__") game_over = False clock = pygame.time.Clock() tamanio_fuente = 30 seleccion = ['Z', -1] fuente = pygame.font.Font("fuentes/AliceandtheWickedMonster.ttf", tamanio_fuente) puntoInicio, dimension = ajustarMedidas(tamanio_fuente) while game_over is False: for evento in pygame.event.get(): if evento.type == pygame.QUIT: game_over = True botones = pygame.mouse.get_pressed() if botones[0]: pos = pygame.mouse.get_pos() seleccion = obtenerPosicion(pos, dimension, puntoInicio, seleccion) screen.fill(FONDO) dibujarTablero(screen, dimension, puntoInicio, tamanio_fuente, fuente, seleccion) pygame.display.flip() clock.tick(60) pygame.quit() if __name__ == "__main__": main()
Comenta tus dudas en los comentarios.
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Comentarios
Lo quiero en C++
ResponderEliminar