?? qb
字號:
CASE IS = "w"
IF column = 1 THEN
LOCATE 10, 1
PRINT moveErr$
ELSE
column = column - 1
LOCATE 10, 1
PRINT "You go west."
IF monsterType = 0 THEN
LOCATE 10, 1
PRINT "There's nothing to attack!"
ELSE
DO WHILE ((MonsterHealth > 0) AND (health > 0))
LOCATE 10, 1
PRINT SPACE$(79)
PRINT SPACE$(79)
PRINT SPACE$(79)
LOCATE 10, 1
attack = weapon + INT(RND * 9)
SELECT CASE attack
CASE IS = monsterAttack
PRINT "No one wins this round."
CASE IS > monsterAttack
:REM <-- changed
PRINT "You deal the "; RTRIM$(monsterName$); " a blow!"
:REM _____|
MonsterHealth = MonsterHealth - 1
CASE IS < monsterAttack
PRINT "You have been wounded!"
health = health - 1
END SELECT
PRINT pressKey$
SLEEP
LOOP
LOCATE 10, 1
IF health > 0 THEN
PRINT "You won the fight!"; SPACE$(20)
PRINT "You found "; MonsterGold; " pieces of gold!"
gold = gold + MonsterGold
monsterType = 0
monster(row, column) = 0
PRINT pressKey$
SLEEP
ELSE
:REM <-- changed
PRINT "The "; RTRIM$(monsterName$); " killed you!"; SPACE$(20)
:REM _____|
PRINT "Game over!"; SPACE$(20)
END
END IF
END IF
CASE IS = "t" :REM <--new
IF itemType (or edit) = 0 THEN :REM |
LOCATE 10, 1 :REM |
PRINT "Nothing to take!" :REM |
PRINT pressKey$ :REM |
SLEEP :REM |
ELSE :REM |
SELECT CASE itemClass$ :REM |
CASE IS = "F" :REM |
LOCATE 10, 1 :REM |
PRINT "You eat the "; RTRIM$(itemName$); "." :REM |
IF health = 20 THEN :REM |
PRINT "You had no wounds, so the food is wasted." :REM |
ELSE :REM |
health = health + itemValue :REM |
PRINT "You gain "; itemValue; " health points." :REM |
END IF :REM |
CASE IS = "W" :REM |
LOCATE 10, 1 :REM |
IF weapon >= itemValue THEN :REM |
PRINT "You have a similar or better weapon." :REM |
ELSE :REM |
PRINT "You pick up a "; RTRIM$(itemName$); " !" :REM |
weapon = itemValue :REM |
PRINT "Your weapon rating is now "; weapon; "." :REM |
END IF :REM |
END SELECT :REM |
PRINT pressKey$ :REM |
SLEEP :REM |
item(row, column) = 0 :REM |
itemType (or edit) = 0 :REM |
END IF :REM _|
CASE IS = "q"
LOCATE 10, 1
PRINT "Bye!"
END
END SELECT
LOOP
monsterData:
DATA "blind bat 21"
DATA "rat 11"
DATA "snake 31"
DATA "goblin 23"
產(chǎn)生亂數(shù)的依據(jù)。由於我們在程式過程未設定該基底值,才會有每次亂數(shù)序皆相同的
現(xiàn)象。 RANDOMIZE 正是用來重新設定該數(shù)值的命令,而 TIMER 則代表著從子夜起到
目前所經(jīng)過的秒數(shù)。 所以我們只要巧妙的利用 RANDOMIZE TIMER 這道命令,就可以
在每次執(zhí)行時,產(chǎn)生不同的亂數(shù)。
物品的設置與邪惡怪物的安排相同, 我們是以 item(10,10) 的陣列來儲存,如此可
讓每個房間都能存有一件物品。我們設定房間內(nèi)出現(xiàn)物品的機率為百分之二十( RND
< 0.2 ),而物品的編號則從 1 到 9。物品名稱則存放在 item$ 陣列之中。
CHR$ 是將數(shù)值轉(zhuǎn)換成對應的 ASCII 字元。 舉例來說,我們可以用 PRINT CHR$(65)
來替代 PRINT "A"。65 則是 "A" 字元在 ASCII 字元表中的序碼。
透過 CHR$ 我們可以使用一些有趣的字元,這可以使畫面顯得更豐富。在 QBasic 中
, 只要按下 SHIFT-F1,選擇 "Contents" 與 "ASCII charater codes" 後就可以瀏
覽 ASCII 字元集。 瞧瞧 ASCII 數(shù)值為 2 所對應的字元,是不是有點像 PACMAN 呢
?
每個物品都有自己的名稱、類別與數(shù)值。 類別用以區(qū)分它究竟屬於食物( "F" )、
武器( "W" )還是陷阱( "T" )。而數(shù)值的定義則依類別的不同而有所差別。以下
是不同類別,其數(shù)值所代表的意義:
類別: 食物 數(shù)值: 主角可獲得的生命點數(shù)
武器 主角可獲得的 " 武器 " 屬性
陷阱 主角觸及時,將損失的生命點數(shù)
LEFT$(a$, 10) 與 MID$(a$,1,10) 的執(zhí)行結(jié)果完全相同。換句話說,前者只是固定
從字串開頭作為啟始位置。 而 RIGHT$("ABCDE", 3) 將會傳回 "CDE",也就是自整
個字串右邊第三個字元開始算起復制字串。
其實 MID$ 可以完全取代 LEFT$ 與 RIGHT$, 不過使用後兩者應該可以節(jié)省一點時
間。
當主角走進一間有陷阱的房間內(nèi),會立即減損一部份的生命力。 陷阱一旦被觸發(fā)就
失去效用, 換句話說, 它只會造成一次傷害。 (解除方式為將陣列
item(row,column) 的值設定為 0 )
RTRIM$("ABC ") 會傳回 "ABC"。 換句話說,RTRIM$ 會消除右邊的所有空白字原部
份。LTRIM$ 用法類似,只不過它是從字串左方開始消除空白字元。
在取得物品方面,我們另外加入了一些有趣的檢查。 假如主角在拾獲一份食物時毫
發(fā)無傷( health=20 ),那麼取得這份食物無疑是一種浪費。另外假使主角試著舍
取一把不比目前手中為佳的武器時,程式也會于以制止。
OK,我們的 RPG 計畫至今已終於完工了。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -