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

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

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

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

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

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

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

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

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

       我们再看看相应的类图

     

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

那是怎么用什么的东西代表那个位置有砖块,我们用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

上一篇:BIST测试技术,内建自测(Built-inSelfTest)


下一篇:gridview自定义button事件 ,无法触发 onrowcommand