此处的目标是检测何时单击某个视图(通过单击的特定按钮标识的ID名称),然后在另一个类的实例中触发操作。
我并非100%确定它正确阅读。我将发布代码,然后解释问题。
在主要活动中:
@Override
public void onClick(View v) {
//Set starting player to 1 or 0
if( mGame.getPlayerCounter() == 0 ) {
mGame.determineStartingPlayer();
}
//Fills buttons on mGame instance
fillButtonSpaces(v);
....
//Check if the board has to be reset for either a tie or a win
if(mGame.checkGameTie() || mGame.checkGameWinner()) {
//Resets java mGame board logic
mGame.resetGameBoard();
//Reset the physical GUI gameboard
resetPhysicalGameBoard();
}}
public void fillButtonSpaces(View v) {
switch(v.getId()){
case R.id.imageButtonOne :
mGame.fillSquareZero();
case R.id.imageButtonTwo :
mGame.fillSquareOne();
case R.id.imageButtonThree :
mGame.fillSquareTwo();
case R.id.imageButtonFour :
mGame.fillSquareThree();
case R.id.imageButtonFive :
mGame.fillSquareFour();
case R.id.imageButtonSix :
mGame.fillSquareFive();
case R.id.imageButtonSeven :
mGame.fillSquareSix();
case R.id.imageButtonEight :
mGame.fillSquareSeven();
case R.id.imageButtonNine :
mGame.fillSquareEight();
}
}
然后在另一个班级:
public void fillSquareZero() {
if( getCurrentPlayer() == 0) {
spaceZero = 0; } else {
spaceZero = 1;
}
}
public void fillSquareOne() {
if( getCurrentPlayer() == 0) {
spaceOne = 0; } else {
spaceOne = 1;
}
}
public void fillSquareTwo() {
if( getCurrentPlayer() == 0) {
spaceTwo = 0; } else {
spaceTwo = 1;
}
}
.... etc.....
应该调用这些方法将游戏板的值设置为1或0.然后我想检查这个方法(在每个onclick上调用以查看是否有赢家)
public boolean checkGameWinner() {
//Player 1 (Human) player winning rules
if (spaceZero == 0 && spaceOne == 0 && spaceTwo == 0) {
return true;
}
因此,根据单击的按钮(在开关案例中计算),mGame实例将spaceZero - spaceEight变量设置为第二个类中的1或0。所以我要检查前3个是否设置为0(玩家1选择了它们)。当我这样做时,我没有得到理想的结果,每当我击中第一个单元格时,如果将玩家1位图放在那里,则该板是清除的...这里发生了什么?
答案 0 :(得分:3)
您的开关案例在每个案例后都缺少break;
。它应该是
switch(v.getId()){
case R.id.imageButtonOne :
mGame.fillSquareZero();
break;
case R.id.imageButtonTwo :
mGame.fillSquareOne();
break;
case R.id.imageButtonThree :
mGame.fillSquareTwo();
break;
等...
答案 1 :(得分:1)
我认为你错过了每个“case”子句末尾的“break”语句。
这样,如果单击R.id.imageButtonOne,代码mGame.fillSquareZero();
将被执行,但其他情况也会执行。
有关switch语句的更多信息:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html