置けないときはパスする

開発目標

このページの目標は、打つ手が無かった時にパスするルールを作成することです。ついでに結果も表示します。

打つ手が無かったらパスする

パスかどうかは、すでにmakePlaceMap();で調べているので、これに利用してパスだったらパスページへ移動します。また、プレイヤーもパスで、コンピュータもパスのときは、結果ページへ移動します。

ReversiView.java

package com.hp3200.boco.reversi;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;

class ReversiView extends View {
    …略…
    
    //描写処理
    @Override
    public void onDraw(Canvas c) {
        …略…
        
        switch(page) {
        …略…
        case CONTROL:
            //ターンを交代
            if(turn==PLAYER) turn = COM;
            else turn = PLAYER;
            //ページ移動
            if(makePlaceMap(PLAYER)==true && makePlaceMap(COM)==true) page = RESULT;
            else if(makePlaceMap(turn)==true) page = PASS;
            else page = TURN;
            invalidate();
            break;
        case PASS:
            //ターンを交代
            if(turn==PLAYER) turn = COM;
            else turn = PLAYER;
            //ページ移動
            page = TURN;
            invalidate();
            break;
        …略…
        }
    }
    
    //タッチ入力処理
    public boolean onTouchEvent(MotionEvent me) {
        int i;
        int padX = (int)(me.getX()/48);
        int padY = (int)(me.getY()/48);
        //タッチされた時
        if(me.getAction()==MotionEvent.ACTION_DOWN) {
            switch(page) {
            …略…
            case RESULT:
                //ページ移動
            	page = TITLE;
                invalidate();
                break;
            }
        }
        return true;
    }
    
    …略…
}

結果を表示する

石を数えるメソッドを用意して、対戦結果を表示します。

ReversiView.java

package com.hp3200.boco.reversi;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;

class ReversiView extends View {
    …略…
    
    public ReversiView(Context context) {
        super(context);
        paint.setARGB(200,255,255,255);
        paint.setTextSize(30);
    }
    
    //描写処理
    @Override
    public void onDraw(Canvas c) {
        …略…
        
        switch(page) {
        …略…
        case PASS:
            c.drawText("パス", 200, 600, paint);
            //ターンを交代
            if(turn==PLAYER) turn = COM;
            else turn = PLAYER;
            //ページ移動
            page = TURN;
            invalidate();
            break;
        case RESULT:
            c.drawText("結果", 200, 550, paint);
            c.drawLine(50,560,430,560,paint);
            c.drawText("黒 "+count(BLACK)+" 個", 100, 650, paint);
            c.drawText("白 "+count(WHITE)+" 個", 100, 700, paint);
            break;
        …略…
        }
    }
    
    …略…
    
    //石を数える
    public int count(int color) {
    	int count = 0;

        if(playerColor==color) {
        	for(int i=0;i<100;i++) {
        		if(board[i]==PLAYER) count++;
        	}
        } else {
        	for(int i=0;i<100;i++) {
        		if(board[i]==COM) count++;
        	}
        }
    	
    	return count;
    }
    
}

開発結果

これでリバーシのルールがすべて実装できました。実行してみます。

うん。ちゃんと動いているみたいです。次回は、タイトルをつけて、人間対人間リバーシを完成させます。