C++俄罗斯方块源码(完整功能版)
- 格式:doc
- 大小:435.00 KB
- 文档页数:18
先是效果图:主菜单:
游戏:
设置:
错误处理:
627行,代码如下:
#include
#include
#include
#include
#include
#include
#include
#pragma comment( lib,"winmm.lib" ) //定义
//方块
#define NO 0
#define SQR 1
//碰撞检测
#define OK 0
#define CANTMOVE 1
//方向
#define UP 0
#define DOWN 1
#define LEFT 2
#define RIGHT 3
//错误码
#define no_enough_memory 0
#define set_no_found 1
#define dat_no_found 2
#define error_argument 3
//函数声明
//模块
void play();//开始游戏
void sets();//设置
void highscores();//排行榜
void copyright();//作者
//功能
void mapsetup();//准备地图
bool newsqr();//放置方块,返回是否游戏结束
int move(int direction);//移动方块,返回定义表
void movetomap();//把当前方块移动到地图上
int wholeline();//检查是否组成了一层,返回层数,-1表示没有
void deleteline(int which);//删除一行
void endup();//结束游戏,清理内存
//显示
void show();//刷新画面
void showmenu(char* menu);//显示菜单
//文件
void loadset();//加载设置
void saveset();//保存设置
void loadhs();//加载排行榜
bool addscores(int score,char name[50]);//增加一个分数,返回是否是高分void savehs();//保存排行榜
//坐标变换
int get(int x,int y);
void set(int x,int y,int date);
//结构
//设置
struct{
int xs,ys;//屏幕大小
int speed;//速度
char sqr[3],no[3],frame[3];//方块、空白处、边框的样式
}gameset;
//排行榜
struct{
char name[50];
int score;
}rating[10];
//全局变量
//变量
int* map=NULL;//地图
bool now[4][4];//当前方块
int xnow,ynow;//当前位置
int guide;//分数
//常量
const bool shap[7][4][4]={//形状{\
0,0,0,0,\
0,0,0,0,\
1,1,1,1,\
0,0,0,0,\
},\
{\
0,0,0,0,\
0,1,1,0,\
0,1,1,0,\
0,0,0,0,\
},\
{\
0,0,0,0,\
0,1,1,1,\
0,0,1,0,\
0,0,0,0,\
},\
{\
0,0,0,0,\
1,0,0,0,\
1,1,1,0,\
0,0,0,0,\
},\
{\
0,0,0,0,\
0,0,0,1,\
0,1,1,1,\
0,0,0,0,\
},\
{\
0,1,0,0,\
0,1,1,0,\
0,0,1,0,\
0,0,0,0,\
},\
{\
0,0,1,0,\
0,1,1,0,\
0,1,0,0,\
0,0,0,0,\
}\
};
const char errword[4][50]={"程序没能取得足够的内存","无法打开或找不到设置文件
set.ini","无法打开或找不到排行榜数据highscore.dat","您设置的参数太大或者太小"};
//控制台
HANDLE hout;//控制台句柄
COORD curpos={0,0};//光标坐标
//主函数
int main()
{
start1:
try
{
hout = GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台句柄,以便移动光标srand(time(0));//用当前时间初始化随机数生成器
loadset();//加载
loadhs();
start2:
while(1)
{
showmenu("俄罗斯方块\n请选择菜单:\n1.开始游戏\n2.设置\n3.排行榜\n4.帮助\n5.保存并退出\n");
switch(getc h())
{
case'1':
system("cls");//play函数覆盖界面而不是清屏,所以需要先清屏
play();
break;
case'2':
sets();
break;