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():)