资源描述:
《c语言原程序俄罗斯方块的编写》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C语言原程序俄罗斯方块的编写:【教程】俄罗斯方块的编写 /*先写原理:本次的俄罗斯方块代码出其的简单,比我去年写的四十几K要小得多实际上核心代码只有3-4K,而且很容易理解,适合有一点C语言基础并对此有兴趣的人.这前面只粗略讲解核心算法:这里把游戏的关键设计放在三个盒子和一个坐标上:大盒子:一个两维数组,记录着方块点阵的开与关(把游戏的舞台想像成一个点阵),在下面也把这个东西称为地图两个5*5小盒子:两维数组,一个盛放着正在下落的方块,一个盛放在下一个下落的方块(即next),当然这两个也必须想像成一个点阵:如长条的点阵为:0000000100001000010000100现在你只要有这么一
2、个概念:一个不断定时下落的小盒子从大盒子顶部下降到底部,之后再将next盒子放在下落盒子,再进行下一轮的下落...中间的控制等尚不要太着急.现在面临着一个问题:下落的盒子和地图之间要怎么联系起来?一个好的方法是再定义一个坐标:x,y,保存着小盒子左上角在地图上对应的下标(位置),即当x=0,y=0时,小盒子处于地图的左上部.如此,当小盒子需要移动时,即只须要改变x,y的值.现在说说旋转.小盒子保存着当前下落形状的点阵,那么旋转就只须要将这个点阵旋转90度:例如:0000000000001000000000100->0111100100000000010000000这一点实现起来还是不太难的.
3、判断碰撞通常这种情况只须要在有移动小盒或旋转盒子时发生:也即点阵非空是互斥的,当小盒要向下移(x++)时,如果小盒里的点阵与地图上的点阵(非空的地方)重叠,则不能下移,(卡住了),旋转则转换后的形状与地图有冲突则要放弃旋转.到了这里,你应该有一个大概的了解了,至于怎样在屏幕上画出来,这个是比较简单的,下面的代码会慢慢与你解释.*//*平台:DOS+TC2.0*/#include#include#include/*这里须要读取系统运行时间来作为定时器*/#include/*很不幸,TC2的简单图形,让我放弃了用*/#
4、include/*win32+openGL来讲解.*/#defineMAX_X14/*可见最大X*/#defineMAX_Y21/*可见最大Y*//*我们定义了最大的可见X和Y,那么即还有不可见的部分,事实上地图(大盒子)里的左右两侧和底部各两行都被1填充,这样大大简化出界的判断,事实上,在本例中没有这样的代码,因为旁边有一圈1阻止小盒子越出大盒子的按制范围*/#defineMAX_C7/*最大种类,这个无须解释*/#defineKEY_UP'w'/*定义上下左右按按键*/#defineKEY_DOWN's'#defineKEY_LEFT'a'#defineKEY_RIGH
5、T'd'#defineKEY_ESC27/*退出*/typedefintBOOL;#defineFALSE0#defineTRUE1/*这几个TC中没有...自己定义一下吧:)*//*时钟结构*/typedefstruct{/*时钟结构*/BOOLenabled;/*时钟是否开启*/unsignedintintervel;/*定时间隔*/unsignedintlasttime;/*这个属于内部使用变量*/}Timer;/**现在进入了编程的初质阶段*在开始处我会写出所有的函数原形,以及它们的作用*main函数在程序的最后,你可以在这里看到整个游戏的组织架构*很好,它只有几十行,并且非常容易理
6、解,当然,还是先看一下函数原形*及解释*//*******************************************************函数原形及说明*******************************************************//*以下三个函数可以参照Timer结构体.在函数声明后面*/intGetTickCount();/*返回电脑或操作系统运行逝去的时间*//*在win32环境下已包含在windows.h里边,返回的是4byte*//*在DOS(本代码)环境下,要自己编写,使用到BIOS.h内容*/intsetTimer(Timer
7、*t,unsignedintintv,BOOLen);/*设置时钟t,参数分别为时钟指针,时间间隔,是否活动*//*时间间隔,win32下为毫秒,DOS下为1/18秒(有点低)*/ BOOLtestTimer(Timer*t);/*测试时钟t是否到达定时时间*//*如下面这段代码:*//*setTimer(&t,1,1);设置1个单位的间隔while(1){if(testTimer(&t))printf("