日々是好日~every day is a good day~

日常の中の非日常の備忘録

【Android Studio】ブロックくずし 3回目

今日は『ブロックの表示』です
まずはMainActivityから

import android.content.Context
import android.os.Bundle
import android.util.DisplayMetrics
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity

var SCREEN_HEIGHT = 0   //画面の高さ
var SCREEN_WIDTH = 0   //画面の幅
val tate: Int = 8   //ブロックの縦の数
val yoko: Int = 5   //ブロックの横の数
var flag_Block = Array(tate) { BooleanArray(yoko) { true } }   //ブロックの表示/非表示のフラグ

open class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //スクリーンサイズの取得
        val vm: WindowManager = this.getSystemService(Context.WINDOW_SERVICE) as WindowManager
        val display = vm.defaultDisplay
        val metric = DisplayMetrics()
        display.getMetrics(metric)
        SCREEN_WIDTH = metric.widthPixels
        SCREEN_HEIGHT = metric.heightPixels
        //ブロックをすべて表示
        flag_Block = Array(tate) { BooleanArray(yoko) { true } }
    }
}

次にBlockView.ktファイルを作成します

import android.content.Context
import android.graphics.*
import android.util.AttributeSet
import android.view.View

val recWidth = (SCREEN_WIDTH/5.4).toFloat()  //ブロックの幅
val recHeight = (SCREEN_HEIGHT/44.8).toFloat()  //ブロックの高さ
val recPich = (SCREEN_WIDTH/108).toFloat()  //ブロックのピッチ
val startX = (SCREEN_WIDTH/54).toFloat()  //描画開始x座標
val startY = (SCREEN_HEIGHT/89.7).toFloat()  //描画開始y座標

class BlockView(context:Context,attrs: AttributeSet?) :
    View(context, attrs) {

    private var path: Path = Path()   //グラフィック描画
    private var paint: Paint = Paint()   //色とか太さ

    val colorList = listOf(Color.RED, Color.YELLOW, Color.GREEN, Color.BLUE)

    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        paint.style = Paint.Style.FILL
        canvas?.drawPath(path, paint)
            for (i in 0..tate - 1) {
                paint.color = colorList[i/2]
                for (j in 0..yoko - 1) {
                    if(flag_Block[i][j]) {
                        canvas?.drawRect(
                            startX + recWidth * j + recPich * j,
                            startY + recHeight * i + recPich * i,
                            startX + recWidth + recWidth * j + recPich * j,
                            startY + recHeight + recHeight * i + recPich * i,
                            paint
                        )
                    }
                }
            }
        invalidate()
    }
}


ブロックが表示されました
BlockViewはonDrawを使ってブロックの表示だけを行うクラスです
BlockViewはこれで完成です
前回までのゲームより少しレベルアップしました(笑)