[安卓]安卓课程设计之俄罗斯方块

程序很简单就只放代码了,自己完善下color和Drawable即可使用

Java文件:

package com.ytu.jkxy.jk171.sjp.russiablock;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Handler;
//import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.Toast;

import java.util.Random;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    //声明一个游戏区域控件
    View view;
    //游戏区域长宽
    int xWidth,xHight;
    //地图画笔
    Paint mapPaint;

    //初始化辅助线画笔
    Paint linepaint;

    //方块画笔
    Paint boxPaint;

    //状态画笔
    Paint startPaint;

    //地图
    boolean [][]maps;
    //方块
    Point[] boxs;

    //方块的种类
    final int TYPE = 7;

    //方块类型
    int boxType;
    //方块大小
    int boxSize;

    //自动下落线程
    public  Thread downThread;

    //
    public Handler handler=new Handler(){
        public void handleMessage(android.os.Message msg){
            //刷新重绘view
            view.invalidate();
        };
    };

    //暂停状态
    public boolean isPause;

    //游戏结束状态

    public boolean isOver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //去掉标题栏
        getSupportActionBar().hide();
        setContentView(R.layout.activity_main);
        intData();
        newBoxs();
        initView();
        intLister();
    }
    //初始化数据
    public void intData(){
        //获得屏幕宽度
        int width=getScreeWidth(this);
        //设置游戏区域宽度=屏幕宽度*2/3
        xWidth=width * 2/3;
        //游戏区域的高度=宽度 * 2
        xHight=2 * xWidth;
        //初始化地图
        maps=new boolean[10][20];

        //初始化方块大小:游戏宽度/10
        boxSize=xWidth/maps.length;
    }
    /*新的方块*/
    public  void newBoxs(){
        //随机数生成一个新的方块
        Random random=new Random();
        boxType=random.nextInt(7);
        switch (boxType){
            //田字形
            //55
            //55
            case 0:
                boxs=new Point[]{new Point(4,0),new Point(5,0),new Point(4,1),new Point(5,1)};
                break;
            //L 例:
            //5
            //5
            //55
            case 1:
                boxs=new Point[]{new Point(4,1),new Point(5,0),new Point(3,1),new Point(5,1)};
                break;
            //反L
            case 2:
                boxs=new Point[]{new Point(4,1),new Point(3,0),new Point(3,1),new Point(5,1)};
                break;
            //横条
            //例:5555
            case 3:
                boxs=new Point[]{new Point(3,0),new Point(4,0),new Point(5,0),new Point(6,0)};
                break;
            //凸字形 例:
            /*5
             555*/
            case 4:
                boxs=new Point[]{new Point(4,1),new Point(5,0),new Point(5,1),new Point(6,1)};
                break;
            case 5:
                boxs=new Point[]{new Point(4,0),new Point(5,0),new Point(5,1),new Point(5,2)};
                break;
            case 6:
                boxs=new Point[]{new Point(5,0),new Point(6,0),new Point(4,1),new Point(5,1)};
                break;

        }


    }
    //初始化视图
    @SuppressLint("ResourceAsColor")
    public void initView(){
        //初始化画笔
        mapPaint=new Paint();
        mapPaint.setColor(0x50000000);
        mapPaint.setAntiAlias(true);

        linepaint =new Paint();
        linepaint.setColor(R.color.paint1);
        //一般会打开抗锯齿
        linepaint.setAntiAlias(true);

        //初始化方块画笔
        boxPaint=new Paint();
        boxPaint.setColor(0xff000000);
        boxPaint.setAntiAlias(true);

        startPaint=new Paint();
        startPaint.setColor(R.color.tools);
        startPaint.setAntiAlias(true);
        startPaint.setTextSize(100);

        //1.得到父容器
        FrameLayout layoutGame=findViewById(R.id.layoutGame);
        //2.实例化游戏区域
        view = new View(this){
            //重写游戏区域绘制
            @Override
            protected void onDraw(Canvas canvas) {
                super.onDraw(canvas);
                //绘制地图
                for(int x=0;x0;y--){
            //执行判断
            if(checkLine(y)) {
                //执行消行
                deleteLine(y);
                //消掉的那一行开始重新遍历
                y++;
            }
        }
    }
    /*消行判断*/
    public boolean checkLine(int y){
        for(int x=0;x0; y--){
            for(int x=0;x=maps.length||y>=maps[0].length||maps[x][y] == true);
    }
}

布局文件:




    

        

            //帧布局
        
        

            //游戏开始按钮 (包括重新开始)
            

测试结果:

[安卓]安卓课程设计之俄罗斯方块_第1张图片

你可能感兴趣的:(YTUの课设)