我正在Android Studio上开发游戏。
游戏为12个方块和12个符号(在这种情况下为“ 0”零)。 当您按下新游戏按钮时,将启动第一级。一共有12个级别。 (curLevel)。 几秒钟后,一个符号将随机显示在屏幕上,然后消失。 (根据每个级别,输入数量增加1,例如,必须猜测级别1:1符号,必须猜测级别2:2符号)直到级别12。
到现在为止,它都没有问题。
现在,我需要解决我的代码以接收用户的输入,检查是否与显示的正确块预览匹配。 如果是,则移至下一个级别(重复清除块的周期,显示随机符号,再次清除,等待用户输入),直到级别12。 如果未显示,则显示失败消息,然后再次显示新游戏按钮。
我创建了这个Arraylist,但是它不能正常工作,现在条件是它总是为负(即使按下了右边的块),“ Fail!再试一次!”它显示的消息。
我运行调试器并显示:List tempList = new ArrayList <>();
tempList:size 12
for (int i = 0; i < curLevel; i++) { curLevel size:13
tempList.add ( buttons.get ( i ) ); buttons size:12
if (tempList.contains ( v.getTag () )) { tempList size 12
Its not matching the condition. –
这里是值:
static int MAXLEVELS = 12;
static String SUCCESS_SYMBOL = "0";
curLevel = 1;
curGuess = 0;
有什么建议可以使其正常工作吗?甚至使这段代码更整洁?
private void buttonLogic(View v) {
List<Button> tempList = new ArrayList<> ();
for (int i = 0; i <= curLevel; i++) {
if (i!= MAXLEVELS)
tempList.add ( buttons.get ( i ) );
else
break;
}
if (tempList.contains ( v.getTag () )) {
curGuess++;
checkWin ();
} else {
lostGame ();
}
}
private void lostGame () {
Toast.makeText(this, "Fail! Try Again", Toast.LENGTH_SHORT).show();
disableButtons();
b_new.setVisibility(View.VISIBLE);
}
private void checkWin() {
if (curGuess == curLevel) {
disableButtons ();
if (curLevel == 12) {
Toast.makeText ( this, "Congratulations! You Won", Toast.LENGTH_SHORT ).show ();
b_new.setVisibility ( View.VISIBLE );
} else {
curGuess = 0;
curLevel++;
generateButtons ( curLevel );
}
}
}
还有来自先前代码的图像。干杯。
答案 0 :(得分:0)
请改用ArrayList<Button> tempList = new ArrayList<>();
,因为否则您将缺少方法(尽管将变量从ArrayList
转换为List
不会引起任何抱怨)。
if
条件可能是(i+1) < MAXLEVELS
,因为i
是基于0
,而curLevel
是基于1
。
最简单的方法可能是初始化curLevel = 0
并仅将其显示为curLevel + 1
……否则,您将始终不得不考虑+1
/ -1
抵消了业务逻辑,我认为这是“无用的复杂性” ...因此,游戏将在级别0
开始,而级别1
则显示在GUI。
答案 1 :(得分:0)
似乎您正在尝试在可用的buttons
中找到已对其执行点击事件的按钮的任何匹配项。
为此,我建议您使用viewId
查找完全匹配,您可以像下面那样更改方法。
private void buttonLogic(View v) {
boolean hasAnyMatch = false;
// Assumption is curLevel will always be less than MAXLEVELS
for (int i = 0; i <= curLevel; i++) {
if (v.getId() == buttons.get(i).getId()) {
hasAnyMatch = true;
break;
}
}
if (hasAnyMatch) {
curGuess++;
checkWin ();
} else {
lostGame ();
}
}