VB 版 (精华区)

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

发信人: netwolf (小狼), 信区: GAME_Designer
标  题: QB角色扮演游戏四天写作课程(2)
发信站: BBS 水木清华站 (Thu Jul 24 17:17:06 1997)

第一天

我们打算制作的 RPG 格局十分简单:你身处一个迷宫之中,必须设法找到出口。为
了避免过程过於枯燥,迷宫内同时也有其他具攻击性的(邪恶)怪物。 设法击败它
们,以取得可资运用的金币。 另外,食物、武器与其他有用的装备也会出现在某些
房间内。而其中只有一个房间有出口;但打开它则需要一百个金币。

让我们先从规画能让玩者行进其间的迷宫开始。(随时按下 'q' 键即可退出游戏)
请输入以下的程式片段,并试著执行它:

CLS
row = 5
column = 5
column = 5
moveErr$ = "You cannot move in that direction!"

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

DO
 LOCATE 1, 1
 PRINT "Your position:"; row; column
 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
        CASE IS = "w"
         IF column = 1 THEN
          LOCATE 10, 1
          PRINT moveErr$
         ELSE
          column = column - 1
          LOCATE 10, 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 = "q"
         LOCATE 10, 1
         PRINT "Bye!"
         END
 END SELECT

LOOP

你应该已经注意到,这个迷宫的规模为 10x10,也就是共有一百个房间。 假使你尝
试著往墙外移动的话,程式将会予以制止,并显示出一段错误讯息。 (讯息内容储
存在 "$moveErr$" 变数之内)

INPUT 指令会要求使用者输入一个数值,并将其储存於指定的变数内。 除此之外,
你还可以在等待使用者输入之前, 显示一段讯息(如同上述程式中的  "What now"
)。

SPACE$ 指令则可以产生空白字元;SPACE$(2) 其实就等於 " "。程式中使用这个指
令来清除上一次等待使用者输入时,萤幕上多馀的错误讯息。

"INT(RND * 10) + 1" 则是用来制作范围从 1 到 10 之间的随机乱数。整个式子究
竟是如何动起来的?首先, INT 会传回数值的整数部份,例如 INT(1.9) 会传回 1
。 而 RND 函数则会产生 0 到 1 之间的数值, 因此 RND*10 会得到一个 0 到 10
之间的数值。因为 INT(0.99) 的传回值为 0,INT(9.99) 的传回值为 9,所以我们
需要额外加 1,以符合我们的需求。

现在,让我们替这个迷宫增加一个出口:

CLS
row = 5
column = 5
moveErr$ = "You cannot move in that direction!"
exitRow = INT(RND * 10) + 1                       :REM  <--- new
exitColumn = INT(RND * 10) + 1                    :REM    |
                  :REM    |
gold = 0                                          :REM   _|

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

DO
 LOCATE 1, 1
 PRINT "Your position:"; row; column
                                                         :REM  <--- new
 IF ((row = exitRow) AND (column = exitColumn)) THEN
  LOCATE 2, 1                                            :REM    |
  PRINT "You are at the exit!"                           :REM    |
 ELSE                                                    :REM    |
  LOCATE 2, 1                                            :REM    |
  PRINT SPACE$(79)                                       :REM    |
 END IF                                                  :REM   _|
                      :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
          LOCATE 10, 1
          PRINT "You go south."
         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"                                           :REM  <--- new
         IF ((row = exitRow) AND (column = exitColumn)) THEN
                                                                :REM    |
          IF gold < 100 THEN
           LOCATE 10, 1                                         :REM    |
           PRINT "You dont have enough gold!"                   :REM    |
          ELSE                                                  :REM    |
           LOCATE 10, 1                                         :REM    |
           PRINT "You have escaped! Well done!"                 :REM    |
           END                                                  :REM    |
          END IF                                                :REM    |
         END IF                                                 :REM   _|
        CASE IS = "q"
         LOCATE 10, 1
         PRINT "Bye!"
         END
 END SELECT

LOOP

试一试,看你是否能顺离逃出生天?
明天,我们的迷宫也许就会增加敌人与金币哦!

--
生天?
明天,我们的迷宫也许就会增加敌人与金币哦!

--
※ 来源:·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)
页面执行时间:4.285毫秒