从分析到实现讲解俄罗斯方块的做法
俄罗斯方块在.NET下的制作,我写的只是一些拙见,望高手不要板砖,也请高手不惜赐教!
首先我们要分析俄罗斯方块的原理
1.由移动的方块和不能动的方块组成
2.一行排满消除
3.能产生多种方块
---
首先我们来分析方块
前面说了方块由两部分组成一种是移动下落的一种是固定的,我们逐个来分解,移动的方块一般由4个方块组成[我们这里只讨论保准版]我们假设吧这个4个下落的方块看成一个封装的类,那么他就有4个图形成员,我们不妨假设是4个黑色的pictureBox组建[大小10*10],再在类里面添加一个初始化方法用于通过picturebox.Location来控制没干方块的位置,那么我们先生成一个初步的类shape,其中pb是下落的图形,而oldpb是已经固定的图形,为什么这样定义呢
public
class
sharp
{
// 用于记录分数
// 用于记录已经触底的图像
protected PictureBox[] oldpb = new PictureBox[ 1000 ];
// 用于控制移动中的图像
public PictureBox[] pb = new PictureBox[ 4 ];
// 移动图像的初始化位置
private int initX = 100 ;
private int initY = 10 ;
// 构造函数[参数用于制定控件添加到什么窗口]
public sharp(Form f)
{
newObj(f);
}
// 用于给定时器调用 向下移动
public void moveDown(Form f)
{
}
// 用于旋转图形
public void Roll()
{
}
private void Rollx( int a, int b)
{
}
// 检查是否到底 到底则进行转换
public bool check(Form f)
{
}
// 此方法用于将图形转换为触底图形
private void changToOld(Form f)
{
}
public void sharp_0()
{
pb[ 0 ].Location = new Point(initX, initY);
pb[ 1 ].Location = new Point(initX, initY - 10 );
pb[ 2 ].Location = new Point(initX + 10 , initY - 10 );
pb[ 3 ].Location = new Point(initX + 10 , initY );
}
public void sharp_1()
{
pb[ 0 ].Location = new Point(initX, initY);
pb[ 1 ].Location = new Point(initX, initY - 10 );
pb[ 2 ].Location = new Point(initX, initY - 20 );
pb[ 3 ].Location = new Point(initX, initY - 30 );
}
public void sharp_2()
{
pb[ 0 ].Location = new
{
// 用于记录分数
// 用于记录已经触底的图像
protected PictureBox[] oldpb = new PictureBox[ 1000 ];
// 用于控制移动中的图像
public PictureBox[] pb = new PictureBox[ 4 ];
// 移动图像的初始化位置
private int initX = 100 ;
private int initY = 10 ;
// 构造函数[参数用于制定控件添加到什么窗口]
public sharp(Form f)
{
newObj(f);
}
// 用于给定时器调用 向下移动
public void moveDown(Form f)
{
}
// 用于旋转图形
public void Roll()
{
}
private void Rollx( int a, int b)
{
}
// 检查是否到底 到底则进行转换
public bool check(Form f)
{
}
// 此方法用于将图形转换为触底图形
private void changToOld(Form f)
{
}
public void sharp_0()
{
pb[ 0 ].Location = new Point(initX, initY);
pb[ 1 ].Location = new Point(initX, initY - 10 );
pb[ 2 ].Location = new Point(initX + 10 , initY - 10 );
pb[ 3 ].Location = new Point(initX + 10 , initY );
}
public void sharp_1()
{
pb[ 0 ].Location = new Point(initX, initY);
pb[ 1 ].Location = new Point(initX, initY - 10 );
pb[ 2 ].Location = new Point(initX, initY - 20 );
pb[ 3 ].Location = new Point(initX, initY - 30 );
}
public void sharp_2()
{
pb[ 0 ].Location = new