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毫秒