From 9930f2421a1e44e682e2ad6b8c53e4fe9dc5289f Mon Sep 17 00:00:00 2001 From: KiriAky 107 Date: Thu, 20 Nov 2025 17:01:56 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E5=8D=81=E4=B8=80=E6=AC=A1=E5=AE=9E?= =?UTF-8?q?=E9=AA=8C=E8=AF=BE=E4=BB=A3=E7=A0=81=20=E6=B7=BB=E5=8A=A0C08~C0?= =?UTF-8?q?11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/MarsCodeWorkspaceAppSettings.xml | 1 + .idea/modules.xml | 4 + C06 Polymorphism/src/shape/Shape.java | 10 +- C08-SnackGame/C08-SnackGame.iml | 11 + C08-SnackGame/src/game/Direction.java | 17 ++ C08-SnackGame/src/game/Drawable.java | 7 + C08-SnackGame/src/game/Food.java | 38 ++++ C08-SnackGame/src/game/GameElement.java | 15 ++ C08-SnackGame/src/game/Movable.java | 5 + C08-SnackGame/src/game/SnakeNode.java | 31 +++ C08-SnackGame/src/view/GamePanel.java | 85 ++++++++ C08-SnackGame/src/view/SnakeGame.java | 18 ++ C09-Collection/C09-Collection.iml | 11 + C09-Collection/src/Josephus.java | 24 +++ C09-Collection/src/game/Direction.java | 17 ++ C09-Collection/src/game/Drawable.java | 7 + C09-Collection/src/game/Food.java | 38 ++++ C09-Collection/src/game/GameElement.java | 15 ++ C09-Collection/src/game/Movable.java | 5 + C09-Collection/src/game/SnakeNode.java | 34 ++++ C09-Collection/src/view/GamePanel.java | 138 +++++++++++++ C09-Collection/src/view/SnakeGame.java | 18 ++ C10-Swing/C10-Swing.iml | 11 + C10-Swing/src/Main.java | 7 + C10-Swing/src/utils/CaptchaUtils.java | 54 +++++ C10-Swing/src/view/LoginFrame.java | 129 ++++++++++++ C11-Swing/C11-Swing.iml | 11 + C11-Swing/src/Main.java | 7 + C11-Swing/src/common/LoginStatus.java | 74 +++++++ C11-Swing/src/po/AccountPo.java | 22 ++ C11-Swing/src/service/AuthService.java | 27 +++ C11-Swing/src/utils/CaptchaUtils.java | 54 +++++ C11-Swing/src/view/LoginFrame.java | 192 ++++++++++++++++++ C11-Swing/src/view/MainFrame.java | 7 + .../C07 StaticAndEnum/CaptchaUtils.class | Bin 0 -> 1568 bytes .../C07 StaticAndEnum/LoginStatus.class | Bin 0 -> 1774 bytes out/production/C07 StaticAndEnum/Test.class | Bin 0 -> 2357 bytes .../C08-SnackGame/game/Direction.class | Bin 0 -> 1435 bytes .../C08-SnackGame/game/Drawable.class | Bin 0 -> 142 bytes out/production/C08-SnackGame/game/Food.class | Bin 0 -> 1207 bytes .../C08-SnackGame/game/GameElement.class | Bin 0 -> 587 bytes .../C08-SnackGame/game/Movable.class | Bin 0 -> 121 bytes .../C08-SnackGame/game/SnakeNode.class | Bin 0 -> 1225 bytes .../C08-SnackGame/view/GamePanel$1.class | Bin 0 -> 606 bytes .../C08-SnackGame/view/GamePanel.class | Bin 0 -> 2823 bytes .../C08-SnackGame/view/SnakeGame.class | Bin 0 -> 761 bytes out/production/C09-Collection/Josephus.class | Bin 0 -> 1504 bytes .../C09-Collection/game/Direction.class | Bin 0 -> 1435 bytes .../C09-Collection/game/Drawable.class | Bin 0 -> 142 bytes out/production/C09-Collection/game/Food.class | Bin 0 -> 1207 bytes .../C09-Collection/game/GameElement.class | Bin 0 -> 587 bytes .../C09-Collection/game/Movable.class | Bin 0 -> 121 bytes .../C09-Collection/game/SnakeNode.class | Bin 0 -> 1322 bytes .../C09-Collection/view/GamePanel$1.class | Bin 0 -> 1450 bytes .../C09-Collection/view/GamePanel.class | Bin 0 -> 4347 bytes .../C09-Collection/view/SnakeGame.class | Bin 0 -> 761 bytes out/production/C10-Swing/Main.class | Bin 0 -> 393 bytes .../C10-Swing/utils/CaptchaUtils.class | Bin 0 -> 1580 bytes .../C10-Swing/view/LoginFrame.class | Bin 0 -> 2752 bytes out/production/C11-Swing/Main.class | Bin 0 -> 393 bytes .../C11-Swing/common/LoginStatus.class | Bin 0 -> 1823 bytes out/production/C11-Swing/po/AccountPo.class | Bin 0 -> 714 bytes .../C11-Swing/service/AuthService.class | Bin 0 -> 1013 bytes .../C11-Swing/utils/CaptchaUtils.class | Bin 0 -> 1580 bytes .../C11-Swing/view/LoginFrame$1.class | Bin 0 -> 871 bytes .../C11-Swing/view/LoginFrame.class | Bin 0 -> 5354 bytes out/production/C11-Swing/view/MainFrame.class | Bin 0 -> 355 bytes 67 files changed, 1137 insertions(+), 7 deletions(-) create mode 100644 C08-SnackGame/C08-SnackGame.iml create mode 100644 C08-SnackGame/src/game/Direction.java create mode 100644 C08-SnackGame/src/game/Drawable.java create mode 100644 C08-SnackGame/src/game/Food.java create mode 100644 C08-SnackGame/src/game/GameElement.java create mode 100644 C08-SnackGame/src/game/Movable.java create mode 100644 C08-SnackGame/src/game/SnakeNode.java create mode 100644 C08-SnackGame/src/view/GamePanel.java create mode 100644 C08-SnackGame/src/view/SnakeGame.java create mode 100644 C09-Collection/C09-Collection.iml create mode 100644 C09-Collection/src/Josephus.java create mode 100644 C09-Collection/src/game/Direction.java create mode 100644 C09-Collection/src/game/Drawable.java create mode 100644 C09-Collection/src/game/Food.java create mode 100644 C09-Collection/src/game/GameElement.java create mode 100644 C09-Collection/src/game/Movable.java create mode 100644 C09-Collection/src/game/SnakeNode.java create mode 100644 C09-Collection/src/view/GamePanel.java create mode 100644 C09-Collection/src/view/SnakeGame.java create mode 100644 C10-Swing/C10-Swing.iml create mode 100644 C10-Swing/src/Main.java create mode 100644 C10-Swing/src/utils/CaptchaUtils.java create mode 100644 C10-Swing/src/view/LoginFrame.java create mode 100644 C11-Swing/C11-Swing.iml create mode 100644 C11-Swing/src/Main.java create mode 100644 C11-Swing/src/common/LoginStatus.java create mode 100644 C11-Swing/src/po/AccountPo.java create mode 100644 C11-Swing/src/service/AuthService.java create mode 100644 C11-Swing/src/utils/CaptchaUtils.java create mode 100644 C11-Swing/src/view/LoginFrame.java create mode 100644 C11-Swing/src/view/MainFrame.java create mode 100644 out/production/C07 StaticAndEnum/CaptchaUtils.class create mode 100644 out/production/C07 StaticAndEnum/LoginStatus.class create mode 100644 out/production/C07 StaticAndEnum/Test.class create mode 100644 out/production/C08-SnackGame/game/Direction.class create mode 100644 out/production/C08-SnackGame/game/Drawable.class create mode 100644 out/production/C08-SnackGame/game/Food.class create mode 100644 out/production/C08-SnackGame/game/GameElement.class create mode 100644 out/production/C08-SnackGame/game/Movable.class create mode 100644 out/production/C08-SnackGame/game/SnakeNode.class create mode 100644 out/production/C08-SnackGame/view/GamePanel$1.class create mode 100644 out/production/C08-SnackGame/view/GamePanel.class create mode 100644 out/production/C08-SnackGame/view/SnakeGame.class create mode 100644 out/production/C09-Collection/Josephus.class create mode 100644 out/production/C09-Collection/game/Direction.class create mode 100644 out/production/C09-Collection/game/Drawable.class create mode 100644 out/production/C09-Collection/game/Food.class create mode 100644 out/production/C09-Collection/game/GameElement.class create mode 100644 out/production/C09-Collection/game/Movable.class create mode 100644 out/production/C09-Collection/game/SnakeNode.class create mode 100644 out/production/C09-Collection/view/GamePanel$1.class create mode 100644 out/production/C09-Collection/view/GamePanel.class create mode 100644 out/production/C09-Collection/view/SnakeGame.class create mode 100644 out/production/C10-Swing/Main.class create mode 100644 out/production/C10-Swing/utils/CaptchaUtils.class create mode 100644 out/production/C10-Swing/view/LoginFrame.class create mode 100644 out/production/C11-Swing/Main.class create mode 100644 out/production/C11-Swing/common/LoginStatus.class create mode 100644 out/production/C11-Swing/po/AccountPo.class create mode 100644 out/production/C11-Swing/service/AuthService.class create mode 100644 out/production/C11-Swing/utils/CaptchaUtils.class create mode 100644 out/production/C11-Swing/view/LoginFrame$1.class create mode 100644 out/production/C11-Swing/view/LoginFrame.class create mode 100644 out/production/C11-Swing/view/MainFrame.class diff --git a/.idea/MarsCodeWorkspaceAppSettings.xml b/.idea/MarsCodeWorkspaceAppSettings.xml index e2a065b..a2d5776 100644 --- a/.idea/MarsCodeWorkspaceAppSettings.xml +++ b/.idea/MarsCodeWorkspaceAppSettings.xml @@ -1,6 +1,7 @@ + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index d19f3f8..caa579b 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -8,6 +8,10 @@ + + + + diff --git a/C06 Polymorphism/src/shape/Shape.java b/C06 Polymorphism/src/shape/Shape.java index 6afc876..021857d 100644 --- a/C06 Polymorphism/src/shape/Shape.java +++ b/C06 Polymorphism/src/shape/Shape.java @@ -1,7 +1,7 @@ package shape; import java.awt.*; -public class Shape { +public abstract class Shape { protected Color color; protected int x,y; @@ -11,9 +11,7 @@ public class Shape { public Color getColor() { return color; } - public double getArea(){ - return x*y; - } + public abstract double getArea(); public void setX(int x){ this.x=x; @@ -29,9 +27,7 @@ public class Shape { return y; } - public double getPerimeter(){ - return x*y; - } + public abstract double getPerimeter(); public void move(int dx,int dy){ x += dx; diff --git a/C08-SnackGame/C08-SnackGame.iml b/C08-SnackGame/C08-SnackGame.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/C08-SnackGame/C08-SnackGame.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/C08-SnackGame/src/game/Direction.java b/C08-SnackGame/src/game/Direction.java new file mode 100644 index 0000000..b7c7432 --- /dev/null +++ b/C08-SnackGame/src/game/Direction.java @@ -0,0 +1,17 @@ +package game; + +import java.awt.*; + +public enum Direction { + UP(new Point(0,-1)), + DOWN(new Point(0,1)), + LEFT(new Point(-1,0)), + RIGHT(new Point(1,0)); + private Point offset; + Direction(Point offset) { + this.offset = offset; + } + public static Point getOffset(Direction dir) { + return dir.offset; + } +} diff --git a/C08-SnackGame/src/game/Drawable.java b/C08-SnackGame/src/game/Drawable.java new file mode 100644 index 0000000..a2251f8 --- /dev/null +++ b/C08-SnackGame/src/game/Drawable.java @@ -0,0 +1,7 @@ +package game; + +import java.awt.*; + +public interface Drawable { + void draw(Graphics g); +} diff --git a/C08-SnackGame/src/game/Food.java b/C08-SnackGame/src/game/Food.java new file mode 100644 index 0000000..d67fe7b --- /dev/null +++ b/C08-SnackGame/src/game/Food.java @@ -0,0 +1,38 @@ +package game; + +import java.awt.*; +import java.util.Random; + +public class Food extends GameElement{ + private static Random randeom = new Random(); + public Food(int width,int height) { + super(0,0); + randomPosition(width,height); + } + + /** + * 随机设置位置坐标 + * @param width 可用宽度范围 + * @param height 可用高度范围 + */ + public void randomPosition(int width, int height) { + //计算一排或一列最多的格子数 + int maxX = width/SIZE; + int maxY = height/SIZE; + //将位置坐标映射到像素点 + int x = randeom.nextInt(maxX)*SIZE; + int y = randeom.nextInt(maxY)*SIZE; + //设置坐标 + position.setLocation(x,y); + } + @Override + public void draw(Graphics g) { + //红色填充,黑色边框 + g.setColor(Color.RED); + g.fillOval(position.x,position.y,SIZE,SIZE); + + g.setColor(Color.BLACK); + g.drawOval(position.x,position.y,SIZE,SIZE); + } + +} diff --git a/C08-SnackGame/src/game/GameElement.java b/C08-SnackGame/src/game/GameElement.java new file mode 100644 index 0000000..bfcf574 --- /dev/null +++ b/C08-SnackGame/src/game/GameElement.java @@ -0,0 +1,15 @@ +package game; + +import java.awt.*; + +public abstract class GameElement { + protected Point position; + public static final int SIZE = 20; + protected GameElement(int x,int y) { + position = new Point(x,y); + } + public Point getPosition() { + return position; + } + public abstract void draw(Graphics g); +} diff --git a/C08-SnackGame/src/game/Movable.java b/C08-SnackGame/src/game/Movable.java new file mode 100644 index 0000000..744da6e --- /dev/null +++ b/C08-SnackGame/src/game/Movable.java @@ -0,0 +1,5 @@ +package game; + +public interface Movable { + void move(); +} diff --git a/C08-SnackGame/src/game/SnakeNode.java b/C08-SnackGame/src/game/SnakeNode.java new file mode 100644 index 0000000..251657d --- /dev/null +++ b/C08-SnackGame/src/game/SnakeNode.java @@ -0,0 +1,31 @@ +package game; + +import java.awt.*; + +public class SnakeNode extends GameElement implements Movable{ + private Direction direction; + public SnakeNode(int x, int y, Direction direction) { + super(x, y); + this.direction = direction; + } + public void setDirection(Direction direction) { + this.direction = direction; + } + + @Override + public void draw(Graphics g) { + //绿色填充,黑色边框 + g.setColor(Color.GREEN); + g.fillRect(position.x, position.y, SIZE, SIZE); + // 绘制边框,让蛇身更清晰 + g.setColor(Color.BLACK); + g.drawRect(position.x, position.y, SIZE, SIZE); + } + + @Override + public void move() { + Point offset = Direction.getOffset(direction); + position.x += offset.x*SIZE; + position.y += offset.y*SIZE; + } +} diff --git a/C08-SnackGame/src/view/GamePanel.java b/C08-SnackGame/src/view/GamePanel.java new file mode 100644 index 0000000..1133002 --- /dev/null +++ b/C08-SnackGame/src/view/GamePanel.java @@ -0,0 +1,85 @@ +package view; + +import game.Direction; +import game.Food; +import game.SnakeNode; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; + + +public class GamePanel extends JPanel { + private static final int WIDTH = 600; + private static final int HEIGHT = 600; + private boolean isRunning; + // FIXME 蛇身体节点 未来需要改进 + private SnakeNode[] snakeBody = new SnakeNode[3]; + private final Food food; + + + public GamePanel() { + setPreferredSize(new Dimension(WIDTH, HEIGHT)); + setBackground(Color.WHITE); // 背景色设为白色 + + // FIXME 初始化蛇 未来需要改进 + snakeBody[0] = new SnakeNode(100, 100, Direction.RIGHT); + snakeBody[1] = new SnakeNode(80, 100, Direction.RIGHT); + snakeBody[2] = new SnakeNode(60, 100, Direction.RIGHT); + + food = new Food(WIDTH, HEIGHT); + + + // 键盘监听 + addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + // TODO 按下按键后需要做处理 + } + }); + setFocusable(true); // 确保面板能接收键盘事件 + + // 游戏循环 + new Thread(() -> { + while (isRunning) { + try { + Thread.sleep(250); + moveSnake(); // 移动蛇 + checkCollision(); // 检查碰撞 + repaint(); // 调用paintComponent重绘 + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + + private void moveSnake() { + // TODO + } + + private void checkCollision() { + // TODO + } + + private void gameOver() { + isRunning = false; + JOptionPane.showMessageDialog(this, "游戏结束!得分:"); + System.exit(0); + } + + // 核心改进:重写paintComponent而非paint,利用Swing双缓冲 + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); // 先绘制背景(双缓冲关键步骤) + + // 绘制蛇 + for (SnakeNode node : snakeBody) { + node.draw(g); + } + + // 绘制食物 + food.draw(g); + } +} \ No newline at end of file diff --git a/C08-SnackGame/src/view/SnakeGame.java b/C08-SnackGame/src/view/SnakeGame.java new file mode 100644 index 0000000..469511a --- /dev/null +++ b/C08-SnackGame/src/view/SnakeGame.java @@ -0,0 +1,18 @@ +package view; + +import javax.swing.*; + +public class SnakeGame extends JFrame { + public SnakeGame() { + setTitle("贪吃蛇"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + add(new GamePanel()); // 添加游戏面板 + pack(); // 自动调整窗口大小以适应面板 + setLocationRelativeTo(null); // 窗口居中 + setVisible(true); + } + + public static void main(String[] args) { + new SnakeGame(); + } +} diff --git a/C09-Collection/C09-Collection.iml b/C09-Collection/C09-Collection.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/C09-Collection/C09-Collection.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/C09-Collection/src/Josephus.java b/C09-Collection/src/Josephus.java new file mode 100644 index 0000000..8fd594a --- /dev/null +++ b/C09-Collection/src/Josephus.java @@ -0,0 +1,24 @@ +import java.util.*; +public class Josephus { + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int n = sc.nextInt(); + ArrayList arr = new ArrayList<>(); + for(int i=0;i2) { + Iterator it = arr.iterator(); + while(it.hasNext()) { + it.next(); + cnt++; + if(cnt==3) { + it.remove(); + cnt = 0; + } + } + System.out.println(arr); + } + } +} diff --git a/C09-Collection/src/game/Direction.java b/C09-Collection/src/game/Direction.java new file mode 100644 index 0000000..b7c7432 --- /dev/null +++ b/C09-Collection/src/game/Direction.java @@ -0,0 +1,17 @@ +package game; + +import java.awt.*; + +public enum Direction { + UP(new Point(0,-1)), + DOWN(new Point(0,1)), + LEFT(new Point(-1,0)), + RIGHT(new Point(1,0)); + private Point offset; + Direction(Point offset) { + this.offset = offset; + } + public static Point getOffset(Direction dir) { + return dir.offset; + } +} diff --git a/C09-Collection/src/game/Drawable.java b/C09-Collection/src/game/Drawable.java new file mode 100644 index 0000000..a2251f8 --- /dev/null +++ b/C09-Collection/src/game/Drawable.java @@ -0,0 +1,7 @@ +package game; + +import java.awt.*; + +public interface Drawable { + void draw(Graphics g); +} diff --git a/C09-Collection/src/game/Food.java b/C09-Collection/src/game/Food.java new file mode 100644 index 0000000..d67fe7b --- /dev/null +++ b/C09-Collection/src/game/Food.java @@ -0,0 +1,38 @@ +package game; + +import java.awt.*; +import java.util.Random; + +public class Food extends GameElement{ + private static Random randeom = new Random(); + public Food(int width,int height) { + super(0,0); + randomPosition(width,height); + } + + /** + * 随机设置位置坐标 + * @param width 可用宽度范围 + * @param height 可用高度范围 + */ + public void randomPosition(int width, int height) { + //计算一排或一列最多的格子数 + int maxX = width/SIZE; + int maxY = height/SIZE; + //将位置坐标映射到像素点 + int x = randeom.nextInt(maxX)*SIZE; + int y = randeom.nextInt(maxY)*SIZE; + //设置坐标 + position.setLocation(x,y); + } + @Override + public void draw(Graphics g) { + //红色填充,黑色边框 + g.setColor(Color.RED); + g.fillOval(position.x,position.y,SIZE,SIZE); + + g.setColor(Color.BLACK); + g.drawOval(position.x,position.y,SIZE,SIZE); + } + +} diff --git a/C09-Collection/src/game/GameElement.java b/C09-Collection/src/game/GameElement.java new file mode 100644 index 0000000..bfcf574 --- /dev/null +++ b/C09-Collection/src/game/GameElement.java @@ -0,0 +1,15 @@ +package game; + +import java.awt.*; + +public abstract class GameElement { + protected Point position; + public static final int SIZE = 20; + protected GameElement(int x,int y) { + position = new Point(x,y); + } + public Point getPosition() { + return position; + } + public abstract void draw(Graphics g); +} diff --git a/C09-Collection/src/game/Movable.java b/C09-Collection/src/game/Movable.java new file mode 100644 index 0000000..744da6e --- /dev/null +++ b/C09-Collection/src/game/Movable.java @@ -0,0 +1,5 @@ +package game; + +public interface Movable { + void move(); +} diff --git a/C09-Collection/src/game/SnakeNode.java b/C09-Collection/src/game/SnakeNode.java new file mode 100644 index 0000000..556fa9e --- /dev/null +++ b/C09-Collection/src/game/SnakeNode.java @@ -0,0 +1,34 @@ +package game; + +import java.awt.*; + +public class SnakeNode extends GameElement implements Movable{ + private Direction direction; + public SnakeNode(int x, int y, Direction direction) { + super(x, y); + this.direction = direction; + } + public void setDirection(Direction direction) { + this.direction = direction; + } + public Direction getDirection() { + return direction; + } + + @Override + public void draw(Graphics g) { + //绿色填充,黑色边框 + g.setColor(Color.GREEN); + g.fillRect(position.x, position.y, SIZE, SIZE); + // 绘制边框,让蛇身更清晰 + g.setColor(Color.BLACK); + g.drawRect(position.x, position.y, SIZE, SIZE); + } + + @Override + public void move() { + Point offset = Direction.getOffset(direction); + position.x += offset.x*SIZE; + position.y += offset.y*SIZE; + } +} diff --git a/C09-Collection/src/view/GamePanel.java b/C09-Collection/src/view/GamePanel.java new file mode 100644 index 0000000..70e50fe --- /dev/null +++ b/C09-Collection/src/view/GamePanel.java @@ -0,0 +1,138 @@ +package view; + +import game.Direction; +import game.Food; +import game.GameElement; +import game.SnakeNode; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.util.*; + + +public class GamePanel extends JPanel { + private static final int WIDTH = 600; + private static final int HEIGHT = 600; + private boolean isRunning; + private LinkedList snakeBody = new LinkedList<>(); + private final Food food; + private int score = 0; + + + public GamePanel() { + setPreferredSize(new Dimension(WIDTH, HEIGHT)); + setBackground(Color.WHITE); // 背景色设为白色 + isRunning = true; + snakeBody.add(new SnakeNode(100, 100, Direction.RIGHT)); + snakeBody.add(new SnakeNode(80, 100, Direction.RIGHT)); + snakeBody.add(new SnakeNode(60, 100, Direction.RIGHT)); + + food = new Food(WIDTH, HEIGHT); + + + // 键盘监听 + addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + Direction currentDir = snakeBody.getFirst().getDirection(); + switch(e.getKeyCode()){ + case KeyEvent.VK_UP: { + if (currentDir != Direction.DOWN) + snakeBody.getFirst().setDirection(Direction.UP); + break; + } + case KeyEvent.VK_DOWN: { + if (currentDir != Direction.UP) + snakeBody.getFirst().setDirection(Direction.DOWN); + break; + } + case KeyEvent.VK_LEFT: { + if (currentDir != Direction.RIGHT) + snakeBody.getFirst().setDirection(Direction.LEFT); + break; + } + case KeyEvent.VK_RIGHT: { + if (currentDir != Direction.LEFT) + snakeBody.getFirst().setDirection(Direction.RIGHT); + break; + } + default: + System.out.println("位置案件"); + } + } + }); + setFocusable(true); // 确保面板能接收键盘事件 + + // 游戏循环 + new Thread(() -> { + while (isRunning) { + try { + Thread.sleep(50); + moveSnake(); // 移动蛇 + checkCollision(); // 检查碰撞 + repaint(); // 调用paintComponent重绘 + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + + private void moveSnake() { + //获取蛇头 + SnakeNode head = snakeBody.getFirst(); + Point offset = Direction.getOffset(head.getDirection()); + //(x',y')=(x,y)+offset*SIZE + int xNew= head.getPosition().x+offset.x*GameElement.SIZE; + int yNew= head.getPosition().y+offset.y*GameElement.SIZE; + //在新位置添加蛇头 + snakeBody.addFirst(new SnakeNode(xNew, yNew, head.getDirection())); + //判断是否吃到食物 + if(head.getPosition().equals(food.getPosition())){ + //吃到食物 + food.randomPosition(WIDTH, HEIGHT); + score++; + } + //删除蛇尾 + else { + snakeBody.removeLast(); + } + } + + private void checkCollision() { + SnakeNode head = snakeBody.getFirst(); + Point headPos = head.getPosition(); + //撞墙 + if(headPos.x<0||headPos.x>WIDTH||headPos.y<0||headPos.y>HEIGHT) + gameOver(); + //撞自己 + for(int i=1;i + + + + + + + + + + \ No newline at end of file diff --git a/C10-Swing/src/Main.java b/C10-Swing/src/Main.java new file mode 100644 index 0000000..b30de3d --- /dev/null +++ b/C10-Swing/src/Main.java @@ -0,0 +1,7 @@ +import view.LoginFrame; + +public class Main { + public static void main(String[] args) { + new LoginFrame(); + } +} diff --git a/C10-Swing/src/utils/CaptchaUtils.java b/C10-Swing/src/utils/CaptchaUtils.java new file mode 100644 index 0000000..1e2178d --- /dev/null +++ b/C10-Swing/src/utils/CaptchaUtils.java @@ -0,0 +1,54 @@ +package utils; + +import java.util.Random; + +/** + * 验证码工具类 + */ +public class CaptchaUtils { // final修饰类:不能被继承 + // 【任务1】静态常量:字符集(全局固定) + static final String CHAR_SET="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + + // 【任务2】静态常量:验证码长度(全局固定) + static final int CAPTCHA_LENGTH=4; + + // 【任务3】私有构造方法:禁止创建实例(工具类无需实例化) + private CaptchaUtils(){ + } + + /** + * 【任务4】 + * 静态方法:generateCaptcha 生成随机验证码 + * @return String 返回生成的随机验证码字符串 + */ + public static String generateCaptcha(){ + Random random = new Random(); + //生成随机验证码 + StringBuilder sb = new StringBuilder(); + for(int i=0;i + + + + + + + + + + \ No newline at end of file diff --git a/C11-Swing/src/Main.java b/C11-Swing/src/Main.java new file mode 100644 index 0000000..b30de3d --- /dev/null +++ b/C11-Swing/src/Main.java @@ -0,0 +1,7 @@ +import view.LoginFrame; + +public class Main { + public static void main(String[] args) { + new LoginFrame(); + } +} diff --git a/C11-Swing/src/common/LoginStatus.java b/C11-Swing/src/common/LoginStatus.java new file mode 100644 index 0000000..cacb5d3 --- /dev/null +++ b/C11-Swing/src/common/LoginStatus.java @@ -0,0 +1,74 @@ +package common; + +/** + * 登录状态枚举类 + * 用final保证状态信息不可变,用static提供工具方法 + */ + public enum LoginStatus { + // 【任务3】枚举实例:状态码和描述 + // 成功登录 + SUCCESS(200,"登录成功"), + // 密码错误 + PASSWORD_ERROR(901,"密码错误"), + // 验证码错误 + CAPTCHA_ERROR(902,"验证码错误"), + // 用户不存在 + USER_NOT_FOUND(903,"用户不存在"); + + + + // 【任务1】定义 final修饰的属性:确保状态信息不可修改 + private final int code; + private final String msg; + + + + /** + * 【任务2】 + * 构造函数,用于创建LoginStatus实例 + * @param code 状态码 + * @param msg 状态消息 + */ + LoginStatus(int code, String msg) { + this.code = code; + this.msg = msg; + } + + // 静态方法:根据状态码获取枚举实例(static工具方法) + /** + * 【任务4】 + * 静态方法: getByCode 根据状态码获取对应的登录状态枚举值 + * @param code 状态码 + * @return LoginStatus 对应的LoginStatus枚举值,如果找不到匹配的状态码则返回null + */ + public static LoginStatus getByCode(int code){ + for(LoginStatus status:values()){ + if(status.code==code){ + return status; + } + } + return null; + } + + // getter方法(final属性无需setter) + /** + * 【任务5】 + * 方法: getCode 获取code值 + * + * @return int code值 + */ + public int getCode() { + return code; + } + + /** + * 任务【6】 + * 方法: getMsg 获取消息内容 + * + * @return String 返回当前对象的消息字符串 + */ + public String getMsg() { + return msg; + } + } + diff --git a/C11-Swing/src/po/AccountPo.java b/C11-Swing/src/po/AccountPo.java new file mode 100644 index 0000000..67a6546 --- /dev/null +++ b/C11-Swing/src/po/AccountPo.java @@ -0,0 +1,22 @@ +package po; + +public class AccountPo { + private String username; + private String password; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/C11-Swing/src/service/AuthService.java b/C11-Swing/src/service/AuthService.java new file mode 100644 index 0000000..43fbee5 --- /dev/null +++ b/C11-Swing/src/service/AuthService.java @@ -0,0 +1,27 @@ +package service; + +import common.LoginStatus; +import po.AccountPo; + +public class AuthService { + private static AccountPo dbAccount = new AccountPo(); + + static { + dbAccount.setUsername("admin"); + dbAccount.setPassword("123456"); + } + + public LoginStatus login(AccountPo account) { + //1.获取用户输入的账号在数据库中查询该账号信息 + //2.账号不存在 + //3.账号存在 比较密码是否一致 + if (dbAccount.getUsername().equals(account.getUsername()) && + dbAccount.getPassword().equals(account.getPassword())) + return LoginStatus.SUCCESS; + else if (!dbAccount.getUsername().equals(account.getUsername())) { + return LoginStatus.USER_NOT_FOUND; + } + return LoginStatus.PASSWORD_ERROR; + } +} + diff --git a/C11-Swing/src/utils/CaptchaUtils.java b/C11-Swing/src/utils/CaptchaUtils.java new file mode 100644 index 0000000..1e2178d --- /dev/null +++ b/C11-Swing/src/utils/CaptchaUtils.java @@ -0,0 +1,54 @@ +package utils; + +import java.util.Random; + +/** + * 验证码工具类 + */ +public class CaptchaUtils { // final修饰类:不能被继承 + // 【任务1】静态常量:字符集(全局固定) + static final String CHAR_SET="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + + // 【任务2】静态常量:验证码长度(全局固定) + static final int CAPTCHA_LENGTH=4; + + // 【任务3】私有构造方法:禁止创建实例(工具类无需实例化) + private CaptchaUtils(){ + } + + /** + * 【任务4】 + * 静态方法:generateCaptcha 生成随机验证码 + * @return String 返回生成的随机验证码字符串 + */ + public static String generateCaptcha(){ + Random random = new Random(); + //生成随机验证码 + StringBuilder sb = new StringBuilder(); + for(int i=0;i { + //点击注册按钮后的事件 + String username = usernameTextField.getText(); + String password = passwordField.getText(); + String captcha = captchaTextField.getText(); + //System.out.println("用户名" + username + " 密码" + password + " 验证码" + captcha); + if(username.equals("")||password.equals("")||captcha.equals("")) { + JOptionPane.showMessageDialog(this, "请填写完整信息!", "提示", JOptionPane.INFORMATION_MESSAGE); + return; + } + if(!CaptchaUtils.verifyCaptcha(captcha,captchaLabel.getText())){ + JOptionPane.showMessageDialog(this, LoginStatus.CAPTCHA_ERROR.getMsg(), "提示", JOptionPane.INFORMATION_MESSAGE); + return; + } + AccountPo account = new AccountPo(); + account.setUsername(username); + account.setPassword(password); + LoginStatus loginStatus = authService.login(account); + if(loginStatus == LoginStatus.SUCCESS) { + //进入主界面 + MainFrame mainFrame = new MainFrame(); + this.dispose(); + } + else if(loginStatus == LoginStatus.USER_NOT_FOUND) { + JOptionPane.showMessageDialog(this, LoginStatus.USER_NOT_FOUND.getMsg(), "提示", JOptionPane.INFORMATION_MESSAGE); + return; + } + else if(loginStatus == LoginStatus.PASSWORD_ERROR) { + JOptionPane.showMessageDialog(this, LoginStatus.PASSWORD_ERROR.getMsg(), "提示", JOptionPane.INFORMATION_MESSAGE); + return; + } + else{ + JOptionPane.showMessageDialog(this, loginStatus.getMsg(), "提示", JOptionPane.INFORMATION_MESSAGE); + } + }); + registerButton.addActionListener(e -> { + //点击注册按钮后的事件 + return; + }); + } + private JPanel initPanel(){ + mainPanel = new JPanel(); + GridLayout gridLayout = new GridLayout(6,1,10,10); + mainPanel.setLayout(gridLayout); + //第1层 空白面板 占用 + mainPanel.add(new JPanel()); + //第2层 账号面板 + mainPanel.add(initAcountPanel()); + //第3层 密码面板 + mainPanel.add(initPasswordPanel()); + //第4层 验证码面板 + mainPanel.add(initCaptchaPanel()); + //第5层 按钮面板 + mainPanel.add(initButtonPanel()); + //第6层 空白面板 占用 + return mainPanel; + } + /** + * 初始化账户信息面板 + * @return 包含用户名输入框的面板组件 + */ + private JPanel initAcountPanel(){ + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(1,4,10,0)); + JLabel label = new JLabel("用户名:"); + //让label居右 + label.setHorizontalAlignment(SwingConstants.RIGHT); + usernameTextField = new JTextField(15); + panel.add(label); + panel.add(usernameTextField); + panel.add(new JPanel()); + return panel; + } + + /** + * 初始化密码输入面板 + * @return 包含密码标签和输入框的JPanel面板 + */ + private JPanel initPasswordPanel(){ + JPanel panel = new JPanel(); + // 设置网格布局,1行4列,水平间距10像素 + panel.setLayout(new GridLayout(1,4,10,0)); + JLabel label = new JLabel("密 码:"); + // 设置标签文本右对齐 + label.setHorizontalAlignment(SwingConstants.RIGHT); + passwordField = new JPasswordField(15); + panel.add(label); + panel.add(passwordField); + // 添加空白面板占位 + panel.add(new JPanel()); + return panel; + } + + + /** + * 初始化验证码面板 + * + * @return 包含验证码相关组件的JPanel面板 + */ + private JPanel initCaptchaPanel(){ + // 创建面板并设置网格布局 + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(1,4,10,0)); + + // 创建验证码标签 + JLabel label = new JLabel("验证码:"); + label.setHorizontalAlignment(SwingConstants.RIGHT); + + // 创建验证码输入框和验证码显示标签 + captchaTextField = new JTextField(4); + captchaLabel = new JLabel(CaptchaUtils.generateCaptcha()); + + // 将组件添加到面板中 + panel.add(label); + panel.add(captchaTextField); + panel.add(captchaLabel); + + return panel; + } + + + private JPanel initButtonPanel(){ + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(1,4,10,0)); + loginButton = new JButton("登录"); + registerButton = new JButton("注册"); + panel.add(new JPanel()); + panel.add(loginButton); + panel.add(registerButton); + panel.add(new JPanel()); + return panel; + } + + + +} diff --git a/C11-Swing/src/view/MainFrame.java b/C11-Swing/src/view/MainFrame.java new file mode 100644 index 0000000..2f99eba --- /dev/null +++ b/C11-Swing/src/view/MainFrame.java @@ -0,0 +1,7 @@ +package view; + +import javax.swing.*; + +public class MainFrame { + JFrame frame = new JFrame(); +} diff --git a/out/production/C07 StaticAndEnum/CaptchaUtils.class b/out/production/C07 StaticAndEnum/CaptchaUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..29097c843762ad92ce3b0cc40b89d78e14c881f0 GIT binary patch literal 1568 zcmZ`(%TgOh6g@o>3>uG+5HA~JjPufi1R1c6ZDA5I<{={=iYN}_w7GE{`Nb7G@dGu;FIB3 z(Su%w@DV@eNt0WZ_R^`ljpH9rPG8-enVq|J`_BB`dkP{Llrf}Y7$axoJOwQV zq`=gzihJlO$Ox{NRb0UsgKX(1ZpI>!{#YhXTM>+_xP}SB5Je~5-q8g8NfkHn1?})! zO}EMn<1sCs{fyp}Kzya*Ykb4d=h|mfhGN|i@{J&-B8~*n*IzccS%*BORm zU0G7`g8;t8cQU3`Bysao*{5|^uaa83LHvhXV8c#s(|Nc=MCVmX8N{rLIYBQ}(JkHK zE~WEMM!{{|kuk60F77c5dJ;dyQ|W3VnrVH8UO^;CsaU`RhTyU87|&1J;TfVA2)an3 zAo9In@q;*^gLr{Tsja1Vp5>PF43TaKrP6Gx?sCg5aI-(|oTdBQx)E^n^p*BDsF zM;G5u0X4f!4xy}J>6?veQFrpZXwpg~YnQlL;Eo~e_M+cCH0l&Cd;a#O7f%BTC#c9(;57N5;`YzKWu>=OqvqEG)#B#@8 zfuDTn<)D>S@|dHM(b$uC2lk5xS)+gP$N>H1972X>YRd_auufJ$T*G#NxA2h{F#iGa z{yPNLKR}^T&H5gU%Wp7|h=iILXkv76DiXTZ#MLIQ@4c4TPyhZo)x?)S6VwNha)R0% z7)2j-dKhCg8z)s0)HGw5#iU0gL8)%w60)SoM?E-+4Vp=WNn#UQgbyQ%Z9FD&J7k3* zeMCftEJI;`<2o^?``u=KpMXMTZ-R(K-_lI-h=|ev2`}MD%L6$osrdCG?-e(IT@>1J zUJ(@$C+b_c8dlyQ@++p^W2T8)uNlewt7X#4d)#kgQ53nQc!bUYnD*EY&^U@2D(h?~ gu|)5q&?o3bv4t<8 literal 0 HcmV?d00001 diff --git a/out/production/C07 StaticAndEnum/LoginStatus.class b/out/production/C07 StaticAndEnum/LoginStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..e29a61476e40e43f8f3152b81204aa7f3d90860b GIT binary patch literal 1774 zcmZuy?Qc_M6#qTFx4pOB-PYc*YU|1dOxG7=fDDz6xzcs6+O4y9Em<^K?n*7it~GtZ z_(@3=iP6Llm`GwG@r%T0hDF>Wf$-7zcUT7hfuGRxJiUaL?IyS9KIb{V^YT0Aq<=sD z^B#a0&ML4m^rfoBQpISPjb_~m23dn04hF@@#^VXYVCYYEnMApbs=>)^29{%naW)1dLI{&;M8CB6`QdNZJ5P=K;VBD1!XURj$@XP4$U$fH5W5XBtN#ZuV> z#TciZ~zAx9Mh#rsWHRg z?RI4$lc5|hZd}8Qc!`M3SI<$-EXkEY4IzXXq>Xx!LEjzLMMj4;yo@6hMPyuOa0f%Z zyr{6NIL4suT)Wf0`|X1(-?YE{fkR*637%jG?Uh$@ceqeag;T|=s z+}u>5sW`&qj9C#Zu5L({|)PSTsMhqAP^! zprl|ZN&TVoBJX4GJX&Kw>oT1$TXRBy9K&c=1Ncl$_tZQSWpEkQW-VWsFL9dOUHf;0 zkMry?;@MA2tjzlOwgMz+BZZ{(6OxvVEOb76LejheZa?2NI#av(aFL%Foeq-ZkE;du zAJ}&v!#C-~aE5*z;?7R?0mNYw_9sYkgiB}PZTRkkaeG^j{TykujujF-HsYXK)Zvl7(5Ho_e;YHm;O6tt3EE*?rOvxB VPVAl}E*FSF8~t*sR*)4k_dn*+SgHU3 literal 0 HcmV?d00001 diff --git a/out/production/C07 StaticAndEnum/Test.class b/out/production/C07 StaticAndEnum/Test.class new file mode 100644 index 0000000000000000000000000000000000000000..d917c5cb4c7ebdbe91a3f68b4266276ea2f68b17 GIT binary patch literal 2357 zcma)8YjYD-7=BKZX1B}ILP~*%pmHfmXdA9oDWD~7Z8dFbw-*7mo+eAWG}#T=O`%>} z6$Txh!9iw}anvu4j$f$#&~^a%0sal96hH9?9Q8fBX-%gYH8a^g?|E;}dpYmf-~POF zA3!^|B{vrGWSE&Y0W+lH3GAR~ ztRe;X52AjOSV0t|-0W1b3r{g@%kc?4ZkZ|Wj2O;1t!#&z4moWsVJ-Ji!Ks30uv@|& z6??Idp?)O=Weypnyl|ftIjUrJSjK*0J-WT{=>CnRD?coM`P0K|3rp8Oe|+zjupdzo z6~?PwGa{i)Dw;*2WK+NFBn(rR5n~9hT3EV$b@}@lQkQY4-16@~fA;A1jK@-N1V<$t zQ_+fN8T^B~O(|1S<9cc$VP!-`M=GFQpZEW>6G^xxHHSMzn|k7T9GB3h;)IA|Lm7`c zGNU`ac1FmYQt<*_r2NrV+)C?im-Ym~a9Y$a&al4%!k!9clF`Yq_vC;76w!(=spv)z z!^TOyV4R;?ZM#a|)<+*XTSM4iQIS9|*@(CI55~LOM>_`wk^@Aq$%Kp~)s?4nhN<9H z3`o#a3}R^QDRcXqGNWHCa&aKmbdh(G+dQu$Dqa&_YlpPXfziI?;AmHJsINoDSyDfA z_{h;?tpeQZD&BC#`r9>aBstLGp%bi86>kZaqz%R6otj3S;ibM#^jTjqH>MW``B;{U z5lmPqo*m`|L(rv7zcX$S#6UvyQyXdLxM-!V;d2!-HB9-i-5Ii)hq$l7fhZb zr*fX#_9d&3rZHiNIkT!6prcFOMJ{r;_MT>H>I2!Mk`*!uz7nKOjAKuDG+vFej}E zJ?0HPZ*+C>lw%dh{8#12p(N;`>*i)UtJ`}MmNik#x2;cd+0Gip!Ku7nLA*S-D;>Dr zM4V@{n&Ie_SG7l6CGjj(Pq!s}$gpo+OqHNY_?ThWzl(}?bK|06d4#S!@$=D?pi7UQ zoTwPR8NI8c3t+#{q6%a56l@`yqNnN!APt?U8k|Rlc1W4k!%s68uL7zZ{`H*;O~7oWigO?5AB6fi-WY&icL6$&FH`uB(aS`*p4hh zZdly}y^c=%I1CCpOfnZ}uBtk*ghL<4RB+Gu{Mw^-!(RB;b9A2J{2K(mG?-Ika2ZCo-h;y@ZcypGdeQpVM zxv7nin@<5{NfS z1(DfgfpJS~4pI)3rG)h*caqS?oKTOwcjv%?r!hscx;AE^$1|r4kiy z$0ifW+hxb}YA%I#2H8(rl}Q$eQMSC*pvV1*=3;_5o`nd=TeeGQcCu6nrYI*^r@x^v zp7><5)Ko@5&sS@1$y&6z8*Qi8WQ_MTeV2OOOLr+W-NQEqAWQecw{#tROSga+5}yqq z+RJx$c zq^UKkR(;1hHf+Oc1nJqWB7z(W&T#)|sHN|#(rW_>6yDIKsRzRHdXL(8F zRor(pA7zGzDjwl6q23#&xqYgcYze0!=Mh8-PgFdWr2Vf-OUs)wU|vPR38*%;GZ`Rz z{9F#1gY>2|Wp;Aes_FtgC8MElozxHX=3DK+q^3`{#4Kw~L%v<5&#oD)C0y#vyTE*B zM%AuyMQXZnSd-JKYv=FU*FGjB^J(++l%`Tro;M%3NZeFZkMnmmkob^?I)$vdNJalrL0x@RDc5F$U=# zf?VY#>Qe0hyuvbH48;m&2`8mhN*>BwdN;vmdMmW$lhK&DIKpGjcL8;@g=jQZoAXnS z``kw$dx=Ec9}l!Je9d8)Sm4h45hv~dzd=l47&*>g^4VzPclhKxeDW?IKW4B-W?sfm zW1W(ZC_{3Yh&si}xI_-)4HRA8pJ`)${-W literal 0 HcmV?d00001 diff --git a/out/production/C08-SnackGame/game/GameElement.class b/out/production/C08-SnackGame/game/GameElement.class new file mode 100644 index 0000000000000000000000000000000000000000..e2d5fc4677c99291244e409a75d635bedd1033ac GIT binary patch literal 587 zcmZut+e*Vg5IvKoO&epa^?tv-w0$ripa>!=g`$EI)VFP2>PnhOy7lr`3W}iM2l!Fq zY%1RHVRvWGoH=u5-rk>I0c>K$g@ud*+d~#PLg_+W2|pB3+uv_q$d)GL)>WkR1|d_a z1`hIsVoDO%+CPX@q+K|0P5l5NTdCKpK>>p(IvDa$!Z3@rMMwI(d~JuaBO?~gU&dXf zRUC1)@mp?AsKl9 literal 0 HcmV?d00001 diff --git a/out/production/C08-SnackGame/game/SnakeNode.class b/out/production/C08-SnackGame/game/SnakeNode.class new file mode 100644 index 0000000000000000000000000000000000000000..58b9cd62ed1c062fab13fe0c3cf137b82a45c367 GIT binary patch literal 1225 zcmZ`&+foxj5IvLICUFTN2|)$C07@=Gyx$g42qC77Xn{qQRX(_c1y++R6&BDZzex+w z^1%=Aqb$$tZZ-kShn=12?$dqx^vv%+KYsyOKrM~{f(k+^!iWeYxAm4$s&c6`jh4~2 z1tN21+qCBe!ns;4zaB#rF$HlI=b#EC9Kc#z|7fgOn}$Ga)9e@x+qBxuR(HHhU5ge& z0)q;YDu$3E_=A3+m-IusRJNK{hb5}3mCA|)p7v;QWH78Ct6~J_1%`ZgwWIIun2kMw z=$>JFY0|l~c$fD@6{8qq=&rSAb}9O)UR!3{CdEs*tl)}@tC;Ag=(q*MCw?^ z;x6uWmG!lwvfGCJYHN#a3QXkAN}KPs>^7p{fq?1^;H7n-Z!|faVKVv$xGoSXJF^?C zn{8udzqMg>-nf8N-D>E~b-iQCvu6z1J0=D9rt8mMV>y!RW6U|6xd3@tOg1c#?Hf{e zikkF`ZGm*J8{bD{%Q|2e!JG_>Se_Q~HEX}qFqTc(VZx^~D+kLVMtQ>p?(+-CE6Zyi z;y#RrTp#iD4nbM~wJJm&C(CnDulVK%wr zjUZC)WUU~r^LXl2nx{wlB8B3q8uATFL>L23{;V72=Z`qKC=8zQ$-1n+Fj}It;x`PO zAYCjR;ldHd-QQ#~lgympI-Q08IcIuJW|<5~K|vbh7{(N`Y<{GVjOLTku!u5A2rQxE zk+CRjb%p2;#GPBc>Wg_f$CcT literal 0 HcmV?d00001 diff --git a/out/production/C08-SnackGame/view/GamePanel$1.class b/out/production/C08-SnackGame/view/GamePanel$1.class new file mode 100644 index 0000000000000000000000000000000000000000..f27e661de46975f61568260c89e85ab9e6711372 GIT binary patch literal 606 zcmZ`$T}uK{5Ir|n*UZ$kuPuWhA?+dap@%R65&Iw$q453c4!O1N#_p>4)?ex==%F9b zkBa81MJ8R?nS0NfIdg{n_K&!eY2_);5Lydl~P2Qbs z+l-{^Zb#ZJ=~?PM1+}1S`HGuW%9YA&LUFkxp8bbqE_Fje*EO5cV@GV6HDZr6YI@}R zWC~>S_4)N`YR|Dr!G4T?D_HB+?Ryke? z5mE4dd*K;xCdksY%xW_^=j^?|y}x}q^W)8H*8x0+ zZ$t3GuOgr!h$;n<6Z)7w5p%{3b2zr|fNqMcf~q#dG~7oO_#2xBR4hk9Zmh$|3DYqw zGla#6NWYdU2sXy!O#>m~)M{9c6$-+Ra1YqxxUg-JNgB@z1uGg8()~&+txW^fsKY81 z_h?v+db&3!)NW-ho5m0I#8aI#Ij`=Wv`V}+8rI@I1&fHcS5J=)+g8EMC|FtsR+N@N z_oG3@dJPZY!P_i#7`8~ejE6u6Vd|@osJcA<7pi%n5HyJ+IFK$#?n2X{7MNK&u+vu?32|U zbX?tbC2a`}z33yOh9j-9+7&2A7T|z_l{aQ)Zk##$>+Ja(Uwrk)_osfje({$xumAD= zry(3fQbkI`6Br<1MXU7ZWr}6Jv&5YdYrI!Djy^0p3_WYncvBg3?N%;tnPjiEEU5mW z6D$*t!^0Rbmeu!bmy!qSY8I&ZR`0F zBkgzyDuy(qrA{DY>*KPThJwt3{QM;u8_{6kgk&r$L|$U;E0#u9LrzjzowLS-HvnY8 zSQ_$jwF_;NJNXh?_23xR7^6rgI`KJQ_oAF|J`k z>MhRO3@Yie^-{K;CcVK!@s3mv^A%@Twp%8XYPth@wjlg~?=a_8PiL{u0__}5G?6e& z(O1X~2|HCR#z?|S>)8R_Hsrdr8E{7oM>gjjrKezl?7RLk*#QC5Gg<23xe3@xcbMg+ z^Alu_Z#wCD->c_6AXSb?Evx5-GJ1n4#v3+MmtL+dD~7v~LWoe(D%fe!WyprA>ApQ+ zH%T_x`+dT3dxZ>BhOyVOT*qbBdxbksthB;=9ide$)lP2`zdfK&YPVj}f^3_kJ8uR+Dq*O%g(alU&I1LHQ8ZG3@Ydz^Q zr^Dqt6^g0Jy!d~IMaX~GZ7Sor1lz7>vq{4hq*#laoOJD3-EoAY;!6eV|G~-K!c*~e zMOjw_RAPdaS>yuuF$q5QS`e!+iD#kUIj($op6eGX);>9>yfa>{d`9HB=d+4Bys`QH zB3Hlj{!sWlADxC0t@;7#Ra8f3v3PKa?=b(Sv1AI%qF1nT3in38L$!Yv>R>n%&RoH| zX*4F~UclQsP_Y;E_S)w6X3;!nbK_NPB1p?1QMXNDXEZQ{)>-Txj9%lb1*XwCg`UfF z%ZHcvy@PKD;N=})5E@pX9xKs+d$5bwa)PU4Sc8+iL0>=7T*l{uvya zcOb$T!TT(T4lG0`-($MUY=%qD1mx5%Idg$FtEjUj+B}V?WHx#?Tz}NRBTyTt{}#0y zY6C3~2kU~(Q_xQbluNgMqsS(%G7{A9(Ywksu%DoPB(xvv_-sUy^^)?y*HUgZWlrNY z$`GpLhWzz9-k>9AxVs3xn+U6TQ&IlJim*=(ijt4#>7y*#^~B!)3Dz!yn89##3Zwit z`G4}#tzQ##YV6XjpD$BM<$Kp^j`E^^QPw=Lk-IUXY{nAe*79Yf4%;cUl?AYkeX*S- zvD5Q+Il<~lc$< literal 0 HcmV?d00001 diff --git a/out/production/C08-SnackGame/view/SnakeGame.class b/out/production/C08-SnackGame/view/SnakeGame.class new file mode 100644 index 0000000000000000000000000000000000000000..c6087af4fde074073a567b8ef21e39858f1f538b GIT binary patch literal 761 zcmZva&2G~`5Xb+Um^g8lBu(fC6eukP90N6+I0PY~pdwHNh(xY{(>7VkQpb*LC*jV4 zD|g<28xnFQD)9ik2U4E`G3$hnO1aGL%-)C@U#l$3WTj5|B1~N#Rjj4i@L7lwD zabEXt3`Ori2QG4~;}VG`N$s$gsdz4ZTF0^*GOWz!XYFiqT*elIMY*1e)t>I&uwPD_ z&C|XW_9;|pt3W;(4fbTz71^blF6Db7Qre#djpU7r8LI7*vuzS*AQa7J*?u)|vUDz@ zeafuQIVN?Ta1{0Aj?(JNf1hkyzY#WQ1UdR4Aj|aEAbXX(A@Z~X9On?sshKHCP9a6b zIYRx#A(m1s?>Z^YIV{Bm$4Ig9C1YG8yNM#%0t}c$FQS4H)@Zkm1#E$%L0`zG8+=-U re22UeuH(k6`khP-#g1T6wJW>-;8VF(!Y=*?Dd8rz3Bur#&EeK>oYkV} literal 0 HcmV?d00001 diff --git a/out/production/C09-Collection/Josephus.class b/out/production/C09-Collection/Josephus.class new file mode 100644 index 0000000000000000000000000000000000000000..fc061484ac142cd5464e0e332824c310570dae4a GIT binary patch literal 1504 zcmZ`(-*XdH7(F-HWZPr|{Xw=xP^=0httBcNEh*Is0)fy1!C(u{c#~e+t;ud?v+3AA z`%n1hIL`E09$JMNUU=hQ;2&_t|A0Zmx!Z)MGbJ>$bBon=RSN{-vySToa{|#!wqjyHU^oP|1E-!V*QDzze-H^I zO;{FEIC6lcyx9s=Lm=X~0_jp1>3F%K+iVBrz*n+SNWjF9&Oa9^d(0?TR#-?^W}i`o?6SsvVBxgZXtbOyr8mx6$RH~)-~`H- zfyab)rkf?Su-M%%Br$~#O-x%jhn&F3en~wDwXVt50;>;8U)B*HTlfU$nNXV|aIDAO zFHPew zphT%hP#{A?>VdK|_xt+Ad2-y?6fC)n1gPUL;9=a9X*7Cfvp;k`U1O? z&fJ2Dqta(1yOxE-ug8vvXiX2NeXy9#X0M>bxDl5y&-3={PXt2We?BkqEyq=GjZN-C{23l!=2IVQ z=r?>?djMR)RlW`48j9Ruu-HPBR~6WL40Gur26x%!sU3`5d<=VO7vl@jypc9e{*Lr? z+Ax0j3&(eG>fSGg*zWwxqgXyRy@U5-f1tqi%!T;z_}`cm_!SfS*GB>xn>OOVb^g&C zpVIBTvE6z85T7%ku-$p86&uis7cd(BPO`Wm>K~`F2@GJG>v^iq^AgM;NgFKIk-}{p z!4i(*0nt?q!@&qVq_M$!yos@}@;i(_L8j}t!7Nv4RtY!B&5D_Ck!zAMx5&l+L9F8r zaS`IHDB~`@$y3?4VeAa^YL*x(jIxQ^W4jkB)%fp-U*g#r#5+tHGqG&K6eetT;swV3 WLrjR5NST;A`-1fd+$TDM2d@AwCQ)qw literal 0 HcmV?d00001 diff --git a/out/production/C09-Collection/game/Direction.class b/out/production/C09-Collection/game/Direction.class new file mode 100644 index 0000000000000000000000000000000000000000..8e81cf6c95292211b4d2e2adfe842e71ca9ea040 GIT binary patch literal 1435 zcmZuxTT|0e5dKasO&bD~0##7F0AgD%^#b0C$Q|lbU@TNSJ~*L-5~rjyA;nkU{5x7N zI5Ijs`=cCpLx57rOtL-Se*5j7-E;cq@6X==X7F5tB+ynicdhii?OG+zt~wD2Cn@<5{NfS z1(DfgfpJS~4pI)3rG)h*caqS?oKTOwcjv%?r!hscx;AE^$1|r4kiy z$0ifW+hxb}YA%I#2H8(rl}Q$eQMSC*pvV1*=3;_5o`nd=TeeGQcCu6nrYI*^r@x^v zp7><5)Ko@5&sS@1$y&6z8*Qi8WQ_MTeV2OOOLr+W-NQEqAWQecw{#tROSga+5}yqq z+RJx$c zq^UKkR(;1hHf+Oc1nJqWB7z(W&T#)|sHN|#(rW_>6yDIKsRzRHdXL(8F zRor(pA7zGzDjwl6q23#&xqYgcYze0!=Mh8-PgFdWr2Vf-OUs)wU|vPR38*%;GZ`Rz z{9F#1gY>2|Wp;Aes_FtgC8MElozxHX=3DK+q^3`{#4Kw~L%v<5&#oD)C0y#vyTE*B zM%AuyMQXZnSd-JKYv=FU*FGjB^J(++l%`Tro;M%3NZeFZkMnmmkob^?I)$vdNJalrL0x@RDc5F$U=# zf?VY#>Qe0hyuvbH48;m&2`8mhN*>BwdN;vmdMmW$lhK&DIKpGjcL8;@g=jQZoAXnS z``kw$dx=Ec9}l!Je9d8)Sm4h45hv~dzd=l47&*>g^4VzPclhKxeDW?IKW4B-W?sfm zW1W(ZC_{3Yh&si}xI_-)4HRA8pJ`)${-W literal 0 HcmV?d00001 diff --git a/out/production/C09-Collection/game/GameElement.class b/out/production/C09-Collection/game/GameElement.class new file mode 100644 index 0000000000000000000000000000000000000000..e2d5fc4677c99291244e409a75d635bedd1033ac GIT binary patch literal 587 zcmZut+e*Vg5IvKoO&epa^?tv-w0$ripa>!=g`$EI)VFP2>PnhOy7lr`3W}iM2l!Fq zY%1RHVRvWGoH=u5-rk>I0c>K$g@ud*+d~#PLg_+W2|pB3+uv_q$d)GL)>WkR1|d_a z1`hIsVoDO%+CPX@q+K|0P5l5NTdCKpK>>p(IvDa$!Z3@rMMwI(d~JuaBO?~gU&dXf zRUC1)@mp?AsKl9 literal 0 HcmV?d00001 diff --git a/out/production/C09-Collection/game/SnakeNode.class b/out/production/C09-Collection/game/SnakeNode.class new file mode 100644 index 0000000000000000000000000000000000000000..38520d6c77912f4f85093fdeff9ba9c740fca55f GIT binary patch literal 1322 zcmZ`(SyR(c7(KUJ+8RqKrLu#7(nYBI7DS+b|`7KKYl_0d#!u z2l%5L&rQ+=93PV0`>p3Y=idDO^Ya&gMLdtf2fu=ViXcJ)@g2Qx zvtil`0>N~-oY{yVjEI7$iVIK$Vot((L;ql`T3d!dWXo(CRok>0tX6Tn%Por*K@2?# z;wpNPVDfwYP|xc}cD`WMtR`EO){4bdnRwQtMUh0mf|QC&7!c@fyGu=dZ`Z8u3xxL# z+bh$TKA-R69#S!k5r*zr`(_JbyVNVoY}kZ2hH(WGDlTKP8=~VD5Fh!JWz@8aD>6iU zlIUhsq>*9mZL?NeBLe~o33DlnA*bS+967jDSuBwCB<57)orJBXek2p3xPhArZmGD9 zJ1u70+>zNG!+yEF%`pWg)90zpbVhauQE*Q{bp&`}9qOAkiqlU-|0He*1PYFJJr%QI ztRB=ijpl1NAyKiadTm2*nsV-!aa4{+G}h_a9xP0!?^>HVKbF;bOj~Sne$Nu zBuNoSbqU#0T9Y-zjzC{$;w(=+sZSQSJI6rxuC96JBc< zb)H|@F_=Au@`Vc*ZpbnAIAv5fz$+uLgaR#cV-y3J#vqv+>Y7ArPoiNNMS>7mLCFJSkxdCEFDLnd>lKOO z4bkNI#FM-4PF!F#P0>Vj(lpfpkZ|M}qe$cY1x#R$a!8q68uMQBFlO)+BTn-&y*@nq E3ulMw$+6WOJ!OtesmGr!t!C4W!t5+jaS3&37xXckeOL3 zcV3zpZ}bo71<`n6gw!=@Q{%P2qtQRn7@sqX#NBq1_nevc<2lcH&U@z1f1dmf;5zQ5 zkU)olq(mpW1k!u1dSov-JF4V(s+PGd&=oy!!^|bd3a!DMiEg9}m=ZmZ0wWKdJ;!z) zMYh^gUS!`?``4?^ZlnT&%(|W%%?Wf^6B{Y?q2EAS;uHo1`dVQHQlaN;s~diGUtqWp zqt+w0W*1ym|;yck!p^&Wv^{MRFx=a z;B_v)#ogLvy=2j^Dib3Zm3R|x2}ss2xB*jL-xC-hMx1=&Bad@9Z{Tf-caRY{^Rfha zt%ZO|C<-#q6=D%qQW(bt1D3=Dvj4F-0TxIutlceY(c4zkbr&Vx)kTRrB~90sxCEY* z3|r_9TJ5!3`fHBr=XsD^D>)WNk^`deVC}$_vjZaAA`LnP8e)jWU-+%f1X~Sfj-7qjOv4Fh5V2syV zC1C7oj2cBAvi^5Y1a-Zw+{6a!toHWP-egnIezt}x)^|2luzsdd#b(zvIJ==?Shm(q#UM z3}RL4LBLMn2@CX=Bd4;x>g*o#GRuBFsHjC(Gw(aOeN$R0f&RQ#srey=Xi{Wf7gZQ7 z`?{~?isz|dzUGi+$YxCNP68sG*7uoj30e;pIWO^TjF9)pLUkEN1MHPgs}sB-cou57Eb+uO$H|q@L5}MEDq)woIb!@TW}^0S`5w{ z;Cx$fIu7<6;lqKs2CnJdcR=rc8j|A${*f$wJCMU9Zo$SqUM-KFI%e<{Z^k#ciXW-t zFSr&fb*{Pb6QvHZh7x5th3{COr7*XN+l#IjxME;@ln?*5DASq1I__{z@^_fRM(pXs MUCt%}^fB@I7s+%@-v9sr literal 0 HcmV?d00001 diff --git a/out/production/C09-Collection/view/GamePanel.class b/out/production/C09-Collection/view/GamePanel.class new file mode 100644 index 0000000000000000000000000000000000000000..2f96e6d56b69c1ae615212b12a0982c378bb988f GIT binary patch literal 4347 zcmcIod3Y4%8UIbP$&k$eAtWFaluFQKgG8vc)*vl}BMV80CI$kvGVFdyhHPfS%xn&; zRqIjgr7gCK)Y^Kbx77zW5h&H(wf1i9U3&rcwD)1P^!Lt8k`3_m=|9~kyEEVSz31;e zzW2#f|2}jSz-qh{M*#|T#0(UnSVQ?PbHE&`^9C)uyKZBvX{(He;+2+d`KvS(R@Zds zn5LmZ$m+7bm8om8>|T{_vOGTy9fc(*g`s1*ff<;oVa9-^2J1GMeJYYw;@M`eTH~aL zHOy%`lbCuDG0Q+XW@{+&QjV)MXh|KFk$H9IpkKGv>QlC7Id&Wsm@C$wMe6EgvZfOB=&LfY1m|g(PJL_4RByNIWbL$u*?G!BYEe{*Y6CS$XehC~E3&pt zwCUqE9ZRXWn`qUw2}~_cT9sfK>U3OaU^!NdpRToBmGbF5&AKAFp|M@e3iu{YXjUyQ z5@24bp_0IydM-fec$I-m@M?zEOw-)T$lQ#{@NeF^i%RNiXjVNf4aBc^oOB$QVy-x` z%D`*zS`D!-?rJCvH3&()jx{uCYVfO;$C+_!#U#Q=WTqZ71cKxS1C2=1Q5v*K4NGDv zTM_?r@}N`$%J%E>jw9wx2Aa^U!C)BHJE^Q^?#wXcvFdG-xSMHG5Y@oF_8wQ6>2j9A zRR1oXVq4GSY4a7na8DB*3vmEudsWJ*n?5Pw>*)j+3IR*~nMZcroJ4ZIFl zX_(ecBQ4kSSx?n9c{(ECC4g5O*a4Fck#-`qtOL@Y7Vc$88AyZvmXLaLR~JFhaBlUf zl#wb)?N-OK{UB4i4fMcb5Xsu=cvhHPqGzHGLgEtiBBP_vfGq_&Sth|Tvv^2HKY{l6qMK0~jO@jC6#<8S{@YUW)EG`L8kX21(XpwL5EOJlVg_ zz#FCXXSk-FcKXIm7x_0BxKVJ9yQ=!k81<~O2^*c6U zu0K7GBoFV#J{|WM*pK&4DT20PmRBGBRzns&j8zByvjFcia39`JSo=+8$b@wE>^!9# zT(iH&N_j!?>A2s(19*_YTE22kUwY=8@%#y{ie$83Uy6q@qT_=GK793M6CF^Ol)=C%~aBL+SpM#j>vIVj2SND-@9J}ad14jRZ|R4Ol{6jL%* zy)kStj~h578Bii=5j0xKiz5a;DZ4XLJu219W}UIZ`=u10GVp{P>8=X!(D7*vXHT}0 zq)pGxNP)h+7;_;j0Yvuerq?Nn}i*ayp- zoRpdAFkMU5(Pqr=v6!G`r?z9t>0yJElc1I-bMnVgVb~tXHPoV5)v@8=F+K3Q z+3b(BY3wn&$YrIH$PO&kn9Z{%8_h&svF~NfzMW~a%2tC_7qW5CtwnhmekR}vK)lV# zx+%5ZlIA}{noux(ER%?_#kDBUZ&ref_`Sw)e9vbpH!Hu#Nqc1|o>_$Bk`gBj{20a4 z@GA}Tj*pEU-*fwk!+Ve4d*Aa%ZajAMu48*{eg4Qj+RS47CXV0YcRGG=;CcLkJ$EuS zEPKG|Rdr2)8`NNSnJJbAr=QZk{MFM@e1j__VhRmvWMj)Hud2y$db9oc^&K^lJUpf_ zwh#BKeDeSOFjV>9dGkAAB)P%NWZGE#^@QY4ar_y7(eYR5jDOQmbs8k0^ z|9==F)VAlrHa_X(ZJp{8Q!#0C4r$1ko~Jw=|J1PLG@s5CF&+P!(k!NgAqp-lDhw}Y z&r(k0Kr!ay^O()Mz52B3giq2UDTlqJNIXTQrJcfliEKbA@;{3z`#1Esk zvn*Yfehe3k;uSeuyk%my^^ChKr|cfar4!;;9>itTx4M&tG~}>85zArYVYGB64xtqo zMSBig9u55X3V&D8N8l{P=+jJ8a_FDOiF-bla?W3l1=xUvxQY|Jhef>Jt8fR_@J?Na z`zh=pT#m1j+aLz?9ACrN`7Dr2AVOsZ-{kJNPTa|1+Y_j5s?Fi`W7yfuXV(GjTFP%( zMbC~^;d(dMyJdZGY#f4xl`-K7fboTj2bbkAl*8~oER;nEZ4TEaIuD>Mwu6w5pfuEZ zec)^%#MuPm{JoN?&_Q>%VlhX^i?AI@y0{Hjqnksa&r$DMbOnxG6dE5nRtgv2z&GjI zZ0y3f@NK%fn0(*ix{z{`c!qB=e3v>ZQE-x?igc9fsMXP{5h9%oyb42X*x3q5jKG~d zY`U5Sk^MMZ9(3#hR0t&dFd=Z*<-V21WK!(G}^JcCjW9CY6oS&faWry%~U<~gp9K&6c z$ypu%G(`4cmftm)!!dO-;pRq$#AKw3MBf>Kx;#-kihDzVKG3}MaXh49A1e9s5sfoP zZOa7&>f<9PpCid-e0_8hpZT;CxPeM<3UYo4Zb3En;6mIMC|^Vz7xDB5Oa%@WtdcPA zEyIs84^U(Kg{ L{(%?pBIf-EF>7UL literal 0 HcmV?d00001 diff --git a/out/production/C09-Collection/view/SnakeGame.class b/out/production/C09-Collection/view/SnakeGame.class new file mode 100644 index 0000000000000000000000000000000000000000..c6087af4fde074073a567b8ef21e39858f1f538b GIT binary patch literal 761 zcmZva&2G~`5Xb+Um^g8lBu(fC6eukP90N6+I0PY~pdwHNh(xY{(>7VkQpb*LC*jV4 zD|g<28xnFQD)9ik2U4E`G3$hnO1aGL%-)C@U#l$3WTj5|B1~N#Rjj4i@L7lwD zabEXt3`Ori2QG4~;}VG`N$s$gsdz4ZTF0^*GOWz!XYFiqT*elIMY*1e)t>I&uwPD_ z&C|XW_9;|pt3W;(4fbTz71^blF6Db7Qre#djpU7r8LI7*vuzS*AQa7J*?u)|vUDz@ zeafuQIVN?Ta1{0Aj?(JNf1hkyzY#WQ1UdR4Aj|aEAbXX(A@Z~X9On?sshKHCP9a6b zIYRx#A(m1s?>Z^YIV{Bm$4Ig9C1YG8yNM#%0t}c$FQS4H)@Zkm1#E$%L0`zG8+=-U re22UeuH(k6`khP-#g1T6wJW>-;8VF(!Y=*?Dd8rz3Bur#&EeK>oYkV} literal 0 HcmV?d00001 diff --git a/out/production/C10-Swing/Main.class b/out/production/C10-Swing/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..2479c1dc8f7f067c7515898c2350fac946789c9a GIT binary patch literal 393 zcmZusyH3ME5S;TPj*TH9fl$*W6u6`aLW+=587P8`5Y^e7%tiKDI-KOYs3L)s58$H^ zdk&Htu9(%%?9ASN|9tKM%y1UKg6+Wx;iALPU-C7N3a;|#Azg~BX6Rf?CF>godpt=z zbQyYUDK=4D)WE?O!cU&qex7DklxmYT3zbaFqA9-33Gl;8<7YWzW^navN zzsYyn6C3lC++`Co8o$KtZx*$dDxXdg(z(uQe)x~f5G<;d&cs}rb-qcwG$A;Lxzs!h z%-l*CQWsHWRNad$*heED5*it>aYPvI2hc;GIv>Xv5M#_&O&D=s@SeBupW1-^HWyur QYD0VsaY9ChQ$h=)U+~UGga7~l literal 0 HcmV?d00001 diff --git a/out/production/C10-Swing/utils/CaptchaUtils.class b/out/production/C10-Swing/utils/CaptchaUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..ac0ea0a2869109d9cb31f6b71077bf1febf6e9b7 GIT binary patch literal 1580 zcmZ`(+j0{}5IwV!z1FfqwtRzF7@J&lae{mU12QJ^;)}3+!IEWc9;lJD$ZJ-+VzqK? zp7|19^1?%s2SJ6Zd_aC9@A-gKilk>HE1_guCC~OupYC(Ir|0*Nzy1awji(AE_+y83NcwA-(3tT;^@tRvY;(NmALqEe(dRcq8vbwgOd9;z;+}hrGyqnAK z751MT9P(nRtUs?D8OJZos%6(+I(4^k^26!btLd59x%peS7w+6u5XPX4Ar-?IIj899 zXz?H&rfyZ-BTq+0FutPVD!yQlE&bHZSR~aS%f#s@jEIVB7$*!-bkgk;O^BFKF^L;= z!fQ3%Dlx*_BnModK<38JsRY;d!lsaUq7YrL*A z49B{%q~eDGe2ed7+*Fao^ry1V>aJcTwRVH}54XUEo!p_WxI{$fRZ1Detcp27FI3Sj z-Qg~!^E#v87H-Q}P;m!$83sLxpW>->H4)9UK0~h{5~Nft;yy$0M0bqmXYKF|(F+7! zBvBA~AXt1a8gv*hP${+b^zO6VN}jG$H-u7YwpDkzxDl zSjI=!-%kNGyG#zDtYPU}jcQSM^1Nu$PB?3qxLM$iA?)_1-#s$w3`5!OJDg(ZF|4wF zO2G}f9*#E{9e)2C7V?zpMTV8I+vea7y~BA!HAV@9cI#G0*KnyUaW2H zT776A+NVCc`eJW{E~)(i{U2!i)PK;`eP)Ivud?XbK&$lWkjQ1;oEbMsHWkWzI55!5RP=M6V$x)wDzMibIt+|p@oz|GNWhi_t) zz-lxqSj)@DjcaJk@k zzeD0^5m=86WTTIcDu@LT^hr0~<&0+?+pygZUpT&aQwqNzunC(L2;w?tF^#f=X5OSJ z6}y&3$z!IW9o4n8_oBc{c$v-^*G)Tc#_H#}Ld9MMt33BhnkRDRXhOf~6kH8^@T$y* z*A%GH9{x#c?bt7H03FmUnRqu9v{az?_fG4!o-uM>7~9bzU2s_7h>TC2j8A9UDcF9L z~8^0Z6Oy6G{!ba+DGWJ&F@g6ldyUlqMeU6jyA z3@eNT%dzvWZo7GT^PIqdOvxtl zKk4MmX~%YTtJ5+w_BeA!#d)4ps_0D`Q*O6uSfd(}7?Oq>Wr$J&7jcQ43wa}Fv&2gG znD2{2RXXVi;|&EX<{#bL#J^`>-z9t%SC)Y8?bm$|23ChLBn^%Tq`_QYk*z#duzsTFNi9M3`qfr8=;RY-f;{rCA)(r*MwDR#FX6NOC36L>t zS-wWFtzdOfri(g&wDYDw4ipiA9WR2szZkK%+o7TmWOAw6{dCaaqEBj@61a(J1+j{!L!})s;r0iP)Z%f&gIU{4{T_d+39_n&NS^9Me(>D4F<0D2c z={JK0S?AWEo-^e-*bKR2Ci&DSmNZNjl$I&g-U2AE^OQ@HmzHJy##-UTV^0O6L=Lnyvi@z0cTY*=e&`r;EjxY4to2cRU9j-b! zDjaKLvruA1sNZo>g}eN&L^Z#42(i0|QIB`I68>ephxfgEd@2G(Hl?JZXskgLu`*Uu zL_>@Un~G>2id7e}k&7)crHJjZP!X+VJ6ot7Xr!h!e0tXLd1&Ex1AiN_g-v-UNtbO$ zOSbtm1hyYjRyyTcY!2u8Mj0!u(s0x%AKu)bhKPsJEdR+lh83gVKsa?Cw3-h4Y9*=Z-|*7&&48ivk{8@q@;41l_!Se|U zz&{B*f9W4RZ&ZR$rc}@I8AhQe^%Ji1a0b~jlgvUqvfiW|gBUb=_X=rTC5<#`jFLu% zuk#o^e*-6Akt#IPk#?sC@7B24MK_s1UE4Y7n!Sn8BpKxaBSG zFx|ZJSpYt{FuCJRDo@L7{33A4ra(3mEQ3jA$rSVHCYel=$t_&Q?TR88E-@Jlm?-#& J9;w2|e*p&Ochdj> literal 0 HcmV?d00001 diff --git a/out/production/C11-Swing/Main.class b/out/production/C11-Swing/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..2479c1dc8f7f067c7515898c2350fac946789c9a GIT binary patch literal 393 zcmZusyH3ME5S;TPj*TH9fl$*W6u6`aLW+=587P8`5Y^e7%tiKDI-KOYs3L)s58$H^ zdk&Htu9(%%?9ASN|9tKM%y1UKg6+Wx;iALPU-C7N3a;|#Azg~BX6Rf?CF>godpt=z zbQyYUDK=4D)WE?O!cU&qex7DklxmYT3zbaFqA9-33Gl;8<7YWzW^navN zzsYyn6C3lC++`Co8o$KtZx*$dDxXdg(z(uQe)x~f5G<;d&cs}rb-qcwG$A;Lxzs!h z%-l*CQWsHWRNad$*heED5*it>aYPvI2hc;GIv>Xv5M#_&O&D=s@SeBupW1-^HWyur QYD0VsaY9ChQ$h=)U+~UGga7~l literal 0 HcmV?d00001 diff --git a/out/production/C11-Swing/common/LoginStatus.class b/out/production/C11-Swing/common/LoginStatus.class new file mode 100644 index 0000000000000000000000000000000000000000..af2400f32e2709c618209b1031b6b1681c64700e GIT binary patch literal 1823 zcmZ`)?Qc_M6#qTDx4mt-Z0#NGY+Yrr!P-t%nGBU~bEWH8wOeQJRWf$-7zcUT7hfuGRxJiUa@)tmI5`<&;z{Lb&3lm7Yi z_Xhx?IIEzCLCaQ3rAj%RtmF%2y>8SSH9Ht&6&6?-6n!-oi|abWf#hDx2sgEtTCNCHljd0N@=fkOu3%P7P;(!k? zDi~DZ$4dnDxk0?#C{eD9MzN7gz0WWi=!EiRNtO9ARb&t_-LMBE%q-YI$nR-n0%fdRfIWj8hhY zxW+IL2zI5%28#{H8PuI?_geSAeRSoU)|Wr<2(NOSCm4d=;3f8E4Q6bx+wdBNYHeQL zxqj)%)oYJ8H*HXDIK|NSk~NAMqgvpuroUV^N)*Pqn5&D28Uj0RI|DH z0_V=zvCQLq)Mt+q`99iuW!B608X!qaDs~$ z=`czDIGS+&h64}bzD*~F)AY8AJB951h@nT=pCHLS92yI4!}}17+xP6UpCgUhwnCie z#ytHj;}x-bl$ zV2FHqk!M7)&&qALO<++3}zGERgI$f~tB8ZxhNWoj)NB2Qs>ivE=ACqh}dxqB8-DX?Ga1}gdPgoPeddM zA+KT7Y{(*g_dA8ZK# literal 0 HcmV?d00001 diff --git a/out/production/C11-Swing/po/AccountPo.class b/out/production/C11-Swing/po/AccountPo.class new file mode 100644 index 0000000000000000000000000000000000000000..0d135e8f7ab62fd7f08d941712f3ae0cbb723970 GIT binary patch literal 714 zcmZ{i%TB^j5QhK5tp&5i0xju9UrQ5>i3=aVhceC- zLJ?}3%;}uYKmRwAe*b)a0qEi^hXj%eQX1082$ZMtN$N9cPxQOd)HHm7%#~$Zen%kL zXb!VbkyVh>kcTFqEgZdT7*1gOeMdkIJkz!1+!UzvqD}+fwd_fowM7jj7OD&BdC!hJ z7D!z?V-l2lmTle!^O5P^%h4=s;TUo@l&;13>N4d&TAo0$x9Qv#$WKiFVeMXRG zOs7-uZR-Q#H7whs$e)2EDipP40rpX)OrVB3#lPY=C@=Iefk>>ziVtwO5_dv2vT9wt zLy4^UFJRL&3SozOm}ge@jK=dY^-(NHVH>0z3vwI}QrHHm5=iYI5MC&QoP?vF{sN!# BZ7Ki& literal 0 HcmV?d00001 diff --git a/out/production/C11-Swing/service/AuthService.class b/out/production/C11-Swing/service/AuthService.class new file mode 100644 index 0000000000000000000000000000000000000000..91c2e41f451856dc3b4bc85c400c9b3e5680a7ba GIT binary patch literal 1013 zcmZuwZBr6a6n-wC3wT9a#MfT5s6flj*IpovLH)Fe!-`FPVJ^!KuEDOsV*jG=^()L~ zaHeMZ0sW|^a~CX_oSi-Qp4aC&XV3on{rx9^99~5cKu|%5V+g|x<0s-wXm#P#v_j>? zGChXjtnJv|7DF(VK8hfWh=M4`2slH$Wi`)i)6#Nn@7U95D_KJ>35RBEXSOLmv{%F)%xf*s}bD7Z3TBY=CQz_nr@@vI-2g*Y{&3~ z*QSb!QOf6c4THGp|NAqt#66Cr%#W3f-C}vaa9G|el=gR|>jB3@-*u2Pj5meiPIJ)GL!#QS9jQO!c#LHt*ysXQLQSu%uB~ru%G_0swX58#<`_bG zw@Nb|({0DvZ#ODd^H5akWKnh36!jy~w58rNhP-22PEfz*`(}t}T~37|nHv1M>FcIK zV-r`~FiMj&-@g{8J)CgXtoODnYPjvDY3IO5Biw1ga@dI(=$)&nnZ$7CJA-g=P}vE>hT~{WPEN} z$_gQnj8m&G|2DSmM+0*|5PN%x)HjK!sOb)t0#;VrTS Gu>A)PFVtNC literal 0 HcmV?d00001 diff --git a/out/production/C11-Swing/utils/CaptchaUtils.class b/out/production/C11-Swing/utils/CaptchaUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..ac0ea0a2869109d9cb31f6b71077bf1febf6e9b7 GIT binary patch literal 1580 zcmZ`(+j0{}5IwV!z1FfqwtRzF7@J&lae{mU12QJ^;)}3+!IEWc9;lJD$ZJ-+VzqK? zp7|19^1?%s2SJ6Zd_aC9@A-gKilk>HE1_guCC~OupYC(Ir|0*Nzy1awji(AE_+y83NcwA-(3tT;^@tRvY;(NmALqEe(dRcq8vbwgOd9;z;+}hrGyqnAK z751MT9P(nRtUs?D8OJZos%6(+I(4^k^26!btLd59x%peS7w+6u5XPX4Ar-?IIj899 zXz?H&rfyZ-BTq+0FutPVD!yQlE&bHZSR~aS%f#s@jEIVB7$*!-bkgk;O^BFKF^L;= z!fQ3%Dlx*_BnModK<38JsRY;d!lsaUq7YrL*A z49B{%q~eDGe2ed7+*Fao^ry1V>aJcTwRVH}54XUEo!p_WxI{$fRZ1Detcp27FI3Sj z-Qg~!^E#v87H-Q}P;m!$83sLxpW>->H4)9UK0~h{5~Nft;yy$0M0bqmXYKF|(F+7! zBvBA~AXt1a8gv*hP${+b^zO6VN}jG$H-u7YwpDkzxDl zSjI=!-%kNGyG#zDtYPU}jcQSM^1Nu$PB?3qxLM$iA?)_1-#s$w3`5!OJDg(ZF|4wF zO2G}f9*#E{9e)2C7V?zpMTV8I+vea7y~BA!HA>F zE7e*jhdc@vTn8H{G87ib3{F7Tf&uq=SA+~(zF}W_Y9gb)_hzcn^IO=qu;btcZZZ@{ zT87GN%`Uz(4w3sJ5((F0E)%L+o5H-16Y5+iL?qO0lq}qFa2LCTT7HeeQbJ#dOU5OCw?Y|w5Iu(7d2S1BI58b*nrs+7T$<(o-xvn_JRT*1XiJl0;d&Yl zOjSrZiGnazRJK_%4h~HB9n)T4Ds2kRkUbMhzls%=%XuA<)C##$LZM6}m!;`ru4{&l zb}9PTut&B`yCbqjvFrO^!0O*%eI_r3d$eZ2XnltJwC>EJ@BkI^D1J&~cu4zI3j5?z z@FP5?wMl$rOanG@i7ysb%fAM)#Q6p9wb)u!Pk0)f)G{;Zj PO_e+j$=VcS(x>kaafQN) literal 0 HcmV?d00001 diff --git a/out/production/C11-Swing/view/LoginFrame.class b/out/production/C11-Swing/view/LoginFrame.class new file mode 100644 index 0000000000000000000000000000000000000000..9c9f5f822b44ac0ed3bcf41e782ec3f8375f0186 GIT binary patch literal 5354 zcmb7I31AfE75*mKWR}f9mW4!vpn|B$28moA1g$ZEpqm7f5E`)Ju$d$So1M5jNx+-d zQmde-*cPfZ3>Q$V@38Xv7Amj&zU=K{(`dts1Pt=1ygcx7HBvNXO9d5Z=>3gR(*1L#c19A zIF||>+c`LN=q_A z>R@j)Vtn=*&6a}W#+L6Wwo*fj2n%p;iJ+R?$>)}!LG6-J`nN^}{t`rI)vx{)F#cM;S$o6;ERIuq+vY|s!x7kMQo;L}(p zQnlQD3TBMbEq8^doTZ^#l$($+I)pD0?wKJdNQfRuu~JrCj0sXj&&Z^30xtmDWxS0V zHsLD9YL{-ty;vQQXl|scxW-emN=$N5!fcD^o2(u?fU9wxxcYjMO!;#DiFa*m*6?9` zgeOa&IV%;MkfpjiR;S1H4kO`2gpH*Vp<6V3Owy-V(x)bB^~BvIlDUs-xLM{Vx~b)| zl&4VCieIa)ao$ z;SEbT?(pMLQrXdG9v#}URRqr$LZ0u(6ABQ(lh~``DGg6!A8jP@ntcawqj6=AE@$W5 z5Dn|r8&NXQYCraq|K8j?F!aFVLtAzZJ-PMhUHjiS{J_!8d*6O;vmYrDecSe94Iu}r<8VaSPbY6rKVH|#lvOoY{^n?t~Zi)ogsdq z-GdiemYuW{dUu^+cUo=9AbwX|p!gUNN`ZzyvRA06((`M0+vx=YN|BM5$fby_d7|)7#|AU#7>~Vn%Xi#IiQ@bXSkIR@O+) z#^z1kM)vaeKk15m@4eZzq<3I+8B#vBdIDO1*eX($yn;C%47v6 zzV}k{iE9f?XO8BvwDI$s7dcyb@;>1_S<5?5R@%;!MYZ!}&Ez~;UN}#_@9-I5VZj$E zejjD;I^?qjoD&{^5*~!wI)HKg2!vAz@-r#CAEluwDNJQ!M(DH@%Gs#oXLbs6IsCM9 z@-cqTAU5DQ_)tnYWtfB$*qh4Nm1**}fU|KD-sB3+m4~c>Lggo!=ZCh zSQsu$;k+h-!ma)k=G`rf?a%SA-9u4M?Gro%lgq>9mK1hqx7(OQp}Hx|g9G zS7ZsR$Oz-Rf+y@C#fmfAX>gkc@9jt5Ag*o=7W#sLU|;~(MkuPUGKCxD=`Bj(##Pd# z5k8vLzA3AHOIG{Vbo(hv%7eJ*G>qf-I+`eoDb#5O%gZ_F#CcecMk+-MpBfD0QwO3S#Jtwf?E|>8ZkC$DC#mkV z)?o1fcJ-sQa+Uy;P%3pASz1<(gxts2+Q@j{M95duo7Z4IuEjz|Z!NCpi_Z-X1_~LLl1+{#Js& zjo`Nv{2c^;=lcfFqSpg|$g}*K_q64kZ%2k-zV`!Rc16Na1X52iL7 z!#)U;Gk|-k#(h-dL8|c()!5CN_z~1#58rAZ#|k`wR#u)8I<6nqWc<*S@x!?pKd?mi zRM|&WBpELMZ>kWl*%~@$0K5B{i%#berxRzmIq8!Ienq+wcN*EV!`iq>@C>!tPi^|i z7-TZms^{YXHF=hr9Apv?W+lPp8BJPTO@aZr4L$so#4gOC3^Rg|3KepWaOqCL@9_s9 zm?xL2yHPnz-Vn-s#Z7_7>iA?d?WyOJzIbe*Z&v8>6h6BPrDu4J@nt@zwG-pRp=Uz< zz5{sn=`tTT2pu25pIjkK36ZJLr*n za48<+?-_g0jD4i3!~A{X1;*RUJV7F^ky5tNoPWZf8BH{)=P_xC;aO#|$o~ue%18_1 z5dOwiJ`wH5-`Vm}ekcBcfAU_uhLZk;mq^g>@SLeo-^BtIPrCodO??Mvt2mhUg(DjgDpPWtw z+JwlEp5w(@Gwo_r$+_|%V0W+sUtrfqfG#0eX|;~WQWp({(0VXbLNEEh;GE!GmiOH4 zCc03QI9fRT E20jHyI{*Lx literal 0 HcmV?d00001