我想为我的随机数猜测游戏实现一个成就系统,但是我没有为它构造一个有效的逻辑。我希望它有一个成就系统来检测2到3个连续的正确的答案。
每当有正确的答案时,cons+1(cons是用于我的成就系统的“连续”功能的变量im )。
否则,犯人-1和生命-1。
下面是我的代码..。我确信,逻辑中的错误是因为缺点--和生命周期--在循环中用于扫描数组以获得匹配(数组是im用来存储10个两位数字随机数的数组,这将是每个答案“正确”的基础。)我添加循环的目的是,它将扫描数组以寻找可能匹配的.。
注意:谢谢您的帮助!
这是我的密码:
public void cmpans()
{
String txget;
txget=gametext.getText();
String pars;
int ans;
pars=gametext.getText();
ans=Integer.parseInt(pars);
for(int i=0; i<10; i++) //this is my "Array Scanner" Loop
{
if(ans==arr[i])
{
userscore=userscore+10;
lbscore.setText("Score: "+userscore);
ck[i].setSelected(true);
arr[i]=0000;
cons++;
gametext.setText("");
lblives.setText("life: "+life);
lbcons.setText("cons: "+cons);
}
else if(ans!=arr[i])
{
cons--; //this is the cons and life im talking about
life--;
if(cons==2)
{
lbachieve.setText("You're a GOOD GUESSER!");
userscore=userscore+20;
}
else if(cons==4)
{
lbachieve.setText("You're an AMAZING GUESSER!!");
userscore=userscore+50;
}
}
}gametext.setText("");发布于 2012-03-08 18:08:49
我相信你的逻辑有很大的缺陷,如果我对你的描述是正确的话。
我的假设是:用户进行猜测,您将看到数组中是否存在该猜测。
首先,你在减少每个数字的分数,这不等于他的猜测,这意味着,即使他得到一个正确的,他会有9个错误。将该逻辑移出for循环,只需在内部使用一个变量来检查他是否猜到,然后在外部执行您的增减操作(一旦他猜到了,就从for中跳出)。
第二,我认为你不想在错误的猜测之后减少犯罪.如果您想要连续,每个错误的猜测都应该再次设置为0(他必须重新开始)。
第三:如果使用更适合于检查结构中是否存在给定值的结构,例如,可以大大简化逻辑:
Set<Integer> randomValues = new HashSet<Integer>();填充该设置,然后您的逻辑将简化为:
if(randomValues.contains(ans)){
//do stuff
} else {
//do other stuff
}希望这能有所帮助。
发布于 2012-03-08 18:00:49
第一个问题是,正如您所猜测的,对于数组中的每个匹配或不匹配,都会增加或减少cons (和life)。你需要把它从循环中移开,每次猜测只做一次。否则的话,这个游戏就永远赢不了了,因为对于任何10个不同的数字和任何猜测,其中的9个肯定会与猜测不同,因此在第一次猜出之后,你最终会得到一个-9的cons,可能是负的life (取决于你最初给出的生命)。例如。
boolean guessMatches = false;
for(int i=0; i<10 && !guessMatches; i++) //this is my "Array Scanner" Loop
{
guessMatches = (ans==arr[i]);
}
if(guessMatches)
{
userscore=userscore+10;
lbscore.setText("Score: "+userscore);
ck[i].setSelected(true);
arr[i]=0000;
cons++;
gametext.setText("");
lblives.setText("life: "+life);
lbcons.setText("cons: "+cons);
if(cons==2)
{
lbachieve.setText("You're a GOOD GUESSER!");
userscore=userscore+20;
}
else if(cons==4)
{
lbachieve.setText("You're an AMAZING GUESSER!!");
userscore=userscore+50;
}
}
else if(ans!=arr[i])
{
cons = 0; //this is the cons and life im talking about
life--;
}还请注意,在猜测错误之后,您应该将cons设置为0,而不是只是将其减少。否则,您实际上并不是在计算连续的比赛。我相应地修改了上面的代码示例。
此外,正如@pcalcao所指出的,通过使用适当的集合( Set)而不是数组,可以使查找匹配更加简单。
发布于 2012-03-08 18:04:04
我建议你用一个标志代替-这样,你就不会得到任何重复的++或-操作。那是,
boolean success = false;
for(int i=0; i<10; i++)
{
if(ans == arr[i])
{
...
success = true;
}
}
if(success)
{
cons++;
}
else
{
cons = 0;
}https://stackoverflow.com/questions/9622419
复制相似问题