平芜尽处是春山481 2024-04-16 22:40 采纳率: 0%
浏览 15

java拼图游戏完整代码

public void run() {                       

while (dijiguan < 20) {
if (remainTimes == 0) {
JOptionPane.showMessageDialog(null, "游戏开始?");
}
if (remainTimes == 56) {
JOptionPane.showMessageDialog(null, "时间到!游戏结束!");
}

                remainTimes++;
                repaint();// 重新----重绘组件,调用paint方法

                try {
                    if (dijiguan < 6)
                        Thread.sleep(1500 - dijiguan * 100);
                    if (dijiguan >= 6 && dijiguan <= 8)
                        Thread.sleep(1000 - (dijiguan - 5) * 50);
                    if (dijiguan > 8)
                        Thread.sleep(850 - (dijiguan - 8) * 20);

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

    }
  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-16 22:40
    关注

    引自免费微信小程序:皆我百晓生

    为了创建一个简单的Java拼图游戏,我们可以按照以下几个步骤进行:

    1. 创建一个基本的图形界面(GUI)。
    2. 定义拼图的逻辑,包括图片切割、随机排列、移动块等。
    3. 实现用户交互,如鼠标点击事件处理。

    首先,我们需要导入必要的库:

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.MouseAdapter;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    import static javax.imageio.ImageIO.read;
    

    然后,我们定义一个名为JigsawPuzzleGame的类,包含主方法和游戏逻辑:

    public class JigsawPuzzleGame extends JFrame {
    
        private static final int WINDOW_WIDTH = 800;
        private static final int WINDOW_HEIGHT = 600;
        private static final int TILE_SIZE = 100;
        private static final int NUM_TILES_X = 8;
        private static final int NUM_TILES_Y = 6;
        private static final String IMAGE_PATH = "path_to_your_image.jpg"; // 替换为你的图片路径
    
        private BufferedImage originalImage;
        private List<JButton> tiles;
        private int[][] tileMap;
        private int remainTimes = 56; // 总计时秒数
        private int dijiguan = 0; // 秒数计数器
    
        public JigsawPuzzleGame() {
            setTitle("Jigsaw Puzzle Game");
            setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setResizable(false);
    
            originalImage = loadOriginalImage(IMAGE_PATH);
            createTiles();
            generateTileMap();
    
            addMouseListener(new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {
                    moveTile(e.getX(), e.getY());
                }
            });
    
            setVisible(true);
        }
    
        private void loadOriginalImage(String imagePath) {
            try {
                return read(new File(imagePath));
            } catch (IOException ex) {
                System.out.println("Error loading image: " + ex.getMessage());
                return null;
            }
        }
    
        private void createTiles() {
            tiles = new ArrayList<>();
            int tileSize = originalImage.getWidth() / NUM_TILES_X;
            for (int y = 0; y < NUM_TILES_Y; y++) {
                for (int x = 0; x < NUM_TILES_X; x++) {
                    int startX = x * tileSize;
                    int startY = y * tileSize;
                    int endX = Math.min(startX + tileSize, originalImage.getWidth());
                    int endY = Math.min(startY + tileSize, originalImage.getHeight());
    
                    BufferedImage tile = originalImage.getSubimage(startX, startY, endX - startX, endY - startY);
                    JButton button = new JButton();
                    button.setPreferredSize(new Dimension(tileSize, tileSize));
                    button.setBorderPainted(false);
                    button.setContentAreaFilled(false);
                    button.setIcon(new ImageIcon(tile));
    
                    tiles.add(button);
                    add(button);
                }
            }
        }
    
        private void generateTileMap() {
            tileMap = new int[NUM_TILES_X][NUM_TILES_Y];
            for (int i = 0; i < tiles.size(); i++) {
                tileMap[i % NUM_TILES_X][i / NUM_TILES_X] = i;
            }
            Collections.shuffle(Arrays.asList(tileMap), new Random(System.currentTimeMillis()));
        }
    
        private void moveTile(int mouseX, int mouseY) {
            for (JButton tile : tiles) {
                Rectangle bounds = tile.getBounds();
                if (bounds.contains(mouseX, mouseY)) {
                    int targetIndex = getTileIndexAtPosition(mouseX, mouseY);
                    swapTiles(tile, targetIndex);
                    break;
                }
            }
        }
    
        private int getTileIndexAtPosition(int mouseX, int mouseY) {
            int col = mouseX / TILE_SIZE;
            int row = mouseY / TILE_SIZE;
            return row * NUM_TILES_X + col;
        }
    
        private void swapTiles(JButton sourceTile, int targetIndex) {
            int sourceIndex = tiles.indexOf(sourceTile);
            int temp = tileMap[targetIndex / NUM_TILES_X][targetIndex % NUM_TILES_X];
            tileMap[targetIndex / NUM_TILES_X][targetIndex % NUM_TILES_X] = tileMap[sourceIndex / NUM_TILES_X][sourceIndex % NUM_TILES_X];
            tileMap[sourceIndex / NUM_TILES_X][sourceIndex % NUM_TILES_X] = temp;
    
            JButton targetTile = tiles.get(targetIndex);
            remove(sourceTile);
            remove(targetTile);
            add(sourceTile);
            add(targetTile);
            validate();
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(() -> new JigsawPuzzleGame());
        }
    }
    

    这个代码示例提供了一个基本的Java拼图游戏,它将图片分割成小方块并随机排列。玩家可以通过拖动这些方块来尝试完成拼图。注意,这个实现没有包含计时功能,你需要在主方法里添加一个线程来控制剩余时间和暂停/继续功能。此外,你可能还需要根据需求对UI进行美化和优化。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月16日

悬赏问题

  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?