开发者社区 问答 正文

如何添加计时器到连接四?爪哇

有点非常规的问题,但我想知道是否有人对将计时器实现为四人连线游戏(2个玩家)的方式有任何想法。我目前有常规游戏的正常运行代码,但想添加一种方法,使用户有5秒钟的时间进行移动,否则计算机将为他们随机移动。是否有人对如何实现这一目标有任何想法?这是我处理转弯决策的主要功能。

public void handleAction (int x, int y)
    {
    if (gameOver)
    {
        JOptionPane.showMessageDialog (this, "Please Select Game...New to start a new game",
            "Game Over", JOptionPane.WARNING_MESSAGE);
        return;
    }

    int column = (x - BORDER_SIZE) / SQUARE_SIZE + 1;
    int row = findNextRow (board, column);

    if (row <= 0)
    {
        JOptionPane.showMessageDialog (this, "Please Select another Column",
            "Column is Full", JOptionPane.WARNING_MESSAGE);
        return;
    }

    animatePiece (currentPlayer, column, row);
    board [row] [column] = currentPlayer;

    int winner = checkForWinner (board, row, column);


    if (winner == BANANA)
    {
        gameOver = true;
        repaint ();
        backgroundMusic.stop();
        winBanana.play();
        JOptionPane.showMessageDialog (this, "Banana Wins!!!",
            "GAME OVER", JOptionPane.INFORMATION_MESSAGE);

    }
    else if (winner == STRAWBERRY)
    {
        gameOver = true;
        repaint ();
        backgroundMusic.stop();
        winStrawberry.play();
        JOptionPane.showMessageDialog (this, "Strawberry Wins!!!",
            "GAME OVER", JOptionPane.INFORMATION_MESSAGE);
    }
    else {
        currentPlayer *= -1;
        if (currentPlayer == 1)
            addStrawberry.play();
        else
            addBanana.play();

    }   
    currentColumn = 3;

    repaint ();
}

展开
收起
垚tutu 2019-12-12 09:29:52 506 分享 版权
阿里云 AI 助理回答

在Java中,为您的游戏添加一个计时器功能以限制玩家的行动时间,可以使用java.util.Timerjava.util.TimerTask类。以下是一个简化的示例,展示了如何实现这一功能。这个例子假设你已经有了一个运行游戏的主要框架,并且handleAction方法是处理玩家输入的地方。现在我们将集成一个计时器,如果玩家在5秒内没有做出决策,将自动执行计算机的随机移动。

首先,定义一个TimerTask子类来处理超时后的动作:

class MoveTimeoutTask extends TimerTask {
    @Override
    public void run() {
        // 如果当前是玩家回合并且游戏未结束
        if (!gameOver && currentPlayerIsHuman) {
            // 计算机进行随机移动的逻辑
            int[] randomMove = computerMakeRandomMove(board);
            handleComputerMove(randomMove[0], randomMove[1]);
            JOptionPane.showMessageDialog(null, "Time's up! Computer made a move for you.");
            // 清除并取消计时器
            timer.cancel();
            timer.purge();
        }
    }
}

然后,在你的游戏循环或相关位置初始化Timer对象,并在每次轮到玩家行动时启动一个新的计时任务:

import java.util.Timer;
import java.util.TimerTask;

public class YourGameClass {
    private Timer timer = new Timer();
    private boolean currentPlayerIsHuman; // 假设这是判断当前是否是人类玩家的标志

    // ... 其他代码 ...

    public void startPlayerTurn() {
        currentPlayerIsHuman = true; // 确保标记当前是人类玩家的回合
        // 启动计时器,5秒后执行MoveTimeoutTask
        timer.schedule(new MoveTimeoutTask(), 5000); // 5000毫秒=5秒
    }

    public void handleAction(int x, int y) {
        if (gameOver) {
            JOptionPane.showMessageDialog(this, "Please Select Game...New to start a new game", "Game Over", JOptionPane.WARNING_MESSAGE);
            return;
        }

        // ...(保持原有的handleAction逻辑)...

        // 玩家已做出决策,取消计时器
        timer.cancel();
        timer.purge();

        // 继续处理玩家的移动...
    }

    // ... 其他游戏逻辑 ...
}

请根据你的具体游戏逻辑调整上述代码。主要思路是:每当轮到玩家操作时,启动一个定时任务,若玩家在规定时间内未操作,则该任务触发,由计算机代为操作。当玩家做出操作时,记得取消当前的计时任务,避免与玩家的操作冲突。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: