首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在随机数猜测游戏中使用数组

在随机数猜测游戏中使用数组
EN

Stack Overflow用户
提问于 2012-03-08 17:57:50
回答 4查看 2.8K关注 0票数 0

我想为我的随机数猜测游戏实现一个成就系统,但是我没有为它构造一个有效的逻辑。我希望它有一个成就系统来检测2到3个连续的正确的答案。

每当有正确的答案时,cons+1(cons是用于我的成就系统的“连续”功能的变量im )。

否则,犯人-1和生命-1。

下面是我的代码..。我确信,逻辑中的错误是因为缺点--和生命周期--在循环中用于扫描数组以获得匹配(数组是im用来存储10个两位数字随机数的数组,这将是每个答案“正确”的基础。)我添加循环的目的是,它将扫描数组以寻找可能匹配的.

注意:谢谢您的帮助!

这是我的密码:

代码语言:javascript
复制
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("");
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-08 18:08:49

我相信你的逻辑有很大的缺陷,如果我对你的描述是正确的话。

我的假设是:用户进行猜测,您将看到数组中是否存在该猜测。

首先,你在减少每个数字的分数,这不等于他的猜测,这意味着,即使他得到一个正确的,他会有9个错误。将该逻辑移出for循环,只需在内部使用一个变量来检查他是否猜到,然后在外部执行您的增减操作(一旦他猜到了,就从for中跳出)。

第二,我认为你不想在错误的猜测之后减少犯罪.如果您想要连续,每个错误的猜测都应该再次设置为0(他必须重新开始)。

第三:如果使用更适合于检查结构中是否存在给定值的结构,例如,可以大大简化逻辑:

代码语言:javascript
复制
Set<Integer> randomValues = new HashSet<Integer>();

填充该设置,然后您的逻辑将简化为:

代码语言:javascript
复制
if(randomValues.contains(ans)){
//do stuff
} else {
//do other stuff
}

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2012-03-08 18:00:49

第一个问题是,正如您所猜测的,对于数组中的每个匹配或不匹配,都会增加或减少cons (和life)。你需要把它从循环中移开,每次猜测只做一次。否则的话,这个游戏就永远赢不了了,因为对于任何10个不同的数字和任何猜测,其中的9个肯定会与猜测不同,因此在第一次猜出之后,你最终会得到一个-9的cons,可能是负的life (取决于你最初给出的生命)。例如。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-03-08 18:04:04

我建议你用一个标志代替-这样,你就不会得到任何重复的++或-操作。那是,

代码语言:javascript
复制
boolean success = false;

for(int i=0; i<10; i++)
{
    if(ans == arr[i])
    {
        ...
        success = true;
    }
}

if(success)
{
    cons++;
}
else
{
    cons = 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9622419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档