文章目录
一、计划内容
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、屏幕
屏幕的长度与宽度比例不恰当,会导致显示不佳,这也与获得屏幕的宽度,以及设计的游戏区域参数有关,同时还需要注意采用调试的手机。