From fe6be98f26cfde3a379db40992e1efdd637b3e09 Mon Sep 17 00:00:00 2001 From: Skullheadx <94652084+Skullheadx@users.noreply.github.com> Date: Thu, 24 Nov 2022 15:48:35 -0500 Subject: [PATCH] unknown word list added --- Main/__pycache__/game.cpython-310.pyc | Bin 2573 -> 3367 bytes Main/__pycache__/setup.cpython-310.pyc | Bin 2133 -> 2118 bytes Main/__pycache__/tile.cpython-310.pyc | Bin 2399 -> 2399 bytes .../__pycache__/words_display.cpython-310.pyc | Bin 0 -> 3754 bytes Main/game.py | 27 ++++-- Main/main.py | 2 +- Main/setup.py | 2 +- Main/tile.py | 2 +- Main/words_display.py | 84 ++++++++++++++++++ 9 files changed, 109 insertions(+), 8 deletions(-) create mode 100644 Main/__pycache__/words_display.cpython-310.pyc create mode 100644 Main/words_display.py diff --git a/Main/__pycache__/game.cpython-310.pyc b/Main/__pycache__/game.cpython-310.pyc index e1d42ecda27c91cf132299bd4ede3f6058475007..b47c4e2aabc74fa44ded3314e5b4f0689b42d9dd 100644 GIT binary patch delta 1979 zcmeAbSuVww&&$ijz`(%pd}4jFlHf!>nYbVZ28I-d6viBeC=kt*!x#dhnRA$OnWLB) zL2Q;BmR!~-Rxq12hb@;qiXF^m%i+l7jN)WuaA!ziPvK}`Na1K^isDLP3}(>ed;fNAU;fxYW z5lrDu;b~!v5>DYw;cH=t5=r4t5olqE5>4R>X3!LxEXSyC@KTO}f#D@HhyZ!#B`X61 zgI_We$VwR0J}r2&5HazA(r*h)p0CNb4;wo0QDt zlH~l{0y|BRpacU0LzSX?Vs5IQTzq_HUS>&ryq--?esW??v7H{0V)e*4wZOf`%(3|YJjnHWJ4AymT<4@wsxHg6e2QE3fBmM};xkF$m$i=l+4jG?Hm zh9OG?Bv!+aCAvTiB%Z=nBAz9&kQtO_z){EU2Z;?(XueDVxl#s1fD&$qrc{vyh-1dU zz#wvqt+XH|u_U#~79^wtB5WofVAEzan*4@MLS6$TpbZKd=ERhgB6ARnwJ5bXwWP?A zfq`MN9J_9cB}k1Ph|mWS1|Y(kfdLewPGI#ZsW~NykT?a06(}Z)JQ)}mOh8FOiGhJZ zj!}kDfKiN*kCBf_fKh>ojhTy4fQf^Vhnb6!i;;s-YVulk>3UEq0_7}luKL8lz)-`u zfT4sji)kSvIPjPku+%U@*{oS?CG1%oH4Is-3pf`ta5JPZN`nHGc>&u(hAb{|5Sv?q zA&n`8sh6>qsf1?%Zw*rxUkyVRzXU@KQx;bZQRWM{pBY8yz%C=?zM=hIQ5hyM-8E>&Ar{FG@_wEG^b# zDslluLI{Z90mX#uNRY77h50#NFzzr~%JlAa26WDzK_+~Ra`4Dyb54|0sW#hR2_m6~&lB`GJfq{t9t zjwy(+0TH0IrpZzSPEIVvrA28)k_-$CQOrr{Md;}&f`Ng-AC#^{7#J9M7DfrG`Yb+KY1gka3UyH zi$GbU2pm+P$|#B#6m7+zcmh>+;Ia*@51R{aaoFVMrDxk@9i%HMm7Gq`+C`^jDCLdyU zXB7k4G?|aZpXVhr0|UcLRt5$JO@+z7SdLDAvcqZRr(_-YB%+7wezJ?*5xrQN&p@t!gw~V1Ew}v50 z2qc!r2@);gDPt%qt6|6z28q=$WQi;g1&ODym561D*Dz!;gS{pJ_6oaSkp#$gMvxOz zKrB%ZA})QNrD2X2$agSL1CjXS(j6sn}d;uiHnhok%Ligav-PlLfUgC>h#ktE24jJMd5Q}aqvi(Z1FPm}i+OIl`5&Mo$U#GKTUlGIy# z1x1s0aPiiI1CAx7D6#w&OHxi|NfF3@w>Ut7RFs-rQsfEpCu2pCKFE6@Ulo~xjE4pQ zOL1vY8oK}eU}+d+GY=yVlMWSgO8Dqk&TIsk&Th1kcowng^}eS7Ym03k3{V>CO1E&G$+*#lx&MZ?%-hHVFW=T FW&o$I@ZP5u~fz^@hFLOh7^uPj8T&A3@Mx`TrCVKT+K{TQtk{X+$lUQ3@JR#Oi|LC k`56DRGRjQmW1l#A75i)f9!4G}E=CqcHYN^6J`N!s0976xS^xk5 delta 147 zcmX>ma8-aepO=@5fq{YHQd3>B)I?rc#wQcCr~9NbWeF~1iV{j?%Hm%joWiz{k&z*l zDNAI5=t71lu@v?w@l?hvi73f*h7^uPj8RhV3@Mx`TrCVKT+K{T((Vi?+$lUQ3@JR# zOi?nMxfuVmGRjWoVxPzz#Tn!p>>1_gg{vU|_JDRG++_mx19ih=Yuo85kHG7#J9eH5eEeQW#Pga~MJx+!<1sQkYv9 zQka{Wq8Qy7Qdm-0TNqMUo0+1RQrLnSG}&K*%+O@K#i*4GVj*J|n2A;l3=F9ZQH&`J zQB0}KSu6`!Qy5d27BWS#q%fzjv@k@mrLd;3wJ=1nr?97Rv@k?*q;RHiwJ=0+rf>%{ zX!6|R_Q@ z6_`UnjsSVw8RWGH1_p)_h6Ri@j0+iS7~+{~m}(f}nbR3+7~)xK7_yjM7-FSrnQIt8 zPOM?bVq3tT!Uz(tVU}c=4GxMLW)X(j40BmhSV}muI2ST6WMpJ0y2a|`n&Ma40RDY^N1F)sPZrManjCB-rBnI#^jNipU5 zMJc)&rFkVWzKNN6U~X|d)Ox*w%3B=q@tJvpwI%D&cn#Y$i~RUXvE0!ze)rt z8uVaFQ9_%Ifq?-Y+FhW8#F)a=!cYQAK#VR7&5X6oHB2rHu{^abHOwW9H7w1HtPGM2 zDJ4?3q!0*EjU(cSR@&0m_eijLoI6!YYJ;NOOaCzLl)BlkUZ-G zwiLD+*4Yf8#8blpjUUbu_ACx){K$dhhs!US5tb?#7#Nrs7#Ki_BN*gWP_oHns9}g@ zuVt)ZOkogbNMW4JRLB&}pvm+Sq^k%_fI?Z5=@yfoL6Hb3{6Tzh&=-LWxW#3Yl9^nR zoS$1@#}6_UWQ7<*l^Sxel@_EVmZa+0{02wI(BEXh`!mtpnVwOylJOQ}BD&|fK&l|}k_-$CpFu`)F;;0Hdl#exWRM;_?m!|C zO(=nY?4}}RP;{t(qJybO6&xMqnJFb1Md~1NaOi^xa1?NY3?;3FE}kE!Af3+ET)BwwM-@8 zcx`5MVTe_RrU>Q~#%!h{`5MLrtTik(ELm)z9G=3|%eat*l3$RMnpUF82@ZiGP}%?oz%9d~{ijU9DPbtj-v3cU-3riDoATkg) zgEI9k7PtJok|J?XbSZ%dkX1z%AQm{`AP7(rDgsq~pi-?ER5Wlf@G){QajDT*zHC5k>A&M)7BZaetA&NVND}}p-A&Mu3 zCxy3#A&NJJFPK4-|CUf_UUpu7d0u#aQ3|vUF9JF7r5pnT!%I;5dI|FAOHg`2sZ2nA zfhV96SOP++x6!wNctWHtK2QxC53AiPZ*hb8#qnwRrFkj0n2SquZ?Tmn=9H!u-{LOGFG@rN_as1Rgei*^)KHXQ0H+`p5rz^_fyE9gl4=;TI2Uj&WXR%fhNLG@ zGX)~TBMwu?yAWgw3rNL67En9GuLxwFCLbhC>4AI%YUJHwthmLRnOB@zQe*-W(*+Tr z04M^L-jHwumkHV+2{jM_D%&*~A!!0FP(Ug{DWn+GrjTJ&U{qpc`G++XU@g-@sUGAg zkV}i_fwN>5V-`~lV+nH>OAW&URINMY(_WdwPj6VeuE zWT;_Wz*WPL#SOw)tR)N!cxo83c(eE*`m*>_n57xSK{^D$fzO*Im;w&eEZ!_Zuu4G* z1`!5vhJ{QitdJT5oW|JvG#PL4Cgm5Uq!z^&C8lJS7HcvUfkO(^Isu1xI;6sSV6Vw| zi!C`duOzidQwS0XpknqG3#eu*0wum%Tt1%e9wFc?38^r+Q&ZAYp#~R$lIAVeq|~a^ z97wbngCYYQRqzs`$PXk2c7Q*K1&UHlCP-A7f&|dw3*-V&Hh{+$4`Uchl{l7U45?lC ziY!5;D-UZCNQIv!^DWlm)RNMIB2bwD7DK8t!TtjkO1C&{Aa$P|sL4_c%A_0&e9S`H E0Q(IXwEzGB literal 0 HcmV?d00001 diff --git a/Main/game.py b/Main/game.py index 3eca2f2..cddbd90 100644 --- a/Main/game.py +++ b/Main/game.py @@ -1,8 +1,10 @@ +import pygame + from setup import * from tile import Tile from board import Board from word_connector import WordConnector - +from words_display import UnknownWordDisplay class Game: font = pygame.font.Font("font/Silkscreen-Regular.ttf", 40) @@ -15,7 +17,10 @@ class Game: colour_converter = {correct_colour: True, found_colour: False, wrong_colour: False} - + word_disp_separation_distance = 30 + bezel = 3 + edge_radius = 10 + inset = 5 def __init__(self, imported_file_name=None): if imported_file_name is None: length, width = 4, 4 @@ -32,13 +37,17 @@ class Game: self.seen = set() self.points = 0 self.title = self.title_font.render("Word Hunt", True, Colour.BLACK) - self.board = Board(pygame.Vector2(SCREEN_WIDTH / 2, SCREEN_HEIGHT *3/5), length, width, self.letters) + self.board = Board(pygame.Vector2(SCREEN_WIDTH / 3, SCREEN_HEIGHT *3/5), length, width, self.letters) + self.word_frequency = {i+1:0 for i in range(length * width)} + for i in self.word_list: + self.word_frequency[len(i)] += 1 self.word = "" self.word_display = self.font.render(self.word, True, Colour.BLACK, Colour.LIGHT_GRAY) self.word_connector = WordConnector() self.bg_colour = Colour.LIGHT_GRAY + self.unknown_word_display = UnknownWordDisplay((SCREEN_WIDTH*2/3-UnknownWordDisplay.inset,self.board.position.y),self.word_frequency) def update(self, delta): self.word += self.board.update(delta, self.bg_colour, self.points) @@ -55,23 +64,31 @@ class Game: self.word = "" self.word_connector.reset() + + self.unknown_word_display.update(delta,self.seen) self.bg_colour = self.wrong_colour + if self.word in self.seen: self.bg_colour = self.found_colour elif self.word in word_list: self.bg_colour = self.correct_colour - self.word_display = self.font.render(self.word, True, Colour.BLACK, self.bg_colour) + self.word_display = self.font.render(self.word, True, Colour.BLACK) def draw(self, surf): surf.fill(Palette.primary_shade1) self.board.draw(surf) - surf.blit(self.word_display, self.word_display.get_rect(center=(center.x, SCREEN_HEIGHT / 5))) + r = self.word_display.get_rect(center=(center.x, -self.word_display.get_height()/2 + self.board.get_rect().top - self.word_disp_separation_distance)) + bgr = pygame.Rect(r.left-self.inset,r.top,r.width + self.inset*2, r.height) + pygame.draw.rect(surf,self.bg_colour,bgr, border_radius=self.edge_radius) + pygame.draw.rect(surf,Colour.DARK_GRAY,bgr, width = self.bezel,border_radius=self.edge_radius) + surf.blit(self.word_display, r) surf.blit(self.title, self.title.get_rect(center=(center.x, SCREEN_HEIGHT / 10))) self.word_connector.draw(surf) + self.unknown_word_display.draw(surf) # pygame.draw.circle(surf, Colour.WHITE,r.center,5) # pygame.draw.line(surf, Colour.BLACK, (0, SCREEN_HEIGHT / 2), (SCREEN_WIDTH, SCREEN_HEIGHT / 2)) diff --git a/Main/main.py b/Main/main.py index ba48ecb..cb2310f 100644 --- a/Main/main.py +++ b/Main/main.py @@ -1,7 +1,7 @@ from setup import * from game import Game -puzzle = f"puzzles/PuzzlePack{4}/puzzle{4}.txt" +puzzle = f"puzzles/PuzzlePack{4}/puzzle{10}.txt" print(puzzle) scene = Game(puzzle) diff --git a/Main/setup.py b/Main/setup.py index ce10e43..6f7e4e1 100644 --- a/Main/setup.py +++ b/Main/setup.py @@ -13,7 +13,7 @@ pygame.init() SCREEN_WIDTH, SCREEN_HEIGHT = 720, 720 dimensions = pygame.Vector2(SCREEN_WIDTH, SCREEN_HEIGHT) center = pygame.Vector2(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2) -screen = pygame.display.set_mode(dimensions, pygame.RESIZABLE) +screen = pygame.display.set_mode(dimensions) pygame.display.set_caption("Word Hunt") clock = pygame.time.Clock() diff --git a/Main/tile.py b/Main/tile.py index 6a61090..e366cc2 100644 --- a/Main/tile.py +++ b/Main/tile.py @@ -3,7 +3,7 @@ import pygame.mouse from setup import * class Tile: - side_length = 85 + side_length = 80 bezel = 5 cutoff = 8 edge_radius = 15 diff --git a/Main/words_display.py b/Main/words_display.py new file mode 100644 index 0000000..56d6c94 --- /dev/null +++ b/Main/words_display.py @@ -0,0 +1,84 @@ +from setup import * + + +class ListDisplay: + font = pygame.font.Font("font/Silkscreen-Regular.ttf", 22) + + def __init__(self, position, frequencies): + self.position = pygame.Vector2(position) + self.frequencies = frequencies + self.display = [] + for i in self.frequencies: + self.display.append(self.font.render(f"({self.frequencies[i]}) {'?' * i}", True, Colour.BLACK)) + + def update(self, delta, seen): + f = {i + 1: 0 for i in range(16)} + for i in seen: + f[len(i)] += 1 + self.display = [] + for i in self.frequencies: + n = self.frequencies[i] - f[i] + if n > 0: + self.display.append(self.font.render(f"({n}) {'?' * i}", True, Colour.BLACK)) + + def get_rect(self): + def get_height(a): + return a.get_rect().height + + def get_width(a): + return a.get_rect().width + l,h = 0,0 + for i in self.display: + l =max(l, get_width(i)) + h += get_height(i) + + return pygame.Rect(self.position, (l,h)) + + def draw(self, surf): + prev = pygame.Vector2(self.position) + for i, val in enumerate(self.display): + if i == 0: + surf.blit(val, val.get_rect(topleft=self.position)) + + else: + surf.blit(val, prev) + prev.y += val.get_height() + +class UnknownWordDisplay: + font = pygame.font.Font("font/Silkscreen-Regular.ttf", 30) + title_font = pygame.font.Font("font/Silkscreen-Regular.ttf", 24) + inset = 15 + bezel = 5 + edge_radius = 15 + + def __init__(self, position, word_frequency): + self.position = pygame.Vector2(position) + self.word_frequency = word_frequency + self.words_found = 0 + self.total_words = sum(word_frequency.values()) + # self.title = self.title_font.render("Word Bank", True, Colour.DARK_GRAY) + self.title = self.title_font.render(f"Words: {self.words_found} / {self.total_words}", True, Colour.DARK_GRAY) + self.list_display = ListDisplay(self.position+ pygame.Vector2(0,self.title.get_height()/2), self.word_frequency) + + def update(self, delta, seen): + self.list_display.update(delta, seen) + self.words_found= len(seen) + self.title = self.title_font.render(f"Words: {self.words_found}/{self.total_words}", True, Colour.DARK_GRAY) + + def get_rect(self): + return pygame.Rect(self.position.x - self.inset, self.position.y - self.inset, + 2 * self.inset + max(self.title.get_width(), self.list_display.get_rect().width), + self.inset + self.list_display.get_rect().height + max(self.title.get_height(),self.inset)) + + def draw(self, surf): + pygame.draw.rect(surf, Colour.LIGHT_GRAY, self.get_rect(), border_radius=self.edge_radius) + pygame.draw.rect(surf, Colour.DARK_GRAY, self.get_rect(), width=self.bezel, border_radius=self.edge_radius) + self.list_display.draw(surf) + + + + surf.blit(self.title,self.title.get_rect(center=pygame.Vector2(self.position.x + self.get_rect().width/2 - self.inset,self.position.y + 0.5 * (self.list_display.position.y - self.position.y)))) +#self.position.y-self.inset + max(self.title.get_height(),self.inset)/2) + + # pygame.draw.circle(surf, Colour.RED,self.position, 4) + # pygame.draw.circle(surf, Colour.BLUE,self.list_display.position, 5) \ No newline at end of file -- 2.54.0