大富翁结合RPG是从什么时候开始我没研究过,但是小时候就用纸当卡片画游戏卡,并且在纸上画不同的地图,并用骰子当移动方式,开始一场怪物道馆挑战与搜集(对战是用剪刀石头布来判断攻击成功与否)!是当时我跟我朋友们的回忆~而那时的我还没接触电脑游戏呢。
当我看到我以前自制的桌游搬到了手机或电脑线上游戏中,感觉很微妙呢~(虽然这灵感并不是那么稀奇)
用大富翁结合RPG的游戏已经不新鲜了,但是移动的方式、地图每格的突发状况却可以一而再再而三的引起玩家每一格都有不同的乐趣。
现在,就用一个传统的大富翁结合RPG游戏来学习并延伸设计吧!
继续上网址做参考:http://shuinvy.pancakeapps.com/MonoRPG/
接续上一篇,
我们设计一个可以用来显示角色资讯的部分:
金钱:
0
好感度:
0
HP:
500
接着要来探讨Options的部分:
function Options(place,p,l){
switch(place[p][l]){
case 1:
//金币
//将来可以去商店买道具,目前暂时是怪物的买路财Orz
var incre=(monmin + parseInt(Math.random()*(parseInt(monmax-monmin)+1)));//一次增加10~30
coin+=incre;
$("#"+lbCoin).html(coin); //将结果显示在画面
//console.log(place[p][l]+",money+"+incre);
//显示纪录
showLog(1,incre);
break;
case 2:
//好感度
//好感度到一定程度就会进化,但目前还没有这个功能
var nice=(lovemin + parseInt(Math.random()*(parseInt(lovemax-lovemin)+1)));//一次增加1~6
fav+=nice
$("#"+lbLove).html(fav); //将结果显示在画面
//console.log(place[p][l]+",love+"+nice);
//显示纪录
showLog(2,nice);
break;
case 3:
//遇到怪物
//假设是偷金币的怪物。若没金币则扣命(对,这角色很弱还打不赢怪物XDDD)
var theaf=(theafmin + parseInt(Math.random()*(parseInt(theafmax-theafmin)+1)));//一次减少100~300
if(coin>theaf){ //要钱够才能扣钱
coin-=theaf;
$("#"+lbCoin).html(coin); //将结果显示在画面
//console.log(place[p][l]+",money-"+theaf);
//显示纪录
showLog(3,theaf);
}else{ //没钱只好被怪打了Orz
var attacked=(attackmin + parseInt(Math.random()*(parseInt(attackmax-attackmin)+1)));//一次减少200~500hp
if(health>attacked){ //命够多才能扣
health-=attacked;
$("#"+lbHP).html(health);
//console.log(place[p][l]+",health-"+attacked);
//显示纪录
showLog(4,attacked);
}else{ //命太低游戏结束
health=0;
$("#"+lbHP).html(health);
GameOver();
}
}
break;
case 4:
//遇到陷阱
var attacked=(trapmin + parseInt(Math.random()*(parseInt(trapmax-trapmin)+1)));//一次减少200~400hp
if(health>attacked){ //命够多才能扣
health-=attacked;
$("#"+lbHP).html(health);
//console.log(place[p][l]+",health-"+attacked);
//显示纪录
showLog(5,attacked);
}else{ //命太低游戏结束
health=0;
$("#"+lbHP).html(health);
GameOver();
}
break;
}
//dice=0代表角色走完格子了,使用者可以继续掷骰子了
rollDice();
}
一样,直接看会吓死人,
所以我用最复杂的遇到怪物部分做说明。
用switch...case...判断遇到的是什么情况,
怪物的部分是case 3时:
//遇到怪物
//假设是偷金币的怪物。若没金币则扣命(对,这角色很弱还打不赢怪物XDDD)
var theaf=(theafmin + parseInt(Math.random()*(parseInt(theafmax-theafmin)+1)));//一次减少100~300
if(coin>theaf){ //要钱够才能扣钱
coin-=theaf;
$("#"+lbCoin).html(coin); //将结果显示在画面
//console.log(place[p][l]+",money-"+theaf);
//显示纪录
showLog(3,theaf);
}else{ //没钱只好被怪打了Orz
var attacked=(attackmin + parseInt(Math.random()*(parseInt(attackmax-attackmin)+1)));//一次减少200~500hp
if(health>attacked){ //命够多才能扣
health-=attacked;
$("#"+lbHP).html(health);
//console.log(place[p][l]+",health-"+attacked);
//显示纪录
showLog(4,attacked);
}else{ //命太低游戏结束
health=0;
$("#"+lbHP).html(health);
GameOver();
}
}
其实步骤很简单,
判断需要扣掉的部分是什么,并且将结果显示在金钱和HP的文字上。
假如钱不够扣,怪物就伤害你,可是不会拿走你的钱(如果想要怪物拿走你剩余的钱和伤害你也可以喔)。
而你的HP变成0时(怪物攻击你如果超过你的HP,则你的HP直接为0,而不是负的),
游戏就结束了。
在switch...case下方还有一个让使用者能继续掷骰子的部分,也就是rollDice。
rollDice的部分:
function rollDice(){
if(isGame) timerAnime=setTimeout(function(){ clearTimeout(timerAnime); dice=1; if(isGame) timerDice=setInterval(diceRound,speed); else clearInterval(timerDice); $("#btnDice").prop("disabled",false).css("cursor","default"); }, speed); //让使用者可以掷骰子
}
虽然看起来很长,
其实就是先用isGame判断游戏是否无法继续进行,
否则将dice=1回到掷骰子动画的设定,并且继续跑timerDice=setInterval(diceRound,speed);的动画。
若不能继续掷骰子了,则将骰子动画隐藏(其实只是让数字变成空字符串),以及不让使用者继续按按钮。
到这边,完整的游戏就算完成了,
然而我追加了游戏纪录部分,一方面是给你做调试(看骰子结果跟你设定的一不一样),一方面是让使用者知道自己处于什么阶段,
否则突然命扣了,还不知道扣多少,玩起来会很疑惑。
下一篇则是比较简单的游戏纪录部分了。
原文:大专栏 小游戏小技巧教学8-5(大富翁结合RPG-角色遇到的突发状况)
原文地址:https://www.cnblogs.com/chinatrump/p/11491007.html