建议在Android中重复一个循环的西蒙说游戏

时间:2013-05-08 09:37:59

标签: 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)+" " + Integer.toString(array[i]));  
    }

接下来我调用一个名为play的方法,该方法应该运行游戏,在这个方法中我有循环运行50次,它检查我的数组的索引i是1,2,3或4然后为编号按钮着色。

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;
        }
    }
}

我使用bool来停止for循环,然后按下button1继续for循环:

@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;
    }   
}

我来到Stackoverflow是因为我解决编程问题的常用方法通常是非常长的缠绕而且根本没有效率,我需要有经验的程序员就如何解决问题提出建议,当你给我一个解决方案,或者一部分解决方案我想知道你是如何到达那里的,所以我可以学到比现在更好的方法。

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

1 个答案:

答案 0 :(得分:2)

像这样的状态机会导致蜿蜒的代码,我相信这就是你所看到的。

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

此外,考虑使用单独的类 - 面向对象来实现每个“指令”和“正确输入”。这将使您的代码更具可伸缩性,同时限制代码膨胀,从而添加新的交互。你可以看看你的例子是switch语句占用多行。想象一下,只需迭代一系列“回复”,直到找到用户所做行动的匹配为止。

enter image description here

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