【发布时间】:2014-10-05 04:52:56
【问题描述】:
我目前正在编写一个简单的“战斗算法”(如果这是它的术语的话),它最终会变得越来越复杂,但现在最需要计算的是造成的伤害、当前的健康状况点数,还有躲闪的机会。这是代码本身:
#paradisium combat algorithm 1.0
import random
#ranged speed
player1_attack=5
#damage to enemy is attack-defense points
player1_defence=2
player1_speed=9
#higher speed higher chance to land a hit
player1_agility=9
#higher agility, higher chance of dodge
player1_HP=50
#two-handed defense
player2_attack=9
player2_defence=9
#blocking raises defense by doubling it
player2_speed=5
player2_agility=2
player2_HP=100
def player1attack(player1_speed,player1_attack,player2_agility,player2_defence,player2_HP,damage):
dogeChance=player2_agility-player1_speed
if random.randint(0,100)>dogeChance:
damage=player1_attack-player2_defence
player2_HP-=damage
return (player2_HP, damage)
while player1_HP>0 or player2_HP>0:
askMove=input("Attack(1) Brace(2)")
if askMove=="1":
damage=0
player1attack(player1_speed,player1_attack,player2_agility,player2_defence,player2_HP,damage)
damage,player2_HP=player1attack(damage,player2_HP)
print("Player 2 recieved",damage,"damage!")
print("Player 2's HP is at",player2_HP+"!")}
如您所见,我只是在开头列出了所有统计变量。该程序最终将能够获取两个人正在战斗的统计数据,并将其放入算法中。 该算法背后的当前数学是,只有在您未能躲避攻击时才会对人的生命值造成伤害,躲避机会(是的,我故意将其命名为 dogeChance)是通过从防御者的敏捷中减去攻击者的速度来计算的(在这种情况下玩家 2 的敏捷减去玩家 1 的速度,因为这是我们所得到的)。 伤害的计算方法类似,用防御减去攻击来计算,剩下的数字就是对敌人造成的伤害。 我遇到的问题是,虽然所有需要的变量都列在程序的开头,但我收到了这个错误:
Traceback (most recent call last):
File "C:/Users/Thomas/Desktop/combatAlgorithmParadisium.py", line 30, in <module>
damage,player2_HP=player1attack(damage,player2_HP)
TypeError: player1attack() missing 4 required positional arguments: 'player2_agility', 'player2_defence', 'player2_HP', and 'damage'
我从中得到的是该函数没有接受它需要的参数,所以我不知道我是否犯了新手错误或什么。如您所见,这种设计非常简单。我在一般编程方面已经有一段时间了,所以如果我不能理解你的解释,我提前道歉。我还更改了变量名称,使其更易于阅读和识别。
感谢生锈的 Manibus
【问题讨论】:
-
player1atk没有出现在您发布的代码中的任何位置... -
啊,抱歉。我会马上编辑。编辑:修复它,我再次运行程序以使用不同的变量名称得到相同的错误,但不小心复制了不同的错误消息。
-
你调用了 player1attack 两次。第二个参数太少。它在您程序的第 30 行...