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

时间:2012-03-08 17:57:50

标签: java

我想在我的随机数猜测游戏中实现一个成就系统,但我没有为它构建一个有效的逻辑。 我希望它有一个成就系统来检测连续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("");

4 个答案:

答案 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位唯一随机数