From 71a59a97c223f4e28ae8daa5e191df9f8dabea46 Mon Sep 17 00:00:00 2001 From: SoongMingLiang Date: Sat, 3 Dec 2022 21:20:23 +0800 Subject: [PATCH 01/10] Add gitignore file to ignore the module settings --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8e8bb8e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +SnakeGame.iml +.idea/ \ No newline at end of file From 6c3d459ba0e8b6ffdfcc9845387aab269d35b83c Mon Sep 17 00:00:00 2001 From: SoongMingLiang Date: Sat, 3 Dec 2022 21:26:18 +0800 Subject: [PATCH 02/10] Fixed the logical error of GAME_UNITS variable in GamePanel.java --- Snake/src/GamePanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Snake/src/GamePanel.java b/Snake/src/GamePanel.java index 70b370a..4eda895 100644 --- a/Snake/src/GamePanel.java +++ b/Snake/src/GamePanel.java @@ -9,7 +9,7 @@ public class GamePanel extends JPanel implements ActionListener { static final int SCREEN_WIDTH = 600; static final int SCREEN_HEIGHT = 600; static final int UNIT_SIZE = 25; - static final int GAME_UNITS = (SCREEN_WIDTH * SCREEN_HEIGHT) / UNIT_SIZE; + static final int GAME_UNITS = (SCREEN_WIDTH * SCREEN_HEIGHT) / (UNIT_SIZE * UNIT_SIZE); static final int DELAY = 75; final int x[] = new int[GAME_UNITS]; final int y[] = new int[GAME_UNITS]; From c848a1370204b4d5c64b592850901567892115bc Mon Sep 17 00:00:00 2001 From: SoongMingLiang Date: Sat, 3 Dec 2022 23:20:05 +0800 Subject: [PATCH 03/10] Add a Ranking class and a method to read history --- Snake/src/Ranking.java | 56 ++++++++++++++++++ out/production/SnakeGame/GameFrame.class | Bin 0 -> 641 bytes .../SnakeGame/GamePanel$MyKeyAdapter.class | Bin 0 -> 861 bytes out/production/SnakeGame/GamePanel.class | Bin 0 -> 4609 bytes out/production/SnakeGame/Ranking.class | Bin 0 -> 2872 bytes out/production/SnakeGame/SnakeGame.class | Bin 0 -> 434 bytes 6 files changed, 56 insertions(+) create mode 100644 Snake/src/Ranking.java create mode 100644 out/production/SnakeGame/GameFrame.class create mode 100644 out/production/SnakeGame/GamePanel$MyKeyAdapter.class create mode 100644 out/production/SnakeGame/GamePanel.class create mode 100644 out/production/SnakeGame/Ranking.class create mode 100644 out/production/SnakeGame/SnakeGame.class diff --git a/Snake/src/Ranking.java b/Snake/src/Ranking.java new file mode 100644 index 0000000..9b119d5 --- /dev/null +++ b/Snake/src/Ranking.java @@ -0,0 +1,56 @@ +import java.io.*; +import java.util.ArrayList; +import java.util.concurrent.TimeUnit; + +public class Ranking { + private static final File historyScoreFile = new File ("history.txt"); + private static ArrayList scoreHistory = new ArrayList<>(); + + public static void readHistory(){ + try(BufferedReader scoreReader = new BufferedReader(new FileReader(historyScoreFile))){ + String score = scoreReader.readLine(); + if(score == null){ + scoreHistory.add("0"); + } + else{ + while (score != null) { + scoreHistory.add(score); + score = scoreReader.readLine(); + } + } + } + catch(FileNotFoundException e){ + System.out.println("Caution!!!"); + System.out.println("File is not found! A new file will be generated for you."); + System.out.println("Note: All local history will be clear out!"); + try{ + if(historyScoreFile.createNewFile()){ + for(int i = 0; i < 3; i++){ + System.out.print("."); + TimeUnit.SECONDS.sleep(1); + } + System.out.println("\nYour history score file has been created successfully!"); + System.out.println("You are good to go now, kindly restart this program."); + } + } + catch(IOException | InterruptedException ioe){ + ioe.printStackTrace(); + } + } + catch (IOException ioe){ + ioe.printStackTrace(); + } + } + + public static ArrayList getHistory(){ + readHistory(); + return scoreHistory; + } + + public static void main(String args[]){ + ArrayList history = getHistory(); + for(String s : scoreHistory){ + System.out.println(s); + } + } +} \ No newline at end of file diff --git a/out/production/SnakeGame/GameFrame.class b/out/production/SnakeGame/GameFrame.class new file mode 100644 index 0000000000000000000000000000000000000000..bf3c4a4d5be606b4fdf5433e78df4cc11b3e0847 GIT binary patch literal 641 zcmZuu+iuf95Iq~aapG=ofnK0odZXA2#2*mUmsCZd2v8FlwQt*G+b(tN$lkQTU-9Bf zAn^fw6zXge@l;uRJ9FmD@yy?Uzy1I?K;)wW$Ail;hblwktGt%qqT)uU7tx2KTn-gO z^{q~|Ibd*tF!oSmsK2AYXPK(RhX=>UJh+DijzuiZqO)8_4h9S&=vd)M-k7MJ4M$n3 zQqv0W18Z1enCqtUN?F+l91pR|P%D(_X_Jth)tOi#$z#{#WVIE>mb}iffkzA*L_SpK za-5iUk`?OHNafP#EM;(m_fzgB#}hnd;KV&vh5jMWthgJTPUFuxwroe-k?dbt@g0s` zo8VJItP4$a3%}sl$4hcWa3||e${eeN&TG}n7}oFq^_Y~~*?=l8b#$sej)!L|?@c{4 ztWFZkT-)~ybj_tM80I^+^^@kd$V)dH=Y4ggt@XwKk)~}nw#i+ErVKDzG+sIbx_yT; zK_YPrCVs;^xkbH%|3x&GOEg5a#F}tRJQgLM*~_+ICH8(&Y6T(f`>50I(pSYY&3_Fw fY!bEwAA3|Z1Vl!h3%Ho7WvSs)vgLO5gtt-O$=3O+%}}8JUfMnT}yYHWn1OJ2l*qs zY0~IJO+OMf#%KSC|H61@3P{uR;m*g&x#!+9cYgo<_7lJ|a!~{j)DSW-fiOez1>X}j z?ufRz)_p0uPg{K77al{{-?2MpkzvvrQA#=@h-%OcOu}Huyy1tuz~A}>aVQ+Wa4ElR zJGQ^f5X|NpI%1gC5H~P`S%%cryk}B?L4PfLQmMEtp)yyaNZ^Ksq=6LD4AD_9bZ*(6 zX!^G6Ft7?kEIZa|uE7wxkeRk@N30+0Z40l?x7#EA^h8fcTMJ~Na ziJIFL-I^yl9noT#&sx{GD9PH4%4Du(FidUwyt%u^_XpMWP4~cSis!cMFE(=dSk_>O ztc#9cbvyJz#;W58uhQn!2DNL9PYw5IxDlE&i^t`7=@bA>5E)u;s`&>90rdRRDOmm- z+Ogu?qBTq$;3MW~O$tv|$(TD_$+OdTm2-qZGgB1^GAQKNW5 zv6DXmJHcFhqmQ~g$E{P$eL{7JTYZ!jzM=5q5MSxTRQQ&{(?fi#4@2QAgi8-WNDq1H z6gYy3&nV&x$~Z<9Us1;yUf~>Ve8)Tdzz6&q^Vu8u?9mI}Cx45iqG7^JrBVr!Ht8B5 TV-MAyz$4mqq6O%4X2Jde2+6cK literal 0 HcmV?d00001 diff --git a/out/production/SnakeGame/GamePanel.class b/out/production/SnakeGame/GamePanel.class new file mode 100644 index 0000000000000000000000000000000000000000..e8a51cdb3f78f93b5245e811d525f81d6595df5f GIT binary patch literal 4609 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 X|AfDAub6x5xc66%zv1urCrbYdklG>{ literal 0 HcmV?d00001 diff --git a/out/production/SnakeGame/Ranking.class b/out/production/SnakeGame/Ranking.class new file mode 100644 index 0000000000000000000000000000000000000000..b536fc76d32e651a73e89b5c69885c371f8b337c GIT binary patch literal 2872 zcmZ`*TXPge6#hEdWHyt5NFoUu#R&*x6G%`|)Qw1pAeSXzHbjG>PG&n{U^27L&KlOc z;{ASC#9L{Vd9X?ZtVE?sebOp_h*duM;FDA#emy%Ic12T_?e5d3PoMLh@0^}r|Nj05 z0Gsfsjylw9NEm29qrfGHtOu=r*Yc+N_e>m;b|}y|;CN2BNua(vHKrjc&>kr{e*c!@ zK--1g@~!Fe{xSoX;c|gwKp!)X$2%_VPL(Z1 zVP?aC&ZL!-R~Wbw%LR;ra%g+mIf12R?PBP-{ewYZl``B(Ct(VR^*UByrG~2wtio!# z5xHNhO606uj&@=ftI$oS_NySe4WtzM4YunSq=w##p-6S~VBpVK6Ry3W9X4pV-oOpmSi^yA zsSwI(2H+RTgct}WelIZ#iJY{i3B*kT`jEw-eXpylOGg?58g4O2uUjjD)Se*;^2&ni z{R@>i8L6=(1_f?ZoG_h&>G`2Ksa)v^Tdo!!-#<_Mk~Nae6W4bE(U@0!v0ZbTJB>}5r^#7p*_R5 zWd*LPV%dMFvK01W%)p(vi&qs~Df0q}?wty%{Q?{HalaTWgcuRHjM71?K#-(omZQj- zg`#bfG?PWwEp;VvkH7|=HLZY1`hLy~eU5~DX06FG&ABC$91E==G(#e2<^z8!u%`Po z+*_609eWnoq~U&nZy`Un{5&@bGE&K3j zVA-Vq0oXe0^q>Jp9cxxK9ha$+A2#5EY}Kb^xKOivfFC+{tQV8@RZ=ZA#OZAwS0>EvgF+ z7pEs=Fsix=qsgfH7_$OLtz%(AWt*2};&x2~4H2!B{)Ozu6-$?+&5`IOU^^LR-pL;7tzLZv3w5S(dIHKY&IIcb|e7 zU1W6~AL=?>t{zX$boE3*;HgM@l(b-8(8%AXDe31ZI5zamL!69Mp5d?BrV!8a*NErO z;d!o_R3%Zu!{SeB)Km7&8EE5Y&@_Gu>3?k4ty;%%LOG`wLo5p|ka>Idt7Qi;mu( z(Z+SJT1E=9=l|fiW)^Lk^4PSyckLY3_Wn2vYu71U+j`?1ZdT*wc-#_=&2zZz82al6 zIvYR3GPS>R4w+Nfqt9XA(?ZOi|6K{k<3o3IoJBIji!F}Ixyh4^qLs~f3!lg#+>V_b zff4M(dU*I8U$A$S$NM7rS6tUaVH4mA{^~s4j1HpHiA7jLsC%)5&!V!qlvZ`x>Y=rE zj8W@eEW;$fD?Dn?@cd&;%Ck(%E1bUt6UUjj&#{`fUX59P7<|dIU!fZ(_{^WCWtE3b z^tgljFW^Pu--^w62`^J#Vya)ktCY$ilEJocqG;3I)p>UQdNz%begv-#<^LYF;n$KXx Y_&lCGjZWoQb}FjiS$)Tof-2*%N_i3UTB!W5s5j5z zm7yPYggGHfE+m6LeF%3OMNKVaKA*+p^E#)Y$v-xO@uYTB$Zk2>R(`+f!CWG#= zbH&Fg)JLe(0|8)?dXxne8Aao41NOeP_ehlux&uOV literal 0 HcmV?d00001 From d25b05beada0a8ea00dce2a73055c1d2c01faefc Mon Sep 17 00:00:00 2001 From: SoongMingLiang Date: Sat, 3 Dec 2022 23:22:08 +0800 Subject: [PATCH 04/10] Add a file to record the history score --- history.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 history.txt diff --git a/history.txt b/history.txt new file mode 100644 index 0000000..e69de29 From 6cbdb1116810e8c36a30419419c14fa65379c92a Mon Sep 17 00:00:00 2001 From: SoongMingLiang Date: Sat, 3 Dec 2022 23:28:48 +0800 Subject: [PATCH 05/10] Update README file about the warning of the history file --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d35272..f58e588 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # SnakeGame -This is a snake Game writing in Java using JetBrains IntelliJ Idea +This is a snake Game writing in Java using JetBrains IntelliJ Idea. + +Warning: history.txt is to record the score history of the game based on local computer. Delete this file will cause history lost. From 10ff09a01f92b706641a408f3c404040aa122b55 Mon Sep 17 00:00:00 2001 From: SoongMingLiang Date: Sun, 4 Dec 2022 13:38:31 +0800 Subject: [PATCH 06/10] Update .gitignore file --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8e8bb8e..a084f4e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ SnakeGame.iml -.idea/ \ No newline at end of file +.idea/ +Snake/Snake.iml +Snake/out/ \ No newline at end of file From 4fe8949b2368c7582d844ffbcb4cce7d1fc79fbb Mon Sep 17 00:00:00 2001 From: SoongMingLiang Date: Sun, 4 Dec 2022 13:46:42 +0800 Subject: [PATCH 07/10] Update .gitignore file --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index a084f4e..b895fb4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ SnakeGame.iml .idea/ -Snake/Snake.iml -Snake/out/ \ No newline at end of file +out/ \ No newline at end of file From 48066b768af58a97b9790518cb5c3d446447b6c5 Mon Sep 17 00:00:00 2001 From: SoongMingLiang Date: Sun, 4 Dec 2022 13:54:45 +0800 Subject: [PATCH 08/10] Update .gitignore file --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b895fb4..e138c73 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ SnakeGame.iml .idea/ -out/ \ No newline at end of file +/out/ From 6bd8924a94c2278e181f9c872a18b6eba9f14212 Mon Sep 17 00:00:00 2001 From: SoongMingLiang Date: Sun, 4 Dec 2022 14:05:04 +0800 Subject: [PATCH 09/10] Update .gitcommit file to ignore 'out' folder --- out/production/SnakeGame/GameFrame.class | Bin 641 -> 0 bytes .../SnakeGame/GamePanel$MyKeyAdapter.class | Bin 861 -> 0 bytes out/production/SnakeGame/GamePanel.class | Bin 4609 -> 0 bytes out/production/SnakeGame/Ranking.class | Bin 2872 -> 0 bytes out/production/SnakeGame/SnakeGame.class | Bin 434 -> 0 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 out/production/SnakeGame/GameFrame.class delete mode 100644 out/production/SnakeGame/GamePanel$MyKeyAdapter.class delete mode 100644 out/production/SnakeGame/GamePanel.class delete mode 100644 out/production/SnakeGame/Ranking.class delete mode 100644 out/production/SnakeGame/SnakeGame.class diff --git a/out/production/SnakeGame/GameFrame.class b/out/production/SnakeGame/GameFrame.class deleted file mode 100644 index bf3c4a4d5be606b4fdf5433e78df4cc11b3e0847..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 641 zcmZuu+iuf95Iq~aapG=ofnK0odZXA2#2*mUmsCZd2v8FlwQt*G+b(tN$lkQTU-9Bf zAn^fw6zXge@l;uRJ9FmD@yy?Uzy1I?K;)wW$Ail;hblwktGt%qqT)uU7tx2KTn-gO z^{q~|Ibd*tF!oSmsK2AYXPK(RhX=>UJh+DijzuiZqO)8_4h9S&=vd)M-k7MJ4M$n3 zQqv0W18Z1enCqtUN?F+l91pR|P%D(_X_Jth)tOi#$z#{#WVIE>mb}iffkzA*L_SpK za-5iUk`?OHNafP#EM;(m_fzgB#}hnd;KV&vh5jMWthgJTPUFuxwroe-k?dbt@g0s` zo8VJItP4$a3%}sl$4hcWa3||e${eeN&TG}n7}oFq^_Y~~*?=l8b#$sej)!L|?@c{4 ztWFZkT-)~ybj_tM80I^+^^@kd$V)dH=Y4ggt@XwKk)~}nw#i+ErVKDzG+sIbx_yT; zK_YPrCVs;^xkbH%|3x&GOEg5a#F}tRJQgLM*~_+ICH8(&Y6T(f`>50I(pSYY&3_Fw fY!bEwAA3|Z1Vl!h3%Ho7WvSs)vgLO5gtt-O$=3O+%}}8JUfMnT}yYHWn1OJ2l*qs zY0~IJO+OMf#%KSC|H61@3P{uR;m*g&x#!+9cYgo<_7lJ|a!~{j)DSW-fiOez1>X}j z?ufRz)_p0uPg{K77al{{-?2MpkzvvrQA#=@h-%OcOu}Huyy1tuz~A}>aVQ+Wa4ElR zJGQ^f5X|NpI%1gC5H~P`S%%cryk}B?L4PfLQmMEtp)yyaNZ^Ksq=6LD4AD_9bZ*(6 zX!^G6Ft7?kEIZa|uE7wxkeRk@N30+0Z40l?x7#EA^h8fcTMJ~Na ziJIFL-I^yl9noT#&sx{GD9PH4%4Du(FidUwyt%u^_XpMWP4~cSis!cMFE(=dSk_>O ztc#9cbvyJz#;W58uhQn!2DNL9PYw5IxDlE&i^t`7=@bA>5E)u;s`&>90rdRRDOmm- z+Ogu?qBTq$;3MW~O$tv|$(TD_$+OdTm2-qZGgB1^GAQKNW5 zv6DXmJHcFhqmQ~g$E{P$eL{7JTYZ!jzM=5q5MSxTRQQ&{(?fi#4@2QAgi8-WNDq1H z6gYy3&nV&x$~Z<9Us1;yUf~>Ve8)Tdzz6&q^Vu8u?9mI}Cx45iqG7^JrBVr!Ht8B5 TV-MAyz$4mqq6O%4X2Jde2+6cK diff --git a/out/production/SnakeGame/GamePanel.class b/out/production/SnakeGame/GamePanel.class deleted file mode 100644 index e8a51cdb3f78f93b5245e811d525f81d6595df5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4609 zcma)9iC+}w8GdG2SXc*G@Pdef6%`hRRNEvKwITwpau`5#HHi%D2rJ7D-5pRg#wImM zbJ^CUR&8QPVoTHXiVaJvX?kDj-K6Oid#A_0kmgtWyfee@pf=4{1e8jqSA z6=YRa_vAr=U&S1#3Y0?%JbOd3RiL8K+8UQtk&0r>rJg<`GQLAgm`M^_bn{g#z(Srx zq6xjJC8b^hvKqBM)Ty`;?`9w@3xufAh#3hA?~7^uLll`|w@&Is z-&z&#!Fv_tQ{QHi4J3@wctpWmmol5$w(n*Yx8QvWRMIya{i8{(FGkzEReP#?e5hBj zAf4IDw(;%yctb=RG4+HW>##w*WflvnTGK?dU(DE~q5+$Eq(vfRYKxIlT*nUc78Ol`oxG&UOp9m{*`i{r?B>SxgAF4iG2Mr41cn=5-OL3o3!zmkYg4eS zDwGM5t**hs$c#Z&xD|A$*nwLaT2mx2S{By~Y%Q^jZU|i}y2XZU%QAs_kBVK`O-Dzx zXxwZxhDVGzy<*&4j#lI`17+##vXA~yW!h2}$_ihjwX z<(~z#86k`Sb7kdFAgim`FO`v_NlbRj)}V@LW-BZbhg8HcOxFF;Sgd1Ai?J+-Q9-E~ zV5k@o1F{Dax=tkbBB3IgX6R&LNsWxE7{fub#`QyHNWAn`g{nh-N*I@jAEp^1RiJYx zF_=bfvk^CQaToQ6;zJe9RN}`Gd{B7q&J;pSV~^-E6Rg#GyMB7{Ar;4QFI8Ij6qUuU zz=~WesJ*yf#fR|#2?qqoLReH)ok_k$DKL6S#lv`n33KS$bSms;J6U;++}Yd?VZB87 zBPu>B5uRfOJ=vrY-NkH&CsjO($LP_pHl#Ni@qW$R6*UJrBVgjvwB|Elwp_Qj#guu{ zk5AyV4`)=I#U~Zan-#sZnRAj>fObVA=AekXR+uE@2%b=J4o}+gu=@?0El+y!l!~V% z?0$it9c~HCc@>`$ROSw_;5x?aLYh?Z83DXEX&NKB_^i|EE9`RxpHuO9>wMT4v#Ruq zD!wEe{{BI|f5@s+5q?3%mu0)q+9r5oQR$gUIh#_Ek~3dIw~EMzuP9iY_WpWh%YN0> z*xA(7zHe7(OZQenZ6?G$T5MF$0zC92-=W#s6l&SpP1AR_hr0K5h4wU&0HrjtrJ=29 zpX_!C%O)1UmZsK*upDov(~U-iy|Az~8rR!Lhx_zIx7{6!TaA7#)}tk&vUWDT=3tZw zp5y9;ym5Hz*v({C4YRK*QF=T)1HJ{<$C~(HvWvHABaW6_hlRyDGhIUyHLI)b&=dQO z#IVkOe{G+&8()+3T$T(Cplf9rweB$6M2t_DF`DSto1=0i6r_86t>lKDw(Ci=O_#XP z@4#lmFo{iVgiswcBFVxW{ML`(;rBkgE@g39L8X;c3;5Cam@%X~)oxcxGo3IJ;|fl@ zLG2LQLbvi-j_JwDR>K$?9jU(-`>vf?jNRiS`gO?ny68Ll4zSJDyQ|X?(Wu2@T~Sl7 z&&3~^w61<5p|4YN@n`11UQ{SVWGK!Xt}&)1lRD#}x^GJ#-cYdo8t<>?ln?(Jf>&x55`tl)WefjLNzPwYdFW*%B`Z@R}q=nz+>>{!`1A2qg$O;yD zHofSdLf*_IKN!fFLLeCEoWi_d))Y#Dmrxd-#*!(NbGj^ChRz@{JjbJ{4Hg?3OFm|voXLsZ60l#kCl8XuA$Y9+}Vc3 z=)e-*(dF2O3VfGbs%y@M+Ok-!TCWUZDWC5gO1u3|OQC?+< zT40kqqR5CJ;D;2Z$lJpfsvKrMg!3|uEIET$YA)cm6!z6{8Q~ZRlm<#uIFPlWjH|%Y z7%V%Br6h_wM0sVkJjgGrwFy5kiA^<^usY1m@*-SG!MxsV8i)P||8b8pdF9lM6_;=% zTzu3UsG7#H6z&n9?@QsqHZkwSMSKh(09M(HkAru}sYrIrCVD)DiAm%N%QF(DEDHe5 zDB}D^I(;)Ca0{cp4ppdUz}90eHZbv<_~>cC{oH>9Tksgud>+lb;ac!2AD_P_#p`Ib z!W(4%Dlm+f34ISKR^mtau@&;m>5yM`LjDtKEkw>+s8FiczlrRBBP2D;*Q}ifbkRVm zg{47>SD=J}3zQB{F$uHR16QZKgAm?9J8pHMXK5NeyqTRu3+4np=O{0*e$hEB=Ok~D z_2Z4yc5sp}tNcZ>I<8!qyds#G_Z)fR9A1ts9Q7Qn9Bmw(9Q!zSa#Ra%mi0p{L^>u} zhwhzT?o@IoPiXS89Gc=;JG~v5OxdN{&HC8M`siVmbQ9WP0(UP4a2pQry*y6scS6HM z=)(y_@B~k!R0a6itSQNi1ofN~56MCSd~YFJc@xW56%`c~@SKkoJ4Srj+DTYzo56+`XK2~^bkr#)Z9xfsiB~9H%78lO(!f_a_25@{jbCX<>)7F>Mm+cpSAVd6 X|AfDAub6x5xc66%zv1urCrbYdklG>{ diff --git a/out/production/SnakeGame/Ranking.class b/out/production/SnakeGame/Ranking.class deleted file mode 100644 index b536fc76d32e651a73e89b5c69885c371f8b337c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2872 zcmZ`*TXPge6#hEdWHyt5NFoUu#R&*x6G%`|)Qw1pAeSXzHbjG>PG&n{U^27L&KlOc z;{ASC#9L{Vd9X?ZtVE?sebOp_h*duM;FDA#emy%Ic12T_?e5d3PoMLh@0^}r|Nj05 z0Gsfsjylw9NEm29qrfGHtOu=r*Yc+N_e>m;b|}y|;CN2BNua(vHKrjc&>kr{e*c!@ zK--1g@~!Fe{xSoX;c|gwKp!)X$2%_VPL(Z1 zVP?aC&ZL!-R~Wbw%LR;ra%g+mIf12R?PBP-{ewYZl``B(Ct(VR^*UByrG~2wtio!# z5xHNhO606uj&@=ftI$oS_NySe4WtzM4YunSq=w##p-6S~VBpVK6Ry3W9X4pV-oOpmSi^yA zsSwI(2H+RTgct}WelIZ#iJY{i3B*kT`jEw-eXpylOGg?58g4O2uUjjD)Se*;^2&ni z{R@>i8L6=(1_f?ZoG_h&>G`2Ksa)v^Tdo!!-#<_Mk~Nae6W4bE(U@0!v0ZbTJB>}5r^#7p*_R5 zWd*LPV%dMFvK01W%)p(vi&qs~Df0q}?wty%{Q?{HalaTWgcuRHjM71?K#-(omZQj- zg`#bfG?PWwEp;VvkH7|=HLZY1`hLy~eU5~DX06FG&ABC$91E==G(#e2<^z8!u%`Po z+*_609eWnoq~U&nZy`Un{5&@bGE&K3j zVA-Vq0oXe0^q>Jp9cxxK9ha$+A2#5EY}Kb^xKOivfFC+{tQV8@RZ=ZA#OZAwS0>EvgF+ z7pEs=Fsix=qsgfH7_$OLtz%(AWt*2};&x2~4H2!B{)Ozu6-$?+&5`IOU^^LR-pL;7tzLZv3w5S(dIHKY&IIcb|e7 zU1W6~AL=?>t{zX$boE3*;HgM@l(b-8(8%AXDe31ZI5zamL!69Mp5d?BrV!8a*NErO z;d!o_R3%Zu!{SeB)Km7&8EE5Y&@_Gu>3?k4ty;%%LOG`wLo5p|ka>Idt7Qi;mu( z(Z+SJT1E=9=l|fiW)^Lk^4PSyckLY3_Wn2vYu71U+j`?1ZdT*wc-#_=&2zZz82al6 zIvYR3GPS>R4w+Nfqt9XA(?ZOi|6K{k<3o3IoJBIji!F}Ixyh4^qLs~f3!lg#+>V_b zff4M(dU*I8U$A$S$NM7rS6tUaVH4mA{^~s4j1HpHiA7jLsC%)5&!V!qlvZ`x>Y=rE zj8W@eEW;$fD?Dn?@cd&;%Ck(%E1bUt6UUjj&#{`fUX59P7<|dIU!fZ(_{^WCWtE3b z^tgljFW^Pu--^w62`^J#Vya)ktCY$ilEJocqG;3I)p>UQdNz%begv-#<^LYF;n$KXx Y_&lCGjZWoQb}FjiS$)Tof-2*%N_i3UTB!W5s5j5z zm7yPYggGHfE+m6LeF%3OMNKVaKA*+p^E#)Y$v-xO@uYTB$Zk2>R(`+f!CWG#= zbH&Fg)JLe(0|8)?dXxne8Aao41NOeP_ehlux&uOV From c4cdd4c2fe3ba108a5a7fb06335f331aafa0c5d7 Mon Sep 17 00:00:00 2001 From: SoongMingLiang Date: Sun, 4 Dec 2022 22:25:52 +0800 Subject: [PATCH 10/10] Add methods of insert score and reset history and a simple documentation --- Snake/src/Ranking.java | 69 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 4 deletions(-) diff --git a/Snake/src/Ranking.java b/Snake/src/Ranking.java index 9b119d5..c3c683f 100644 --- a/Snake/src/Ranking.java +++ b/Snake/src/Ranking.java @@ -1,12 +1,24 @@ import java.io.*; import java.util.ArrayList; +import java.util.Collections; import java.util.concurrent.TimeUnit; +/** + * @author SoongMingLiang (soongmingliang647@gmail.com) + * @version 1.0.0 + * + * This class is to provide the ranking system service to the SnakeGame. + * The methods that are available to other classes currently are + * getHistory(), insertScore(int new_score), and resetHistory() + * The main functionalities of these methods are return the game score history, insert a new score into the file, and + * reset the score history of the game respectively. + */ public class Ranking { private static final File historyScoreFile = new File ("history.txt"); private static ArrayList scoreHistory = new ArrayList<>(); + private static ArrayList scoreHistory_write = new ArrayList<>(); - public static void readHistory(){ + private static void readHistory(){ try(BufferedReader scoreReader = new BufferedReader(new FileReader(historyScoreFile))){ String score = scoreReader.readLine(); if(score == null){ @@ -42,15 +54,64 @@ public static void readHistory(){ } } + private static void sortHistory(){ + Collections.fill(scoreHistory_write, 0); + for(var i : scoreHistory){ + scoreHistory_write.add(Integer.parseInt(i)); + } + Collections.sort(scoreHistory_write); + } + public static ArrayList getHistory(){ readHistory(); return scoreHistory; } + public static void insertScore(int new_score){ + String newScore = String.valueOf(new_score); + scoreHistory.add(newScore); + sortHistory(); + try(FileWriter scoreWriter = new FileWriter(historyScoreFile, false)){ + for(var i : scoreHistory_write){ + if(i == 0){ + continue; + } + else{ + scoreWriter.write(i + "\n"); + } + } + } + catch (IOException e){ + e.printStackTrace(); + } + } + + public static void resetHistory(){ + try(FileWriter scoreWriter = new FileWriter(historyScoreFile, false)){ + scoreWriter.write(""); + } + catch (IOException e){ + e.printStackTrace(); + } + Collections.fill(scoreHistory, null); + Collections.fill(scoreHistory_write, 0); + } + public static void main(String args[]){ - ArrayList history = getHistory(); - for(String s : scoreHistory){ + /*ArrayList history = getHistory(); + for(String s : history){ System.out.println(s); - } + }*/ + + /*insertScore(10); + insertScore(300); + insertScore(100);*/ + + /*ArrayList history = getHistory(); + for(String s : history){ + System.out.println(s); + }*/ + + /*resetHistory();*/ } } \ No newline at end of file