0

プログラミングスキルを向上させるために 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 回実行される for ループがあり、配列のインデックス 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 回呼び出すことを考えていましたが、これは良い解決策ではありませんが、これまでのところ私が考えることができる唯一の方法ですこれ。どんなアドバイスでも大歓迎です。

4

1 に答える 1

2

このようなステート マシンはコードを蛇行させる可能性があります。

ループを削除することを検討し、代わりにユーザー/システム入力イベント (ボタンの押下とアクティビティのライフサイクル コールバック) を使用して「再生」コードをトリガーします。すべてのフラグ チェック コードを削除できます。

さらに、オブジェクト指向という別のクラスを使用して、それぞれの「命令」と「正しい入力」を実装することを検討してください。これにより、新しいインタラクションの追加によるコードの膨張を制限しながら、コードをよりスケーラブルにすることができます。switch ステートメントが多くの行を占める例であるかどうかを確認できます。ユーザーが行ったアクションに一致するものが見つかるまで、一連の「応答」を反復処理する必要があると想像してください。

ここに画像の説明を入力

コード例が提供されていないことに注意してください。学習経験として、私の提案の実装はきちんとした実験であり、例は教えられる教訓を制限するかもしれません.

于 2013-05-08T10:01:16.723 に答える