问候 Stackoverflowians
我正在开发一个 Android 纸牌游戏应用程序。我已经将整个游戏的动态放入我使用状态设计模式(状态机)实现的 GameClass 中,考虑到处于游戏特定状态的两个玩家中的任何一个都将有不同的可用动作。
例如,当游戏开始时,玩家 A 只能执行 GameClass 共有的 21 个方法中的 5 个。根据打出的动作和卡牌,方法会转换不同的状态,并且在每个不同的状态下,都会有不同的方法可用。
因此,我通过一个名为 CurrentActions 的类解决了不同方法的可用性问题,该类为每个方法设置和获取布尔值。所以,如果我想向玩家展示他在游戏开始时可以选择的动作,我有一系列的 IF(大约 21...)检查是否有任何 Getter 设置为 true,如果它们是我将按钮添加到布局中,一切都像魅力一样。
现在,我最大的问题是我不知道如何显示第一个状态的按钮,然后一旦玩家 A 点击其中一个按钮(方法),清除之前状态中可用的所有按钮,现在显示游戏所处的新状态的新按钮。
有没有办法做到这一点?我已经使用 Layout.removeAllViews() 方法清除所有按钮,但是根据以下状态重新设置所有按钮是我最大的问题。我真的很感激关于这个问题的任何指导。
为了响应您查看一些代码的请求,我在我的 Activity 中添加了处理游戏、布局、按钮和可能操作的代码:
// CurrentActions CA holds the current actions that are available
//for the current State of the game.
final CurrentActions CA = new CurrentActions();
//JuegoTruco JT is the game itself
final JuegoTruco JT = new JuegoTruco(CA);
//I've changed the names up to make it understandable
//If Action1 is performable at the current State of the game, set the button up and
//await a posible Click
if(CA.performAction1())
{
Action1Button = new Button(this);
Action1Button.setId(13);
Action1Button.setLayoutParams(paramsActions);
Action1Button.setText("Action1");
layoutAcciones.addView(Action1Button);
Action1Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (TOGGLE_ON_CLICK) {
mpButton.start();
//Here I change the state of JT, by performing an action and
//I also give it instance CA, so the State Handler
//can change the available Actions for the following state
JT.performAction(otherParameters, CA);
layoutActions.removeAllViews();
}
}
});
}
if(CA.performAction2())
{
Action2Button = new Button(this);
Action2Button.setId(13);
Action2Button.setLayoutParams(paramsActions);
Action2Button.setText("Action2");
layoutAcciones.addView(Action2Buttonn);
Action2Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (TOGGLE_ON_CLICK) {
mpButton.start();
JT.performAction2(OtherParameters, CA);
layoutActions.removeAllViews();
}
}
});
}
对于游戏中存在的每一个动作,我都会使用其中一个 IF。所以....在我单击一个可用按钮(根据游戏状态)后,有没有办法清除 actionsLayout 并执行一组新的按钮并在每次按下按钮后连续执行此操作(即:状态的每一次变化)?