C++俄罗斯方块源码(完整功能版)

  • 格式:doc
  • 大小:435.00 KB
  • 文档页数:18

下载文档原格式

  / 52
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

先是效果图:主菜单:

游戏:

设置:

错误处理:

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;