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<stdlib.h>
#include<graphics.h>
/*定义操作键键码*/
#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)/* 如果键入下键,位置下移?*/
{
y+=5;
if(getpixel(x,y)==WHITE)
y-=5;
putpixel(x,y,WHITE);
}
if(key==LEFT)/* 如果键入左键,位置左移*/
{
putpixel(x,y,BLACK);
x-=5;
if(getpixel(x,y)==WHITE)
x+=5;
putpixel(x,y,WHITE);
}
if(key==RIGHT)/* 如果键入上键,位置上移*/
{
putpixel(x,y,BLACK);
x+=5;
if(getpixel(x,y)==WHITE)
x-=5;
putpixel(x,y,WHITE);
}
if(key==ESC)
{
cleardevice();
setcolor(WHITE);
settextstyle(0,0,3);
outtextxy(midx-100,midy,"You lose!");
sleep(2);
yes=0;
}
if(x==midx+200&&y>300&&y<326)/* 判断是否到出口位置*/ {
sleep(1);
cleardevice();
setcolor(WHITE);
outtextxy(midx-100,midy,"You win!");/* 找到出口位置,输出文本“You win!”*/ setcolor(GREEN);
settextstyle(0,0,1);
outtextxy(400,400,"Designed by");
outtextxy(500,430,"Jianing");
outtextxy(500,460,"Jiqiaoyao");
sleep(2);
yes=0;
}
}
}
int main(void)
{
initgr(); /* BGI初始化*/
drawmaze();
move();
getch(); /* 暂停一下,看看前面绘图代码的运行结果*/
closegraph(); /* 恢复TEXT屏幕模式*/
return 0;
}。