俄罗斯方块C语言版本Word下载.docx
- 文档编号:4832498
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:25
- 大小:21.15KB
俄罗斯方块C语言版本Word下载.docx
《俄罗斯方块C语言版本Word下载.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块C语言版本Word下载.docx(25页珍藏版)》请在冰点文库上搜索。
);
colorful();
HideCursor();
//隐藏光标
while
(1)//进入主体
{
begin_xy.x=7,begin_xy.y=1,fenshu=0,sleep_time=30;
//方块初始位置从第7列第1行开始降落
srand(time(NULL));
//随机数发生器的初始化函数
next=&
fx[0];
//初始化第一个next,使得其指向方形方块数组的地址
chushihua();
//初始化
memset(all_xy,0,sizeof(all_xy));
//为新生成的内存初始化,数组清零
my_switch();
show_next(next);
//显示下一个图形
for(i=0;
i<
24;
i++)//边界均为1
{
all_xy[i][0]=1;
all_xy[22][i*2]=1;
all_xy[i][32]=1;
}
while
(1)//主体部分
while(kbhit())//检查当前是否有键盘输入,若有则返回一个非0值
{
end_e();
key=get_key();
//得到输入的按键码
if(push)//暂停
push=!
push;
switch(key)//匹配按键码
{
caseKEY_PUSH:
//空格键快速
while(found_error(begin_xy,now))
{
begin_xy.y++;
end_hand++;
}break;
case115:
//S键
caseKEY_DOWN:
//↓键
if(begin_xy.y>
=20)break;
begin_xy.y++;
if(!
found_error(begin_xy,now))begin_xy.y--;
break;
case119:
//W键
caseKEY_UP:
change_tx();
//↑键改变方块图形
case97:
//A键
caseKEY_LEFT:
begin_xy.y--;
//←键
begin_xy.x--;
if(!
found_error(begin_xy,now))
begin_xy.x++;
begin_xy.y++;
break;
case100:
//D键
caseKEY_RIGHT:
//→键
begin_xy.x++;
if(!
found_error(begin_xy,now))begin_xy.x--;
caseKEY_ESC:
if(6==MessageBox(hwnd,"
是否退出?
"
"
询问"
MB_YESNO|MB_ICONQUESTION))return0;
//窗口
caseKEY_ADD:
if(sleep_time>
=10)sleep_time-=10;
//加速
caseKEY_NADD:
if(sleep_time<
1000)sleep_time+=10;
//减速
default:
push=!
//printf("
%d"
key);
getch();
暂停
}
print_e();
//显示方块
}
Sleep(sleep_time);
if(!
{
if(end_hand==0)//有一排方块达到顶格
if(6==MessageBox(hwnd,"
\t游戏结束!
你弱爆了!
何必重新开始呢?
\n"
"
你挂啦!
MB_YESNO|MB_ICONQUESTION))//窗口
break;
else
return0;
begin_xy.y-=1;
set_data(begin_xy,now);
found_end();
//-----------------------------------
begin_xy.x=7,begin_xy.y=1,end_hand=0;
ll=0,ss=0,zz=0,tt=0,ii=0,jj=0;
//-----------------------------------
end_next(next);
my_switch();
show_next(next);
continue;
}
push&
&
in_time++==20)//?
?
end_e();
begin_xy.y++;
in_time=0;
print_e();
}
return0;
}
intget_key()
/*对于上下左右和别的一些扩展键
使用getch()会先返回一个224,再使用一次getch()这时返回的才是扫描码*/
intc1,c2;
if((c1=getch())!
=224)returnc1;
//
c2=getch();
//直接获得按键,且不显示在屏幕上
returnc2;
voidprint_e()//显示方块
print_xy=begin_xy;
for(i=0;
4;
i++,print_xy.x++)
for(j=0,print_xy.y=begin_xy.y;
j<
j++,print_xy.y++)
if(now[i][j]==1)
gotoxy(print_xy.x*2,print_xy.y);
printf("
■"
voidend_e()//隐藏移动路径
//开始的坐标值赋值给显示出来的坐标值
end_hand++;
"
voidmy_switch()//随机将一种类型方块的地址赋值给next
now=next;
olde_rand=rand_data;
rand_data=rand()%7;
//rang()函数产生随机数
switch(rand_data)
case0:
next=&
case1:
lx1[0];
case2:
sx1[0];
case3:
zx1[0];
case4:
tx1[0];
case5:
ix1[0];
case6:
jx1[0];
voidchange_tx()
int(*olde)[4]=now;
switch(olde_rand)
if(++ll==4)ll=0;
switch(ll)
case0:
now=&
case1:
lx2[0];
case2:
lx3[0];
case3:
lx4[0];
}break;
if(++ss==2)ss=0;
switch(ss)
sx2[0];
if(++zz==2)zz=0;
switch(zz)
zx2[0];
if(++tt==4)tt=0;
switch(tt)
tx2[0];
tx3[0];
tx4[0];
if(++ii==2)ii=0;
switch(ii)
ix2[0];
if(++jj==4)jj=0;
switch(jj)
jx2[0];
jx3[0];
jx4[0];
if(!
found_error(begin_xy,now))now=olde;
//stdafx.cpp:
sourcefilethatincludesjustthestandardincludes
//¶
í
Â
Þ
Ë
¹
·
½
¿
é
.pchwillbethepre-compiledheader
//stdafx.objwillcontainthepre-compiledtypeinformation
//TODO:
referenceanyadditionalheadersyouneedinSTDAFX.H
//andnotinthisfile
intfx[4][4]={{0,0,0,0},{0,1,1,0},{0,1,1,0},{0,0,0,0}};
/*0,0,0,0,
0,1,1,0,
0,0,0,0*/
//以上是方形
intlx1[4][4]={{0,1,0,0},{0,1,0,0},{0,1,1,0},{0,0,0,0}};
/*0,1,0,0,
0,1,0,0,
intlx2[4][4]={{0,0,0,0},{0,1,1,1},{0,1,0,0},{0,0,0,0}};
0,1,1,1,
intlx3[4][4]={{0,0,0,0},{0,1,1,0},{0,0,1,0},{0,0,1,0}};
0,0,1,0,
0,0,1,0*/
intlx4[4][4]={{0,0,0,0},{0,0,1,0},{1,1,1,0},{0,0,0,0}};
1,1,1,0,
//以上是L形
intjx1[4][4]={{0,0,0,0},{0,1,0,0},{0,1,1,1},{0,0,0,0}};
intjx2[4][4]={{0,0,0,0},{0,1,1,0},{0,1,0,0},{0,1,0,0}};
0,1,0,0*/
intjx3[4][4]={{0,0,0,0},{1,1,1,0},{0,0,1,0},{0,0,0,0}};
intjx4[4][4]={{0,0,1,0},{0,0,1,0},{0,1,1,0},{0,0,0,0}};
/*0,0,1,0,
//以上是J形
intsx1[4][4]={{0,0,0,0},{0,0,1,1},{0,1,1,0},{0,0,0,0}};
0,0,1,1,
intsx2[4][4]={{0,1,0,0},{0,1,1,0},{0,0,1,0},{0,0,0,0}};
/*0,1,0,0,
//以上是S形
intzx1[4][4]={{0,0,0,0},{1,1,0,0},{0,1,1,0},{0,0,0,0}};
1,1,0,0,
intzx2[4][4]={{0,0,1,0},{0,1,1,0},{0,1,0,0},{0,0,0,0}};
//以上是Z形
inttx1[4][4]={{1,1,1,0},{0,1,0,0},{0,0,0,0},{0,0,0,0}};
/*1,1,1,0,
0,0,0,0,
inttx2[4][4]={{0,0,1,0},{0,1,1,0},{0,0,1,0},{0,0,0,0}};
inttx3[4][4]={{0,0,0,0},{0,0,1,0},{0,1,1,1},{0,0,0,0}};
inttx4[4][4]={{0,1,0,0},{0,1,1,0},{0,1,0,0},{0,0,0,0}};
//以上是T形
intix1[4][4]={{0,1,0,0},{0,1,0,0},{0,1,0,0},{0,1,0,0}};
intix2[4][4]={{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}};
1,1,1,1,
//以上是I形
intall_xy[35][60];
externintfenshu;
//分数
voidfound_end()//到了最底层
inti=21,j,k,how=0;
//i代表竖格子数,j代表横的格子数,how代表几层(一二三四)
BOOLyes=TRUE,end=TRUE;
for(i=21;
i>
0;
i--)//i等于0说明方块落到最下
for(j=1,yes=TRUE;
16;
j++)//j等于16说明方块到了最右
if(all_xy[i][j*2]!
=1)
yes=FALSE;
if(yes)
how++;
fenshu++;
for(k=i;
k>
1;
k--)
for(j=1,end=TRUE;
j++)
all_xy[k][j*2]=all_xy[k-1][j*2];
if(all_xy[k-1][j*2]==1)end=FALSE;
if(end)break;
//如果一行中一个方块都没有停止赋值
i=22;
if(how!
=0)
for(k=21;
for(j=1;
if(all_xy[k][j*2]==1)
gotoxy(j*2,k+1);
else
if(how>
1)
fenshu+=how;
gotoxy(41,15);
printf("
%d分"
fenshu);
voidset_data(POINTbegin_xy,int(*now)[4])
inti,j;
POINTprint_xy=begin_xy;
all_xy[print_xy.y][print_xy.x*2]=1;
BOOLfound_error(POINTbegin_xy,int(*now)[4])
if(all_xy[print_xy.y][print_xy.x*2]==1)
returnFALSE;
returnTRUE;
voidcolorful()//选择界面颜色
chara[10],color[]="
color"
;
printf("
*********************************************************\n"
****数字代表背景,字母代表字体****\n"
****您可以从以下选择一种您喜欢的颜色,颜色如下:
****\n"
****0=黑色8=灰色****\n"
****1=蓝色9=淡蓝色****\n"
****2=绿色A=淡绿色****\n"
****3=湖蓝色B=淡浅绿色****\n"
****4=红色C=淡红色****\n"
****5=紫色D=淡紫色****\n"
****6=黄色E=淡黄色****\n"
****7=白色F=亮白色****\n"
***********************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 俄罗斯方块 语言 版本