PHP ブラックジャックを作ってみる

どうも、irisawaです。
今日の授業は、PHPで「ブラックジャック」を作る事に挑戦しました。

以下、内容になります。

今回のお題である、ブラックジャックの仕様は以下の通りになります。

  • 基本フロー
  1. ベットする
  2. カードをもらう
  3. もう一枚もらうか判定する(もう一枚もらう場合は、3をもう一度行う)
  4. 判定する
  • カードの数え方
    • 絵札(キング、クイーン、ジャック)と10は、すべて10としてカウント
    • エースは、1または11として、状況に応じてプレーヤーの都合のよい方にカウント
    • その他、2から9までのカードは、そのままカウント

※制作に余力があればディーラーも作ろう。
ディーラーのルールは手札の合計が17になるまでカードを引き続ける。17になったらカードを引かない。
お互い、カードが引き終わったら勝負する。

今日の時間ではディーラーの実装やベットの実装まで出来なかったのですが、 明日もコレの実装を行うという事なので頑張って最後まで完成させたいと思います。

  • 今日コードを書いていて難しかった点や出来なかった点
    • HTML上で送信ボタンを場合によって隠したり表示したりするのが難しかった
    • 一度出したカードを削除するという処理(このコードだと出来ていない。同じ数字が4回以上出てしまう)
    • ブタになった後でも、カードが何枚でも引けてしまう処理になってしまっている

以下、コードになります。

【blackjack.php】


<?php
  //session_start();
?>

<html>
<head>
<title>BlackJack</title>
</head>
<body>
<h1>BLACK JACK</h1>

<?php

//関数定義しているPHPファイルの呼び出し
require "deal_card.php";
require "show_card.php";
require "end_game.php";
require "judge_game.php";
require "create_card.php";
require "add_result.php";

//ゲーム開始時の処理
if (isset($_POST["start"])) {

  $_SESSION["sum"] = 0;

  create_card();

  $_SESSION["card"] = array();

  //最初は2回カードを引くようにする

  $card = deal_card();
  add_result($card);
  $card = deal_card();
  add_result($card);

  show_card();

  //最初だけブラックジャックかどうか判定
  if ($_SESSION["sum"] == 21) {
    echo "<h2>BLACKJACK!!</h2><p>おめでとう!!</p>";
  }
}

if (isset($_POST["onemore"])) {
  //もう一回カードを引く処理
  $card =  deal_card();
  add_result($card);
  show_card();
  judge_game();
}

if (isset($_POST["fight"])) {
  //勝負する処理
  judge_game();
  end_game();
}

if (isset($_POST["end"])) {
  //ゲーム終了の処理
  end_game();
}

?>

<?php
if (!isset($_POST["more"])) {

  echo "<form action='blackjack.php' method='post'>";
  echo "<p><input type='submit' value='開始!' name='start' /></p>";
  echo "<p><input type='hidden' value='more' name='more' /></p>";
  echo "</form>";

}

if (isset($_POST["more"])) {

  echo "<form action='blackjack.php' method='post'>";
  echo "<p><input type='submit' value='もう一枚' name='onemore' /></p>";
  echo "<p><input type='submit' value='勝負する' name='fight' /</p>";
  echo "<p><input type='submit' value='勝負を降りる' name='end' /</p>";
  echo "<p><input type='hidden' value='more' name='more' /></p>";

  echo "</form>";
}
?>

</body>
</html>

【deal_card.php】


<?php
session_start();

function deal_card() {

  //カードの種類を取る
  $cardtype = rand(0,3);

  //カードを取り出す
  $card = array_rand($_SESSION["cards"][$cardtype]);

  //一度取得したカードを削除
  unset($_SESSION["cards"][$cardtype][$card]);

  return $card;
}

【show_card.php】


<?php
  //session_start();

function show_card() {

  echo "<table border='1'></tr>";
  foreach($_SESSION["card"] as $card){
    echo "<td>".$card."</td>";
  }
  echo "</tr></table>";

}

【end_game.php】


<?php

function end_game(){
  //ブラックジャック終了の処理
  unset($_SESSION["sum"]);
  unset($_SESSION["cards"]);
  unset($_SESSION["card"]);
  unset($_POST["more"]);
}

【create_card.php】


<?php
function create_card(){
  //トランプの定義
  $_SESSION["cards"] = array();

  for ($i = 0; $i < 4; $i++) {
    for ($j = 1; $j <= 13; $j++) {
      $_SESSION["cards"][$i][$j] = $j;
    }
  }
}

【judge_game.php】


<?php

function judge_game() {
  if ($_SESSION["sum"] > 21) {
   echo "あなたの結果:".$_SESSION["sum"]." ブタになりました。";
  }
}

【add_result.php】


function add_result($card) {
  //カードを引いた結果を入れていく

  switch ($card) {
  //キング、クイーン、ジャックは10としてカウント
  case 11:
  case 12:
  case 13:
    $card = 10;

  }

  //エースの扱い(1,11)を合計によって変える
  if ($card == 1 && $_SESSION["sum"] <= 10 ) {
    $card = 11;
  }

  if ($card == 11 && $_SESSION["sum"] > 10 ) {
    $card = 1;
  }

  $_SESSION["sum"] += $card;
  $_SESSION["card"][] = $card;
}

1 件のコメント so far »

  1. by スタートアップ研修記 » php ブラックジャックを作ってみる2, on 06.05.08 @ 8:30 PM

     

    [...] さて今回のPHPでは、前回に引き続き、ブラックジャックの制作をしました。 [...]

Comment RSS · TrackBack URI

コメントをどうぞ

名前: (Required)

eMail: (Required)

Website:

Comment:

Spam Protection by WP-SpamFree