From 8a8f39c6ce05fe176dc12c8a40c65c5d5a852ea2 Mon Sep 17 00:00:00 2001 From: Dominik Krenn Date: Sun, 12 Oct 2025 21:56:23 +0200 Subject: [PATCH] initital commit UwU --- .gitignore | 1 + HangmanGUI.java | 115 +++++++++++++++++++++++++++++++++++++++++++++++ HangmanGame.java | 50 +++++++++++++++++++++ img/hang0.png | Bin 0 -> 285 bytes img/hang1.png | Bin 0 -> 1105 bytes img/hang2.png | Bin 0 -> 1194 bytes img/hang3.png | Bin 0 -> 1206 bytes img/hang4.png | Bin 0 -> 1310 bytes img/hang5.png | Bin 0 -> 1450 bytes img/hang6.png | Bin 0 -> 1520 bytes img/hang7.png | Bin 0 -> 1564 bytes img/hang8.png | Bin 0 -> 1592 bytes img/hang9.png | Bin 0 -> 1881 bytes words.txt | 20 +++++++++ 14 files changed, 186 insertions(+) create mode 100644 .gitignore create mode 100644 HangmanGUI.java create mode 100644 HangmanGame.java create mode 100644 img/hang0.png create mode 100644 img/hang1.png create mode 100644 img/hang2.png create mode 100644 img/hang3.png create mode 100644 img/hang4.png create mode 100644 img/hang5.png create mode 100644 img/hang6.png create mode 100644 img/hang7.png create mode 100644 img/hang8.png create mode 100644 img/hang9.png create mode 100644 words.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6b468b6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.class diff --git a/HangmanGUI.java b/HangmanGUI.java new file mode 100644 index 0000000..55d9947 --- /dev/null +++ b/HangmanGUI.java @@ -0,0 +1,115 @@ +import javax.swing.*; +import java.awt.*; +import java.io.*; +import java.util.List; +import java.util.Arrays; +import java.util.ArrayList; +import java.util.Scanner; + +public class HangmanGUI extends JFrame { + private HangmanGame game; + private JLabel wordLabel, historyLabel, statusLabel, imageLabel; + private JTextField input; + private JButton restartBtn; + private JCheckBoxMenuItem showHistoryItem; + private List words; + + public HangmanGUI() { + setTitle("Swing Hangman"); + setDefaultCloseOperation(EXIT_ON_CLOSE); + setSize(400, 500); + setLayout(new BorderLayout()); + + loadWords(); + game = new HangmanGame(words); + + // === Top Menu === + JMenuBar menuBar = new JMenuBar(); + JMenu settingsMenu = new JMenu("Settings"); + + JMenu triesMenu = new JMenu("Tries"); + int[] triesOptions = {3,6,9,12}; + for (int n : triesOptions) { + JMenuItem item = new JMenuItem(n + " tries"); + item.addActionListener(e -> { game.setMaxErrors(n); resetGame(); }); + triesMenu.add(item); + } + showHistoryItem = new JCheckBoxMenuItem("Show history", true); + showHistoryItem.addActionListener(e -> historyLabel.setVisible(showHistoryItem.isSelected())); + + settingsMenu.add(triesMenu); + settingsMenu.add(showHistoryItem); + menuBar.add(settingsMenu); + setJMenuBar(menuBar); + + // === Panels === + JPanel top = new JPanel(new GridLayout(4, 1)); + wordLabel = new JLabel("", SwingConstants.CENTER); + wordLabel.setFont(new Font("Monospaced", Font.BOLD, 24)); + historyLabel = new JLabel("", SwingConstants.CENTER); + statusLabel = new JLabel("Tries left: " + (game.getMaxErrors() - game.getErrors()), SwingConstants.CENTER); + imageLabel = new JLabel(new ImageIcon("img/hang0.png"), SwingConstants.CENTER); + + input = new JTextField(); + input.setHorizontalAlignment(JTextField.CENTER); + input.addActionListener(e -> handleGuess()); + restartBtn = new JButton("Restart"); + restartBtn.addActionListener(e -> resetGame()); + + top.add(wordLabel); + top.add(historyLabel); + top.add(statusLabel); + top.add(input); + + add(top, BorderLayout.NORTH); + add(imageLabel, BorderLayout.CENTER); + add(restartBtn, BorderLayout.SOUTH); + + refresh(); + setVisible(true); + } + + private void loadWords() { + words = new ArrayList<>(); + File f = new File("words.txt"); + if (f.exists()) { + try (Scanner sc = new Scanner(f)) { + while (sc.hasNext()) words.add(sc.next().trim()); + } catch (Exception e) { e.printStackTrace(); } + } + if (words.isEmpty()) { + words = Arrays.asList("JAVA", "SWING", "SQUIRREL", "PYTHON", "FLUFFY"); + } + } + + private void handleGuess() { + String text = input.getText().trim(); + if (text.length() == 0) return; + char c = text.charAt(0); + game.guess(c); + input.setText(""); + refresh(); + } + + private void refresh() { + wordLabel.setText(game.getMaskedWord()); + historyLabel.setText("History: " + game.getHistory()); + statusLabel.setText("Tries left: " + (game.getMaxErrors() - game.getErrors())); + imageLabel.setIcon(new ImageIcon("img/hang" + Math.min(game.getErrors(), 9) + ".png")); + + if (game.isWon()) { + JOptionPane.showMessageDialog(this, "Solved! Word was: " + game.getWord()); + } else if (game.isLost()) { + JOptionPane.showMessageDialog(this, "Game Over! Word was: " + game.getWord()); + } + } + + private void resetGame() { + game = new HangmanGame(words); + refresh(); + } + + public static void main(String[] args) { + SwingUtilities.invokeLater(HangmanGUI::new); + } +} diff --git a/HangmanGame.java b/HangmanGame.java new file mode 100644 index 0000000..f971a43 --- /dev/null +++ b/HangmanGame.java @@ -0,0 +1,50 @@ +import java.util.*; + +public class HangmanGame { + private String word; + private Set guessed = new HashSet<>(); + private int errors = 0; + private int maxErrors = 9; + + public HangmanGame(List words) { + this.word = words.get(new Random().nextInt(words.size())).toUpperCase(); + } + + public void setMaxErrors(int max) { this.maxErrors = max; } + public int getErrors() { return errors; } + public int getMaxErrors() { return maxErrors; } + + public boolean guess(char c) { + c = Character.toUpperCase(c); + if (guessed.contains(c)) return true; + guessed.add(c); + if (!word.contains(String.valueOf(c))) errors++; + return isWon() || !isLost(); + } + + public String getMaskedWord() { + StringBuilder sb = new StringBuilder(); + for (char c : word.toCharArray()) { + sb.append(guessed.contains(c) ? c : '_'); + sb.append(' '); + } + return sb.toString(); + } + + public String getHistory() { + List list = new ArrayList<>(guessed); + Collections.sort(list); + StringBuilder sb = new StringBuilder(); + for (char c : list) sb.append(c).append(' '); + return sb.toString(); + } + + public boolean isWon() { + for (char c : word.toCharArray()) + if (!guessed.contains(c)) return false; + return true; + } + + public boolean isLost() { return errors >= maxErrors; } + public String getWord() { return word; } +} diff --git a/img/hang0.png b/img/hang0.png new file mode 100644 index 0000000000000000000000000000000000000000..ad55ff9a6937898fd6dc6669ccb049978bc78bda GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^-XP4u1|%)~s$Kyp#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=CqbAk63)r1AkMxXIJSF{C2y?S+k;3 literal 0 HcmV?d00001 diff --git a/img/hang1.png b/img/hang1.png new file mode 100644 index 0000000000000000000000000000000000000000..beb2daadfacfb742619ea4122279f8c22891baee GIT binary patch literal 1105 zcmeAS@N?(olHy`uVBq!ia0vp^-XP4u1|%)~s$Kyp#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=CqbAk63)r1Al%p*=Gsq9nrC$0|8LS1&OoKPgqOBDVmjnt{Q_ zzM>#8IXksPAt^OIGtXB2{qFth3YjUk>fxro2EGN(sTr9bRYj@6RemAKRoTgwDeCri zyj(UFRzMSSQ%e#RDspr3imfVamB0pD0ofp7eI+}aqLehNAQv~N3Lwu`DWjyMz)D}g zyu4hm+*mKaC|%#s($Z4jz)0W7NEfI=x41H|B(Xv_uUHvsfJi^MBT&`V?*5(W8)NaQ$q`*G{Yn%sP!e8 zX$brCilM;(3=n;gjJ~0s0m#W9wv~TTW-8DXAS>+*ZNTyWNEFvud-fM={)P{y3}l{o`Ct9Hdc`I-m%poaCl(kU)5r;n|Hc32c?YYDjzSWn zAa_TE!x1JWF@cQ@v=j1TTAdqx@^j3b;zx5P+nisT8(n+j+fm+EyY$i`#avU0PH)n= zR=W27zQ|`0#fi(dg2&*Ee$j7yo@cer z>FM$-x4-_n>i##476JX~r%zY^I$Qm}&_H;N;R?+eE0_u?fApMr z%jUC0^JeEL#!Iit*WM7iVb{9q$P;T9{5p1EO*MCRj>*Xfr_$!KtzP9NzbUJG<1x3% zdp1tce_OWOwpZ`;%N-orqAPyXZvAr4zA%G01*Mct|{V#81{rt}3QVz#G-~E4Y&)I(ak0IE-t4w)$Dn9G0c~L>wKx*jJ}4aS6ciQe|@|4%C*&Yr&mA9(c%5t zS)V>Fr80C*soCEfs$bXad%ZsW^7qh{e)|&-zu*0A*H`Up1#36ez1b8N_WGL2G`Y}v zMlGpz(Ua4q?rHsLeQAD%Df`p1FEw`E9VcFvOj?%t<=v9aI}-n~JARH+Oj`NtAt+ya My85}Sb4q9e07KiqGynhq literal 0 HcmV?d00001 diff --git a/img/hang2.png b/img/hang2.png new file mode 100644 index 0000000000000000000000000000000000000000..9180995478535438c77dfc791f33a6d350c8b1ca GIT binary patch literal 1194 zcmeAS@N?(olHy`uVBq!ia0vp^-XP4u1|%)~s$Kyp#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=CqbAk63)r1Al%p*=Gsq9nrC$0|8LS1&OoKPgqOBDVmjnt{Q_ zzM>#8IXksPAt^OIGtXB2{qFth3YjUk>fxro2EGN(sTr9bRYj@6RemAKRoTgwDeCri zyj(UFRzMSSQ%e#RDspr3imfVamB0pD0ofp7eI+}aqLehNAQv~N3Lwu`DWjyMz)D}g zyu4hm+*mKaC|%#s($Z4jz)0W7NEfI=x41H|B(Xv_uUHvsfJi^MBT&`V?*5(W8)NaQ$q`*G{Yn%sP!e8 zX$brCilM;(3=n;gjJ~0s0m#W9wv~TTW-8DXAS>+*ZNTytrjIVaFtu>WME-2kl(Ya>VI!1;CnX`Od zr%yl8wTNTZGDe0QAtjZaYjjTUdK-32?1NAw1B2JfyxYOTCxFV=DsAHE&|y;QZaAT& z0A}7x$y~ep?eWJS!^Cy234i~6m#Kl3VfEHyR~;YavfMY}bqTyu`|S#k(7lv{Z1R0shm;0|KtB3(-o^u9V@)Ew)98HBa3aWfe#Mv zJ*bzxYQ{#PE|ajx)W}vv6}xqLS7yJgv2(LUD# zl;Wd8y7d#gPpn$CYWj(tE?apxA3xKMbiT-PZf>u%j?VewJ*O9)nPw{D`@vOdK6l)S z(>G<)Pjb0V`MWzhYwi7(LPPIsb^E{Ton$R{U-x2`s^fm^GDmtPwx4;UdKGV z(0{iMYxq5>sjZ8%xEJXp-;=VPY#nmL>3i|R38q#Wdt>w%7z*s>FVyjlku{NFeikpp Wx9jWC{U0uZ3JgzIKbLh*2~7ZDOxWZA literal 0 HcmV?d00001 diff --git a/img/hang3.png b/img/hang3.png new file mode 100644 index 0000000000000000000000000000000000000000..26928cc9712c1b5a664d33d0291df7c8f61a231e GIT binary patch literal 1206 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 Z+i%O~+;Qh%q6DbG^mO%eS?83{1OR7PY3~34 literal 0 HcmV?d00001 diff --git a/img/hang6.png b/img/hang6.png new file mode 100644 index 0000000000000000000000000000000000000000..85b9b5aaab7fe111de8691eca9d07b990f9846a9 GIT binary patch literal 1520 zcmY*ZeLT~79A7btLh@AYu${;3k!bcZy|B#FIP*9!WV7GcEgRcv<2rVZ3Q4g>ca@M; zo=v**aH!?3kfL6ZYr0y+DD|pTi0-$`tGoN-^Zh)2Kkv`y{d#@B1>b~{HyUg;fIuJ{ z0|Q7@PzP&eogR4NL$hW;wMIZC`$C$AVH(iUP4S`lKp?Fph9Bur&|jY(KodY97WP_M z6G*jt1ztGBj*Jz?QbGvHyfieO$zuR$aauZ94S{&=5~tIXIe^fX0i>|GM8}t1y^gkQ zCebm*or0yL`vIx!fGj=`krf)5oW)7@WIFEh-e}+@CV(B%03qF0oVJ%MAc%>Ge;N}& zTN}n8yuJ8L7J*9gU#$Q=A|h2NOebJ4B9RC!azpd@DHxomrzZyMig9&CffXo0CRa!o zqqu^vR~wK3K{B76E@bn#w%Uet25+B`h}gG}%_OksEO!Qz>5gL1-IypGj!8$+nQk}~ z)6I>!(;bI*W#JfzRd^wr^)EhGuu20+2u7R1;Lup@$Xc5a#%BZI6k14coYz13|HZs8 z+Cly^nD^%hxGQLVVMa^S7j^+INT~?q4k@iLgg|s&2aW**XU(%{#knezT<*ZtZ`-SXetx@2maF291r$hy9X#0% z-O@s5ziIwMB>O|mNoFSY#_Ocgr&m71)|Ay+URzr3X}z@`)lG%xT_{qjxMUGotyb6c zG@InkT`r|Wm!Ivjt=-V{xGm~c`5=_lMqBmt z`E<~<_@qaWFPcUjIC~$TCe4diU|U4Re957{`(mk%mzC^tQMII>LI2cWu)kgUBuIHj zllNw!J0pi^|7Z4m;5K{sp@zD;S95c7L8j&`M1oY0I-r<$fb>mGP5u5|#LGgP+WbgG z==rktosDB0((9*_ce@_@Yi#q8Wfv64j4qW239feRoJFl~h2GP52=9b#UTocAt|r~E zyNsLt3|QCL{mtL5c{UQs`G=1gr-T=Q7* z_x`Dga#E#YzFod>V6LHHu`i|jYP?Q22Oe6!9}k<>{D#BR;&GQPf`7_3HtMcf`=~)w zA1$*Fa&DFjB4%AE^Bn$PUzzu@+Bz1GU1~Sa`LLwow#Ox$uGu=(b;fWx3nnIKGE9NZ z$x4UD`j+R43m3qJrPNVnZWViCcdQ3Z{zEq}ys#$^I1a?=7upBWO`io*Y4S8p7ZG7-Bqr{xz$Pe#K^9dzy$WwdfEs4-U#ksDw>cPkIYU4?l+Qk{U z^z}@J^3)K^?bmoTWX-3862J2&M&Si(A>(^J<~jC_F{v>eWu(ODc*Vu*E7vZ?TTO^- z*PS-^YyrZ0Y~PnZ1w literal 0 HcmV?d00001 diff --git a/img/hang7.png b/img/hang7.png new file mode 100644 index 0000000000000000000000000000000000000000..3da6d17170174a2b739b28888e90cd7eeacf9811 GIT binary patch literal 1564 zcmeAS@N?(olHy`uVBq!ia0vp^-XP4u1|%)~s$Kyp#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=CqbAk63)r1Al%p*=Gsq9nrC$0|8LS1&OoKPgqOBDVmjnt{Q_ zzM>#8IXksPAt^OIGtXB2{qFth3YjUk>fxro2EGN(sTr9bRYj@6RemAKRoTgwDeCri zyj(UFRzMSSQ%e#RDspr3imfVamB0pD0ofp7eI+}aqLehNAQv~N3Lwu`DWjyMz)D}g zyu4hm+*mKaC|%#s($Z4jz)0W7NEfI=x41H|B(Xv_uUHvsfJi^MBT&`V?*5(W8)NaQ$q`*G{Yn%sP!e8 zX$brCilM;(3=n;gjJ~0s0m#W9wv~TTW-8DXAS>+*ZNTyaKXv6*Y(V7z{DPBK2 zsf{VfFqOl3-E39f|5|W+B2p?hocNSbwyDDT&%b~7Ze8Oxi(5G%Xx^;Df9v{ZFaG%H zQ_-$C>mndTRK%@6s?`G9^{o*NJ1-?%mn7*Lv6e z2#oSjUA->*b;hl?WiB6{#+mPWN|O?LM7dqKQ;x$OII<{Y_x{rbzz=YRSZ&dp{2 z|K&@`ukBMV-J5CLcU*bhFaPX0s>e+39A}uXbHnO0+ufD}lJ;KwK90St*W~XO)z;pf zbV__pap9s8m2EmjBFmx!M9w;jv2tAQT(t9qQKQgri`zFZwEq5G9h3Sr=eLe{UVi@3 z@87?_ERN^dEEgGbC2xCn?&YS+nL>7{pVNI`f8DiRU5a^rmFrHfn)}TbdT$FX9z0xZ zXc@UKDaTtU^N*C?j<=#6r$4_-(>y(CO3>VwG245lF8ebFBz)lY>+I)hg@&f}Uw+@s z+kLmJFH>y#`>NUxpLagkHeKB+(9F;*=TaNjX+3UNTRXc+L0skBY?n(qHsow7X|2f# zpb(Mq}Cvwz&rJlTKagRXdor?ZyIw>+|_cRVFW$_Dyn7F?%Tw)nKh!D<1%vw0KNXm)0Okd4(i^)w__uJ*E2PYr95IOiE(B>D4cfKU8eY z`+0#Q`^dLbkG5)kOP;=Q!_~El5vdPX{Ni48VuDk0f~|1A=s%}lg-Iti?b}yhS10!9 nyLx+Q=)-58&Gjct*#0w|c_aSdYQJ?LsEGD-^>bP0l+XkKQx%|L literal 0 HcmV?d00001 diff --git a/img/hang8.png b/img/hang8.png new file mode 100644 index 0000000000000000000000000000000000000000..d6817ef59e7bf13bb7f3264b82cc4cd3afa310cb GIT binary patch literal 1592 zcmZ8hcU03?6b@8Crh-5bu|+TtSs_3S!~_KcCNd-ufp`p%@Jk?!43d~I4zzMwlpzvU z1O-_NX{8vgML-FnFoOw zLzSjNAnjiS52P~#L--+nzUT;coC6hL)94POI1Y%0Krn|z9BM=ioo`N~M>1Jh>xHHV z*5*tAYaNXAbM)gJrAIOGiShK4iT;5Ri7^pwfc0T_T`i0V4R(m5^Qq>dxL6hsEy7xS zYK#VbWg2ebj)?~tXcEqQ3js!0izq&ygNDO}LZO4u*?}D&2}iiOxxpQs;7(5VAi|!P zz~WOy_AH*|Rs$TJ7ZK0o@R@9uxw0XZ#uo6g76JhiKr^TeBn<$N_B5(9V2?lmRC_Am zjIalsodFaQ;p)Ud&@8s-`Ao(?{4Cy<44@!zWd)9Ka8!=0^wB5cnRIXpC8aw8^Qr!y z90sl&SjUj|;U z3|D_GF3hm)C6XE~>Bm_|JoH(Y`uS#$-1ML*$I%w`^_!`o?c!L1)e@@m@|Pb66i02@ z)6H4u@%ACN9_wl+8k67n&63W*Hb(lM5%V@1IVnn``{F>$JFvS~}BkK=b*$G3xT8a^tiQDdU6- zlB`)2!PExdD%tnR+dTC@x`)Hq(L0<{_e1i=O4Xt|JSp4TntNaCqEzXj&0Hm&AvR1fJaOo5@xju zTe9{*FC7n}427PUY9OlC0=YA<(Vd#13GUfF@#lgc_n$4KN8cWnjJr+*WD=wKC(zIpF|I9ZO+cteh`+(Q7WP`}v8myA)#hc5MwWpiEK6!lSeGtu&cYiiyM^ zVklMk6w;3lfDv`Yj=>cjV(&cKiMzem9G{ozA#r)oY%3(qVpS~_JuSY7VU;X516^K* z%)*?w8fiw*4+R4Wp|a$$C*N%w=wsx+z{1M6dw~c-V4D23C-LA6x)W`tcQvy|&5U9t zmCg|+{Z_9zhMoFm$9M&dBP6Zq%KHh$?DjuBChRhW29+2N6=nn_cDc}&ubDt&SUS}e zF15VHWHZVK+vrPLy>7H-@=mCqrE6nzVbtPJ76KQIMTQ&9r`Vgr=TZk{0r^k+%pR7! zJS&?-HN?zSW zn9wI`6xtQ|JkOKi%?5CzO-}{av(2fcB{d}_Xl~Uyolc&7Lr(jc%hcLbF)hyIMdcb> PD!*@nmp`t~GyL3NwV1el literal 0 HcmV?d00001 diff --git a/img/hang9.png b/img/hang9.png new file mode 100644 index 0000000000000000000000000000000000000000..5aaa3a215b413497877a27f6b79f394321dbd921 GIT binary patch literal 1881 zcmY+Fdpz4&7Qo|Gk9>5ziY+bmibY;tsgNMVvx#9s6MWbtzmRw&K_V%w(rQ&brk>R` zvoys_w6w`mkD9fERw}D6I#sQUy?%& z4fYy9AP~dwu;3VQjZ_c4UEq9>oVNrn8aXkc1W4x{>(`*7of=3Agg|6pLqF1WKwY07 zM$3Uf%pKK3BRt08EqI`WL!k<&q(fLHFB3rrcnlUooXH2hArL=*F`v#%X9;W>tW*vc z2V1={2(#q?IM`t?5{kqRVzD`4dD*P5^2iisUOLkUfcfJM4gADdFhV9vK(`fVW^i+` zVw~Ntfw7>hHY4rue%U|@HYPaavj?c*?AQVUAB#kaL?VR91HsEqMWTIte2^%2q`NyD z^nm9a;R@(tI5)@sbAVu04l|p>7jSr7TXjG>gC`W=?1VxNfK8#NcrgIL3(lZ>0B|%K zpu_2a2O17|cmNnL^g;I&G{f$5dI2ZpkNn)6&lo@;Nc9d9jXQRHTY( zS#tbOi7g^nKmR__qCd+>docJW-6+K}W`%IFSzlz|d(AHB&qOmIfLk>Lj}hr$hUO7t zsHWy8WtUYFsIK5ZuVse$&40D&!+13{-;6X&zbqo;RAx?(ZsI<<;uaQ3fc6|L{@g6d zDYEcTJ>-I$hC59YkZXqp$Mw)gdFw}xcI>=RwsD4GWFW_d`&= zzGV{=Uw!pU`+E6^>jHK1GHO%e?JocCfttWtaOJ*6pxRS;zt~-6d%?&P+eW! z_Z!TDXVEsW3`*HEOqF69KiEuMJrNB2aQL^x3PAtdZ4=uX$ABe3rZtCbx^68jaBy-R zE2%uu#(BS<*1h!ox_yz9AQx*{EAMBV#!NZd5QD)~{@9)%APu-hnpu&~N}A&?YXn7C zglIv&lv3UdW~mOCHip>`6?;2#B~%}7ST*3!>yEEn-YKnTeJj28)>H@5mw2brrC;DF z<7{nmNK~_qBp7tuA9!eHT$ZWUer?d^nWhfyY%ySp!OceMjuC=|9V0vD(>%fJ0ZKWy<- zEEZdG6lgQyyJefu$H7WM0No4|-SF}mN>5U<YwLf$|TOOHn%&OcIozk zo+MFjF1rdA=b5m{zY&#DwQ)psX?4Mo_jrVdhbi6nR_wx`L^0>D_P)0Vj^T~>udi2@2yJr1 zeo3pE|LL4X88Iwb_UgT>LPco3m@s{S z@U?}`FbajkE%zOpCxQ=edU|hCQc_{zRp=htyMe+s4vMrsPNZ)+zFx~Z=NujT(EQY_ z>XmJ+iHm&dG`f_XeX_@A>GUJZvd#Eeg~aqhmXS`=cyvS$?K`6PKqY}{?)!pbb~F0C z!+iGRtmQg#T)uLxq3MgsXuaER$0Z zX_&7Qs;q#!UGCYhsg&<({<%EaMXprvIU(2YBCRz77QZcGN!yn!3m;fjK;J3X*xm76 zY=?d-y@)0Iw1*g-$n)HN52++H8s-gHAsXfNDD67+ef|8Qqs@cfEL9AheYw2Qs~==U zJ6w{_^i9;$e6oQ^^p?N{&fS~VnGf^9CUad4 zo+=nU)n>%N8#8Uk-LH%H3ClGxa&K?%!r7|ftmU17Gxl2l(QUc2e8OmIZchEbg%ioa JorJ%f_%BB?G`;`; literal 0 HcmV?d00001 diff --git a/words.txt b/words.txt new file mode 100644 index 0000000..cb035e6 --- /dev/null +++ b/words.txt @@ -0,0 +1,20 @@ +squirrel +nut +acorn +tree +fluff +tail +forest +nibble +chipper +oak +hazelnut +bushy +climb +autumn +hide +burrow +whiskers +branch +forage +nest