我正在用Java创建我的第一个游戏。游戏是大富翁。我在纠结如何设计游戏,使其基于回合的结构模型(管理玩家回合)。我想允许一个单一的人控制和一个或多个人工智能控制的玩家玩游戏。
我的具体问题是,我不知道是否要实现一个游戏循环,这意味着一个循环可以管理玩家和与大富翁游戏直接相关的变量,(想想这样的事情,比如提示每个玩家进行他们的回合,增加回合到下一个玩家,或者从每个玩家那里获得骰子滚动--依次)。我指的不是“游戏循环”这个术语的更低层次的含义,它更多地与在屏幕上绘制框架、更新物理或以特定的时间速度更新人工智能有关。
我的理解是,我尝试实现所需内容的选择是:
swingWorker = new SwingWorker<Void, Model>() {
@Override
protected Void doInBackground() throws InterruptedException {
gameLoopRunning = true;
while (gameLoopRunning) {
//to do: use a timer instead of thread.sleep
Thread.sleep(1000);
//user turn prompt
if (model.getActivePlayer().isUserControlled()) {
boolean userRolled = false;
while(!userRolled) {
System.out.println("Roll the dice please...");
Thread.sleep(3000);
}
}
//bot turn prompt
else {
//insert code for bot rolling dice here
model.rollDice();
}
publish(model);
Thread.sleep(1000);
model.incrementPlayerTurn();
publish(model);
}
return null;
}
@Override
protected void process(List<Model> chunks) {
Model gameModel = chunks.get(chunks.size() - 1);
//hard-coded for 6 players
for (int i = 0; i < 6; i++) {
view.getPlayerPanel(i).setTurn(gameModel.getPlayers().get(i).isTurn());
}
view.getGamePanel().getDice().setDie1(model.getDie1());
view.getGamePanel().getDice().setDie2(model.getDie2());
}
};
swingWorker.execute();
SirDarius的评论是正确的。
但是,对于像推进播放器回合这样简单的事情,您实际上不需要实现一个完整的有限状态机。
在MVC方面,这是你应该为人类玩家做的:
视图:当活跃玩家完成他们的回合时引发事件,以及在各种其他输入上引发事件。
控制器:每当一个玩家完成他们的回合,告诉模型前进到下一个玩家,并再次开始“回合过程”。每当玩家提供输入时,就会触发一个事件,告诉模型前进到回合的下一阶段。
对于AI玩家来说,大多数相同的代码都可以使用,但让视图驱动回合进展是没有意义的。取而代之的是,该模型需要另一种专门针对人工智能玩家的“转向过程”方法。唯一的区别是,代码将连续执行,而不需要等待来自视图的输入,而不是一系列事件侦听器。
问题内容: 我正在用Java创建我的第一个游戏。游戏是大富翁。我在如何设计游戏以模拟其基于回合的结构(管理玩家回合)方面感到困惑。我想允许一个人控制和一个或多个AI控制的玩家玩游戏。 我的具体问题是,我不知道是否实施游戏循环,即可以管理玩家和与大富翁游戏直接相关的变量的循环(例如,提示每个玩家轮到他们,增加回合到下一个玩家的回合,或依次让每个玩家掷骰子)。我指的不是“游戏循环”这个词的更底层含义,
所以我有(gridLayout),每个JXButton都有一个图标,一个播放器所属的片段,并且有一个。 我目前正在努力使战略游戏(两个球员-我处理两者)。我设置了图标,碎片和一个碎片应该如何移动。 现在我希望让它轮流播放。 我的思想播放器2件当播放器1转动时隐藏。 和应该改变图标时,播放器2。 如果这两种方法看起来还可以,那么我的问题在于如何实现转向。
包含在程序启动时启动的线程。这个线程包含一个循环,每40毫秒更新一次游戏并重新绘制()board。 备选办法B: 板创建一个摆动计时器。这个计时器的动作监听器是板本身。actionPerformed()方法每40毫秒运行一次,并更新game+repaints Board()。 谢谢
本食谱演示了使用组合流来创建游戏循环的一种方式。本食谱旨在突出如何用响应式的方式来重新思考现有问题。在这个示例中,我们将提供整体循环以及自上帧以来的增量时间。与此相结合的是用户输入流,以及当前的游戏状态,我们可以用它来更新我们的对象,并根据每帧的发出来将其渲染到屏幕上。 示例代码 ( StackBlitz ) import { BehaviorSubject, Observable, of, fr
目前,我正在尝试用Java开发基于2D平铺的侧滚游戏,主要基于David Brackeen的“用Java开发游戏”中的代码和示例 目前地图文件的大小为100x100个图块(每个图块为64x64像素)。我已经将系统配置为仅显示玩家可见的图块。Graphics系统由ScreenManager类管理,该类返回当前BufferStrategy的图形对象,如下所示: ScreenManager.java 来
我正在尝试创建一个MVC模式的回合制卡牌游戏。我对正确的设计有些怀疑。 我创建了一个由这些类组成的模型: 卡(使用套装) 套牌(40张牌,抽取牌法,剩余牌数) 表 套装(enum) 玩家(手牌,人名,手牌数,收藏牌我想) 游戏模型(引用了Deck、Table,并在构造函数中包含两个玩家) 我将在用户按下“新游戏”按钮时创建两个Player对象和GameModel(计算机和Player)。这样做对吗