VB 版 (精华区)

发信人: aaaz (我最笨了), 信区: VB
标  题: QB角色扮演游戏四天写作课程(3) 
发信站: 哈工大紫丁香 (2000年07月27日09:38:52 星期四), 转信

第二天

为了让游戏显得有趣些,让我们使用 RND 在迷宫内制造一些怪物吧。而每个房间内
出现的金币多寡,则需视看守者的强弱而定。OK,请接著输入以下程式:

CLS
DIM monster(10, 10)                             :REM  <--- new
FOR count1 = 1 TO 10                            :REM    |
 FOR count2 = 1 TO 10                           :REM    |
  monster(count1, count2) = INT(RND * 11)       :REM    |
 NEXT count2                                    :REM    |
NEXT count1                                     :REM   _|


row = 5
column = 5
moveErr$ = "You cannot move in that direction!"
exitRow = INT(RND * 10) + 1
exitColumn = INT(RND * 10) + 1
gold = 0

DIM monster$(10)                            :REM  <--- new
RESTORE monsterData                         :REM    |
FOR count = 1 TO 10                         :REM    |
 READ monster$(count)                       :REM    |
NEXT count                                  :REM   _|

LOCATE 14, 1
PRINT "Commands:   n - north"
PRINT "            s - south"
PRINT "            e - east"
PRINT "            w - west"
PRINT "            x - use exit"
PRINT
PRINT "            q - quit"


DO
 LOCATE 1, 1
 PRINT "Your position:"; row; column
 IF ((row = exitRow) AND (column = exitColumn)) THEN
  LOCATE 2, 1
  PRINT "You are at the exit!"
 ELSE
  LOCATE 2, 1
  PRINT SPACE$(79)
 END IF
 LOCATE 3, 1                                         :REM  <--- new
 PRINT "Monster: ";                                  :REM    |
 monsterType = monster(row, column)                  :REM    |
 IF monsterType = 0 THEN
  PRINT "nothing   "                                 :REM    |
 ELSE                                                :REM    |
  monsterName$ = MID$(monster$(monsterType), 1, 10)  :REM    |
  PRINT monsterName$                                 :REM    |
 END IF                                              :REM   _|

 LOCATE 8, 1
 INPUT "What now"; reply$
 LOCATE 10, 1
 PRINT SPACE$(79)

 SELECT CASE reply$
        CASE IS = "n"
         IF row = 1 THEN
          LOCATE 10, 1
          PRINT moveErr$
         ELSE
          row = row - 1
          LOCATE 10, 1
          PRINT "You go north."
         END IF
        CASE IS = "s"
         IF row = 10 THEN
          LOCATE 10, 1
          PRINT moveErr$
         ELSE
          row = row + 1
          LOCATE 10, 1
          PRINT "You go south."
         END IF
         END IF
        CASE IS = "w"
         IF column = 1 THEN
          LOCATE 10, 1
          PRINT moveErr$
         ELSE
          column = column - 1
          LOCATE 10, 1
          PRINT "You go west."
         END IF
        CASE IS = "e"
         IF column = 10 THEN
          LOCATE 10, 1
          PRINT moveErr$
         ELSE
          column = column + 1
          LOCATE 10, 1
          PRINT "You go east."
         END IF
        CASE IS = "x"
         IF ((row = exitRow) AND (column = exitColumn)) THEN
          IF gold < 100 THEN
           LOCATE 10, 1
           PRINT "You dont have enough gold!"
          ELSE
           LOCATE 10, 1
           PRINT "You have escaped! Well done!"
           END
          END IF
         END IF
        CASE IS = "q"
         LOCATE 10, 1
         PRINT "Bye!"
         END
 END SELECT

LOOP

monsterData:                      :REM  <--- new
DATA "blind bat "                 :REM    |
DATA "rat       "                 :REM    |
DATA "snake     "                 :REM    |
DATA "goblin    "                 :REM    |
DATA "troll     "                 :REM    |
DATA "bear      "                 :REM    |
              :REM    |
DATA "lion      "                 :REM    |
DATA "sabretooth"                 :REM    |
DATA "elephant  "                 :REM    |
DATA "dragon    "                 :REM   _|

我们需要在每个房间增加一个数值,来记录每个房间内的怪物种类。 还记得迷宫的
规模吧?没错, 我们需要 10x10 的空间来储存这些资料。 还记得主角的位置是以
row 与 column 两个变数来记录的吗?同样地, 我们也可以用类似的方式来记录房
间内的怪物。 因此只要透过 column,row 变数值,就可以得知主角所在位置内的生
物种类了(透过 monster(row, column) 来完成)。

在程式的开头,  我们设定了每个房间的怪物种类,  范围从  0  到  10  (记住
,INT(RND*11) 是不可能产生 11 这个数值的)

那麽, 为什麽不从 1 编到 10 呢?这是因为 0 被用来作为空房间(无怪物存在)
之用。

READ与RESTORE是做什麽用的?

READ 命令会自动找寻程式中的 DATA 叙述, 并读取其後对应的资料。 除非你使用
RESTORE 命令改变资料读取的启始位置, 否则资料将从第一个 DATA 叙述开始读取

A 叙述开始读取



为什麽要使用   READ、  DATA   的资料储存与读取方式,   我们不是也可以用像
monster$(1) = "blind bat "、monster$(2) = "rat " 的作法来处理吗?

同质性的资料能归纳在一起,比较容易管理(增删、搜寻特定资料等)。 此外,你
也可以使用 FOR..NEXT,回圈的方式读入资料,而不必像 monster(x)="abcd" 般逐
一输入每笔资料。

关於 READ,最後想说的是,因为系统仍会保留上次读取的资料位置,因此当你需要
从头开始读取资料时,必须先使用 RESTORE指令来指定读取资料的启始位置。

特别记得我们如何使用 monsterType 变数与 monster$ 阵列来显示该怪物的名称。
例如 monsterType=1, 那麽 monster$(monsterType) = "blind bat",也就是该生
物的名称。

我想,今天的课程应该够你忙上一整天了。

--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 203.93.18.173]

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.226.221]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.395毫秒