我有这个代码。 我正在使用break,但循环不会停止。
$Hero = array(
'atak' => 100,
'zycie' => 1000
);
$Potwor = array(
'atak' => 100,
'zycie' => 500
);
$BattleLog = array();
while(true) {
$kogo_ruch = rand(1, 2);
if($kogo_ruch == 1) {
$Hero['atak'] -= $Potwor['zycie'];
}else{
$Potwor['atak'] -= $Hero['zycie'];
}
if($Potwor['zycie'] <= 0){
break;
}elseif($Hero['zycie'] <=0 ){
break;
}
}
答案 0 :(得分:0)
您永远不会修改用于触发中断的数组值的值。您将两个zycie
索引设置为静态值,但不修改这些值,它们将永远不会满足您的循环退出条件。
我不确定您需要表达的行为/规则,但此代码将成功退出:
while(true) {
$kogo_ruch = rand(1, 2);
if($kogo_ruch == 1) {
$Potwor['zycie'] -= $Hero['atak'];
}
else {
$Hero['zycie'] -= $Potwor['atak'];
}
if($Potwor['zycie'] <= 0) {
break;
}
else if($Hero['zycie'] <=0 ) {
break;
}
}
另外,一般情况下,除非绝对必要,否则使用while(true)
循环通常不是一个好主意。我建议做这样的事情:
while($Potwor['zycie'] > 0 && $Hero['zycie'] > 0) {
// Loop stuff
}
答案 1 :(得分:0)
当您在两个数组中更新元素atak
并在其他元素zycie
上放置中断时,您已经运行了while(true)
循环无限我认为您需要在元素上放置中断{ {1}}如下所示
atak
或仔细检查你的逻辑。
答案 2 :(得分:0)
我不想错过这个机会向您展示一些更先进的技术,这些技术将简化您的代码块并消除一些if语句。
将两名战斗员打包成一个“战士”阵列,其中第一个战斗机(英雄)是元素[0]
而怪物(Potwor)是元素[1]
,你可以使用简单的参考算术。
就原始代码而言,在循环结束时编写break
是没有意义的。正如您所提到的那样,您的条件的正确位置直接在您的while语句中。
请注意,我已将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