May-03-2021, 02:53 AM
Hi! Trying to make a previz window for testing a puzzle game while in development, but it keeps freezing after certain time, I am very new to pygame, so not sure what's wrong! Thanks
import pygame
from random import randint
font_color = (0, 255, 200)
bkg_color = (0, 0, 0)
ltr_range = 10
gap = 20
cube_size = 800
speed = 1
matrix = [[chr(65+x+y) for y in range(ltr_range)] for x in range(ltr_range)]
def draw_matrix():
for x in range(ltr_range):
for y in range(ltr_range):
win.blit(font.render(matrix[x][y], True, font_color),
(gap + (cube_size // ltr_range * y), gap + (cube_size // ltr_range * x)))
pygame.display.update()
def matrix_row_turn_right(line=0, steps=0):
empty = matrix[line][-steps:]
for x in range(len(matrix[line]) - steps - 1, -1, -1):
matrix[line][x + steps] = matrix[line][x]
for y in range(len(empty)):
matrix[line][y] = empty[y]
def matrix_col_turn_up(line=0, steps=0):
empty = [matrix[x][line] for x in range(steps)]
for y in range(len(matrix) - steps):
matrix[y][line] = matrix[y + steps][line]
for z in range(len(matrix) - steps, len(matrix)):
matrix[z][line] = empty[abs(len(matrix) - steps - z)]
def anim_move_right(line):
for x in range(1, cube_size // ltr_range):
pygame.draw.rect(win, bkg_color, (0, (cube_size // ltr_range * line),
cube_size, cube_size // ltr_range))
for y in range(ltr_range):
win.blit(font.render(matrix[line][y], True, font_color),
((gap + (cube_size // ltr_range * y) + x),
gap + (cube_size // ltr_range * line)))
win.blit(font.render(matrix[line][-1], True, font_color),
((0 - (cube_size // ltr_range) + gap + x), gap + (cube_size // ltr_range * line)))
pygame.time.delay(speed)
pygame.display.update()
matrix_row_turn_right(line, 1)
draw_matrix()
def anim_move_up(line):
draw_matrix()
for x in range(1, cube_size // ltr_range):
pygame.draw.rect(win, bkg_color, ((gap + (cube_size // ltr_range) * line),
0, cube_size // ltr_range, cube_size))
for y in range(ltr_range):
win.blit(font.render(matrix[y][line], True, font_color),
(
gap + cube_size // ltr_range * line, (gap + (cube_size // ltr_range * y) - x)))
win.blit(font.render(matrix[0][line], True, font_color),
(gap + (cube_size // ltr_range * line), (cube_size + gap - x)))
pygame.time.delay(speed)
pygame.display.update()
matrix_col_turn_up(line, 1)
draw_matrix()
pygame.init()
win = pygame.display.set_mode((cube_size, cube_size))
pygame.display.set_caption("Word Puzzle preViz")
font = pygame.font.SysFont('Ariel', cube_size // ltr_range)
run = True
while run:
draw_matrix()
pygame.time.delay(1000)
for i in range(100):
if i % 2 == 0:
anim_move_right(randint(0, ltr_range-1))
else:
anim_move_up(randint(0, ltr_range-1))
run = False
pygame.quit():)
