Java写文字冒险类游戏_用木兰语言编写文字冒险游戏(十三、四章),又一个特性发现...
繼續改寫 Python 文字冒險游戲,第十三章的主要添加了玩家在每格的行動限制:
func 選擇命令(位置, 玩家) {
行動 = nil
while !行動 {
可選行動 = 取可選行動(位置, 玩家)
選擇 = input("行動: ")
行動 = 可選行動.get(選擇)
if 行動 {
// 為避免如此特殊處理, 其他行動也需加"環境"參數
if (行動 == 玩家.攻擊) {
行動(位置.敵人)
} else {
行動()
}
} else {
println("選擇無效!")
}
}
}
另外地圖改成表示如下,連同對應解析方法:
地圖描述 =
"| |VT| |\n" +
"| |EN| |\n" +
"|EN|ST|EN|\n" +
"| |EN| |\n"
十四章又添加了一個商販角色,可以購買裝備。另外,將地圖解析方法改進為可以讀取起始位置:
func 解析地圖描述 {
if !檢查無誤(地圖描述) {
throw SyntaxError("描述 is invalid!")
}
各行 = 地圖描述.splitlines()
各行 = list(filter(x -> x, 各行))
for y, 行 in enumerate(各行) {
行數據 = []
各塊 = 行.split("|")
各塊 = list(filter(c -> c, 各塊))
for x, 塊 in enumerate(各塊) {
地塊類型 = 地塊類型表[塊]
if 地塊類型 == 起始位置 {
extern 起始點
起始點 = tuple(x, y)
}
行數據.append(地塊類型 ? 地塊類型(x, y) : nil)
}
地圖.append(行數據)
}
}
木蘭語言相關注意點
? : 是表達式,不能單獨作為聲明使用。因此 print( 2<4 ? 3 : 4) 這樣可以,if 2>1{ 2<4 ? print(3) : print(4) } 就不可以。
python 的 global 對應木蘭的 extern,發現在引用時有個奇特之處。簡化演示如下:
如下聲明 x,函數 a 對其作修改:
x = 1
func a() {
extern x
x = x * 3
}
println("原值:`x`")
如果這樣引用:
using * in 原值
a()
println("修改后:`x`")
輸出如下,可見修改未果:
原值:1
修改后:1
這樣調用才修改有效:
using 原值
原值.a()
println("修改后:`原值.x`")
輸出:
原值:1
修改后:3
Python 行為也相同。待研究,不知是否與之前發現的 引用機制 有何關聯。
總結
以上是生活随笔為你收集整理的Java写文字冒险类游戏_用木兰语言编写文字冒险游戏(十三、四章),又一个特性发现...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嘘!wemall三级分销的最新秘密!
- 下一篇: UNIAPP 找不到手机或模拟器解决办法