C俄罗斯方块源码完整功能版Word文档格式.docx
《C俄罗斯方块源码完整功能版Word文档格式.docx》由会员分享,可在线阅读,更多相关《C俄罗斯方块源码完整功能版Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
1
//碰撞检测
OK
CANTMOVE
//方向
UP
DOWN
LEFT
2
RIGHT
3
//错误码
no_enough_memory
set_no_found
dat_no_found
error_argument
//函数声明
//模块
void
play();
//开始游戏
sets();
//设置
highscores();
//排行榜
copyright();
//作者
//功能
mapsetup();
//准备地图
bool
newsqr();
//放置方块,返回是否游戏结束
int
move(int
direction);
//移动方块,返回定义表
movetomap();
//把当前方块移动到地图上
wholeline();
//检查是否组成了一层,返回层数,-1表示没有
deleteline(int
which);
//删除一行
endup();
//结束游戏,清理内存
//显示
show();
//刷新画面
showmenu(char*
menu);
//显示菜单
//文件
loadset();
//加载设置
saveset();
//保存设置
loadhs();
//加载排行榜
addscores(int
score,char
name[50]);
//增加一个分数,返回是否是高分
savehs();
//保存排行榜
//坐标变换
get(int
x,int
y);
set(int
y,int
date);
//结构
struct{
xs,ys;
//屏幕大小
speed;
//速度
char
sqr[3],no[3],frame[3];
//方块、空白处、边框的样式
}gameset;
name[50];
score;
}rating[10];
//全局变量
//变量
int*
map=NULL;
//地图
now[4][4];
//当前方块
xnow,ynow;
//当前位置
guide;
//分数
//常量
const
shap[7][4][4]={//形状
{\
0,0,0,0,\
1,1,1,1,\
},\
0,1,1,0,\
0,1,1,1,\
0,0,1,0,\
1,0,0,0,\
1,1,1,0,\
0,0,0,1,\
0,1,0,0,\
}\
};
errword[4][50]={"
程序没能取得足够的内存"
"
无法打开或找不到设置文件set.ini"
无法打开或找不到排行榜数据highscore.dat"
您设置的参数太大或者太小"
//控制台
HANDLE
hout;
//控制台句柄
COORD
curpos={0,0};
//光标坐标
//主函数
main()
{
start1:
try
hout
=
GetStdHandle(STD_OUTPUT_HANDLE);
//获取控制台句柄,以便移动光标
srand(time(0));
//用当前时间初始化随机数生成器
//加载
start2:
while
(1)
showmenu("
俄罗斯方块\n请选择菜单:
\n1.开始游戏\n2.设置\n3.排行榜\n4.帮助\n5.保存并退出\n"
);
switch(getch())
case
'
1'
:
system("
cls"
//play函数覆盖界面而不是清屏,所以需要先清屏
break;
2'
3'
4'
5'
//保存数据
return
0;
}
catch(int
errnum)//错误处理
printf("
o(>
﹏<
)o
出错啦!
\n程序收到了一条错误信息,错误码是:
%d(%s)\n您可以联系我们解决这个问题。
\n"
errnum,errword[errnum]);
\n你可以选择以下操作:
\n1.重启程序\n2.以默认设置重启程序\n3.向设置和数据文件写入默认设置然后重启\n4.退出\n"
goto
start1;
gameset.xs=20;
gameset.ys=20;
gameset.speed=100;
strcpy(gameset.sqr,"
[]"
//无法直接给数组复制数据
strcpy(gameset.no,"
"
strcpy(gameset.frame,"
i;
for(i=0;
i<
10;
i++)
strcpy(rating[i].name,"
未命名"
),rating[i].score=0;
start2;
ofstream
fout;
fout.open("
set.ini"
fout<
20\n20\n100[]\n
\n:
;
fout.close();
fout.clear();
highscore.dat"
j;
for(j=0;
j<
j++)
未命名\n0\n"
default:
-1;
//返回异常退出
play()
//初始化
/*for(int
i=0;
20;
set(i,19,SQR);
*/
while(newsqr())//不断新建方块,直到返回NO
while(move(DOWN)!
=CANTMOVE)//每次向下移动方块,直到不能移动
guide+=1;
//向下移动一次加1分
while(kbhit())//不断处理键盘,直到没有按键
switch(getch())//获取按键
w'
move(UP);
s'
move(DOWN);
a'
move(LEFT);
d'
move(RIGHT);
Sleep(gameset.speed);
//延时
//退出循环时无法向下移动,把当前方块移动到地图上
line;
while((line=wholeline())!
=-1);
//不断检查是否出现整行,直到没有
deleteline(line);
//删除整行
//无法新建方块,游戏结束
return;
//结束
//函数定义
mapsetup(