命令执行错误的顺序和时间

时间:2018-03-12 20:51:05

标签: java android debugging thread-sleep

我正在制作一个“西蒙说”游戏作为我在高中的最后一个项目,而且大部分已完成,但我有一个问题。

目前,当我按下按钮时,我正试图让按钮亮起。 但是,它们似乎没有点亮,睡眠功能也不起作用。 它们仅在显示下一个颜色序列的功能亮起时才会改变颜色。

以下是代码:

 package com.gabie212.simonsays;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.ArrayList;

public class GameActivity extends AppCompatActivity implements View.OnClickListener {

    private int i = 0, pNum = 0, pIndex = 0,score;
    private Thread t = new Thread();
    private Thread bt = new Thread();
    private Button greenButton;
    private Button redButton;
    private Button blueButton;
    private Button yellowButton;
    private Button startButton;
    private TextView Score;
    private boolean startActivated = false;
    private MediaPlayer greenBeep;
    private MediaPlayer redBeep;
    private MediaPlayer blueBeep;
    private MediaPlayer yellowBeep;

    private ArrayList<Integer> userColors = new ArrayList<Integer>();

    private GameManger gm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        setContentView(R.layout.activity_game);

        Score = (TextView) findViewById(R.id.ScoreNum);
        greenButton = (Button) findViewById(R.id.btnGreen);
        redButton = (Button) findViewById(R.id.btnRed);
        blueButton = (Button) findViewById(R.id.btnBlue);
        yellowButton = (Button) findViewById(R.id.btnYellow);
        startButton = (Button) findViewById(R.id.btnStart);
        greenButton.setOnClickListener(this);
        redButton.setOnClickListener(this);
        blueButton.setOnClickListener(this);
        yellowButton.setOnClickListener(this);
        startButton.setOnClickListener(this);
        greenBeep = MediaPlayer.create(this, R.raw.greenbeep);
        redBeep  = MediaPlayer.create(this, R.raw.redbeep);
        blueBeep =   MediaPlayer.create(this, R.raw.bluebeep);
        yellowBeep =  MediaPlayer.create(this, R.raw.yellowbeep);
     /*
        SharedPreferences sp = getSharedPreferences("score", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.clear();
        editor.apply();

     */

    }

    public void start() {
        startActivated=true;
        gm = new GameManger(this);
        Score.setText("0");
        lightUp(0);
    }

    public void beepStop(){
        greenBeep.stop();
        redBeep.stop();
        blueBeep.stop();
        yellowBeep.stop();

    }


    public void lightUp(final int i) {

        android.os.Handler handler = new android.os.Handler();
        if (i < gm.getRandomColors().size())  //light up code
        {
            switch (gm.getRandomColors().get(i)) {
                case 1:
                    greenButton.setBackgroundResource(R.drawable.greenlightup);
                    greenBeep.start();
                    handler.postDelayed(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            greenButton.setBackgroundResource(R.drawable.green);
                            lightUp(i+1);
                        }
                    }, 500);


                    break;
                case 2:
                    redButton.setBackgroundResource(R.drawable.redlightup);
                    redBeep.start();
                    handler.postDelayed(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            redButton.setBackgroundResource(R.drawable.red);
                            lightUp(i+1);
                        }
                    }, 500);


                    break;
                case 3:
                    blueButton.setBackgroundResource(R.drawable.bluelightup);
                    blueBeep.start();
                    handler.postDelayed(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            blueButton.setBackgroundResource(R.drawable.blue);
                            lightUp(i+1);
                        }
                    }, 500);


                    break;
                case 4:
                    yellowButton.setBackgroundResource(R.drawable.yellowlightup);
                    yellowBeep.start();
                    handler.postDelayed(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            yellowButton.setBackgroundResource(R.drawable.yellow);
                            lightUp(i+1);
                        }
                    }, 500);


                    break;
            }

        }
        pIndex = 0;
    }


    @Override
    public void onClick(View v) {
        if (v.getId() == startButton.getId()) {
            start();
        } else {
            if (startActivated) {
                if (v.getId() == greenButton.getId()) {//here is the part where i try to make the buttons change colors
                    greenBeep.start();
                    greenButton.setBackgroundResource(R.drawable.greenlightup);
                    try {
                        t.sleep(1000);
                        // Do some stuff
                    } catch (Exception e) {
                        e.getLocalizedMessage();
                    }
                    greenButton.setBackgroundResource(R.drawable.green); 
                    pNum = 1;
                }
                if (v.getId() == redButton.getId()) { //here is the part where i try to make the buttons change colors
                    redBeep.start();
                    redButton.setBackgroundResource(R.drawable.redlightup);
                    try {
                        t.sleep(1000);
                        // Do some stuff
                    } catch (Exception e) {
                        e.getLocalizedMessage();
                    }
                    redButton.setBackgroundResource(R.drawable.red);  
                    pNum = 2;
                }
                if (v.getId() == blueButton.getId()) { //here is the part where i try to make the buttons change colors
                    blueBeep.start();
                    blueButton.setBackgroundResource(R.drawable.bluelightup);
                    try {
                        t.sleep(1000);
                        // Do some stuff
                    } catch (Exception e) {
                        e.getLocalizedMessage();
                    }
                    blueButton.setBackgroundResource(R.drawable.blue); 
                    pNum = 3;
                }
                if (v.getId() == yellowButton.getId()) {//here is the part where i try to make the buttons change colors
                    yellowBeep.start();
                    yellowButton.setBackgroundResource(R.drawable.yellowlightup);
                    try {
                        t.sleep(1000);
                        // Do some stuff
                    } catch (Exception e) {
                        e.getLocalizedMessage();
                    }
                    yellowButton.setBackgroundResource(R.drawable.yellow); 
                    pNum = 4;

                }
                if (!gm.check(pNum, pIndex)) {
                    beepStop();
                    SharedPreferences sp = getSharedPreferences("score", Context.MODE_PRIVATE);
                    Intent i = null;
                    score = gm.getRandomColors().size()-1;
                    if(score > sp.getInt("scoreP3",0)) {
                         i = new Intent(GameActivity.this, InsertScoreActivity.class);
                        i.putExtra("score", gm.getRandomColors().size() - 1);
                        startActivity(i);
                    }
                    else {
                        i = new Intent(GameActivity.this, GameOverActivity.class);
                        i.putExtra("score", gm.getRandomColors().size() - 1);
                        startActivity(i);
                    }
                }
                pIndex++;
                if (pIndex == gm.getRandomColors().size()) {
                    Score.setText("" + gm.getRandomColors().size() + "");
                    gm.addColor();
                    try {
                        t.sleep(1000);
                        // Do some stuff
                    } catch (Exception e) {
                        e.getLocalizedMessage();
                    }
                    lightUp(0);//it either performs the color change here beofre the lightup function or it just sleeps and doesn't perform the color change at all
                }
            }

        }

    }
}

这是游戏助手类:

package com.gabie212.simonsays;

import java.util.ArrayList;
import java.util.Random;

/**
 * Created by Ronit on 21/02/2018.
 */

public class GameManger {

    private GameActivity gActivity;
    static Random rnd = new Random();
    private ArrayList<Integer> randomColors;


    public GameManger(GameActivity mA)
    {
        randomColors = new ArrayList<Integer>();
        this.gActivity =mA;
        randomColors.add(getColor());

    }

    public void addColor()
    {
        randomColors.add(getColor());
    }

    public int getColor()
    {
        return rnd.nextInt(4)+1;
    }

    public ArrayList<Integer> getRandomColors()
    {
        return randomColors;
    }


    public boolean check(int num, int index)
    {
        return(randomColors.get(index)==num);
    }
}
enter code here

我有一些问题。

  1. 睡眠不起作用,是否与if语句中的方式有​​关?在我写的代码中没有发生睡眠。
  2. 由于某种原因,颜色变化不会发生,我不知道它为什么没有,也许它与thread.sleep有关。
  3. 颜色变化发生在程序的后期,而不是它应该的。同样,我认为它与睡眠有关,但当我移除睡眠时,颜色变化仍会在代码中稍后发生。

0 个答案:

没有答案