建议在Android中重复Simon Says游戏的循环

建议在Android中重复Simon Says游戏的循环,android,Android,我想创建一个Simon Says游戏来提高我的编程技能,这比我想象的要难。最初我决定最多有50个级别,所以我在1-4之间生成50个随机数并将它们存储在一个数组中,我在控制台中测试了这一点: for(int i = 0; i <50; i++){ random = randomGenerator.nextInt(4)+1; array[i] = random; System.out.println(Integer.toString(i)

我想创建一个Simon Says游戏来提高我的编程技能,这比我想象的要难。最初我决定最多有50个级别,所以我在1-4之间生成50个随机数并将它们存储在一个数组中,我在控制台中测试了这一点:

    for(int i = 0; i <50; i++){
        random = randomGenerator.nextInt(4)+1;
        array[i] = random;
        System.out.println(Integer.toString(i)+" " + Integer.toString(array[i]));  
    }
我来Stackoverflow是因为我通常解决编程问题的方法通常很长,而且效率很低。我需要你有经验的程序员就如何解决这个问题提供建议,当你给我一个解决方案,或者解决方案的一部分时,我想知道你是如何到达那里的,这样我就可以学到比现在更好的方法


我在考虑为50个级别中的每一个创建一个方法,并在代码中运行每一个级别,并在for循环中调用它50次,这不是一个好的解决方案,但到目前为止,我能想到的唯一方法是这样做。非常感谢您的建议。

像这样的状态机会导致代码曲解,我相信这就是您所看到的

考虑删除循环,而是使用用户/系统输入事件触发“播放”代码:按钮按下和活动的生命周期回调。您将能够删除所有标志检查代码

另外,考虑使用单独的类——对象取向来实现每个“指令”和“正确输入”。这将允许您的代码具有更高的可伸缩性,同时限制代码膨胀,避免添加新的交互。您可以看到您的示例中switch语句是否占用了很多行。想象一下,只需在“响应”集合上迭代,直到找到与用户所做操作匹配的结果


您将注意到缺少提供的代码示例。作为一种学习经验,我的建议的实施是一个很好的实验,示例可能会限制所教的课程。

谢谢你的回答,我读了它,花了很多时间试图找出一种方法来做到这一点,但我有点迷路了。问题是,虽然你的回答很有道理,但我能在脑海中明白为什么这样做是最好的方式,我只是缺乏迄今为止这样做的经验。非常感谢。我用一个小图表编辑了我的答案,艾米给了我更多的解释谢谢你,你提供了我所要求的,关于如何设计和开发我的应用程序的建议!我将以此为基础!
public void play(){

    for(int i =ii; i<50; i++){
        if(b1bool==false){
            if(array[i] == 1){
                //Set button to Blue
                b1.setBackgroundColor(0xFF0000FF);



            }

            else if(array[i] == 2){
                //SEt button to Yellow
                b2.setBackgroundColor(0xFFFFFF00);


            }


            else if(array[i] == 3){
                //SEt button to Red
                b3.setBackgroundColor(0xFFFF0000);


            }


            else if(array[i] == 4){
                //SEt button to Green
                b4.setBackgroundColor(0xFF00FF00);


            }

            b1bool = true;
        }
    }
}
@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.button1:

        b1.setBackgroundColor(0xffffffff);
        b2.setBackgroundColor(0xffffffff);
        b3.setBackgroundColor(0xffffffff);
        b4.setBackgroundColor(0xffffffff);
        b1bool=false;
        ii++;
        play();



        break;
    case R.id.button2:
        if(b2bool == true)
        {


        }

        break;
    case R.id.button3:
        if(b3bool == true)
        {


        }

        break;
    case R.id.button4:
        if(b4bool == true)
        {


        }

        break;
    }   
}