もぐら叩き

ボタンのonClickが使えるならもぐら叩きを作れるんじゃ?ということで作ってみた。


とりあえず.javaだけ。layoutはTableLayout使ってスタートボタン1つ、結果表示TextView1つ、似非モグラボタン6つ作っただけ。
タイマが使えて、onClick使えて、ならいけるんじゃね?、と頭の中でまともに考えずにコードを書いた結果がこのありさまだよ!

public class MoguraTataki extends Activity implements OnClickListener{
	// Views
	private Button button_start;
	private Button button_00;
	private Button button_01;
	private Button button_02;
	private Button button_10;
	private Button button_11;
	private Button button_12;
	private TextView point_text;
	
	// game values
	private Boolean game_start = false;
	private Integer point = 0;
	private Boolean mogura_status[];
	
	// for Timer
	Timer timer = null;
	Handler handler;
	private Integer time;
	
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mogura);
        
        button_start = (Button) findViewById(R.id.mogura_Button_start);
        button_00 = (Button) findViewById(R.id.mogura_Button0_0);
        button_01 = (Button) findViewById(R.id.mogura_Button0_1);
        button_02 = (Button) findViewById(R.id.mogura_Button0_2);
        button_10 = (Button) findViewById(R.id.mogura_Button1_0);
        button_11 = (Button) findViewById(R.id.mogura_Button1_1);
        button_12 = (Button) findViewById(R.id.mogura_Button1_2);
        point_text = (TextView) findViewById(R.id.mogura_textView);
        
        mogura_status = new Boolean[6];
        
        button_start.setOnClickListener(this);
        button_00.setOnClickListener(this);
        button_01.setOnClickListener(this);
        button_02.setOnClickListener(this);
        button_10.setOnClickListener(this);
        button_11.setOnClickListener(this);
        button_12.setOnClickListener(this);
        Init();
        
        // for timer
        timer = new Timer(true);
        handler = new Handler();
        timer.schedule( new TimerTask() {
			@Override
			public void run() {
				handler.post(new Runnable() {
					@Override
					public void run() {
						TimerEvent();
					}
				});
			}
		}, 100, 100); // first delay and delay interval, [ms]
    }
    
    private void TimerEvent(){
    	// init timer
    	if( time == 0 && game_start == true ){
    		time = 100;
    	}
    	// in game start
    	if( time != 0){
    		if( time % 10 == 0 ){// make mogura
    			EnableMogura();
    		}
    		else if( time % 10 == 5 ){// vanish mogura
    			DisableMogura();
    		}
    		time--;
    		if(time==0) GameStop();
    	}
    }
    
    private void EnableMogura(){
    	Random rand = new Random();
    	int r = rand.nextInt(6);
    	switch(r){
    	case 0:
    		button_00.setText("○○○○○");
    		break;
    	case 1:
    		button_01.setText("○○○○○");
    		break;
    	case 2:
    		button_02.setText("○○○○○");
    		break;
    	case 3:
    		button_10.setText("○○○○○");
    		break;
    	case 4:
    		button_11.setText("○○○○○");
    		break;
    	case 5:
    		button_12.setText("○○○○○");
    		break;
    	}
    		mogura_status[r] = true;
    }
    
    private void DisableMogura(){
    	int r;
    	for(r=0; r<6; r++){
    		if(mogura_status[r] == true) {
		    	DisableMogura(r);
		    	break;
    		}
    	}
    }
    
    private void DisableMogura(int r){
    	if(r < 0 && 5 < r) return;
    	switch(r){
    	case 0:
    		button_00.setText("×××××");
    		break;
    	case 1:
    		button_01.setText("×××××");
    		break;
    	case 2:
    		button_02.setText("×××××");
    		break;
    	case 3:
    		button_10.setText("×××××");
    		break;
    	case 4:
    		button_11.setText("×××××");
    		break;
    	case 5:
    		button_12.setText("×××××");
    		break;
    	}
		mogura_status[r] = false;
    	
    }
	
    public void onClick(View v){
		if( game_start == false){ // now no game
	    	if(v == button_start){// start or reset game
    			GameStart();
    		}
    	}
    	else{
    		if(v == button_start){
    			GameReset();
    		}
    		else if (v == button_00){
    			if(mogura_status[0] == true){
    				PointUp();
    				DisableMogura(0);
    			}
    		}
    		else if (v == button_01){
    			if(mogura_status[1] == true){
    				PointUp();
    				DisableMogura(1);
    			}
    		}
    		else if (v == button_02){
    			if(mogura_status[2] == true){
    				PointUp();
    				DisableMogura(2);
    			}
    		}
    		else if (v == button_10){
    			if(mogura_status[3] == true){
    				PointUp();
    				DisableMogura(3);
    			}
    		}
    		else if (v == button_11){
    			if(mogura_status[4] == true){
    				PointUp();
    				DisableMogura(4);
    			}
    		}
    		else if (v == button_12){
    			if(mogura_status[5] == true){
    				PointUp();
    				DisableMogura(5);
    			}
    		}
    	}
    }
    
    private void Init(){
    	point = 0;
    	game_start = false;
    	time=0;
    	button_start.setText("start");
    	point_text.setText("point:" + point);
    	for(int i=0; i<6; i++){
    		DisableMogura(i);
    	}
    }
    
    private void GameStart(){
    	Init();
    	game_start = true;
    	button_start.setText("reset");
    }
    private void GameReset(){
    	game_start = false;
    	Init();
    }
    
    private void GameStop(){
    	game_start = false;
    	button_start.setText("start");
    }
    
    private void PointUp(){
		point++;
    	point_text.setText("point:" + point);
    }
}

自分で書いててイライラしてた。
どのボタンを押したかどうかの感知を決めうちで書いてたり、ボタンのsetTextも決めうちだったり……
あと書きながら使いそうなコードを追加していったので要らないコード残ってたり……


たぶんぐぐったらもっと綺麗なもぐら叩き作ってる人いるんだろうなあ。
明日はそれサガして反省会しよう。