Skip to content

Commit

Permalink
phpでボウリングのスコア計算
Browse files Browse the repository at this point in the history
  • Loading branch information
steelpipe75 committed Apr 28, 2024
1 parent 49bcb87 commit fbd9f1e
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 0 deletions.
43 changes: 43 additions & 0 deletions php/bowling_game/bowling_game.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php

class BowlingGame {
private $rolls = [];

// 投球を登録するメソッド
public function roll($pins) {
$this->rolls[] = $pins;
}

// スコアを計算するメソッド
public function score() {
$score = 0;
$frameIndex = 0;

for ($frame = 0; $frame < 10; $frame++) {
if ($this->isStrike($frameIndex)) { // ストライク
$score += 10 + $this->rolls[$frameIndex + 1] + $this->rolls[$frameIndex + 2];
$frameIndex++;
} elseif ($this->isSpare($frameIndex)) { // スペア
$score += 10 + $this->rolls[$frameIndex + 2];
$frameIndex += 2;
} else {
$score += $this->rolls[$frameIndex] + $this->rolls[$frameIndex + 1];
$frameIndex += 2;
}
}

return $score;
}

// ストライクかどうかを判定するメソッド
private function isStrike($frameIndex) {
return $this->rolls[$frameIndex] == 10;
}

// スペアかどうかを判定するメソッド
private function isSpare($frameIndex) {
return $this->rolls[$frameIndex] + $this->rolls[$frameIndex + 1] == 10;
}
}

?>
40 changes: 40 additions & 0 deletions php/bowling_game/main.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

require_once 'bowling_game.php';

// 引数の数が正しいか確認
if ($argc != 2) {
echo "Usage: php script.php <filename>\n";
exit(1);
}

// ファイルの存在を確認
$filename = $argv[1];
if (!file_exists($filename)) {
echo "Error: File not found.\n";
exit(1);
}

// ファイルを開く
$file = fopen($filename, "r");
if (!$file) {
echo "Error: Unable to open file.\n";
exit(1);
}

$bg = new BowlingGame();

// ファイルから整数を読み込み
while (($line = fgets($file)) !== false) {
$number = intval(trim($line));
if ($number < 0) {
break;
}
$bg->roll($number);
}

// ファイルを閉じる
fclose($file);
$score = $bg->score();
echo "$score\n";
?>

0 comments on commit fbd9f1e

Please sign in to comment.