简介
这个游戏的目的是要玩家通过尽可能多的楼层,并且最多只能操作1000次。
算法
地图生成算法
魔塔的每一层都是q×w的矩阵(q、w为介于3至20的整数,每层的各房间的q、w相同,不同层的q、w不一定相同),随机生成墙壁、门、怪物(成长期、成熟期、完全体、究极体)、钥匙、伤药、食物、武器、护具。同时,会在矩阵四个顶点的上方或者下方随机生成去其他层的楼梯,玩家也由某个通道进入矩阵。
| 物体 | 生成几率 | 符号 | 描述 |
|---|---|---|---|
| 楼梯 | - | <> | 通往下一楼层 |
| 通道 | - | [x] | 通往同一楼层的其他房间 |
| 空地 | 0.34 | . | 可以通过的空地 |
| 墙壁 | 0.34 | # | 无法通过的障碍物 |
| 门 | 0.07 | + | 消耗1把钥匙即可打开并保持畅通,否则无法通过 |
| 钥匙 | 0.04 | 1 | 打开门的道具,消耗品 |
| 成长期怪物 | 0.10 | n | |
| 成熟期怪物 | 0.04 | m | |
| 完全体怪物 | 0.02 | M | |
| 究极体怪物 | 0.01 | G | |
| 伤药 | 0.01 | C | 恢复体力 |
| 食物 | 0.01 | F | 增强体力10点 |
| 武器 | 0.01 | W | 增加攻击2点 |
| 护具 | 0.01 | H | 增加放御1点 |
生成算法可以尝试Conway’s Game of Life。
怪物死亡时候有几率掉落物品,掉落几率与生成几率相同。
攻防死亡算法
玩家与怪物具有体力、攻击、防御等属性值,体力为零时会休克死亡。真正攻击的公式为
真正防御力的公式为
若真正攻击小于真正防御,则不造成伤害,否则产生被攻击者体力的下降。
下表列出了玩家与各种怪物初始时的体力、攻击、防御值。
| 生物 | 体力 | 攻击 | 防御 | 符号 |
|---|---|---|---|---|
| 玩家 | 100(上限120) | 15 | 10 | @ |
| 成长期怪物 | 10 | 10 | 8 | n |
| 成熟期怪物 | 20 | 12 | 12 | m |
| 完全体怪物 | 40 | 15 | 18 | M |
| 究极体怪物 | 50 | 22 | 24 | G |
代码(使用R-3.4.4)
地图生成代码
使用R语言生成地图,定义一个生成函数SC(q,w)能够在创建地图时返回所有位置的物品的符号。并且定义一个数组ditu[“x”,”y”]存放坐标(“x”,”y”)下物体的符号。
# R version 3.4.4
# dim function SC()
SC<-function(q=10,w=10){
a=runif(q*w,min=0,max=1)
a[0.00<a & a<=0.34]="."
a[0.34<a & a<=0.68]="# "
a[0.68<a & a<=0.75]="+"
a[0.75<a & a<=0.79]="-"
a[0.79<a & a<=0.89]="n"
a[0.89<a & a<=0.93]="m"
a[0.93<a & a<=0.95]="M"
a[0.95<a & a<=0.96]="G"
a[0.96<a & a<=0.97]="C"
a[0.97<a & a<=0.98]="F"
a[0.98<a & a<=0.99]="W"
a[0.99<a & a<=1.00]="H"
a[a=="-"]="1"
a[1]="@"
array(a,dim=c(q,w))
}
ditu=SC(q,w)
将ditu用plot表示
创建pt(q,w,ditu),将如上生成的地图数据绘制
# dim pt(q,w,ditu) to draw maps
pt<-function(q=10,w=10,ditu=SC(q,w)){
plot(c(0,0,2,2,w*2-2,w*2-2,w*2,w*2,w*2-2,w*2-2,2,2,0),c(-2,q*2+2,q*2+2,q*2,q*2,q*2+2,q*2+2,-2,-2,0,0,-2,-2),type ="l",xlim=c(0,2*w),ylim=c(-2,2*q+2),xlab="The magic tower",ylab="",bty="n",xaxt="n",yaxt="n",xaxs="i",yaxs="i")
grid(nx=w,ny=q+2)
text(1,2*q+1,"[x]")
text(c(1,2*w-1,2*w-1),c(-1,-1,2*q+1),"<>")
b=rep(seq(2*q-1,1,-2),w)
a=rep(seq(1,2*w-1,2),each=q)
text(a,b,ditu)
}
对战代码
定义怪物地图mditu记录怪物体力值。
mditu=ditu
mditu[ditu=="n"]<-"10"
mditu[ditu=="m"]<-"20"
mditu[ditu=="M"]<-"40"
mditu[ditu=="G"]<-"50"
定义fight(),输出玩家与怪物对战后双方的体力。
# fight()直接定义成function(){}就好了,不比传入参数,因为fight()使用的参数都是全局使用的。
fight<-function(mon=data.frame(type=ditu[rw$x,rw$y],life=as.numeric(mditu[rw$x,rw$y]))){
if(mon$type=="n") mon=cbind(mon,lli=10,att=10,def=8) else
if(mon$type=="m") mon=cbind(mon,lli=20,att=12,def=12) else
if(mon$type=="M") mon=cbind(mon,lli=40,att=15,def=18) else
if(mon$type=="G") mon=cbind(mon,lli=50,att=22,def=24)
att=rw$life/100*rw$att
def=mon$life/mon$lli*mon$def
if(att>def){
d=att-def
mon$life=mon$life-d
if(mon$life<=0){
cat("Monster is defeated. \n")
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
return("y")
} else{
cat("Monster: Life:",mon$life,"Attack:",mon$att,"Defence:",mon$def,"\n")
}
}
if(att<=def){
cat("No use.\n")
cat("Monster: Life:",mon$life,"Attack:",mon$att,"Defence:",mon$def,"\n")
}
att=mon$life/mon$lli*mon$att
def=rw$life/100*rw$def
if(att>def){
d=att-def
rw$life=rw$life-d
if(rw$life<=0) cat("Player lose.\n") else{
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
}
} else cat("Miss.\n")
return(c(mon$life,rw$life))
}
人物(@)行动代码
用数据框rw(x,y,key,f,life,att,def)记录人物的位置(x,y)(非plot上的坐标)、钥匙数(key)、楼层(f)、体力(life)、攻击(att)、防御(def)。
rw=data.frame(x=1,y=1,key=0,f=1,life=100,att=15,def=10)
用readline()传入键盘动作。
for(i in 1:1000){
readline("Please input your action:")->a
if(a=="w" || a=="W"){
rw$x=rw$x-1
if(rw$x==0 && rw$y==1){
ditu=SC(q,w)
mditu=ditu
mditu[ditu=="n"]<-"10"
mditu[ditu=="m"]<-"20"
mditu[ditu=="M"]<-"40"
mditu[ditu=="G"]<-"50"
pt(q=q,w=w,ditu=ditu)
rw$x=1
rw$y=1
} else
if(rw$x==0 && rw$y==w){
q=floor(runif(1,min=3,max=21))
w=floor(runif(1,min=3,max=21))
ditu=SC(q,w)
mditu=ditu
mditu[ditu=="n"]<-"10"
mditu[ditu=="m"]<-"20"
mditu[ditu=="M"]<-"40"
mditu[ditu=="G"]<-"50"
pt(q=q,w=w,ditu=ditu)
rw$x=1
rw$y=1
rw$f=rw$f+1
} else
if(rw$x<=0) rw$x=rw$x+1 else{
if(ditu[rw$x,rw$y]=="."){
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="# ") rw$x=rw$x+1
if(ditu[rw$x,rw$y]=="+"){
if(rw$key<=0){rw$x=rw$x+1
cat("No key.\n")
} else{
rw$key=rw$key-1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
}
}
if(ditu[rw$x,rw$y]=="1"){
rw$key=rw$key+1
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="C"){
if(rw$life<100) rw$life=100
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="F"){
rw$life=rw$life+10
if(rw$life>120) rw$life=120
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="W"){
rw$att=rw$att+2
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="H"){
rw$def=rw$def+1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="n" || ditu[rw$x,rw$y]=="m" || ditu[rw$x,rw$y]=="M" || ditu[rw$x,rw$y]=="G"){
fight()->f
if(f[1]=="y"){
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
} else{
if(f[2]<=0) break;
mditu[rw$x,rw$y]=f[1]
rw$life=f[2]
rw$x=rw$x+1
}
}
}
}
# ===
if(a=="s" || a=="S"){
rw$x=rw$x+1
if(rw$x>q && rw$y==1){
q=floor(runif(1,min=3,max=21))
w=floor(runif(1,min=3,max=21))
ditu=SC(q,w)
mditu=ditu
mditu[ditu=="n"]<-"10"
mditu[ditu=="m"]<-"20"
mditu[ditu=="M"]<-"40"
mditu[ditu=="G"]<-"50"
pt(q=q,w=w,ditu=ditu)
rw$x=1
rw$y=1
rw$f=rw$f+1
}
if(rw$x>q && rw$y==w){
q=floor(runif(1,min=3,max=21))
w=floor(runif(1,min=3,max=21))
ditu=SC(q,w)
mditu=ditu
mditu[ditu=="n"]<-"10"
mditu[ditu=="m"]<-"20"
mditu[ditu=="M"]<-"40"
mditu[ditu=="G"]<-"50"
pt(q=q,w=w,ditu=ditu)
rw$x=1
rw$y=1
rw$f=rw$f+1
}
if(rw$x>q) rw$x=rw$x-1 else{
if(ditu[rw$x,rw$y]=="."){
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="# ") rw$x=rw$x-1
if(ditu[rw$x,rw$y]=="+"){
if(rw$key<=0){rw$x=rw$x-1
cat("No key.\n")
} else{
rw$key=rw$key-1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
}
}
if(ditu[rw$x,rw$y]=="1"){
rw$key=rw$key+1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="C"){
if(rw$life<100) rw$life=100
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="F"){
rw$life=rw$life+10
if(rw$life>120) rw$life=120
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="W"){
rw$att=rw$att+2
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="H"){
rw$def=rw$def+1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="n" || ditu[rw$x,rw$y]=="m" || ditu[rw$x,rw$y]=="M" || ditu[rw$x,rw$y]=="G"){
fight()->f
if(f[1]=="y"){
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
} else{
if(f[2]<=0) break;
mditu[rw$x,rw$y]=f[1]
rw$life=f[2]
rw$x=rw$x-1
}
}
}
}
# ===
if(a=="a" || a=="A"){
rw$y=rw$y-1
if(rw$y<=0) rw$y=rw$y+1 else{
if(ditu[rw$x,rw$y]=="."){
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
}
if(ditu[rw$x,rw$y]=="# ") rw$y=rw$y+1 else
if(ditu[rw$x,rw$y]=="+"){
if(rw$key<=0){rw$y=rw$y+1
cat("No key.\n")
} else{
rw$key=rw$key-1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
}
}
if(ditu[rw$x,rw$y]=="1"){
rw$key=rw$key+1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
}
if(ditu[rw$x,rw$y]=="C"){
if(rw$life<100) rw$life=100
cat("Player: Life:",rw$life,"Attack",rw$att,"Defence",rw$def,"Key",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
}
if(ditu[rw$x,rw$y]=="F"){
rw$life=rw$life+10
if(rw$life>120) rw$life=120
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
}
if(ditu[rw$x,rw$y]=="W"){
rw$att=rw$att+2
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
}
if(ditu[rw$x,rw$y]=="H"){
rw$def=rw$def+1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
}
if(ditu[rw$x,rw$y]=="n" || ditu[rw$x,rw$y]=="m" || ditu[rw$x,rw$y]=="M" || ditu[rw$x,rw$y]=="G"){
fight()->f
if(f[1]=="y"){
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
} else{
if(f[2]<=0) break;
mditu[rw$x,rw$y]=f[1]
rw$life=f[2]
rw$y=rw$y+1
}
}
}
}
# ===
if(a=="d" || a=="D"){
rw$y=rw$y+1
if(rw$y>w) rw$y=rw$y-1 else{
if(ditu[rw$x,rw$y]=="."){
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
}
if(ditu[rw$x,rw$y]=="# ") rw$y=rw$y-1
if(ditu[rw$x,rw$y]=="+"){
if(rw$key<=0){rw$y=rw$y-1
cat("No key.\n")
} else{
rw$key=rw$key-1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
}
}
if(ditu[rw$x,rw$y]=="1"){
rw$key=rw$key+1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
}
if(ditu[rw$x,rw$y]=="C"){
if(rw$life<100) rw$life=100
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
}
if(ditu[rw$x,rw$y]=="F"){
rw$life=rw$life+10
if(rw$life>120) rw$life=120
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
}
if(ditu[rw$x,rw$y]=="W"){
rw$att=rw$att+2
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
}
if(ditu[rw$x,rw$y]=="H"){
rw$def=rw$def+1
cat("Player: Life:",rw$life,"Attack",rw$att,"Defence",rw$def,"Key",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
}
if(ditu[rw$x,rw$y]=="n" || ditu[rw$x,rw$y]=="m" || ditu[rw$x,rw$y]=="M" || ditu[rw$x,rw$y]=="G"){
fight()->f
if(f[1]=="y"){
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
} else{
if(f[2]<=0) break;
mditu[rw$x,rw$y]=f[1]
rw$life=f[2]
rw$y=rw$y-1
}
}
}
}
pt(q,w,ditu)
}
cat("Player has explored ",rw$f," floors.\n")
cat("The END.\n")
总体运行代码
# R version 3.4.4
q=12
w=12
SC<-function(q=10,w=10){
a=runif(q*w,min=0,max=1)
a[0.00<a & a<=0.34]="."
a[0.34<a & a<=0.68]="# "
a[0.68<a & a<=0.75]="+"
a[0.75<a & a<=0.79]="-"
a[0.79<a & a<=0.89]="n"
a[0.89<a & a<=0.93]="m"
a[0.93<a & a<=0.95]="M"
a[0.95<a & a<=0.96]="G"
a[0.96<a & a<=0.97]="C"
a[0.97<a & a<=0.98]="F"
a[0.98<a & a<=0.99]="W"
a[0.99<a & a<=1.00]="H"
a[a=="-"]="1"
a[1]="@"
array(a,dim=c(q,w))
}
ditu=SC(q,w)
mditu=ditu
mditu[ditu=="n"]<-"10"
mditu[ditu=="m"]<-"20"
mditu[ditu=="M"]<-"40"
mditu[ditu=="G"]<-"50"
pt<-function(q=10,w=10,ditu=SC(q,w)){
plot(c(0,0,2,2,w*2-2,w*2-2,w*2,w*2,w*2-2,w*2-2,2,2,0),c(-2,q*2+2,q*2+2,q*2,q*2,q*2+2,q*2+2,-2,-2,0,0,-2,-2),type ="l",xlim=c(0,2*w),ylim=c(-2,2*q+2),xlab="The magic tower",ylab="",bty="n",xaxt="n",yaxt="n",xaxs="i",yaxs="i")
grid(nx=w,ny=q+2)
text(1,2*q+1,"[x]")
text(c(1,2*w-1,2*w-1),c(-1,-1,2*q+1),"<>")
b=rep(seq(2*q-1,1,-2),w)
a=rep(seq(1,2*w-1,2),each=q)
text(a,b,ditu)
}
fight<-function(mon=data.frame(type=ditu[rw$x,rw$y],life=as.numeric(mditu[rw$x,rw$y]))){
if(mon$type=="n") mon=cbind(mon,lli=10,att=10,def=8) else
if(mon$type=="m") mon=cbind(mon,lli=20,att=12,def=12) else
if(mon$type=="M") mon=cbind(mon,lli=40,att=15,def=18) else
if(mon$type=="G") mon=cbind(mon,lli=50,att=22,def=24)
att=rw$life/100*rw$att
def=mon$life/mon$lli*mon$def
if(att>def){
d=att-def
mon$life=mon$life-d
if(mon$life<=0){
cat("Monster is defeated. \n")
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
return("y")
} else{
cat("Monster: Life:",mon$life,"Attack:",mon$att,"Defence:",mon$def,"\n")
}
}
if(att<=def){
cat("No use.\n")
cat("Monster: Life:",mon$life,"Attack:",mon$att,"Defence:",mon$def,"\n")
}
att=mon$life/mon$lli*mon$att
def=rw$life/100*rw$def
if(att>def){
d=att-def
rw$life=rw$life-d
if(rw$life<=0) cat("Player lose.\n") else{
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
}
} else cat("Miss.\n")
return(c(mon$life,rw$life))
}
rw=data.frame(x=1,y=1,key=0,f=1,life=100,att=15,def=10)
pt(q,w,ditu)
for(i in 1:1000){
readline("Please input your action:")->a
if(a=="w" || a=="W"){
rw$x=rw$x-1
if(rw$x==0 && rw$y==1){
ditu=SC(q,w)
mditu=ditu
mditu[ditu=="n"]<-"10"
mditu[ditu=="m"]<-"20"
mditu[ditu=="M"]<-"40"
mditu[ditu=="G"]<-"50"
pt(q=q,w=w,ditu=ditu)
rw$x=1
rw$y=1
} else
if(rw$x==0 && rw$y==w){
q=floor(runif(1,min=3,max=21))
w=floor(runif(1,min=3,max=21))
ditu=SC(q,w)
mditu=ditu
mditu[ditu=="n"]<-"10"
mditu[ditu=="m"]<-"20"
mditu[ditu=="M"]<-"40"
mditu[ditu=="G"]<-"50"
pt(q=q,w=w,ditu=ditu)
rw$x=1
rw$y=1
rw$f=rw$f+1
} else
if(rw$x<=0) rw$x=rw$x+1 else{
if(ditu[rw$x,rw$y]=="."){
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="# ") rw$x=rw$x+1
if(ditu[rw$x,rw$y]=="+"){
if(rw$key<=0){rw$x=rw$x+1
cat("No key.\n")
} else{
rw$key=rw$key-1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
}
}
if(ditu[rw$x,rw$y]=="1"){
rw$key=rw$key+1
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="C"){
if(rw$life<100) rw$life=100
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="F"){
rw$life=rw$life+10
if(rw$life>120) rw$life=120
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="W"){
rw$att=rw$att+2
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="H"){
rw$def=rw$def+1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="n" || ditu[rw$x,rw$y]=="m" || ditu[rw$x,rw$y]=="M" || ditu[rw$x,rw$y]=="G"){
fight()->f
if(f[1]=="y"){
ditu[rw$x,rw$y]="@"
ditu[rw$x+1,rw$y]="."
} else{
if(f[2]<=0) break;
mditu[rw$x,rw$y]=f[1]
rw$life=f[2]
rw$x=rw$x+1
}
}
}
}
# ===
if(a=="s" || a=="S"){
rw$x=rw$x+1
if(rw$x>q && rw$y==1){
q=floor(runif(1,min=3,max=21))
w=floor(runif(1,min=3,max=21))
ditu=SC(q,w)
mditu=ditu
mditu[ditu=="n"]<-"10"
mditu[ditu=="m"]<-"20"
mditu[ditu=="M"]<-"40"
mditu[ditu=="G"]<-"50"
pt(q=q,w=w,ditu=ditu)
rw$x=1
rw$y=1
rw$f=rw$f+1
}
if(rw$x>q && rw$y==w){
q=floor(runif(1,min=3,max=21))
w=floor(runif(1,min=3,max=21))
ditu=SC(q,w)
mditu=ditu
mditu[ditu=="n"]<-"10"
mditu[ditu=="m"]<-"20"
mditu[ditu=="M"]<-"40"
mditu[ditu=="G"]<-"50"
pt(q=q,w=w,ditu=ditu)
rw$x=1
rw$y=1
rw$f=rw$f+1
}
if(rw$x>q) rw$x=rw$x-1 else{
if(ditu[rw$x,rw$y]=="."){
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="# ") rw$x=rw$x-1
if(ditu[rw$x,rw$y]=="+"){
if(rw$key<=0){rw$x=rw$x-1
cat("No key.\n")
} else{
rw$key=rw$key-1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
}
}
if(ditu[rw$x,rw$y]=="1"){
rw$key=rw$key+1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="C"){
if(rw$life<100) rw$life=100
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="F"){
rw$life=rw$life+10
if(rw$life>120) rw$life=120
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="W"){
rw$att=rw$att+2
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="H"){
rw$def=rw$def+1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
}
if(ditu[rw$x,rw$y]=="n" || ditu[rw$x,rw$y]=="m" || ditu[rw$x,rw$y]=="M" || ditu[rw$x,rw$y]=="G"){
fight()->f
if(f[1]=="y"){
ditu[rw$x,rw$y]="@"
ditu[rw$x-1,rw$y]="."
} else{
if(f[2]<=0) break;
mditu[rw$x,rw$y]=f[1]
rw$life=f[2]
rw$x=rw$x-1
}
}
}
}
# ===
if(a=="a" || a=="A"){
rw$y=rw$y-1
if(rw$y<=0) rw$y=rw$y+1 else{
if(ditu[rw$x,rw$y]=="."){
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
}
if(ditu[rw$x,rw$y]=="# ") rw$y=rw$y+1 else
if(ditu[rw$x,rw$y]=="+"){
if(rw$key<=0){rw$y=rw$y+1
cat("No key.\n")
} else{
rw$key=rw$key-1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
}
}
if(ditu[rw$x,rw$y]=="1"){
rw$key=rw$key+1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
}
if(ditu[rw$x,rw$y]=="C"){
if(rw$life<100) rw$life=100
cat("Player: Life:",rw$life,"Attack",rw$att,"Defence",rw$def,"Key",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
}
if(ditu[rw$x,rw$y]=="F"){
rw$life=rw$life+10
if(rw$life>120) rw$life=120
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
}
if(ditu[rw$x,rw$y]=="W"){
rw$att=rw$att+2
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
}
if(ditu[rw$x,rw$y]=="H"){
rw$def=rw$def+1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
}
if(ditu[rw$x,rw$y]=="n" || ditu[rw$x,rw$y]=="m" || ditu[rw$x,rw$y]=="M" || ditu[rw$x,rw$y]=="G"){
fight()->f
if(f[1]=="y"){
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y+1]="."
} else{
if(f[2]<=0) break;
mditu[rw$x,rw$y]=f[1]
rw$life=f[2]
rw$y=rw$y+1
}
}
}
}
# ===
if(a=="d" || a=="D"){
rw$y=rw$y+1
if(rw$y>w) rw$y=rw$y-1 else{
if(ditu[rw$x,rw$y]=="."){
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
}
if(ditu[rw$x,rw$y]=="# ") rw$y=rw$y-1
if(ditu[rw$x,rw$y]=="+"){
if(rw$key<=0){rw$y=rw$y-1
cat("No key.\n")
} else{
rw$key=rw$key-1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
}
}
if(ditu[rw$x,rw$y]=="1"){
rw$key=rw$key+1
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
}
if(ditu[rw$x,rw$y]=="C"){
if(rw$life<100) rw$life=100
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
}
if(ditu[rw$x,rw$y]=="F"){
rw$life=rw$life+10
if(rw$life>120) rw$life=120
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
}
if(ditu[rw$x,rw$y]=="W"){
rw$att=rw$att+2
cat("Player: Life:",rw$life,"Attack:",rw$att,"Defence:",rw$def,"Key:",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
}
if(ditu[rw$x,rw$y]=="H"){
rw$def=rw$def+1
cat("Player: Life:",rw$life,"Attack",rw$att,"Defence",rw$def,"Key",rw$key,"\n")
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
}
if(ditu[rw$x,rw$y]=="n" || ditu[rw$x,rw$y]=="m" || ditu[rw$x,rw$y]=="M" || ditu[rw$x,rw$y]=="G"){
fight()->f
if(f[1]=="y"){
ditu[rw$x,rw$y]="@"
ditu[rw$x,rw$y-1]="."
} else{
if(f[2]<=0) break;
mditu[rw$x,rw$y]=f[1]
rw$life=f[2]
rw$y=rw$y-1
}
}
}
}
pt(q,w,ditu)
}
cat("Player has explored ",rw$f," floors.\n")
cat("The END.\n")
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!