Swing俄罗斯方块游戏(一): 图形选择与变换_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Swing俄罗斯方块游戏(一): 图形选择与变换

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

 2013/7/28 12:11:26  MouseLearnJava  程序员俱乐部  我要评论(0)
  • 摘要:俄罗斯方块游戏是一个上手简单,老少皆宜的游戏,它的基本规则是移动、旋转和摆放游戏自动产生的各种方块,使之排列成完整的一行或多行并且消除得分。博文“Swing俄罗斯方块游戏”系列,最终将给出一个简单的俄罗斯方块小游戏,游戏可以保存进度,拥有得分排名等功能。游戏界面:本篇博文将介绍一下将俄罗斯方块游戏中需要用到图形选择和变换。一般来讲,一个图形有四个点,可以表示出常用的“一字型”,“T字型”,“Z字型”以及“L字型”方块。如果用更多的点来表示图形,图形将更加丰富,本文采用的也是四个点去表示图形
  • 标签:游戏 Swing
俄罗斯方块游戏是一个上手简单,老少皆宜的游戏,它的基本规则是移动、旋转和摆放游戏自动产生的各种方块,使之排列成完整的一行或多行并且消除得分。博文“Swing俄罗斯方块游戏”系列,最终将给出一个简单的俄罗斯方块小游戏,游戏可以保存进度,拥有得分排名等功能。

游戏界面:




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


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

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

1. 常用图形-->>








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



3. 四个点没有重合的变形图形-->>




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

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

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

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

class="java">/**
 * @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;
		}
	}
}


后续的博文将继续介绍俄罗斯方块游戏的功能与实现并给出代码。
  • 大小: 2.8 KB
  • 大小: 9.8 KB
  • 大小: 5.4 KB
  • 大小: 1.8 KB
  • 大小: 19.5 KB
  • 大小: 7.9 KB
  • 大小: 34.2 KB
  • 大小: 4.9 KB
  • 查看图片附件
发表评论
用户名: 匿名