【发布时间】:2014-11-06 02:31:58
【问题描述】:
我正在使用 JFrame 编写一个 Blackjack 程序,并尝试使其尽可能简单。我的 JButton,jbHit 只需单击即可工作,但每次单击都会覆盖 playerHand 和 playerSide 插槽。我希望它可以通过多次点击(3 次点击——因为这是你在前两张被处理后可以获得的最大卡片数)选项它应该计算它们,以便数组索引可以记录卡片图像。这是我到目前为止的 ActionListener 代码。恐怕我被困住了。我应该使用某种带有 int i++ 的 for 循环吗?
//Hit Button ActionListener
jbHit.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if ( playerValue < 21 ) {
//Draw a card
Card c = deck.drawCard();
playersHand.add(c);
playerSide[2].setIcon( new ImageIcon( c.getFilename() ) );
}
//If playerValue > 21, bust
else if ( playerValue > 21 ) {
//Toggle Buttons
jbDeal.setEnabled(true);
jbHit.setEnabled(false);
jbStand.setEnabled(false);
jbDoubleDown.setEnabled(false);
message = "You bust.";
}
}
});
【问题讨论】:
-
您可能真正需要的是某种(或两个)模型,它可以维护有关当前状态、卡片数量及其数量、回合的所有信息。您的按钮将与这些模型进行交互,并根据那里的反馈,通过听众,改变那里的状态......
-
@MadProgrammer 是不是你想得到那个花哨的东西,你只需要实现一个状态机,每个上下文都知道下一个操作。您可以使用状态模式来实现这一点。我最近设计了一个使用状态模式的向导来完成这个。但是,OP 想要让它尽可能简单。
-
@hfontanez 只是另一种模型;)
-
@MadProgrammer 我同意,但 OP 不想那么花哨。这就是为什么我通过创建一个字符串数组作为操作命令来为状态机提供一个糟糕的借口,然后我每次单击按钮都会更改它们。它应该足够简单,让 OP 理解。
标签: java swing jbutton actionlistener blackjack