Swing俄罗斯方块游戏(一): 图形选择与变换

俄罗斯方块游戏是一个上手简单,老少皆宜的游戏,它的基本规则是移动、旋转和摆放游戏自动产生的各种方块,使之排列成完整的一行或多行并且消除得分。博文“Swing俄罗斯方块游戏”系列,最终将给出一个简单的俄罗斯方块小游戏,游戏可以保存进度,拥有得分排名等功能。

游戏界面:

[img]http://dl2.iteye.com/upload/attachment/0087/5324/70557508-3678-3b70-9478-c44526e57e8d.jpg[/img]


本篇博文将介绍一下将俄罗斯方块游戏中需要用到图形选择和变换。


一般来讲,一个图形有四个点,可以表示出常用的“一字型”,“T字型”,“Z字型”以及“L字型”方块。如果用更多的点来表示图形,图形将更加丰富,本文采用的也是四个点去表示图形。

本文实现的俄罗斯方块中,四个点的图形有如下几类:

[b]1. 常用图形-->>[/b]
[img]http://dl2.iteye.com/upload/attachment/0087/5319/fcf59914-0a9b-35bc-a066-cad41776a62b.jpg[/img]

[img]http://dl2.iteye.com/upload/attachment/0087/5313/0b15b4e5-9a6b-3c97-b7f2-5766604108d3.jpg[/img]

[img]http://dl2.iteye.com/upload/attachment/0087/5315/c8924182-083e-35dc-a76f-b07c295d625e.jpg[/img]

[img]http://dl2.iteye.com/upload/attachment/0087/5317/9dc8eef7-7eb2-3f32-9515-660165e7773c.jpg[/img]

[b]2. 四个点中的一个点或者几个点重合的图形-->>[/b]

[img]http://dl2.iteye.com/upload/attachment/0087/5323/480566c0-6e51-309a-a0bc-a2ada801542e.jpg[/img]

[b]3. 四个点没有重合的变形图形-->>[/b]

[img]http://dl2.iteye.com/upload/attachment/0087/5321/2f9bd6e6-1fd5-36ac-9aa3-5450f83cbca4.jpg[/img]


这样,用四个点来表示方块的图形也相对比较丰富。游戏中,产生一个随机数来决定下一个产生的方块的图形是什么。

在俄罗斯方块游戏中比较关键的一点就是图形的变换。

[b]本文实现的俄罗斯游戏图形的变换规则如下:[/b]
-->> [color=blue][b]因为一个图形有四个点来表示,可以先确定其中的一个点的变换位置,然后其它的三个点根据这个确定的基点进行位置调整就可以了。[/b][/color]

比如:“T字形”的变换代码如下:

/**
* @author Eric
* @vesion 1.0
* @desc T字型方块
*/
public class RussiaSquareThree extends RussiaSquare {

private static final long serialVersionUID = 7534480941712004795L;

public RussiaSquareThree(){
state = (int)(Math.random() * 4);
switch(state)
{
case 0:
grid[0].x = 4;
grid[0].y = 0;
grid[1].x = grid[0].x - 1;
grid[1].y = grid[0].y + 1;
grid[2].x = grid[0].x;
grid[2].y = grid[0].y + 1;
grid[3].x = grid[0].x + 1;
grid[3].y = grid[0].y + 1;
break;

case 1:
grid[0].x = 4;
grid[0].y = 0;
grid[1].x = grid[0].x;
grid[1].y = grid[0].y + 1;
grid[2].x = grid[0].x + 1;
grid[2].y = grid[0].y + 1;
grid[3].x = grid[0].x;
grid[3].y = grid[0].y + 2;
break;

case 2:
grid[0].x = 4;
grid[0].y = 0;
grid[1].x = grid[0].x + 1;
grid[1].y = grid[0].y;
grid[2].x = grid[0].x + 2;
grid[2].y = grid[0].y;
grid[3].x = grid[0].x + 1;
grid[3].y = grid[0].y + 1;
break;

case 3:
grid[0].x = 4;
grid[0].y = 0;
grid[1].x = grid[0].x - 1;
grid[1].y = grid[0].y + 1;
grid[2].x = grid[0].x;
grid[2].y = grid[0].y + 1;
grid[3].x = grid[0].x;
grid[3].y = grid[0].y + 2;
break;

default:
break;
}
}

public void changeState(int flag[][])
{
switch(state)
{
case 0:
tempX[0] = grid[0].x;
tempY[0] = grid[0].y;
tempX[1] = tempX[0];
tempY[1] = tempY[0] + 1;
tempX[2] = tempX[0] + 1;
tempY[2] = tempY[0] + 1;
tempX[3] = tempX[0];
tempY[3] = tempY[0] + 2;
isAllowChangeState(flag, 4);
break;

case 1:
tempX[0] = grid[0].x - 1;
tempY[0] = grid[0].y + 1;
tempX[1] = tempX[0] + 1;
tempY[1] = tempY[0];
tempX[2] = tempX[0] + 2;
tempY[2] = tempY[0];
tempX[3] = tempX[0] + 1;
tempY[3] = tempY[0] + 1;
isAllowChangeState(flag, 4);
break;
case 2:
tempX[0] = grid[0].x + 1;
tempY[0] = grid[0].y - 1;
tempX[1] = tempX[0] - 1;
tempY[1] = tempY[0] + 1;
tempX[2] = tempX[0];
tempY[2] = tempY[0] + 1;
tempX[3] = tempX[0];
tempY[3] = tempY[0] + 2;
isAllowChangeState(flag, 4);
break;

case 3:
tempX[0] = grid[0].x;
tempY[0] = grid[0].y;
tempX[1] = tempX[0] - 1;
tempY[1] = tempY[0] + 1;
tempX[2] = tempX[0];
tempY[2] = tempY[0] + 1;
tempX[3] = tempX[0] + 1;
tempY[3] = tempY[0] + 1;
isAllowChangeState(flag, 4);
break;

default:
break;
}
}
}


后续的博文将继续介绍俄罗斯方块游戏的功能与实现并给出代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值