私は楽しみのために小さなサイコロゲームに取り組んでおり、次の問題を解決する方法がわかりません:
問題は、サイコロを振るたびに数字を入力する必要があることです (数字の 1 のみ)。
それが完了すると、プログラムは 1 から 6 までの範囲の乱数を表示するサイコロの svg 画像を出力します。サイコロの値が 1 に達するまで、任意の数の出目が得られます。その時点で、ゲームは次のようになります。終了すると、合計スコアが評価されます。
私が抱えている問題は、プログラムが取得した最新のポイントのみを評価することです。私は本当にそれを修正することはできません。
フォーム
$form = <<< EOD
<div>
<form action='{$_SERVER['PHP_SELF']}' method='get'>
<fieldset>
<input type='text' name='antal' value='{$antal}' />
<button type='submit'>Kasta</button>
</fieldset
</form>
<a href='{$_SERVER['PHP_SELF']}'>Starta om</a>
</div>
EOD;
サイコロをランダムに振る関数
class CDice {
private $iLastThrows = Array();
public function Roll() {
return rand(1,6);
}
public function RollRepeatedly($aNumber) {
$this->iLastThrows = Array();
for($i=1; $i<=$aNumber; $i++) {
$this->iLastThrows[$i] = $this->Roll();
}
return $this->iLastThrows;
}
public function GetLastThrows() {
return $this->iLastThrows;
}
}
これは、正しい svg サイコロを表示する関数です。svg コードを削除しました。各 GetDice1、2、3 は、svg コードを含む関数に対応します。 public function GetSvg($aDice) {
$html = $this->GetSvgHeader();
switch($aDice) {
case '1': $html .= $this->GetDice1(); break;
case '2': $html .= $this->GetDice2(); break;
case '3': $html .= $this->GetDice3(); break;
case '4': $html .= $this->GetDice4(); break;
case '5': $html .= $this->GetDice5(); break;
case '6': $html .= $this->GetDice6(); break;
}
$html .= "</svg>";
return $html;
}
これは、正しく機能していない TOTAL を評価する方法です。
public function Total($anArray) {
foreach($anArray as $key => $value){
return array_sum($anArray);
}
}
$antal = filter_input(INPUT_GET, 'antal', FILTER_VALIDATE_INT);
if($antal) {
$dice->RollRepeatedly($antal);
//$slag = $dice->iLastThrows;
$slag = $dice->GetLastThrows();
$total = $histogram->Total($slag, 1);
// Show all dices as Svg
foreach($slag as $key => $value) {
$diceHtml .= $dice->GetSvg($value);
}
// Present the result in text'
最後に値をチェックして、値が 1 になったらプログラムを終了することを確認します。
if($value != 1){
$html
{$form}
{$diceHtml}
}
else{
$html = <<<EOD
<div>
<p>Game over.</p>
<p>You threw a ONE.</p>
<p>Total points: {$total}</p>
<div>
{$diceHtml}
</div>
EOD;