CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

新手哭求洞穴寻金游戏的程序

楼主daisyxiao()2004-12-03 21:54:10 在 C/C++ / 新手乐园 提问

可怜可怜吧T_T  
  洞穴寻金游戏描述  
   
  洞穴寻金游戏(亦称猛兽世界)是早期的计算机游戏之一。在这个游戏中,探险者在迷宫洞穴中漫游,寻找金子的同时避免被猛兽吃掉或掉入深渊。下面是有关这个游戏的叙述。  
  猛兽世界由含有多个屋子的洞穴组成。每间屋子可能为空,也可能包含单件物品。这类物品可以是下列对象之一:一只猛兽、一块金子、一道深渊、一个出口。猛兽指的是一种凶恶的动物,探险者遇见它(处在同一间屋子内)肯定送命。但是,用剑可以杀死猛兽。寻找金子是探险者的目的,然后通过带有出口的屋子逃离洞穴。探险者还需要避免掉入深渊,掉入深渊可以叫人送命。每个迷宫洞穴最多有一只猛兽、一块金子及一个出口。洞穴还可能有零到多个深渊。这些东西在单间屋子里只能出现一种。猛兽世界的边界由固体墙构成,探险者不能穿透墙体。探险者可以在各间屋子之间移动,但要冒着掉入深渊和被猛兽吃掉的危险。因为隔壁屋子可能存在猛兽或深渊。下图是一个4X4的猛兽世界,其中有一只猛兽、一块金子、两道深渊、一个出口。  
   
  +------+------+------+------+  
              |Player|             |   Pit     |             |  
              |Exit     |             |             |             |  
              +------+------+------+------+  
              |             |             |             |             |  
              |           |             |             |             |  
              +------+------+------+------+  
              |           |   Pit     |             |Wumpus|  
              |           |             |             |             |  
              +------+------+------+------+  
              |           |             |             |Gold     |  
              |           |             |             |             |  
              +------+------+------+------+  
  探险者在猛兽世界的动作有:左转turn   left、右转turn   right、前行move   forward、射击shoot、攀爬climb、攫取grab。左转、右转改变探险者行走和射击的方向。转身指的是在原有方向上左转或右转90度。比如,探险者从北边左转90度,将使探险者面向西面。射击指的是将箭射向当前方向上的隔壁屋子里。如果这个邻近的屋子里有猛兽,就将杀死它。前行指的是在当前方向上从一间屋子移动到另一间屋子。如果在这个方向上前行且没有墙的阻挡,就将进入到隔壁邻近的屋子中。攫取指的是如果当前屋子内有金子就抓取它。攀爬指的是如果处在洞穴的出口就爬出来。  
  用户可以通过一系列的感知行为感觉到猛兽世界里探险者所处的处境。如果探险者所处的隔壁屋子里有一只猛兽他就将能闻到(smell)猛兽的气味;如果隔壁屋子是一道深渊,则探险者能感觉到(feel)深渊的阴森;如果探险者处在有出口的屋子,他将能看到(see)上方透出的光线;如果探险者与金子同处一屋,他将能看到(see)金子发出的光芒。当探险者执行某些动作达到目的后,他将被告知结果。比如,当探险者与金子同处一屋,并且探险者发出了攫取动作,则要告诉探险者“你得到攫取到了金子(You   grabbed   the   gold)”;当探险者射出了箭而被射的屋子里确有猛兽,则要告诉探险者“你杀死了猛兽(You   killed   the   wumpus)“。最后,如果探险者试图直接走出洞穴他将撞到墙上。选手也只需要判断从不同方向接近的哪一间邻近屋子可能存在猛兽或深渊。  
   
   
  在这个实验中,你需要做的是:  
  1. 阅读上述关于猛兽世界的描述。设计猛兽世界的初始状态:猛兽世界的大小、探险者的位置和方向、以及可能的猛兽,金子,出口和深渊的位置。  
  2. 采用某种易于处理的表示方法来表示上述状态信息。  
  3. 从标准输入读入用户指令,由此修改以前的状态信息。  
  4. 将探险者当前正在体验的任何感知行为输出到屏幕上。  
  5. 判断用户的输赢,并将相应结果打印输出,终止游戏。  
  6. 如果用户输入文件结束符,或者游戏以正常输赢结束,打印猛兽世界的当前状态。  
   
   
  猛兽世界文件格式:由行组成,   每行有一个正文关键字,2或5个整数参数。关键字指明参数的意义。比如,前述猛兽世界可以用下述文件表述:  
   
  dim                           4   4  
  player         0   0   1   0   1  
  wumpus                     3   2  
  gold                         3   3  
  pit                           2   0  
  pit                           1   2  
  exit                         0   0  
   
  dim   分别表示x和y的大小。X代表水平,y代表垂直。  
  注意:猛兽世界的维数最大不会超出100X100。  
  player   有5个参数:按序为   x   y   o   g   a   。x,y   代表位置;o   代表探险者当前的方向,0代表东,1代表南,2代表西,3代表北;g   和a   是布尔量,分别用来指明探险者是否有金子或箭。注意:探险者最多只有一支箭。  
  wumpus   代表wumpus的位置,这里为(3,2)。  
  gold,   pit,   and   exit分别指明金子、深渊、出口的位置。这里有两道深渊。  
  各关键字的出现必须按照这个次序,多个深渊应该集中出现。dim,   player,   and和exit行是必须出现的,其它行根据具体情况来定。  
  初始状态和中间状态、最终状态的保留的格式都是相同的。  
   
  选手(用户)输入格式:选手用正文发出指令。一行一条指令。指令由一个或两个单词组成。两个单词的指令中间由空格分隔。下面是一些可能的指令:  
   
  shoot  
  grab  
  climb  
  turn   left  
  turn   right  
  move   forward  
   
  如果选手输入了非法的命令,程序必须做出"That   command   had   no   effect."的回应。  
   
  感知输出格式:   探险者在探险过程中的感知应该按下列方式,一行一行地精确打印输出。如果一个动作引起了多个感知,应该按下列显示的次序都打印出来。比如,如果探险者被猛兽咬死或探险者掉入深渊,首先应该报告他的所有感知。注意,一旦探险者从洞穴出来,只能报告最后两条感知中的一种,不存在其它的出洞感知。  
   
  You   bumped   into   a   wall.  
  You   killed   the   wumpus.  
  Your   arrow   disappeared   into   the   darkness.  
  You   smell   a   wumpus.  
  You   feel   a   breeze.  
  You   see   glitter.  
  You   see   light   above.  
  You   fell   into   a   pit.  
  You   were   killed   by   the   wumpus.  
  You   grabbed   the   gold.  
  You   are   out   with   the   gold.  
  You   are   out   without   the   gold.  
   
  攫取金子和杀死猛兽:如果探险者和金子同处一间屋子,并且探险者执行了攫取(grab)动作,那么在接下来的游戏过程中探险者将一直怀抱金子。这意味着在刚才的那间屋子里不再有金子,因此它也将不再会引起探险者看到金子的光芒。如果由此保留猛兽世界的状态,则在状态文件中应该不再出现金子,并且player行上的g参数应该为1。  
  同样地,如果探险者将箭射向了猛兽所在的屋子,猛兽被杀死了,猛兽世界中将不再有猛兽出现,因此也不再会闻到猛兽的气味,猛兽也不会再出现在状态文件中。也要注意一旦射出箭,探险者也不再有箭,由此保留的游戏状态中的player行上的a参数应该为0。  
   
   
  输出感知:一旦有感知就要立刻输出。如果探险者处在洞穴边上的屋子并且试图往外移动,就应该报告撞墙的感知。比如,在上述猛兽世界状态布局中,探险者的位置为(0,0)并且他还试图往北移动,此时就要报告感知“You   bumped   into   a   wall.”,但探险者的位置没有改变。  
  如果探险者处于一间有金子的房间,就应该报告"You   see   glitter."   在本例中,如果探险者位于(2,3),并且向东移动到(3,3),那么就应该报告看到金子光芒的感知。如果探险者就在(3,3)屋子里左转、右转或朝墙移动(结果并没有移动成功),也应该报告看到金子光芒的感知。。一旦探险者拿到了金子,对金子光芒的感知就不应该再报告,因为目前金子为探险者所拥有。当探险者成功地执行了攫取动作时,应该报告"You   grabbed   the   gold.",但是紧跟着这个动作后只能报告一次。如果探险者进入了一个带有出口的屋子,也应该报告"You   see   light   above."。  
  如果探险者进入一间屋子,这间屋子的隔壁屋子(可以是东、南、西、北)带有深渊,应该报告"You   feel   a   breeze"。例如,在上述的例子中,屋子(1,2)带有深渊,处于屋子(1,2),   (0,2),   (2,3),   (1,1),   and   (1,3)都要报告这个感知。注意,如果有多于一个的邻近深渊,应该为每个深渊报告这个感知。  
  与深渊的感知类似,如果猛兽在当前屋子或邻近屋子,都应该报告闻到猛兽气味的感知。如果探险者杀死了猛兽,那么将不再报告这个感知。  
   
  问题点数:50、回复次数:15Top

1 楼kittypizza(极光)回复于 2004-12-03 22:02:24 得分 0

沙发,先坐了说。。。  
  一个字,强。。。  
  学习中。。。Top

2 楼superpig2k(superpig2k)回复于 2004-12-04 10:47:47 得分 0

呵呵,帮你顶一下Top

3 楼greenteanet(扎扎实实打基础,保持一颗平常心。)回复于 2004-12-04 16:11:02 得分 0

帮忙顶一下..Top

4 楼army258(阿敏)回复于 2004-12-04 17:11:42 得分 0

分数太少,  
  能做也不会帮啊。Top

5 楼Flood1984(峰子)回复于 2004-12-04 17:21:32 得分 0

这个程序要是想锻炼,  
  自己写一下可以,  
  要别人帮写这么大的工程,  
  对自己有什么用呢?  
  Top

6 楼homtipo()回复于 2004-12-04 21:14:01 得分 0

很简单的嘛,以前我做过一个。   你留下你的电子邮件。   我的电子邮件是  
  homtipo@163.com  
   
  记得给我加分哟。Top

7 楼homtipo()回复于 2004-12-04 21:28:40 得分 50

#include   <iostream>  
  #include   <string>  
  #include   <windows.h>  
  using   namespace   std;  
   
   
  #define   PERR(bSuccess,   api){if(!(bSuccess))   printf("%s:Error   %d   from   %s   \  
  on   line   %d\n",   __FILE__,   GetLastError(),   api,   __LINE__);}    
   
  class   explore  
  {  
  private:  
  /*     定义洞穴数据结构   */  
  typedef   struct   _cave  
  {  
  bool   _gold;         //洞穴是否有黄金      
  bool   _wumpus;     //洞穴是否有猛兽  
  bool   _pit;           //不会是深渊吧  
  bool   _exit;         //难道是出口  
  bool   _foot;         //有印象这个地方应该走过吧  
  };  
   
          /*   定义玩家数据结构   */  
  typedef   struct   _player  
  {  
  int   _x;         //玩家当前的x坐标位置  
  int   _y;         //玩家当前的y坐标位置  
  bool   bullet;     //玩家是否拥有子弹  
  bool   _gold;   //也许挖掘到黄金了哟  
  int   _direct;     //玩家的方向   (   0   -   East       1   -   South       2   -   West       3   -   North   )    
  };  
   
  bool   map_set;                           //用户定义了地图了吗  
  int   x_max,y_max;                     //定义玩家定义地图最大值  
   
  public:  
   
  _cave   atlas[100][100];         //   构造地图   (   最大地图尺寸为   100x100     )  
  _player   player1;   //   建立一个新的玩家  
  explore(int,int);               //初始化数据结构参数  
  void   cls();                         //清幕  
  void   menu();                 //选择菜单  
  void   custom_map();      
  void   start_game();  
  void   shoot();  
  void   grab();  
  void   left();  
  void   right();  
  void   forward();  
  void   climb();  
  void   apperceive();  
  void   move(int   direct);  
  void   help();  
  void   pos();  
  bool   path_judge(int   direct);           //判断前面是不是通的  
  void   exit_game();         //退出游戏  
  };Top

8 楼homtipo()回复于 2004-12-04 21:30:29 得分 0

后面具体实现太多了。无法写上去。   你发电子邮件给我,然后我将源程序和可执行程序都发给你。记得加分哟。哈哈Top

9 楼superpig2k(superpig2k)回复于 2004-12-04 22:33:48 得分 0

这是哪所学校的c语言题目啊,留给什么院做的Top

10 楼cao12m(★草上飞★)回复于 2004-12-05 02:04:05 得分 0

进来都没工夫坐!!没沙发   走拉Top

11 楼qingyuan18(zealot_tang)回复于 2004-12-05 10:29:20 得分 0

我靠!!用c来做么??好强!!  
   
  关注ing...Top

12 楼homtipo()回复于 2004-12-05 19:13:25 得分 0

哈哈,已经发给你了,要是没有收到再给我留言吧Top

13 楼qrlvls( 空 气 )回复于 2004-12-05 19:56:51 得分 0

太可怜了,帮你顶Top

14 楼skyofdreams(梦想天空)回复于 2004-12-06 01:50:49 得分 0

呵呵,   Text   based   game.   可以结了.Top

15 楼coyprightbao(Mr'Bao)回复于 2004-12-06 21:21:37 得分 0

非法交易!!!!!!!:)Top

相关问题

  • 怎么编程序修改游戏?(比如金钱,生命值)
  • 程序员玩游戏吗?
  • 游戏程序员请进!
  • 有关游戏程序员的薪资?
  • 程序员游戏爱好大调查
  • 寻找一个游戏的源程序
  • AntiGame 反游戏更新------我的程序
  • VB.net编手机游戏程序
  • 游戏喊话程序的实现
  • 调查:程序员如果玩游戏都玩什么游戏?

关键词

  • 玩家
  • 游戏
  • 数据结构
  • 探险者
  • 猛兽
  • 屋子
  • 金子
  • 洞穴
  • 深渊
  • 感知

得分解答快速导航

  • 帖主:daisyxiao
  • homtipo

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo