俄罗斯方块:二

26 篇文章 2 订阅

一、计划内容

1.1、按钮

通过按钮的点击,实现方块左、右、下的移动,以及改变形状。

1.2、边界

在游戏区域的边界内能正常操作;超过边界,操作无效。

二、初始化按钮

2.1、完成按钮的初始化

btn_left=(Button)findViewById(R.id.btn_left);
btn_top=findViewById(R.id.btn_top);
btn_right=findViewById(R.id.btn_right);
btn_up=findViewById(R.id.btn_up);
btn_start=findViewById(R.id.btn_start);
btn_pause=findViewById(R.id.btn_pause);

三、捕捉按钮

3.1、完成按钮的监听

public class MainActivity extends AppCompatActivity implements View.OnClickListener
btn_left.setOnClickListener(this);
btn_top.setOnClickListener(this);
btn_right.setOnClickListener(this);
btn_up.setOnClickListener(this);
btn_start.setOnClickListener(this);
btn_pause.setOnClickListener(this);

3.2、实现点击事件的响应

Toast.makeText(this,"点击了按钮",1000).show();

3.3、点击按钮后,需重新绘制图案

view.invalidate();

四、移动方块

4.1、通过点击代表不同方向的按钮,使方块发生移动

//左
case R.id.btn_left:
    move(-1,0);
    break;
//上
case R.id.btn_top:
    rotate();
    break;
//右
case R.id.btn_right:
    move(1,0);
    break;
//下
case R.id.btn_up:
    move(0,1);
    break;

4.2、移动方块

public boolean move(int x,int y){
    System.out.println("移动前坐标:"+ boxs[0].x+" "+ boxs[0].y);
    //遍历方块数组,加上偏移量
    for(int i=0;i<boxs.length;i++){
        boxs[i].x= boxs[i].x+x;
        boxs[i].y= boxs[i].y+y;
    }
    Log.e("移动后坐标:", boxs[0].x+" "+ boxs[0].y);
    return true;
}

五、旋转方块

5.1、通过旋转(向上)按钮,使方块旋转。

//遍历方块数组,每次旋转角度为90
for(int i=0;i<boxs.length;i++){
    int checkX=-boxs[i].y+boxs[0].x+ boxs[0].y;
    int checkY=- boxs[0].x+boxs[i].x+boxs[0].y;
    boxs[i].x=checkX;
    boxs[i].y=checkY;
}

六、边界判断

6.1、方块超过边界时,不能移动

//判断方块移动后的点,是否出界
for(int i=0;i<boxs.length;i++){
    if(checkBundary(boxs[i].x+x,boxs[i].y+y)){
        //坐标出界,移动失败
        return false;
    }
}

6.2、方块超过边界时,不能旋转

//判断方块移动后的点,是否出界
for(int i=0;i<boxs.length;i++){
    int checkX=-boxs[i].y+boxs[0].x+ boxs[0].y;
    int checkY=- boxs[0].x+boxs[i].x+boxs[0].y;
    if(checkBundary(checkX,checkY)){
        //坐标出界,旋转失败
        return false;
    }
}

七、效果

7.1、移动按钮

在这里插入图片描述

7.2、重新绘制方块

在这里插入图片描述

7.3、旋转

在这里插入图片描述在这里插入图片描述

8、补充说明

8.1、屏幕

屏幕的长度与宽度比例不恰当,会导致显示不佳,这也与获得屏幕的宽度,以及设计的游戏区域参数有关,同时还需要注意采用调试的手机。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值