✨
This commit is contained in:
122
main.py
122
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())
|
||||
|
||||
Reference in New Issue
Block a user