0

I want to write a Cardano Lattice cipher in Python and render it in Pygame. I got the following code:

import pygame as pg
import time
import sys
from math import ceil
from math import sqrt
from random import randint
import string
import random
pg.init()

pg.display.set_caption('Решето Кардано')

phrase_input = input().replace(' ', '')
dlinna_phrasi = len(phrase_input)
dlinna_tablici = ceil(sqrt(dlinna_phrasi))
if dlinna_tablici % 2 != 0:
    dlinna_tablici += 1


clock = pg.time.Clock()
pivot = [1920 // 2,  1080 // 2]
offset = pg.math.Vector2()
angle = 0

Moi_Font = pg.font.Font(None, 40)
screen = pg.display.set_mode((1920 , 1080))
screen.fill('black')

table = [[0] * dlinna_tablici for _ in range(dlinna_tablici)]
letter_table = [['0'] * dlinna_tablici for q in range(dlinna_tablici)]

yellow_image_orig = pg.Surface((dlinna_tablici*50 , dlinna_tablici*50))
yellow_image_orig.set_colorkey('black')
yellow_image_orig.fill('yellow')
yellow_image_orig.set_colorkey('black')
yellow_rect = yellow_image_orig.get_rect()
yellow_rect.center = (1920 // 2 ,  1080// 2)
yellow_rect_center = yellow_rect.center
left_up_ugolY = yellow_rect_center[1] - (dlinna_tablici*50) // 2
left_up_ugolX = yellow_rect_center[0] - (dlinna_tablici*50) // 2
for n in range(dlinna_tablici):
    for m in range(dlinna_tablici):
        if n * dlinna_tablici + m < len(phrase_input):
            letter_table[m][n] = phrase_input[n * dlinna_tablici + m]
        else:
            letter_table[m][n] = random.choice(string.ascii_letters)
        Moi_text = Moi_Font.render(letter_table[m][n], 0, 'white')
        time.sleep(0.1)
        screen.blit(Moi_text, (m*50 + left_up_ugolX + 10, n*50 + left_up_ugolY + 10))
        pg.display.flip()
        print(letter_table[m][n], end = ' ')
    print()

time.sleep(2)
screen.blit(yellow_image_orig, yellow_rect)
pg.display.update()

def rotate(surface, angle, pivot, offset):
    rotated_image = pg.transform.rotate(surface, -angle)
    rotated_offset = offset.rotate(angle)
    rect = rotated_image.get_rect(center=pivot+rotated_offset)
    return rotated_image, rect


time.sleep(2)

COL = int((dlinna_tablici*dlinna_tablici)/4)
proverka_1 = 0
while proverka_1 < COL:
    i = randint(0, dlinna_tablici - 1)
    j = randint(0, dlinna_tablici - 1)
    if table[i][j] == 0:
        table[i][j] = 1
        table[j][dlinna_tablici - 1 - i] = 2
        table[dlinna_tablici - 1 - i][dlinna_tablici - 1 - j] = 3
        table[dlinna_tablici - 1 - j][dlinna_tablici - 1 -(dlinna_tablici - 1 - i)] = 4

        time.sleep(0.5)
        pg.draw.rect(yellow_image_orig, 'black', (i*50 + 5, j*50 + 5, 40, 40))
        pg.draw.rect(screen, 'black', (i * 50 + 5 + left_up_ugolX, j * 50 + 5 + left_up_ugolY, 40, 40))
        pg.display.update()
        for n in range(dlinna_tablici):
            for m in range(dlinna_tablici):
                if table[n][m] == 1:
                    Moi_text = Moi_Font.render(letter_table[n][m], 0, 'white')
                    screen.blit(Moi_text, (n * 50 + left_up_ugolX + 10, m * 50 + left_up_ugolY + 10))
                    pg.display.update()

        proverka_1 += 1
        pg.display.update()






time.sleep(2)
while angle < 90:
    angle += 1
    rotated_image, rect = rotate(yellow_image_orig, angle, pivot, offset)
    screen.fill('black')
    screen.blit(rotated_image, rect)
    pg.display.flip()
    clock.tick(30)


time.sleep(1)
for n in range(dlinna_tablici):
    for m in range(dlinna_tablici):
        if table[n][m] == 4:
            time.sleep(0.5)
            Moi_text = Moi_Font.render(letter_table[n][m], 0, 'white')
            screen.blit(Moi_text, (n * 50 + left_up_ugolX + 10, m * 50 + left_up_ugolY + 10))
            pg.display.update()


time.sleep(3)
while angle < 180:
    angle += 1
    rotated_image, rect = rotate(yellow_image_orig, angle, pivot, offset)
    screen.fill('black')
    screen.blit(rotated_image, rect)
    pg.display.update()
    clock.tick(30)

time.sleep(1)
for n in range(dlinna_tablici):
    for m in range(dlinna_tablici):
        if table[n][m] == 3:
            time.sleep(0.5)
            Moi_text = Moi_Font.render(letter_table[n][m], 0, 'white')
            screen.blit(Moi_text, (n * 50 + left_up_ugolX + 10, m * 50 + left_up_ugolY + 10))
            pg.display.update()

time.sleep(3)
while angle < 270:
    angle += 1
    rotated_image, rect = rotate(yellow_image_orig, angle, pivot, offset)
    screen.fill('black')
    screen.blit(rotated_image, rect)
    pg.display.flip()
    clock.tick(30)

time.sleep(1)
for n in range(dlinna_tablici):
    for m in range(dlinna_tablici):
        if table[n][m] == 2:
            time.sleep(0.5)
            Moi_text = Moi_Font.render(letter_table[n][m], 0, 'white')
            screen.blit(Moi_text, (n * 50 + left_up_ugolX + 10, m * 50 + left_up_ugolY + 10))
            pg.display.update()

pg.display.update()
while True:
   for event in pg.event.get():
        if event.type == pg.QUIT:
             pg.quit()
             sys.exit()

My program works, but the Pygame window appears in the background, and as soon as I try to bring it to the front using ALT + TAB, the window appears in the foreground, but the program stops responding. I am working on Windows 10 and Pycharm, Python version 3.6, tried using IDLE but the result hasn't changed. Help me pls

0 Answers0