本游戏软件的初始要求是这样定义的: 用 Turbo-C 语言在DOS环境下设计实现一个模拟WINDOWS环境下同色相溶游戏的程序。
需求:
关于界面 1.在图形模式下建立一个图形化菜单,可用上、下箭头移动光标,按回车键则执行菜单功能。 菜单选项:进入游戏、查看最高分、显示游戏规则、退出等。 选择退出是结束执行的唯一方式。 2.选择“进入游戏”后,进入一个图形画面,画面分为A、B两个区域:区域A划分为m*n个小区域,每一小区域随机地填充k中颜色中的一种,B区域用于显示操作过程的积分,时钟(可选)。 3.选择“查看最高分”后,读取保存最高分的文件,显示最高的10次得分(此文件可清空)。 4.选择“查看游戏规则 ”后,显示游戏规则文件的内容。
关于操作 1.生成初始画面,图形显示光标. 2.用→、←、↑等键移动光标选择一个小区域,要求用颜色标明光标位置,按Enter键确定后,寻找与此区域同色且相连(上、下、左、右)的所有小区域,删除所有选出的小区域(删除前闪烁),若删除后某列为空,则后序各列均左移,使画面连通。 3.根据此次选择的小区域的个数n,将本次操作的得分n*(n-1)加入积分中,并显示。重复执行操作2,3,直至A区为空或每一个小区域的上、下、左、右四个位置均无同色区域。 4.若此次积分高于最高分文件中的某条记录,或文件的记录不足10个,则将它记入最高分文件。
扩展要求 1.显示时钟,游戏计时; 2.A区的大小,区域填色的颜色数可变; 3.根据游戏的初始值, 给出合理的奖励分; 4.画面设计美观,合理, 方便。
实现功能及程序亮点: 实现了全部的基本要求和扩展要求,还实现了一个图形的石英钟表,并且设计了一个菜蛋—即可以通过输入秘技来使用其它的主题。 本游戏使用SVGA256色640*480显示模式,支持中英数混合输出,使用大量的256色BMP贴图,通过修改色彩寄存器实现。淡入淡出效果。
参考书目:本年级C语言教科书 模块划分
模块接口设计:
| 函数名称 |
函数原型 |
功能 |
传入参数 |
返回值 |
| 显示菜单函数 |
Void fnDrawMenu(void) |
显示菜单 |
无 |
无 |
| 菜单控制函数 |
int fnMenu(void) |
控制菜单 |
无 |
int |
| 游戏设置函数 |
Void fnSetting(void) |
设置游戏的各项参数 |
无 |
无 |
| 生成新数组函数 |
Void fnIndex_New(void) |
生成新的游戏数组 |
无 |
无 |
| 算法核心函数 |
Int fnKernel(void) |
算法的核心,判断哪些色块应被消去 |
无 |
int |
| 算分函数 |
Void fnScore(int ) |
计算游戏得分 |
int m(消去的色块数) |
无 |
| 算法数组清空函数 |
Void fnCleanUP(void) |
清空游戏数组中的临时数 |
无 |
无 |
| 游戏结束函数 |
Int fnGameOver(void) |
判断游戏是否结束 |
无 |
int (返回1为游戏结束) |
| 算法数组刷函数 |
int fnShua(int ,const int ,const int ) |
刷游戏数组 |
无 |
无 |
| 游戏控制函数 |
int fnGame_Key(void) |
控制游戏,包括游戏时的按键判断 |
无 |
int |
| 画游戏色块函数 |
void fnHua(void) |
画游戏区的游戏色块 |
无 |
无 |
| 高手榜函数 |
void fnHigh(const int ,const long) |
生成,控制,显示高手榜 |
Const int c_nYouMark(游戏得分) const long youtime(游戏历时) |
无 |
| 显示BMP函数 |
void fnDisplayBmp(int nBMP_X,int nBMP_Y,FILE *fp) |
显示256色BMP |
int nBMP_X,int nBMP_Y(图片左上角的X和Y坐标) FILE *fp (BMP文件的指针) |
无 |
| SVGA换页模式 |
void selectpage(register char) |
SVGA换页 |
register char page(要换到的页号) |
无 |
| 设置SVGA屏幕模式 |
Unsigned char set_SVGA(int) |
无条件硬件初始化SVGA模式 |
int Vmode(模式的子功能号) |
unsigned char |
| 获取当前SVGA屏幕模式 |
unsigned int get_mode(void) |
获取当前SVGA屏幕模式 |
无 |
unsigned char |
| 关闭SVGA模式函数 |
unsigned char close_SVGA(void) |
关闭SVGA色模式函数 |
无 |
unsigned char |
| 获取调色盘函数 |
void fnGet_Palette(FILE *) |
获取BMP文件中的调色盘 |
FILE *fp(指向BMP文件的指针,如果为NULL就读取默认调色盘) |
无 |
| 画点函数 |
void point(int ,int ,unsigned char ,unsigned char )
|
画点 |
传入参数:int x,int y(点的X和Y坐标) unsigned char color (颜色),unsigned char mode(贴图模式) |
无 |
| 画线函数 |
void fdyline(int ,int , int ,int, unsigned char , unsigned char ) |
画线 |
int x1,int y1(起始点X和Y坐标),int x2,int y2(终点X和Y坐标) unsigned char color(颜色),unsigned char mode(贴图模式) |
无 |
| 画实心矩形函数 |
void fdybar(int ,int ,int , int ,int ,unsigned char ) |
画实心矩形 |
int x1,int y1(左顶点X和Y坐标),int x2,int y2(右顶点X和Y坐标) int color(颜色),unsigned char mode(贴图模式) |
无 |
| 画圆函数 |
void fdycircle(int ,int ,int ,unsigned char ,unsigned char )
|
画圆 |
int centrex,int centrey(圆心的X和Y坐标),int r(半径) unsigned char color(颜色),unsigned char mode(贴图模式) |
无 |
| 存位图函数 |
void fnGetBmp(int ) |
将BMP以位图形式存入远堆 |
int nIndexNum(位图的索引号) |
无 |
| 画位图函数(1) |
void fnPutImg(int ,int ,int ) |
将存入的位图画出来 |
int nBitM_X,int nBitM_Y(图片左上角的X和Y坐标) int nIndexNum(位图的索引号) |
无 |
| 画位图函数(2) |
void fnPutBmp(int nBitM_X,int nBitM_Y,int nIndexNum,unsigned char mode) |
将存入的位图画出来 |
int nBitM_X,int nBitM_Y(图片左上角的X和Y坐标) int nIndexNum(位图的索引号) unsigned char mode(贴图的模式) |
|
| 获得ROM字符集首址函数 |
Char far* get_ascii_rom(unsigned int ) |
获得ROM字符集首址 |
unsigned int reg_bx(将寄存器BX置的值) |
char far* (返回8*16 ASCII字符ROM指针) |
| 中英数混合输出函数 |
void textoutxy(int ,int , unsigned char *,unsigned char ,unsigned char ) |
图形模式下的中英数混合输出 |
无 |
无 |
| 画表函数 |
void fnWatch(void) |
画表 |
无 |
无 |
| 画表针函数 |
void fnWatchHand(int ,int , int ,unsigned char ) |
画表针 |
int nLong(表针长) int nTime(时间位置) int nWalk(每一动走的度数) unsigned char color(针的颜色) |
无 |
| 游戏历时函数 |
void fnClock(void) |
显示游戏历时 |
无 |
无 |
| 显示片头画面函数 |
void fnOP(void) |
显示片头画面 |
无 |
无 |
| DAC置黑函数 |
void fnBlack(void) |
将DAC(色彩寄存器)置黑 |
无 |
无 |
| 淡出函数 |
void fnFadeOut(void) |
淡出 |
无 |
无 |
| 淡入函数 |
void fnFadeIn(void) |
淡入 |
无 |
无 |
| 显示帮助函数 |
void fnShowHelp(void) |
显示帮助 |
无 |
无 |
| 退出函数 |
void quit(void) |
退出后的处理 |
无 |
无 |
| 闪烁函数 |
void fnFlash(void) |
游戏色块消除闪烁 |
无 |
无 |
| 闪烁数组清空函数 |
void fnFlashClear(void) |
闪烁数组清空 |
无 |
无 |
| 内存释放函数 |
void fnFree(void) |
释放内存 |
无 |
无 |
[1] [2] 下一页
|