我想在我的随机数猜测游戏中实现一个成就系统,但我没有为它构建一个有效的逻辑。 我希望它有一个成就系统来检测连续2或3个正确的答案。
每当有正确的答案时,cons + 1(缺点是我用于成就系统的“连续”功能的变量。
否则,cons-1和life-1。
这是我下面的代码......我确信逻辑中的错误是因为cons--;和生活 - ;在 SCANNING THE ARRAY 的循环中进行匹配(数组是用于存储10个两位数随机数的数组,它将成为每个答案“正确性”的基础。< strong>我添加LOOP的目的是扫描数组以寻找可能的匹配。
注意:谢谢你的帮助!
这是我的代码:
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("");
答案 0 :(得分:1)
第一个问题是,正如您所猜测的那样,您为数组中每个匹配或不匹配增加或减少cons
(和life
)。你需要将其移出循环,每次猜测只做一次。否则游戏永远不会赢,因为对于任何10个不同的数字和任何猜测,其中9个肯定会与猜测不同,因此最终得到cons
-9且可能为负life
(根据你最初给出的生命数量)在第一次猜测之后。 E.g。
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
)而不是数组,您可以更轻松地查找匹配。
答案 1 :(得分:0)
我建议您使用标志 - 这样,您不会得到任何重复的++或 - 操作。也就是说,
boolean success = false;
for(int i=0; i<10; i++)
{
if(ans == arr[i])
{
...
success = true;
}
}
if(success)
{
cons++;
}
else
{
cons = 0;
}
答案 2 :(得分:0)
如果我对你的描述的理解是正确的,我相信你的逻辑存在很大的缺陷。
我的假设: 用户猜测,你会看到数组中是否存在猜测。
首先,你正在降低每个不等于他猜测的数字的玩家得分,这意味着,即使他确实得到一个,他也会有9个错误。将该逻辑移出for循环,只需在里面使用一个变量来检查他是否猜到了,然后在外面做你的增加和减少(一旦他猜到了,就打破了for)。
其次,我不认为你想在错误的猜测后减少缺点...如果你想连续,每个错误的猜测应该再次设置为0(他必须重新开始)。
第三: 如果您使用更适合检查该结构中是否存在给定值的结构(例如Set),则可以极大地简化逻辑:
Set<Integer> randomValues = new HashSet<Integer>();
填写该设置,然后您的逻辑将减少为:
if(randomValues.contains(ans)){
//do stuff
} else {
//do other stuff
}
希望这有帮助。
答案 3 :(得分:0)
我这样做的方法是创建一个数组并将其设置为“123456789”,然后将该数组洗牌,然后你可以通过for循环遍历这个现在已经改组的数组,然后拉出尽可能多的数字新字符串长且唯一,即4位5位唯一随机数