From 45193b896b333c690a814f2cec01440deee4fd31 Mon Sep 17 00:00:00 2001 From: HUMBLEDDDD <12211617@mail.sustech.edu.cn> Date: Thu, 22 May 2025 07:31:09 +0800 Subject: [PATCH] add speed control and speed panel use BoarderLayout instead of GridLayout --- src/DataOfSquare.class | Bin 0 -> 839 bytes src/KeyboardListener.class | Bin 0 -> 686 bytes src/KeyboardListener.java | 4 ++++ src/Main.class | Bin 0 -> 506 bytes src/SquarePanel.class | Bin 0 -> 413 bytes src/ThreadsController.class | Bin 0 -> 3847 bytes src/ThreadsController.java | 11 ++++++++- src/Tuple.class | Bin 0 -> 586 bytes src/Window.class | Bin 0 -> 2673 bytes src/Window.java | 43 ++++++++++++++++++++++++++++++------ 10 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 src/DataOfSquare.class create mode 100644 src/KeyboardListener.class create mode 100644 src/Main.class create mode 100644 src/SquarePanel.class create mode 100644 src/ThreadsController.class create mode 100644 src/Tuple.class create mode 100644 src/Window.class diff --git a/src/DataOfSquare.class b/src/DataOfSquare.class new file mode 100644 index 0000000000000000000000000000000000000000..cfc1813f015fde8d6a4f56ae5afe808a73296c1a GIT binary patch literal 839 zcmZuwYi|-!5IvVi7nW^-B2`--ZKW2_c74CVCKVrPg2e=jsoyTJ!qydZyV&^IU!)O8 zG%(~cXoE}%$zf4c7Ol*{u97M6mXBJhRkwx~@Q^Dc!fvh(v;ZgX7DB0zPfv49=3F zY&MCJ^>e1CDCAx%j3oo-6hP=vdGCn|TrhA^1;R&d+p`q?6$7id#7M)37CRc&1Y-UW zFJ#AZ6ymypEOJC_S(GT9-O2rrsUw3cO4qBDY|LrGJ6BV1n+8l=qsWJ2k!H(NNE|MM z8wPHw7O_&BYq7?XM5}hIBfXvycKsw#i~kC>Rp8(xTH~YCZL%(2wma5t?_J$;U&^|} zNYt@gZST3Y_g+A+c6)BadTOhS4KK_0Ff0=MV|aGRDA(n8Hf8{l0S zcWCeO?K6EyxJH QKLOG#UtsYA`T-RF0&W7Uwg3PC literal 0 HcmV?d00001 diff --git a/src/KeyboardListener.class b/src/KeyboardListener.class new file mode 100644 index 0000000000000000000000000000000000000000..fcb0add032f0997d2de592877f156f31fce12b9e GIT binary patch literal 686 zcmZ`%(P|Sx6g`t{cH8ZyX^pi_ZEb5SqzVQ^q|jE;VnIx$kWe24VUiuuZA3Kja$4=8?xt*&@OLZNqcY`l2 zl{RH7Vhw&*jSf@Q@2gN?sapR}$J?7n0>y@r?e2l>{na*-LE2XP+8WLMoAj}@!Wx!1 z3mZ8II}NV)$d85n=gt z9Fo5xo)RBVQ7nwH>-<3R1kcF4F=}qcs$|X>YlVz0lDT7)y^IB?D4(Hng1oISm(}+K y0nZ+`;Nt}!$v)?BfD)Q0;{%7;!U8lZ=&`{e8y(?3Kk!+(TSdkMds@%jHvRxl(Tp7c literal 0 HcmV?d00001 diff --git a/src/KeyboardListener.java b/src/KeyboardListener.java index 0271729..281d186 100644 --- a/src/KeyboardListener.java +++ b/src/KeyboardListener.java @@ -24,6 +24,10 @@ public void keyPressed(KeyEvent e){ if(ThreadsController.directionSnake!=3) ThreadsController.directionSnake=4; break; + + case KeyEvent.VK_SPACE: // -> space + Window.controller.toggleSpeed(); + break; default: break; } diff --git a/src/Main.class b/src/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..fde3ed4af48f7f393ecb478e18728f3ada2b2caa GIT binary patch literal 506 zcmZvZ*-pYh6o&s{D@$1wL=-pF6l>%GTy8KV7?cYLM!gzfB!keJQpEUH-aw*>58y)? z&wvRxw#}S5^Z)amGoA0Bk1qh{I1IxBuLhqEKLQMiK7Zk*0k?Xkdb=+=E<@l z@EXOIh9IrnN~>#6!qDIiBEsNrSo}$-JgOsxI74tG+@^E~f+20xme7XlNUL{RY$2L7ntV}hIM*}A z!+!^$)*ANM>4=I{t%VfqM0JH-Y|&3uj|X%l1Zdo$EKiY9^dHT@-f6F!J^i8p92Byd@K{-MJL3$%}2|BWfQq34)6NKF- H&4Ytq&dgp; literal 0 HcmV?d00001 diff --git a/src/SquarePanel.class b/src/SquarePanel.class new file mode 100644 index 0000000000000000000000000000000000000000..1424e066d72eac2df0586210e982c4d0ee81147a GIT binary patch literal 413 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 Squares= new ArrayList>(); Tuple headSnakePos; int sizeSnake=3; - long speed = 50; + int speedLevel = 1; // 1:slow, 2:mid, 3:fast + long[] speedTable = {150, 80, 30}; + long speed = 150; public static int directionSnake ; ArrayList positions = new ArrayList(); @@ -39,6 +41,13 @@ public void run() { pauser(); } } + + public void toggleSpeed() { + speedLevel = speedLevel % 3 + 1; + speed = speedTable[speedLevel - 1]; + Window.currentSpeedLevel = speedLevel; + Window.instance.repaint(); + } //delay between each move of the snake private void pauser(){ diff --git a/src/Tuple.class b/src/Tuple.class new file mode 100644 index 0000000000000000000000000000000000000000..017f5cd9db1b5cb12da3a41bdd89b9c0535c365c GIT binary patch literal 586 zcmZutO;5r=6r3%TN+|`wF9cL>P!leEL@X5AwvbauoA(slv9KG$MUUF5>(*KV z@y6td7MWXrEbnH|9XV}!9c5}Z2FxL^y}%=@FN4Q0gZmHKbWs146MLK8e3;CpU3ue& z>M+`wx(_Oxt?|Bb2$h>(oVV)C7h(ouPw+&?9_v2Qxmpf;#`%PBic1(yX^HfEC^%rv z(GuYLI3UT#hDm8*ZE(6WNJWY5&|57&O_@#MA&RTXWp+Vp-T8p=ww|Zr0a?~kBsINB b&68S=q-Hm%>e5G%)chv3KV^~`khcE>SB6Q=8FC`U+1nyI4_vjoDs9Wx~` zJ2A!KxH>pn$32)MP!ya55xrnvKT%vaoL1Jdjt@FG|spzkz1U z9YV9t;+C|hhRX?Q)RH^4U)bI(;?wAB~+(cwAFU|d5Z z)++bc-Qj0`KS<{W9UHMpKy!Vi$|Qj*U)rrw@C{``Hw%>Cib|_(c~P)1O1C?vk=78$ zgG$?WT3Q^{ytXz!{*7qSu@k!lB8;07!JrgHO>r134ZE=?f;Js{u}@&0Qd+Pk$VRJ? z^lWET#mte0CwC2HywPAwU~yd=|ALSduJ!pz%;(aNO}mc$I1ps8aI-eBW$H`y-BBE( zzx!>+8&EaSp=zm9puWh17JDdTTTEiSC?kc+Vik1XSp^3TOEP+03W>c1#Hb2Vs3;WO zVH{PlJ;t~NzA;2ys8a>~sE)^Au%P=TgLy|O4UC8kWf?PL@uD6)nAN+$xAPHAU0lP2^AVJVAka%i!t|C3Bs=K!;na#_2c zW2e*7(U5_w4$^k5F5zEh0Vq@q>lnc)vXi$?GdzjAM9}mM9@p`N>S3kCgu`C&q(E$+ z9PP6WC#9N>w3M#X0d~*ocpB#fX0QkFP+?zSVUgp6pXD_dZTofEi1Rw0Rgh8z+$m4d z?wBhT0=lK+nzq%|wv!!dFXLN4Xt$Bh%F>^%-duU+uZ3q>a2;m9Wq4VK+1MOZ$-g_~ ze=v)CTYM{jY-=rcic%^PrX}}hhx(+`Y4oMZDev%%kdINUKt(b;)HN1xl5xlQD(+2`e{ifje zP}3T=2W4{rdIo^a>K0TlU^Y{XoP75v!ctyCaIteVBd0ii zwCH>Rdqu3gh!!KA?l3(WkK#iPE5G`C2S{I%j_HA3zL@R1?c;p+D&!%l$tFNFhhvPlx!!+wh-_#!(nkr3S@?dXF zi)j-W+CPa*@5%`{ u@Hkf9zBq%G1&*9j%%G48Qg4zj!CQEntFrhV{$IpLq%^*Lj8Ab1^Zo&6;iKOG literal 0 HcmV?d00001 diff --git a/src/Window.java b/src/Window.java index 518fa9e..4e24323 100644 --- a/src/Window.java +++ b/src/Window.java @@ -1,8 +1,10 @@ -import java.awt.GridLayout; +import java.awt.*; import java.awt.event.KeyListener; import java.util.ArrayList; import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; class Window extends JFrame{ @@ -10,8 +12,12 @@ class Window extends JFrame{ public static ArrayList> Grid; public static int width = 20; public static int height = 20; + public static int currentSpeedLevel = 1; + public static ThreadsController controller; + public static Window instance; + private JLabel speedLabel; public Window(){ - + instance = this; // Creates the arraylist that'll contain the threads Grid = new ArrayList>(); @@ -26,23 +32,35 @@ public Window(){ } Grid.add(data); } + + this.setLayout(new BorderLayout()); + + speedLabel = new JLabel("Speed: " + currentSpeedLevel); + speedLabel.setFont(new Font("Arial", Font.BOLD, 18)); + speedLabel.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 10, 5, 0)); + this.add(speedLabel, BorderLayout.NORTH); + + JPanel gamePanel = new JPanel(); + gamePanel.setLayout(new GridLayout(20, 20, 0, 0)); - // Setting up the layout of the panel - getContentPane().setLayout(new GridLayout(20,20,0,0)); + // // Setting up the layout of the panel + // getContentPane().setLayout(new GridLayout(20,20,0,0)); // Start & pauses all threads, then adds every square of each thread to the panel for(int i=0;i