我不想错过这个机会向您展示一些更高级的技术,它们将简化您的代码块并消除一些if语句。
通过将您的两名战斗员打包成单个“战士”阵列,其中第一个战斗机(英雄)是元素[0]
而怪物(Potwor)是元素[1]
,您可以使用简单的算术来引用每一个。
就您的原始代码而言,在循环结束时编写break
s没有任何意义。正如你所说的那样,你的条件是正确的。
注意,我在伤害计算线已经改变了rand()
范围从1-2
到0-1
为简单反复这两个值之间。
为了在每一轮中瞄准对手,我使用的是1-$losowy
。我觉得这是切换值最直观/最基本的方法。但是,还有其他技术,包括a method that uses a bitwise operator (it is the fastest performing way to do it, but the least intuitive)。
代码:(Demo)
$Wojownicy=[
['zycie'=>1000,'atak'=>100], // Bohater(Hero) : life points , attack points
['zycie'=>500,'atak'=>100] // Potwor(Monster) : life points , attack points
];
while($Wojownicy[0]['zycie']>0 && $Wojownicy[1]['zycie']>0){
$losowy=rand(0,1); // identify attacker
$Wojownicy[1-$losowy]['zycie']-=$Wojownicy[$losowy]['atak']; // subract attack from opponent
echo "Hero={$Wojownicy[0]['zycie']} -vs- Monster={$Wojownicy[1]['zycie']}\n"; // display each round
}
// Spoiler Alert: The Hero wins almost every time!
一个不太可能的结果:
Hero=900 -vs- Monster=500
Hero=900 -vs- Monster=400
Hero=800 -vs- Monster=400
Hero=700 -vs- Monster=400
Hero=600 -vs- Monster=400
Hero=500 -vs- Monster=400
Hero=400 -vs- Monster=400
Hero=300 -vs- Monster=400
Hero=200 -vs- Monster=400
Hero=100 -vs- Monster=400
Hero=100 -vs- Monster=300
Hero=100 -vs- Monster=200
Hero=100 -vs- Monster=100
Hero=0 -vs- Monster=100
请粘贴代码中的问题,而不是一些第三方网站。 – luk2302
您的休息条件中的这些数字不会更改。它们保持不变,因此永远不会脱离循环。 –
谢谢,但为什么这个值不会改变?我正在使用“。=” –