C程序课程设计报告—走迷宫
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C程序课程设计报告—走迷宫
一课题分析
1.1 设计要求
走迷宫:绘制和选择迷宫地图,系统能够自动寻找出口,支持鼠标和键盘操作。通过画图函数设定迷宫,运用数据结构的相关知识,利用一定的算法,实现单步找寻迷宫出口的操作。
1.2 实现功能
小游戏,游戏者从左侧入口处走到右侧的出口处,则胜;中途退出,则败。
二整体设计
2.1框架设计
1.定义操作键键码,用#define实现。
2.系统BGI初始化模块:
3.画出迷宫模块:其中包括边框、出口、入口、墙壁等相关信息;用函数drawmaze()实现此操作。
4.定义迷宫中的人模块:用函数move()实现此操作。实现点的移动,并判断是否到达出口。
5.退出系统模块:用if函数进行判断,如胜则输出-You win,如败则输出you lose.用函数getch()查看结果。
三详细设计
3.1界面设计
此游戏界面采用图形设计。
主界面设计如下:
图1 走迷宫图
3.2结构设计:
用if语句实现人的坐标移动和判断游戏者输赢。
四总结
参考文献
暂无
附录#include
#include
/*定义操作键键码*/
#define UP 0x4800/*上移--方向键up*/
#define DOWN 0x5000/*下移--方向键down*/
#define LEFT 0x4b00/*左移--方向键left*/
#define RIGHT 0x4d00/*右移--方向键right*/
#define ESC 0x011b
#define midx getmaxx()/2
#define midy getmaxy()/2
void initgr(void) /* BGI初始化*/
{
int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果*/ registerbgidriver(EGA VGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行*/ initgraph(&gd, &gm, "");
}
void drawmaze()/* 画出迷宫*/
{
rectangle(midx-200,midy-200,midx+200,midy+200);/* 画出边框*/
setcolor(BLACK);
line(midx-200,200,midx-200,226);/* 画出迷宫入口*/
line(midx+200,300,midx+200,326);/* 画出迷宫出口*/
setcolor(WHITE);
line(midx-150,midy-200,midx-150,midy-150);/* 画出迷宫内的墙壁*/
line(midx-150,midy-150,midx-170,midy-150);
line(midx-170,midy-150,midx-170,midy-100);
line(midx-170,midy-75,midx-170,midy+170);
line(midx-170,midy+170,midx+100,midy+170);
line(midx+120,midy+170,midx+170,midy+170);
line(midx+120,midy+170,midx+120,midy+30);
line(midx+120,midy,midx+120,midy-50);
line(midx+120,midy-50,midx+70,midy-50);
line(midx+100,midy+170,midx+100,midy+80);
line(midx+70,midy+170,midx+70,midy-200);
line(midx,midy+170,midx,midy);
line(midx,midy-30,midx,midy-130);
line(midx,midy-130,midx-50,midy-130);
line(midx-50,midy-130,midx-50,midy-200);
line(midx-170,midy+30,midx-100,midy+30);
line(midx-70,midy+30,midx,midy+30);
line(midx-100,midy+30,midx-100,midy+100);
line(midx-130,midy+30,midx-130,midy+150);
line(midx-110,midy-200,midx-110,midy-50);
line(midx-110,midy-50,midx-50,midy-50);
line(midx-50,midy-50,midx-50,midy+30);
line(midx-170,midy,midx-65,midy);
line(midx+150,midy-200,midx+150,midy+170);
}
void move()
{
int yes=1;/* 循环的条件*/
int x,y;/* 点的坐标,点相当于迷宫中的人*/
int key;
x=midx-200;y=214;
putpixel(x,y,WHITE);
while(yes)/* 实现点的重复移动*/
{
key=bioskey(0);
if(key==UP)/* 如果键入上键,位置上移*/
{
putpixel(x,y,BLACK);
y-=5;
if(getpixel(x,y)==WHITE)/* 如果改变后的坐标是墙壁,将坐标回到原先的位置,点不会移动*/ y+=5; /* 如果不是墙壁,实现点的移动*/
putpixel(x,y,WHITE);/* 在坐标处画点*/
}
if(key==DOWN)/* 如果键入下键,位置下移?*/
{