This commit is contained in:
2026-02-26 16:40:36 +01:00
parent 3ef05264f7
commit 95fa854857
2 changed files with 95 additions and 27 deletions

122
main.py
View File

@@ -19,20 +19,22 @@ WORD_BORDER_COLOR = "#fffcf2"
WORD_SHADOW_COLOR = "#000000"
# Drawing constants
SCREEN_WIDTH = 5120
SCREEN_HEIGHT = 2880
SCALING_FACTOR = 1
PAGE_MARGIN = 30
PAGE_BORDER_RADIUS = 80
PAGE_BORDER_WIDTH = 20
SCREEN_WIDTH = SCALING_FACTOR*1280
SCREEN_HEIGHT = SCALING_FACTOR*720
WORD_WIDTH = 432
WORD_HEIGHT = 90
WORD_MARGIN = 20
WORD_BORDER_RADIUS = 60
WORD_BORDER_WIDTH = 8
WORD_FONT_SIZE = 44
WORD_SHADOW_SIZE = 8
PAGE_MARGIN = SCALING_FACTOR*8
PAGE_BORDER_RADIUS = SCALING_FACTOR*20
PAGE_BORDER_WIDTH = SCALING_FACTOR*5
WORD_WIDTH = SCALING_FACTOR*108
WORD_HEIGHT = SCALING_FACTOR*22
WORD_MARGIN = SCALING_FACTOR*5
WORD_BORDER_RADIUS = SCALING_FACTOR*15
WORD_BORDER_WIDTH = SCALING_FACTOR*2
WORD_FONT_SIZE = SCALING_FACTOR*11
WORD_SHADOW_SIZE = SCALING_FACTOR*2
GRID_WIDTH = 6
GRID_HEIGHT = 25
@@ -40,28 +42,28 @@ GRID_HEIGHT = 25
WORD_PAGE_WIDTH = PAGE_BORDER_WIDTH*2+(WORD_WIDTH+WORD_MARGIN)*GRID_WIDTH+WORD_MARGIN
WORD_PAGE_HEIGHT = SCREEN_HEIGHT-PAGE_MARGIN*2
TAB_WIDTH = 120
TAB_HEIGHT = 160
TAB_MARGIN = 30
TAB_WIDTH = SCALING_FACTOR*30
TAB_HEIGHT = SCALING_FACTOR*40
TAB_MARGIN = SCALING_FACTOR*8
TAB_POS = Vector2(WORD_PAGE_WIDTH+PAGE_MARGIN*2,PAGE_MARGIN)
TEXT_PAGE_POS = Vector2(WORD_PAGE_WIDTH+PAGE_MARGIN*2,TAB_HEIGHT+PAGE_MARGIN*2)
TEXT_PAGE_WIDTH = SCREEN_WIDTH-(WORD_PAGE_WIDTH+PAGE_MARGIN*3)
TEXT_PAGE_HEIGHT = SCREEN_HEIGHT-(TAB_HEIGHT+PAGE_MARGIN*3)
TEXT_MARGIN = 40
TEXT_TOP_MARGIN = 68
TEXT_MARGIN = SCALING_FACTOR*10
TEXT_TOP_MARGIN = SCALING_FACTOR*17
TEXT_WIDTH = TEXT_PAGE_WIDTH - PAGE_BORDER_WIDTH*2 - TEXT_MARGIN*2
TEXT_HEIGHT = TEXT_PAGE_HEIGHT - PAGE_BORDER_WIDTH*2 - TEXT_MARGIN*2
WORD_SLOT_SPACING = " "*16
WORD_SLOT_NUDGING = 25
WORD_SLOT_NUDGE_DOWN = -5
SLANT = 80
WORD_SLOT_NUDGING = SCALING_FACTOR*4
WORD_SLOT_NUDGE_DOWN = -SCALING_FACTOR
SLANT = SCALING_FACTOR*20
INDICATOR_SIZE = 80
INDICATOR_BORDER = 20
INDICATOR_MARGIN = 60
INDICATOR_SIZE = SCALING_FACTOR*20
INDICATOR_BORDER = SCALING_FACTOR*5
INDICATOR_MARGIN = SCALING_FACTOR*15
INDICATOR_POS = Vector2(TEXT_PAGE_WIDTH-(INDICATOR_SIZE+INDICATOR_MARGIN),TEXT_PAGE_HEIGHT-(INDICATOR_SIZE+INDICATOR_MARGIN))
class WordColor(Enum):
@@ -325,9 +327,10 @@ def draw_tab(n: int, screen: pygame.surface.Surface, font: pygame.font.Font, sel
pygame.Rect(
pos.x+PAGE_BORDER_WIDTH//2,
pos.y+PAGE_BORDER_WIDTH//2,
TAB_WIDTH-PAGE_BORDER_WIDTH,
TAB_HEIGHT-PAGE_BORDER_WIDTH
)
TAB_WIDTH-PAGE_BORDER_WIDTH+1,
TAB_HEIGHT-PAGE_BORDER_WIDTH+1
),
0, PAGE_BORDER_RADIUS//4
)
pygame.draw.rect(
@@ -350,6 +353,65 @@ def draw_tab(n: int, screen: pygame.surface.Surface, font: pygame.font.Font, sel
))
def draw_victory(screen: pygame.surface.Surface, font: pygame.font.Font):
# Darken everything
s = pygame.Surface((SCREEN_WIDTH,SCREEN_HEIGHT))
s.set_alpha(128)
s.fill((0,0,0))
screen.blit(s, (0,0))
# Draw text box
pos = Vector2(SCREEN_WIDTH//3,SCREEN_HEIGHT//3)
size = Vector2(SCREEN_WIDTH,SCREEN_HEIGHT) - 2*pos
pygame.draw.rect(
screen,
PAGE_BACKGROUND_COLOR,
pygame.Rect(
pos.x+PAGE_BORDER_WIDTH//2,
pos.y+PAGE_BORDER_WIDTH//2,
size.x-PAGE_BORDER_WIDTH,
size.y-PAGE_BORDER_WIDTH
),
border_radius=PAGE_BORDER_RADIUS
)
pygame.draw.rect(
screen,
PAGE_BORDER_COLOR,
pygame.Rect(
pos.x,
pos.y,
size.x,
size.y
),
PAGE_BORDER_WIDTH, PAGE_BORDER_RADIUS
)
# Text
text = pygame.transform.scale2x(font.render("CONGRATULATIONS",False,"#000000"))
text_pos = pos + Vector2(size.x//2,PAGE_BORDER_WIDTH+PAGE_MARGIN)
x,y = text.get_size()
screen.blit(text,(
text_pos.x-x//2,
text_pos.y
))
text_small = font.render("You solved every page",False,"#000000")
text_small_pos = text_pos + Vector2(0,y+PAGE_MARGIN)
x,_ = text_small.get_size()
screen.blit(text_small,(
text_small_pos.x-x//2,
text_small_pos.y
))
# Rose
image_pos = pos + Vector2((size.x-size.y)//2,(size.y//5)*2)
image_size = Vector2(size.y,size.y//2)
image = pygame.transform.rotate(pygame.image.load("purple_rose.png"),90)
scaled_image = pygame.transform.scale2x(pygame.transform.scale(image,image_size//2))
screen.blit(scaled_image,image_pos)
def main(data: dict):
pygame.init()
pygame.font.init()
@@ -544,8 +606,10 @@ def main(data: dict):
while running:
victory = all(p.solved() == SolvedState.Correct for p in pages)
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
if event.type == pygame.MOUSEBUTTONDOWN and not victory:
click_slot()
i = focused()
if isinstance(i,int) and pages[i-1].solved() == SolvedState.Correct:
@@ -607,6 +671,10 @@ def main(data: dict):
if held_word is not None:
draw_word(held_word, drawer, font)
# drawing the final "you win" text box
if victory:
draw_victory(drawer, font)
# Draw everything to the screen
frame = pygame.transform.scale(drawer,screen.get_size())
screen.blit(frame,frame.get_rect())