✨
This commit is contained in:
122
main.py
122
main.py
@@ -19,20 +19,22 @@ WORD_BORDER_COLOR = "#fffcf2"
|
|||||||
WORD_SHADOW_COLOR = "#000000"
|
WORD_SHADOW_COLOR = "#000000"
|
||||||
|
|
||||||
# Drawing constants
|
# Drawing constants
|
||||||
SCREEN_WIDTH = 5120
|
SCALING_FACTOR = 1
|
||||||
SCREEN_HEIGHT = 2880
|
|
||||||
|
|
||||||
PAGE_MARGIN = 30
|
SCREEN_WIDTH = SCALING_FACTOR*1280
|
||||||
PAGE_BORDER_RADIUS = 80
|
SCREEN_HEIGHT = SCALING_FACTOR*720
|
||||||
PAGE_BORDER_WIDTH = 20
|
|
||||||
|
|
||||||
WORD_WIDTH = 432
|
PAGE_MARGIN = SCALING_FACTOR*8
|
||||||
WORD_HEIGHT = 90
|
PAGE_BORDER_RADIUS = SCALING_FACTOR*20
|
||||||
WORD_MARGIN = 20
|
PAGE_BORDER_WIDTH = SCALING_FACTOR*5
|
||||||
WORD_BORDER_RADIUS = 60
|
|
||||||
WORD_BORDER_WIDTH = 8
|
WORD_WIDTH = SCALING_FACTOR*108
|
||||||
WORD_FONT_SIZE = 44
|
WORD_HEIGHT = SCALING_FACTOR*22
|
||||||
WORD_SHADOW_SIZE = 8
|
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_WIDTH = 6
|
||||||
GRID_HEIGHT = 25
|
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_WIDTH = PAGE_BORDER_WIDTH*2+(WORD_WIDTH+WORD_MARGIN)*GRID_WIDTH+WORD_MARGIN
|
||||||
WORD_PAGE_HEIGHT = SCREEN_HEIGHT-PAGE_MARGIN*2
|
WORD_PAGE_HEIGHT = SCREEN_HEIGHT-PAGE_MARGIN*2
|
||||||
|
|
||||||
TAB_WIDTH = 120
|
TAB_WIDTH = SCALING_FACTOR*30
|
||||||
TAB_HEIGHT = 160
|
TAB_HEIGHT = SCALING_FACTOR*40
|
||||||
TAB_MARGIN = 30
|
TAB_MARGIN = SCALING_FACTOR*8
|
||||||
TAB_POS = Vector2(WORD_PAGE_WIDTH+PAGE_MARGIN*2,PAGE_MARGIN)
|
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_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_WIDTH = SCREEN_WIDTH-(WORD_PAGE_WIDTH+PAGE_MARGIN*3)
|
||||||
TEXT_PAGE_HEIGHT = SCREEN_HEIGHT-(TAB_HEIGHT+PAGE_MARGIN*3)
|
TEXT_PAGE_HEIGHT = SCREEN_HEIGHT-(TAB_HEIGHT+PAGE_MARGIN*3)
|
||||||
|
|
||||||
TEXT_MARGIN = 40
|
TEXT_MARGIN = SCALING_FACTOR*10
|
||||||
TEXT_TOP_MARGIN = 68
|
TEXT_TOP_MARGIN = SCALING_FACTOR*17
|
||||||
TEXT_WIDTH = TEXT_PAGE_WIDTH - PAGE_BORDER_WIDTH*2 - TEXT_MARGIN*2
|
TEXT_WIDTH = TEXT_PAGE_WIDTH - PAGE_BORDER_WIDTH*2 - TEXT_MARGIN*2
|
||||||
TEXT_HEIGHT = TEXT_PAGE_HEIGHT - 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_SPACING = " "*16
|
||||||
WORD_SLOT_NUDGING = 25
|
WORD_SLOT_NUDGING = SCALING_FACTOR*4
|
||||||
WORD_SLOT_NUDGE_DOWN = -5
|
WORD_SLOT_NUDGE_DOWN = -SCALING_FACTOR
|
||||||
SLANT = 80
|
SLANT = SCALING_FACTOR*20
|
||||||
|
|
||||||
INDICATOR_SIZE = 80
|
INDICATOR_SIZE = SCALING_FACTOR*20
|
||||||
INDICATOR_BORDER = 20
|
INDICATOR_BORDER = SCALING_FACTOR*5
|
||||||
INDICATOR_MARGIN = 60
|
INDICATOR_MARGIN = SCALING_FACTOR*15
|
||||||
INDICATOR_POS = Vector2(TEXT_PAGE_WIDTH-(INDICATOR_SIZE+INDICATOR_MARGIN),TEXT_PAGE_HEIGHT-(INDICATOR_SIZE+INDICATOR_MARGIN))
|
INDICATOR_POS = Vector2(TEXT_PAGE_WIDTH-(INDICATOR_SIZE+INDICATOR_MARGIN),TEXT_PAGE_HEIGHT-(INDICATOR_SIZE+INDICATOR_MARGIN))
|
||||||
|
|
||||||
class WordColor(Enum):
|
class WordColor(Enum):
|
||||||
@@ -325,9 +327,10 @@ def draw_tab(n: int, screen: pygame.surface.Surface, font: pygame.font.Font, sel
|
|||||||
pygame.Rect(
|
pygame.Rect(
|
||||||
pos.x+PAGE_BORDER_WIDTH//2,
|
pos.x+PAGE_BORDER_WIDTH//2,
|
||||||
pos.y+PAGE_BORDER_WIDTH//2,
|
pos.y+PAGE_BORDER_WIDTH//2,
|
||||||
TAB_WIDTH-PAGE_BORDER_WIDTH,
|
TAB_WIDTH-PAGE_BORDER_WIDTH+1,
|
||||||
TAB_HEIGHT-PAGE_BORDER_WIDTH
|
TAB_HEIGHT-PAGE_BORDER_WIDTH+1
|
||||||
)
|
),
|
||||||
|
0, PAGE_BORDER_RADIUS//4
|
||||||
)
|
)
|
||||||
|
|
||||||
pygame.draw.rect(
|
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):
|
def main(data: dict):
|
||||||
pygame.init()
|
pygame.init()
|
||||||
pygame.font.init()
|
pygame.font.init()
|
||||||
@@ -544,8 +606,10 @@ def main(data: dict):
|
|||||||
|
|
||||||
|
|
||||||
while running:
|
while running:
|
||||||
|
victory = all(p.solved() == SolvedState.Correct for p in pages)
|
||||||
|
|
||||||
for event in pygame.event.get():
|
for event in pygame.event.get():
|
||||||
if event.type == pygame.MOUSEBUTTONDOWN:
|
if event.type == pygame.MOUSEBUTTONDOWN and not victory:
|
||||||
click_slot()
|
click_slot()
|
||||||
i = focused()
|
i = focused()
|
||||||
if isinstance(i,int) and pages[i-1].solved() == SolvedState.Correct:
|
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:
|
if held_word is not None:
|
||||||
draw_word(held_word, drawer, font)
|
draw_word(held_word, drawer, font)
|
||||||
|
|
||||||
|
# drawing the final "you win" text box
|
||||||
|
if victory:
|
||||||
|
draw_victory(drawer, font)
|
||||||
|
|
||||||
# Draw everything to the screen
|
# Draw everything to the screen
|
||||||
frame = pygame.transform.scale(drawer,screen.get_size())
|
frame = pygame.transform.scale(drawer,screen.get_size())
|
||||||
screen.blit(frame,frame.get_rect())
|
screen.blit(frame,frame.get_rect())
|
||||||
|
|||||||
BIN
purple_rose.png
Normal file
BIN
purple_rose.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.7 MiB |
Reference in New Issue
Block a user