1. 俄罗斯方块游戏的 算法实现(或者设计原理)
这是个优化问题,目标函数是最终得分,变量是每个方块的得分,边界条件就是楼主所说的“同等条件”。
解决该问题,需要知道“同等条件”,即总的方块数以及每个方块的形状、出现顺序。知道了这些条件,即可以编程实现算法。
每个方块含有各自的状态,变换只需改变到下一个状态就行了,完全可以用数组来实现(不用写旋转算法了:)
比如:
/* 方块类型为 ■■■■ */
char[2][4][4] B1={{{0,1,0,0},{0,1,0,0},{0,1,0,0},{0,1,0,0}},
{{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}}};
含两种状态,每个状态是一个4*4数组,为1表示实心,为0表示空心.
□■□□
□■□□
□■□□
□■□□
□□□□
■■■■
□□□□
□□□□
再详细的就不用说了吧
2. 俄罗斯方块算法 总共需要多少个矩阵
俄罗斯方块的算法很简单啊,286的机器运行都不会有速度问题,速度慢不是因为矩阵的原因,你看看你的算法是不是有问题啊?
3. 哪位大神给我讲解一下俄罗斯方块的算法C语言
首先你得有个俄罗斯方块界面的概念,它就是M*N的一个2维数组,那么一个方块向左移动的极限就是有一个点已经到了最左边。
拿一个竖条为例,他本身是一个4*4的小格子,当他是竖条时可以看成
0010
0010
0010
0010
向左移动时,只要判断1是否在左边边界,没有就往左一格,另外要注意边横杆时,要先判断是否最左边越界,有越界就不能变化
4. 用C语言编写俄罗斯方块,怎样产生七种基本方块图形和19种变换图形,要具体实现的代码
用3维数组来存放七种基本方块图形:
例如:
int BOX[7][4][4]={
{
{1,1,1,1}, // ----型
{0,0,0,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,1,0}, // 1---型
{1,0,0,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,1,0}, // ---1型
{0,0,1,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,1,0}, // -T-型
{0,1,0,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,0,0}, // -T_型
{0,1,1,0},
{0,0,0,0},
{0,0,0,0}
},
{
{0,1,1,0}, // _T-型
{1,1,0,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,0,0}, // 田型
{1,1,0,0},
{0,0,0,0},
{0,0,0,0}
}
};
为了方便读取,减少程序中算法上的开销(比如进行4*4矩阵的转置),
我建议你将19种变换图形也用3维数组来存放,
例如:
|
|
型:
{
{1,0,0,0}, // ----型
{1,0,0,0},
{1,0,0,0},
{1,0,0,0}
},
|_型:
{
{1,0,0,0}, // 1---型
{1,0,0,0},
{1,1,0,0},
{0,0,0,0}
},
5. 做俄罗斯方块的思路或算法是什么
我用MFC做过俄罗斯方块:
整个场景是一个10*20的长方形空间,你要建立一个10*20的数组int num[20][10]模仿之,你可以想象这是200个小块,每个小块只有0和1两种状态,为0时相应该位置为空白,为1时相应该位置画一个小方块.
每一个图形由4个小方块组成,当他落到底停住时,你就要把数组num的相应数项由0改成1(num数组初始化全为0),同时在OnPaint(可能有时是OnDraw)函数中根据数组的0,1情况重绘,思路就是这样的.很简单
6. 寻找关于俄罗斯方块程序的算法,不要程序,只要算法
核心算法:
这里把游戏的关键设计放在三个盒子和一个坐标上:
大盒子:一个两维数组,记录着方块点阵的开与关(把游戏的舞台想象
成一个点阵),在下面也把这个东西称为地图
两个5*5小盒子:两维数组,一个盛放着正在下落的方块,一个盛放在
下一个下落的方块(即next),当然这两个也必须想象成一个点阵:如长条
的点阵为:
00000
00100
00100
00100
00100
现在你只要有这么一个概念:一个不断定时下落的小盒子从大盒子顶
部下降到底部,之后再将next盒子放在下落盒子,再进行下一轮的下落...
中间的控制等尚不要太着急.
现在面临着一个问题:
下落的盒子和地图之间要怎么联系起来?
一个好的方法是再定义一个坐标:x,y,保存着小盒子左上角在地图上对应
的下标(位置),即当x = 0, y = 0时,小盒子处于地图的左上部.如此,当
小盒子需要移动时,即只须要改变x,y的值.
现在说说旋转.
小盒子保存着当前下落形状的点阵,那么旋转就只须要将这个点阵旋
转90度:例如:
00000 00000
00100 00000
00100 -> 01111
00100 00000
00100 00000
这一点实现起来还是不太难的.
判断碰撞
通常这种情况只须要在有移动小盒或旋转盒子时发生:也即点阵非空
是互斥的,当小盒要向下移(x++)时,如果小盒里的点阵与地图上的点阵(非
空的地方)重叠,则不能下移,(卡住了),旋转则转换后的形状与地图有冲
突则要放弃旋转.
到了这里,你应该有一个大概的了解了,至于怎样在屏幕上画出来,这
个是比较简单的
7. 俄罗斯方块算法
用二维数组表示方块所在的整个区域,0表示有方块,1表示有方块。从上往下,从左往右开始输出区域。
判断消行,也就是当方块下落后,从它所停留那一行(记录此行)开始,计算每一行是否全为1,如果全为1,则往下继续判断下一行,再记录消行的行数。
判断完毕后,开始将这几行数据全变为0即可。然后就是下降。
比如从第8行开始,消2行,也就是8,9行消掉。此时应该让前面7行往下落2行。也就是第9行数据等于第7行,第8行数据等于第6行,以此类推。写一个循环
就可以了。
8. 俄罗斯方块设计都有哪些方法
求1个基于mfc的C++小游戏程序,类似于俄罗斯方块,
小Q书桌有
C++用面向对象的方法进行俄罗斯方块游戏设计:
你都有c的代码了,改成c++还不简单么?就是个