迷宫

一. 实验目的及实验环境

   1、实验目的:理解和掌握C语言中函数的定义,参数的使用,函数调用的方法;学习通过功能分解来设计和编写较复杂程序的方法。

   2、实验环境:Windows 8.1,Visual C++

 

实验内容

      设计并编写一个走迷宫的游戏,从入口进入寻找通路走到出口,判定胜利。

 

三.方案设计

该游戏具有的一些特点:

游戏界面

1. 游戏有简洁,美观的界面,界面间可以切换

2. 界面菜单中项目的可以按键选择进入,游戏有多种模式可供玩家选择。

    3. 迷宫的地图可以电脑随机生成,并且道路尽可能的复杂。

4. 玩家也可以选择根据自己的想法手动建造迷宫,建造完成后可以让好友进行试走,增强游戏的可玩性

 

四.数据测试

1.随机地图:

电脑随机给出一个迷宫地图,让迷宫尽可能的复杂,使地图更加神秘,吸引玩家的兴趣,让玩家全身心的投入其中去探索,进而发现其中的乐趣。

但是随机地图会存在一个不容忽视的问题,那就是产生的地图可能无法走通,因为对于随机地图,系统不会检查它产生的一些错误,这可能会给玩家增加难度,让玩家失去耐心。

 2.手动建造地图:

手动建造地图可以最大限度的发挥玩家的想象力,然玩家自己深入游戏中,增强玩家的思维能力。

最主要的是,手动建造迷宫避免了随机产生地图存在的不能走通的问题,避免了BUG的产生。

 五.总结

 

1.实验过程中遇到的问题

 

    实验过程中遇到的主要问题是如何实现迷宫地图的随机生成,以及如何让星号移动。

 

2.对设计及调试过程的心得体会

a.  当程序过长,或需要多个功能时,可以针对每个功能自定义函数,最后需要时,只要主函数直接调用即可,很方便,而且易于读写,容易修改,并且大大减少了变量的数据,程序易于控制。

b.  体会到了各种头文件的用处,以及全局变量和局部变量在程序中的作用。

六. 附 录

核心源代码:  

int a=0;b=1;
char s[21][47];

Inputs()

{
int i,j,n;
srand((unsigned)time(NULL));
for(i=0;i<21;i++)
{
for(j=0;j<46;j++)
s[i][j]=' ';
s[i][j]=0;
}
for(n=0;n<470;n++)
{
i=rand()%100;
j=rand()%100;
if(i>20||j>=46)
{
n--;
continue;
}
s[i][j]='X';
}
for(i=0;i<21;i++)
{
s[i][0]=' ';
s[i][45]=' ';
}
s[a][b]=2;
s[0][0]=26;
s[20][45]=26;
}
Outputs()
{
int i,j;
printf("\n");
for(i=0;i<21;i++)
{
for(j=0;j<46;j++)
printf("%c",s[i][j]);
printf("\n");
}
}
Madeit()
{
int i,j;
for(i=0;i<21;i++)
{
for(j=0;j<46;j++)
s[i][j]='X';
s[i][j]=0;
}
for(i=0;i<21;i++)
{
s[i][0]=' ';
s[i][45]=' ';
}
s[a][b]=2;
s[0][0]=26;
s[20][45]=26;
}

fun()
{
printf("*********************\n");
}
main()
{
int a1,b1,e;
char c,d;
printf("欢迎进入迷宫游戏!\n");
fun();
printf("      1.开始游戏\n");
printf("      2.退出游戏\n");
fun();
printf("【直接按相应序号选择功能】\n");
scanf("%d",&a1);
system("cls");
switch(a1)
{
case 1:fun();
printf("1.随机生成迷宫地图\n");
printf("2.手动建造迷宫地图\n");
fun();
scanf("%d",&b1);
system("cls");
switch(b1)
{
case 1:
Inputs();
Outputs();
while(a!=20 || b!=45)
{
printf("\n\n\npress w to up\npress a to left\npress s to down\npress d to right\n");
c=getch();
switch(c)
{
case 'w':a--;
if(a<0)
a=0;
else
{
if(s[a][b]!='X')
{
s[a][b]=2;
       s[a+1][b]=' ';
}
else
a++;
}
break;
case 'a':b--;
if(b<0)
b=0;
else
{
if(s[a][b]!='X')
{
s[a][b]=2;
s[a][b+1]=' ';
}
else
b++;
}
break;
case 's':a++;
if(a>20)
a=20;
else
{
if(s[a][b]!='X')
{
s[a][b]=2;
s[a-1][b]=' ';
}
else
a--;
}
break;
case 'd':b++;
if(b>45)
b=45;
else
{
if(s[a][b]!='X')
{
s[a][b]=2;
s[a][b-1]=' ';
}
else
b--;
}
break;
}
system("cls");
Outputs();
}
printf("\n     You win\n");
break;
case 2:
Madeit();
Outputs();
while(a!=20||b!=45)
{
printf("\n\n\npress w to up\npress a to left\npress s to down\npress d to right\n");
c=getch();
switch(c)
{
case 'w':a--;
if(a<0)
a=0;
else
{
s[a][b]=2;
s[a+1][b]=' ';
}
break;
case 'a':b--;
if(b<0)
b=0;
else
{
s[a][b]=2;
s[a][b+1]=' ';
}
break;
case 's':a++;
if(a>20)
a=20;
else
{
s[a][b]=2;
s[a-1][b]=' ';
}
break;
case 'd':b++;
if(b>45)
b=45;
else
{
s[a][b]=2;
s[a][b-1]=' ';
}
break;
}
system("cls");
Outputs();
}
printf("\n\n       建造完成!\n\n");
fun();
printf("         1.重走迷宫\n");
printf("         2.退出游戏\n");
fun();
scanf("%d",&e);
system("cls");
switch(e)
{
case 1:a=0,b=1;
  s[a][b]=2;
        s[0][0]=26;
                  s[20][45]=26;
  Outputs();
while(a!=20 || b!=45)
{
printf("\n\n\npress w to up\npress a to left\npress s to down\npress d to right\n");
d=getch();
switch(d)
{
case 'w':a--;
if(a<0)
a=0;
else
{
if(s[a][b]!='X')
{
s[a][b]=2;
s[a+1][b]=' ';
}
else
a++;
}
break;
case 'a':b--;
if(b<0)
b=0;
else
{
if(s[a][b]!='X')
{
s[a][b]=2;
s[a][b+1]=' ';
}
else
b++;
}
break;
case 's':a++;
if(a>20)
a=20;
else
{
if(s[a][b]!='X')
{
s[a][b]=2;
s[a-1][b]=' ';
}
else
a--;
}
break;
case'd':b++;
if(b>45)
b=45;
else
{
if(s[a][b]!='X')
{
s[a][b]=2;
s[a][b-1]=' ';
}
else
b--;
}
break;
}
system("cls");
Outputs();
}
printf("\n     You win\n");
break;
case 2:
return 0;
}
}
case 2:
return 0;
}
return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值