diff --git a/main.py b/main.py index 4259115..cba732f 100644 --- a/main.py +++ b/main.py @@ -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()) diff --git a/purple_rose.png b/purple_rose.png new file mode 100644 index 0000000..a482a99 Binary files /dev/null and b/purple_rose.png differ