リバーシー≒オセロです
前回のコードで、コンソールで大まかなロジックを確認して
アンドロイドスタジオにコードを持って乗って表示部を追加
盤の表示は
BOARD_DISP.kt
class BOARD_DISP(context : Context, val boardStatus : GAME_STATUS, val masuSelect : SELECT_MASU ) : View(context) {
//
private val paint = Paint()
private val res: Resources = this.getContext().getResources() // 画像準備
// 画像のサイズは
// 1マス=48×48
private val IMG_NORMAL: Bitmap = BitmapFactory.decodeResource(res, R.drawable.normal)
private val IMG_READY: Bitmap = BitmapFactory.decodeResource(res, R.drawable.ready)
private val IMG_BLACK: Bitmap = BitmapFactory.decodeResource(res, R.drawable.black)
private val IMG_WHITE: Bitmap = BitmapFactory.decodeResource(res, R.drawable.white)
// ボードは 48*8=384なので 384×384にしました
private val IMG_BOARD: Bitmap = BitmapFactory.decodeResource(res, R.drawable.board)
private val masuSize: Float = (IMG_BOARD.width / 8).toFloat() // 1マスのサイズ
private val fukantai: Float = masuSize / 10.0F // 反応しない幅
private var boardLeft: Float = 0.0F
private var boardTop: Float = 0.0F
override fun onDraw(c: Canvas) {
//
boardLeft = ((c.getWidth() - IMG_BOARD.width) / 2).toFloat()
c.drawBitmap(IMG_BOARD, boardLeft, boardTop, paint)
for (x: Int in 0..7) {
for (y: Int in 0..7) {
val img: Bitmap = when (boardStatus.banStatus[x][y]) {
GAME_STATUS.MASU_STATUS.BLACK -> IMG_BLACK
GAME_STATUS.MASU_STATUS.WHITE -> IMG_WHITE
GAME_STATUS.MASU_STATUS.READY -> IMG_READY
else -> IMG_NORMAL
}
// ステータスに応じて画像を表示
val masuLeft = (x * masuSize + boardLeft).toFloat()
val masuTop = (y * masuSize + boardTop).toFloat()
c.drawBitmap(img, masuLeft, masuTop, paint)
}
}
}
}
として、
各処理が終わったら
invalidate()
をコールして、ゲーム盤を表示するようにしました
こんな感じになります