2013-12-20 51 views
3

(声明:这是我第一次在这里发布,所以请纠正我,如果我犯了一个错误!)我正在制作一个桌面角色扮演的角色生成器,我想让用户选择一个角色竞赛(Centaur,精灵,人类等等)从下拉列表中。选择后,我该如何选择它,以便选择的种族为玩家角色更改其他变量,例如开始统计(例如增加强度或灵活性)或特殊技能?使用JSON更改显示的数字或字符串?

我对HTML5侧电流代码:

<form> 

<label>Enter Character Name:</label> 
     <!-- Input character name in text field. Name is recorded to JSON variable. --> 
     <input type="text" id="pcName" name="pcName" required onchange="setName(name)"/> 

<label>Select Race: </label> 
    <!-- Select Race from dropdown menu. On selection, stats/skills/magic are changed. 
    Also adds racial skills/abilities to proper fields. --> 
<select id = "raceList" name="raceList" required onchange="setRace(name)"> 
<option name="Centaur" id="Centaur">Centaur</option> 
<option name="Elf" id="Elf">Elf</option> 
<option name="Fae" id="Fae">Fae</option> 
<option name="Human" id="Human">Human</option> 
</select> 
</form> 

<label>Enter Attribute Points: </label> 
    <!-- Enter stats for the character. Based on these numbers entered, attribute tables are altered. 
     Check to ensure that the numbers entered are not invalid. Recorded to JSON variable. If there were points added from selecting a race, add them here.--> 
<input type="text" id="Strength" name="Strength"/> 
<input type="text" id="Dexterity" name="Dexterity"/> 
<input type="text" id="Intellect" name="Intellect"/> 
<input type="text" id="Knowledge" name="Knowledge"/> 
<input type="text" id="Endurance" name="Endurance"/> 

我的JSON代码,与比赛数据和PC的数据的区域将被记录到。选择竞赛时,函数(此后的伪代码)解析JSON数据并根据需要更改内容。例如,“statModifiers”部分增加了额外的统计点数(例如,选择半人马可以获得+10的力量)。

{"raceList": [ 

{"raceName": "Centaur", 
"raceAbilities": ["Large Size", "Speed"], 
    "raceCombatSkills": ["Deadly Charge", "Trample"], 
    "statModifiers": [10, 0, 0, 0, 0], 
    "skillModifiers": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    "magicModifiers": [0,0,0,0]}, 

    {"raceName": "Elf", 
    "raceAbilities": [], 
    "raceCombatSkills": ["Archery"], 
    "statModifiers": [0, 5, 10, 0, 0], 
    "skillModifiers": [0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    "magicModifiers": [5,0,0,0]}, 

{"raceName": "Fae", 
    "raceAbilities": ["Silent Casting", "Cast While Moving"], 
    "raceCombatSkills": [], 
    "statModifiers": [5, 0, 0, 0, 5], 
    "skillModifiers": [0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    "magicModifiers": [15,0,0,15]}, 

{"raceName": "Human", 
    "raceAbilities": [], 
    "raceCombatSkills": [], 
    "statModifiers": [5, 5, 5, 0, 5], 
    "skillModifiers": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    "magicModifiers": [0,0,0,0]}, 

"pc": [ 
{"pcName": "name", 
    "pcRace": "race", 
    "pcBuild": "build", 
    "pcStats": [5,5,5,5,5], 
    "pcSkills"[20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20], 
    "pcArmor": [], 
    "pcItems": []} 
] 

}

和JavaScript本身(或者更确切地说,是什么代码是应该做的,因为我不确定要使用什么样的代码):

//Function that, on call, goes through the JSON array for a race object. Then, updates pcRace and pc object with appropriate data. 
function setRace(race) { 
    for (int i = 0; i < raceName.length; i++) { 
     if (raceList.i.raceName === race) { 
      pc.pcRace = race; 
      //Parse JSON data from selected race here, modify "Attribute Points" and related numbers as well 
      return; 
     } 
    } 
} 
+0

有点不清楚你在问什么,也许你可以减少你的文章到重要的部分。但如果我理解正确,我认为你需要循环raceList(你的数组)而不是raceName。 –

+0

我个人会有一个临时的“电脑”,并结合比赛和个人电脑的统计,直到用户完成角色创建。在创建过程中显示组合的属性(半人马力量+ pc力量),然后在完成时将它们组合。这会起作用吗? – Uxonith

+0

啊,好的,这是一个开始。谢谢!但是,我如何获得像默认/修改的统计信息这样的变量才能正确显示? – Thassa

回答

2

就个人而言,我d重新组织你的raceList是对象文本键入冲刺名称:

raceList = {"Fae" : { 
    "raceAbilities": ["Silent Casting", "Cast While Moving"], 
    "raceCombatSkills": [], 
    "statModifiers": [5, 0, 0, 0, 5], 
    "skillModifiers": [0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    "magicModifiers": [15,0,0,15] }, 
    { "Human" : { //... } 
} 

我们找到相关的EN试试,我可以键,而不是通过一个数组迭代关名称:

function setRace(race){ 
    var raceStats = raceList[race]; 
} 

但是,如果你不能做到这一点,那么搜索阵列工作过。

现在更新您的电脑,只需通过调节剂迭代从raceStats并将它们添加到您的PC,例如:

for(var i=0; i < pc.pcStats.length; i++) { 
    pcStats[i] += raceStats.statModifiers[i]; 
} 

等等......

+0

我看到的唯一问题是你第一次应用了修饰符,但是如果你改变了种族,你会继续提高统计数据会发生什么?我想你可以删除“previousRace”statModifers并添加新的? – Uxonith

+1

@Uxonith:是的,在添加新的raceStats之前,可能需要保存'raceStats'对象(我们称它为'previousRace')并删除它们(通过减去而不是添加)。 –

+0

我会说这准确地回答了我的问题!谢谢,@MattBurland! – Thassa