我正在用Java编写一个纸牌游戏,由于某些能力,需要玩家点击按钮的多种能力可以同时发生。目前我有几个if语句来检查哪些发生,但是当多个发生时,它们不会单独发生,而是同时发生。我希望用户能够按顺序浏览每一个。下面是一些伪代码:
Start of turn, a for loop to check certain parameters
if (parameters are met for this card)
call anonymous action listener to have user click an available button
if (parameters are for this another card)
call anonymous action listener to have user click an available button
这还有几张牌。如果满足'if',我希望程序暂停,让用户单击一个可用按钮,然后恢复到下一个满意的'if'条件。现在,如果满足多个ifs,我只需点击一下。我该如何做到这一点?
谢谢。
编辑:下面是实际代码,这是一个很酷的。这就是我最初没有发布的原因。下面是for循环检查卡是否正在播放,如果是,则执行某些任务。
public void lilithStartAbility() {
implode = 0;
String str = "";
if ((p1Turn == false && p2Turn == true && p2EndTurn == true) || (p1Turn == true && p2Turn == false && p2EndTurn == false)) {
for (int i = 0; i < p1Deck.getCardList().length; i++) {
if (p1Deck.getMinion(i).getType().equalsIgnoreCase("horror") && p1Deck.getMinion(i).getLastMinionBtnClicked() > -1) {
p1Deck.getMinion(i).setBlightCounter(p1Deck.getMinion(i).getBlightCounter() + 1);
p1Deck.getMinion(i).setNewPermDOM(p1Deck.getMinion(i).getBlightCounter());
str += p1Deck.getMinion(i).getName() + " gained one blight counter!\n";
p1UpdatePlayfield(p1Deck.getCardList(), playfield.p1GetMinionsInPlayArray());
updatePlayfieldStats();
//ALL IMPLODE EFFECTS HERE//
//INSATIABLE OGRE//
if (p1Deck.getMinion(i).getName().equalsIgnoreCase("Insatiable Ogre") && +
p1Deck.getMinion(i).getBlightCounter() == p1Deck.getMinion(i).getBlightCounterMax()) {
implode++;
p1Deck.getMinion(i).setBlightCounter(0);
str += p1Deck.getMinion(i).getName() + " imploded! Click target minion to deal 5DMG.";
p1Deck.getMinion(i).setHP(0);
p1UpdatePlayfield(p1Deck.getCardList(), playfield.p1GetMinionsInPlayArray());
if (playfield.p2GetNumOfMinionsInPlay() > 0)
dealMinionDMGtoP2(5);
}
//MUTATED ABOMINATION//
if (p1Deck.getMinion(i).getName().equalsIgnoreCase("Mutated Abomination") && +
p1Deck.getMinion(i).getBlightCounter() == p1Deck.getMinion(i).getBlightCounterMax()) {
implode++;
p1Deck.getMinion(i).setBlightCounter(0);
str += p1Deck.getMinion(i).getName() + " imploded! Click target minion to exhaust.";
p1Deck.getMinion(i).setHP(0);
p1UpdatePlayfield(p1Deck.getCardList(), playfield.p1GetMinionsInPlayArray());
if (playfield.p2GetNumOfMinionsInPlay() > 0)
changeStatusOneMinionToP2(1);
}
//NECROMANCER OF THE ABYSS IMPLODE//
if (p1Deck.getMinion(i).getName().equalsIgnoreCase("Necromancer of the Abyss") && +
p1Deck.getMinion(i).getBlightCounter() == p1Deck.getMinion(i).getBlightCounterMax()) {
implode++;
p1Deck.getMinion(i).setBlightCounter(0);
JOptionPane.showMessageDialog(null, "Click minion to deal 4DMG.");
//str += p1Deck.getMinion(i).getName() + " imploded! Click target minion to deal 4DMG.";
p1Deck.getMinion(i).setHP(0);
p1UpdatePlayfield(p1Deck.getCardList(), playfield.p1GetMinionsInPlayArray());
if (playfield.p2GetNumOfMinionsInPlay() > 0)
dealMinionDMGtoP2(4);
}
//POWERSTARVED FIEND//
if (p1Deck.getMinion(i).getName().equalsIgnoreCase("Powerstarved Fiend") && +
p1Deck.getMinion(i).getBlightCounter() == p1Deck.getMinion(i).getBlightCounterMax()) {
implode++;
p1Deck.getMinion(i).setBlightCounter(0);
str += p1Deck.getMinion(i).getName() + " imploded! Lilith gained two power tokens.";
p1Deck.getMinion(i).setHP(0);
p1UpdatePlayfield(p1Deck.getCardList(), playfield.p1GetMinionsInPlayArray());
p1Hero.setPowerTokens(p1Hero.getPowerTokens()+2);
}
//SOUL ANNULER//
if (p1Deck.getMinion(i).getName().equalsIgnoreCase("Soul Annuler") && +
p1Deck.getMinion(i).getBlightCounter() == p1Deck.getMinion(i).getBlightCounterMax()) {
implode++;
p1Deck.getMinion(i).setBlightCounter(0);
JOptionPane.showMessageDialog(null, "Click minion to deal silence it.");
str += p1Deck.getMinion(i).getName() + " imploded! Click target minion to silence it.";
p1Deck.getMinion(i).setHP(0);
p1UpdatePlayfield(p1Deck.getCardList(), playfield.p1GetMinionsInPlayArray());
if (playfield.p2GetNumOfMinionsInPlay() > 0)
changeStatusOneMinionToP2(3);
}
}
}
}
按钮点击事件发生在每张卡下面的方法中,例如“dealMinionDMGtoP2(4);”看起来像这样:
public void dealMinionDMGtoP2(int DMG) { // dealing XDMG to minion
p1Hand.toggleAllMinionBtns(false);
playfield.p1ToggleMinionBtns(false);
p1Hand.toggleEndTurnBtn(false);
playfield.playfieldMinionToText(new PlayfieldMinionListener() {
public void playfieldMinionToText(int btnClicked, int cardPositionInDeckInPlayfield, int player) {
Minion temp = new Minion();
temp = p2Deck.getMinion(cardPositionInDeckInPlayfield);
temp.setHP(temp.getHP() - DMG);
p2Deck.setMinion(cardPositionInDeckInPlayfield, temp);
playfield.p1ToggleMinionBtns(true);
p1Hand.toggleAllButOneMinionBtns(true, p1BtnCopy);
p1Hand.toggleEndTurnBtn(true);
p2UpdatePlayfield(p2Deck.getCardList(), playfield.p2GetMinionsInPlayArray());
updatePlayfieldStats();
leavePlayerEvent();
}
});
}
“leavePlayerEvent();”将单击按钮恢复为常规功能。