温泉的俄罗斯方块,一个用C语言编写并已经实现所有功能的程序,数组和全局变量写成的,比指针更容易,比结构体更简单,本程序可读取目录下的tetris.ini文件,产生独特的方块,你可以修改配置文件,使本程序产生别出心裁的方块类型,玩出新花样。
本程序由赣南师范大学科技学院电子信息工程141班的温泉同学于2016年暑假历时23天倾力完成,在这里我要感谢我的好朋友钟骏文,我在配置文件的读取时遇到了极大的障碍,是他的无私帮助才使我顺利完成,感谢他的支持和鼓励。
逍遥宿心0的博客
http://blog.sina.com.cn/u/5312228531
部分精彩程序展示:
PlayNextBlocks(){
long long e,f,g,h,b;
while(next){ //当标志位为1时,产生新的方块
next=0;
if(Initialization==0){
//当初始化为0时,产生两个随机
size=ProtuceSize();
Delay(19);
NextSize=ProtuceSize();
ProduceBlockNumber();
}else {
e=((Block[size][rotate]&0xffff000000000000)>>48);//方块分离出第1行
f=((Block[size][rotate]&0x0000ffff00000000)>>32);//方块分离出第2行
g=((Block[size][rotate]&0x00000000ffff0000)>>16);//方块分离出第3行
h=
(Block[size][rotate]&0x000000000000ffff);//方块分离出第4行
Region[ y ]=Region[ y
]|(e<
Region[y+1]=Region[y+1]|(f<
Region[y+2]=Region[y+2]|(g<
Region[y+3]=Region[y+3]|(h<
CheckAndcleanLines(); //消行与检测
size=NextSize;//当前的size=上一个nextsize
NextSize=ProtuceSize();//获取新的nextsize
ProduceBlockNumber();//产生方块个数
}
rotate=ProtuceRotate();//产生随机旋转样式
x=ProtuceX();//产生随机的X
DisplayRegion();//显示游戏
DisplayScore();//显示分数
DisplayCleanLines();//显示消行
DisplayBlockNumber();//显示产生方块的个数
DisplayPreviewArea(); //显示预览区域
DisplayCurrentBlock(); //显示当前方块
DisplayNextBlock(); //显示下一个方块
y=0;
Initialization=1;//初始化
DisplayPrompting();//显示提示
DisplayBlock();
}
}
CollisionDetectionOfVertial(){
int i,j,z,w,w0,w1,w2,w3;
long long a,b,c,d,e,f,g,h;
long long flag;
a=(Region[y+1]>>(44-2*x))&0x000000000000ffff;//分离当前方块位置的游戏池的数值
b=(Region[y+2]>>(44-2*x))&0x000000000000ffff;//分离当前方块位置的游戏池的数值
c=(Region[y+3]>>(44-2*x))&0x000000000000ffff;//分离当前方块位置的游戏池的数值
d=(Region[y+4]>>(44-2*x))&0x000000000000ffff;//分离当前方块位置的游戏池的数值
e=((Block[size][rotate]&0xffff000000000000)>>48);//方块分离出第1行
f=((Block[size][rotate]&0x0000ffff00000000)>>32);//方块分离出第2行
g=((Block[size][rotate]&0x00000000ffff0000)>>16);//方块分离出第3行
h=
(Block[size][rotate]&0x000000000000ffff);//方块分离出第4行
//---------------------------------------------处理方块数值
for(j=0;j<4;j++){
switch(j){
case 0:z=e;break;
case 1:z=f;break;
case 2:z=g;break;
case 3:z=h;break;
}
for(i=0;i<4;i++){
w=z&(0x000f<
if(w!=0){switch(i){
case 0:w0=0x000f;break;
case 1:w1=0x00f0;break;
case 2:w2=0x0f00;break;
case 3:w3=0xf000;break;}
}else{switch(i){
case 0:w0=0x0000;break;
case 1:w1=0x0000;break;
case 2:w2=0x0000;break;
case 3:w3=0x0000;break;}
}
}
switch(j){
case 0:e=w3|w2|w1|w0;break;
case 1:f=w3|w2|w1|w0;break;
case 2:g=w3|w2|w1|w0;break;
case 3:h=w3|w2|w1|w0;break;
}
}
//----------------------------------------------处理完成
a=a&e;
b=b&f;
c=c&g;
d=d&h;
flag=a|b|c|d;
if(flag==0){ //flag=0,证明无碰撞
return 1;
}else return 0;
}
源代码分享:http://pan.baidu.com/s/1sl3FiC9