windows phone7 项目一俄罗斯方块源码 及说明

   俄罗斯方块是一种曾经风靡全球的项目,可谓老少皆宜。一年前的今天,闲来无事,故作此项目。  

  依照面向对象的我们首先要看做这个项目需要哪些的类。

  1. 首先,所有形状的砖块继承一个基砖块的类。他有哪些 方法和属性。  有这几个属性,一个是Color ,记录砖块的颜色。一个是maxIndex,他这个画布下的砖块的最大的索引。

 一个是NextIndex 就是下一个砖块行数的索引。

    有那几个方法啊。 方块是不是要进行变形啊  因此  需要GetRotate()

方法,  获取下一个砖块的型号的方法,需要 下一个GetIndex()方法.

     2.然后,  使T字形,天字形,z字形继承与基砖块的方法。  

     3. 然后, 我们需要UIControl类将这些类的 有机组合起来, 

       我们再看看相应的类图

     

那是怎么用什么的东西代表那个位置有砖块,我们用0代表无砖块,用1代表代表有砖块。 比如 **                           0,0,0,0

                                                                                                                      ** 用所规定的源代码是0,1,1,0

                                                                                                                                                    0,1,1,0

                                                                                                                                                    0,0,0,0

  那怎么来删除 相应的砖块。我们用了一个RemoveRow 的方法、 这个 来判断这行是否的全部是1,是1的全部消去。

private void RemoveRow()
{
int removeRowCount = 0;
for (int y = 0; y < _rows; y++)
{
bool isLine = true;

for (int x = 0; x < _coloumns; x++)
{
if (Container[y, x].Color == null)
{
isLine = false;
break;
}
}

if (isLine)
{
removeRowCount++;
for (int x = 0; x < _coloumns; x++)
{
Container[y, x].Color = null;
}

for (int i = y; i > 0; i--)
{
for (int x = 0; x < _coloumns; x++)
{
Container[i, x].Color = Container[i - 1, x].Color;
}
}
}
}

if (removeRowCount > 0)
{
Score += 10*(int) Math.Pow(2, removeRowCount);
}

RemoveRowCount += removeRowCount;

Level = (int) Math.Sqrt(RemoveRowCount/5);

_timer.Interval =
TimeSpan.FromMilliseconds(_InitSpeed - _LevelSpeed*Level > _LevelSpeed
? _InitSpeed - _LevelSpeed*Level
: _LevelSpeed);
}

那怎么移动砖块。我们分别有左移(MoveToLeft),右移(MoveToRight), 下移(MoveToDown) 方法, 我们  无非是利用移动相应的坐标。在进行填充。

public void MoveToLeft()
{
if (GameStatus != GameStatus.Play)
{
return;
}
if (!IsBoundary(CurrentPieces.Matrix, -1, 0))
{
RemovePiece();
AddPiece(-1, 0);
}
}

public void MoveToRight()
{
if (GameStatus != GameStatus.Play)
{
return;
}

if (!IsBoundary(CurrentPieces.Matrix, 1, 0))
{
RemovePiece();
AddPiece(1, 0);
}
}

public void MoveToDown()
{
if (GameStatus != GameStatus.Play)
{
return;
}
if (!IsBoundary(CurrentPieces.Matrix, 0, 1))
{
RemovePiece();
AddPiece(0, 1);
}
else
{
RemoveRow();
CreatePiece();
Score++;
}
}

怎么变形啊,这次又一个GetRotate方法,每个形状有不同的枚举

     这样子俄罗斯方块就写完了

     开源地址 http://www.51aspx.com/code/Tetris7

时间: 2024-10-14 19:28:47

windows phone7 项目一俄罗斯方块源码 及说明的相关文章

windows phone7 项目一连连看源码 及说明

            连连看游戏是老少爷们喜爱玩的游戏,   因此  我就 写了 连连看游戏.            要完成一个连连看游戏,以面向对象的思想 来思考这个游戏.首先, 我需要一个类         每个连连看的需要 连连看的画框, 由于要设置不同级别,因此要 一个游戏级别的类.         你怎么能确保正确的开展游戏 因此  需要游戏的引擎.             他的类图如下:                                                

求ireport3.75的源码包,项目开发需要源码啊!!!

问题描述 求ireport3.75的源码包,项目开发需要源码啊!!! 解决方案 解决方案二:要这个源码做什么?这个只是用来编写jrxml文件,它只是一个图像化工具,能够帮助我们编写xml文件,我们项目中要的应该是jasperreport.解决方案三:需要对它进行一些设置,变为自己的

AS3游戏-3D俄罗斯方块源码

需要pv3d 引擎的支持: package {      import flash.display.Sprite;      import flash.text.TextField;      import flash.events.Event;      import flash.events.KeyboardEvent;      import flash.utils.getTimer;        import org.papervision3d.materials.*;      im

Microsoft Visual Studio与Firefly 一直提示加载项目,更新源码状态问题

        笔记本一开始安装的是vs2010,由于近期开发要用vs2008与vs2005于是今天又把2008.2005安装上了,但在打开项目的时候,先是提示加载项目文件,然后一直提示更新源码状态,很慢很慢的,之前只有vs2010的时候,打开是很快的,现在不管是用2008.2005.2010就没有一个快的,源码管理用的是firefly,有人知道为什么会出现这种情况吗?         截图: 解决方法:        第一步:打开<网络与共享中心>,找打<更改适配器设置>如下图:

windows下如何下载android源码

在网上找了好久都没有找到如何批量下载,只是找到有位通过角本执行来进行下载的. 试了一下在我机器上运行有问题,所以索性自己搞了一个出来. 首先根据官方的说法要下载git,这个无论如何是要下载的. 点击安装,安装完成后, 在盘符上建立文件夹,我建在E:\android src下 右键选择Git bash 弹出如下界面 下面就是整理下载的过程了,如果只需要下载其中的一个包,那么就不需要做下面的操作了,如果想下载全部源码就需要做一下处理,因为windows下是没有repo的 进入下载页面 http://

Redis+Spring缓存实例(windows环境,附实例源码及详解)

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 目录(?)[+] 一.Redis了解 1.1.Redis介绍: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set –有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且

windows上修改openssl的源码使用什么开发工具比较好?

问题描述 因为openssl有个中文的问题,所以打算修改openssl的源码.请问有这方面经验的大侠,应该使用什么开发工具比较好? 解决方案 windows下我们之前用vs2008+vassistant插件(网上有破解版)

Maven项目,断点调试的时候,怎么老是看不见自己写的其他项目类的源码?

问题描述 比如我在调试web项目,需要用到我另一个项目service层的代码,但是一直显示source not found. 是我自己写的其他项目的代码.各种路径都设置了还是不行. 有人知道解决办法么? 解决方案 因为你调试没有设置源码,默认是一个default项目.当你调试时这个时候没法看见源码,你可以点下那个按钮,添加你的项目源码.这样就可以调试了解决方案二:源码加进去了?用的是什么开发工具?

求vb.net windows service监听端口源码!!

问题描述 求vb.netwindowsservice监听端口源码!!!!!!!!!!!!!!!!!!!! 解决方案 解决方案二:VB.NET端口监听实例ImportsSystem.ComponentModelImportsSystem.DrawingImportsSystem.WinFormsImportsSystem.ThreadingImportsSystem.Net.SocketsPublicClassForm1InheritsSystem.WinForms.FormPrivateoLis