c语言别出心裁的小游戏,C语言俄罗斯方块

温泉的俄罗斯方块,一个用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;

}

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

源代码分享:http://pan.baidu.com/s/1sl3FiC9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值