<think>我们正在查找好玩的Java程序示例。根据引用[2]和引用[4],我们可以提供一些有趣的Java小程序。引用[2]中提供了一个冒泡排序算法的示例,引用[4]中提供了一个屏幕截图的程序片段。此外,我们还可以参考其他一些有趣的Java小程序。
注意:用户要求好玩的程序,所以我们可以选择一些有趣且实用的例子。
以下是几个好玩的Java程序示例:
1. **冒泡排序可视化**(基于引用[2]修改):
我们可以稍微修改冒泡排序程序,使其在控制台输出排序的每一步,这样可以看到排序的过程。
2. **屏幕截图程序**(基于引用[4]):
这个程序可以捕获整个屏幕并保存为图片。
3. **一个简单的猜数字游戏**:
这是一个经典的小游戏,计算机会随机生成一个数字,用户尝试猜测。
4. **生成随机艺术**:
使用字符在控制台生成随机图案。
下面我们将展示其中两个程序:
### 1. 冒泡排序可视化(增强版)
在引用[2]的基础上,我们添加详细的每一步输出,让用户可以看到排序的每一步变化。
```java
import java.util.Arrays;
public class BubbleSortVisualization {
public static void main(String[] args) {
int[] b = {40, 78, 13, 28, 32, 59, 33, 70, 75, 46, 79, 134, 14, 16, 354, 35, 357, 2423, 424, 563, 6675, 698, 7, 94, 12, 454, 6767, 8, 678, 67, 86, 8797, 90};
System.out.println("初始数组: " + Arrays.toString(b));
bubbleSort(b);
}
public static void bubbleSort(int[] A) {
int emp;
boolean flag = true;
for (int i = 0; i < A.length; i++) {
for (int j = 0; j < A.length - i - 1; j++) {
if (A[j] > A[j + 1]) {
emp = A[j];
A[j] = A[j + 1];
A[j + 1] = emp;
flag = false;
}
// 输出每一次交换后的数组(或者比较后,即使没有交换也可以输出,但为了不刷屏,我们只在交换时输出)
// 注意:频繁输出可能会造成控制台信息过多,所以这里我们只输出发生交换的情况
System.out.println("第" + (i+1) + "趟,第" + (j+1) + "次交换后: " + Arrays.toString(A));
}
if (flag) {
break;
} else {
flag = true;
}
System.out.println("第" + (i+1) + "趟完成: " + Arrays.toString(A));
}
}
}
```
### 2. 屏幕截图程序
这个程序可以捕获整个屏幕并保存为PNG图片。用户运行后,当前屏幕会被保存为当前目录下的"screenshot.png"文件。
```java
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;
public class ScreenCapture {
public static void main(String[] args) {
try {
new ScreenCapture().captureScreen("screenshot.png");
System.out.println("截图已保存为 screenshot.png");
} catch (Exception e) {
e.printStackTrace();
}
}
public void captureScreen(String fileName) throws Exception {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle screenRectangle = new Rectangle(screenSize);
Robot robot = new Robot();
BufferedImage image = robot.createScreenCapture(screenRectangle);
ImageIO.write(image, "png", new File(fileName));
}
}
```
### 3. 猜数字游戏
这是一个简单的猜数字游戏,程序随机生成一个1到100之间的整数,用户有10次机会来猜测。
```java
import java.util.Scanner;
import java.util.Random;
public class GuessNumberGame {
public static void main(String[] args) {
Random random = new Random();
int number = random.nextInt(100) + 1; // 生成1到100的随机数
int maxTries = 10;
int tries = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("欢迎来到猜数字游戏!我已经想好了一个1到100之间的数字,你有10次机会来猜。");
while (tries < maxTries) {
System.out.print("请输入你的猜测: ");
int guess = scanner.nextInt();
tries++;
if (guess < number) {
System.out.println("太小了!");
} else if (guess > number) {
System.out.println("太大了!");
} else {
System.out.println("恭喜你!你在第" + tries + "次猜中了!");
break;
}
if (tries == maxTries) {
System.out.println("很遗憾,你没有在10次内猜中。数字是: " + number);
}
}
scanner.close();
}
}
```
这些程序既有趣又实用,你可以尝试运行它们。
§§相关问题§§
1. 如何改进冒泡排序算法以提高效率?
2. 屏幕截图程序除了保存整个屏幕,还能只截取特定区域吗?
3. 猜数字游戏如何增加难度?
</think>### 好玩的Java程序示例
以下是几个有趣且实用的Java小程序示例,包含完整代码和简要说明:
#### 1. 屏幕截图工具
基于引用[4],可捕获全屏并保存为PNG图片:
```java
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;
public class ScreenCapture {
public static void main(String[] args) {
try {
captureScreen("screenshot.png");
System.out.println("截图已保存为 screenshot.png");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void captureScreen(String fileName) throws Exception {
// 获取屏幕尺寸
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle screenRect = new Rectangle(screenSize);
// 创建Robot对象捕获屏幕
Robot robot = new Robot();
BufferedImage image = robot.createScreenCapture(screenRect);
// 保存为PNG文件
ImageIO.write(image, "png", new File(fileName));
}
}
```
#### 2. 可视化冒泡排序
基于引用[2],添加实时输出展示排序过程:
```java
import java.util.Arrays;
public class BubbleSortAnimation {
public static void main(String[] args) {
int[] data = {40, 78, 13, 28, 32, 59, 33, 70, 75, 46, 79, 134, 14};
System.out.println("初始数组: " + Arrays.toString(data));
bubbleSort(data);
}
public static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
boolean swapped = false;
for (int j = 0; j < arr.length - i - 1; j++) {
// 实时显示比较过程
System.out.printf("[第%d轮] 比较 %d 和 %d: ",
i+1, arr[j], arr[j+1]);
if (arr[j] > arr[j+1]) {
// 交换元素
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
swapped = true;
System.out.println("交换 ✔");
} else {
System.out.println("不交换 ✘");
}
}
// 显示每轮结果
System.out.println("第" + (i+1) + "轮结果: " + Arrays.toString(arr));
if (!swapped) break; // 提前结束
}
}
}
```
#### 3. 命令行贪吃蛇游戏
基础版控制台贪吃蛇:
```java
import java.util.*;
import java.util.concurrent.*;
public class MiniSnakeGame {
static int width = 20, height = 10;
static int[] snake = new int[100];
static int snakeLength = 3;
static int foodX, foodY;
static char direction = 'D'; // WASD控制
public static void main(String[] args) throws InterruptedException {
initGame();
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(() -> {
moveSnake();
render();
}, 0, 300, TimeUnit.MILLISECONDS);
}
static void initGame() {
// 初始化蛇身
for (int i = 0; i < snakeLength; i++) {
snake[i] = (height/2)*width + (width/2 - i);
}
spawnFood();
}
static void spawnFood() {
foodX = new Random().nextInt(width);
foodY = new Random().nextInt(height);
}
static void moveSnake() {
// 移动逻辑(简化版)
int head = snake[0];
if (direction == 'D') head += 1;
if (direction == 'A') head -= 1;
if (direction == 'W') head -= width;
if (direction == 'S') head += width;
// 检查食物
if (head == foodY * width + foodX) {
snakeLength++;
spawnFood();
}
// 移动身体
for (int i = snakeLength-1; i > 0; i--) {
snake[i] = snake[i-1];
}
snake[0] = head;
}
static void render() {
char[][] grid = new char[height][width];
// 填充空格
for (char[] row : grid) Arrays.fill(row, '·');
// 放置食物
grid[foodY][foodX] = '★';
// 绘制蛇
for (int i = 0; i < snakeLength; i++) {
int y = snake[i] / width;
int x = snake[i] % width;
grid[y][x] = (i == 0) ? '●' : '○';
}
// 打印画面
System.out.print("\033[H\033[2J"); // 清屏
for (char[] row : grid) {
System.out.println(row);
}
System.out.println("控制: WASD 长度: " + snakeLength);
}
}
```
### 如何运行这些程序
1. 将代码保存为 `.java` 文件(如 `SnakeGame.java`)
2. 编译:`javac SnakeGame.java`
3. 运行:`java SnakeGame`