颜色识别小游戏设计 1、设计一款可识别图片中相似颜色的小游戏程序; 2、图片显示部分实现方式分为两种:a、可通过随机分割固定尺寸图片,并填充颜色;b、可通过插入彩色图片; 3、颜色识别提示部分以文字加对应颜色的方式(例如:青色+颜色框); 4、玩家需识别提示的颜色部分的所有图片中的颜色; 5、系统能判别错误,并显示正确答案的功能;
时间: 2024-03-22 12:40:30 浏览: 91
好的,以下是一个简单的Java代码示例,实现了颜色识别小游戏的基本功能:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class ColorGame extends JFrame implements ActionListener {
private JPanel imagePanel; // 图片显示区域
private JPanel answerPanel; // 答题区域
private JPanel colorPanel; // 颜色提示区域
private JLabel scoreLabel; // 分数显示标签
private JLabel timeLabel; // 时间显示标签
private JButton[] answerButtons; // 答案按钮数组
private int score = 0; // 玩家得分
private int time = 60; // 倒计时时间
// 图片列表,每个元素包含一张图片和对应的颜色数组
private ArrayList<ImageColor> imageList = new ArrayList<>();
// 构造函数
public ColorGame() {
// 设置窗口标题和大小
super("颜色识别小游戏");
setSize(800, 600);
// 创建游戏界面布局
setLayout(new BorderLayout());
// 创建图片显示区域
imagePanel = new JPanel(new GridLayout(2, 3));
add(imagePanel, BorderLayout.CENTER);
// 创建答题区域
answerPanel = new JPanel(new GridLayout(2, 3));
add(answerPanel, BorderLayout.SOUTH);
// 创建颜色提示区域
colorPanel = new JPanel();
colorPanel.setPreferredSize(new Dimension(200, 100));
add(colorPanel, BorderLayout.NORTH);
// 创建分数显示标签
scoreLabel = new JLabel("得分: 0");
add(scoreLabel, BorderLayout.WEST);
// 创建时间显示标签
timeLabel = new JLabel("时间: " + time);
add(timeLabel, BorderLayout.EAST);
// 创建答案按钮数组
answerButtons = new JButton[6];
for (int i = 0; i < 6; i++) {
answerButtons[i] = new JButton();
answerButtons[i].addActionListener(this);
answerPanel.add(answerButtons[i]);
}
// 初始化图片列表
initImageList();
// 开始游戏
startGame();
}
// 初始化图片列表
private void initImageList() {
// 随机分割固定尺寸图片,并填充颜色
for (int i = 1; i <= 6; i++) {
ImageColor imageColor = new ImageColor();
imageColor.image = new ImageIcon("image" + i + ".jpg").getImage();
imageColor.colors = new Color[6];
for (int j = 0; j < 6; j++) {
// 随机生成6种颜色
imageColor.colors[j] = new Color((int) (Math.random() * 256),
(int) (Math.random() * 256), (int) (Math.random() * 256));
}
imageList.add(imageColor);
}
// 插入彩色图片
ImageColor imageColor = new ImageColor();
imageColor.image = new ImageIcon("color.jpg").getImage();
imageColor.colors = new Color[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW, Color.PINK, Color.ORANGE };
imageList.add(imageColor);
}
// 开始游戏
private void startGame() {
// 开始倒计时
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
time--;
timeLabel.setText("时间: " + time);
if (time == 0) {
endGame();
}
}
});
timer.start();
// 随机选择一张图片和颜色
int index = (int) (Math.random() * imageList.size());
ImageColor imageColor = imageList.get(index);
Color color = imageColor.colors[(int) (Math.random() * imageColor.colors.length)];
// 显示颜色提示信息
colorPanel.setBackground(color);
colorPanel.setBorder(BorderFactory.createTitledBorder(color.toString()));
// 显示图片和答案按钮
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < 6; i++) {
list.add(i);
}
Collections.shuffle(list);
for (int i = 0; i < 6; i++) {
int j = list.get(i);
Image image = imageColor.image.getScaledInstance(100, 100, Image.SCALE_SMOOTH);
Image newImage = new ImageIcon(getImageWithColor(image, imageColor.colors[j])).getImage();
JButton button = answerButtons[i];
button.setIcon(new ImageIcon(newImage));
button.putClientProperty("color", imageColor.colors[j]);
}
}
// 结束游戏
private void endGame() {
// 停止倒计时
timeLabel.setText("时间: 0");
// 显示得分信息
JOptionPane.showMessageDialog(this, "游戏结束,您的得分为:" + score);
// 重新开始游戏
score = 0;
time = 60;
scoreLabel.setText("得分: 0");
timeLabel.setText("时间: " + time);
startGame();
}
// 点击答案按钮事件处理函数
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
Color color = (Color) button.getClientProperty("color");
if (colorPanel.getBackground().equals(color)) {
score++;
scoreLabel.setText("得分: " + score);
startGame();
} else {
JOptionPane.showMessageDialog(this, "回答错误,正确答案为:" + color);
}
}
// 将图片替换为指定颜色
private BufferedImage getImageWithColor(Image image, Color color) {
BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bufferedImage.createGraphics();
g2d.drawImage(image, 0, 0, null);
g2d.setComposite(AlphaComposite.SrcAtop);
g2d.setColor(color);
g2d.fillRect(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight());
g2d.dispose();
return bufferedImage;
}
// 内部类,用于表示一张图片和对应的颜色数组
private static class ImageColor {
public Image image;
public Color[] colors;
}
// 主函数
public static void main(String[] args) {
ColorGame game = new ColorGame();
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game.setVisible(true);
}
}
```
以上代码只是一个简单的示例,具体的实现方式和细节还需要您进行完善。
阅读全文