KUNISAN.JPブログ - 1101 / 1531 ページ

新規書き込み

PHP:オブジェクト指向的じゃんけんプログラム

名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2009年9月7日

「もう少し、PHPの理解を深めよう」ということで、オブジェクト機能とデータベース機能について、勉強を進めてみようと思っています。「分かりやすいPHP解説書を…」と色々と探した結果、「速効!図解プログラミングPHP+MySQL」という本を購入しました。しばらくは、これを読み進めながらプログラムを作成することにします。

まずはオブジェクト機能を利用した簡単なプログラムを作ってみました。その名も「オブジェクト指向的じゃんけんプログラム」です。平たく言えば、ただのじゃんけんです。学習用にプログラムを作成するにしても、例えば「こんにちは」と表示させるだけのようなものでは作っていても面白くないので、「プログラム学習の始まりは、いつもじゃんけんから」という私なりのポリシー(?)で作ってみた次第です。

以下、プログラムです。

■■■オブジェクト指向的じゃんけんプログラム■■■
<?php

//HTML(フォーム)表示部
print '<form action="ob_janken.php" method="get">';
print '<b>オブジェクト指向的じゃんけんプログラム</b><br><br>';
print '
<select name="HAND">
<option value="">(選択してください)</option>
<option value="1">グー</option>
<option value="2">チョキ</option>
<option value="3">パー</option>
</select>
 <input type="submit" value="決定">
<br><br>
';

//「あなたの手」代入
$anata_hand = $_GET[HAND];

//「あなたの手」が決定している場合には一連の処理を実行
if ($anata_hand != '') {

//インスタンスの作成
$newgame = new Ningen();

//「かけごえメソッド」の実行
$newgame->kakegoe();

print '<table border="1"><tr><td>';

print 'あなたの手<br>';

//インスタンスを作成せずに、「じゃんけんの手」メソッドを実行して、あなたの手のテキスト&画像表示
Hyouji::janken_te($anata_hand);

print '</td><td>';

//「じゃんけんメソッド」の実行、$teにコンピュータの手を代入
$te = $newgame->janken();

print '</td></tr></table><br>';

print '<b>判定結果:<font color="red">';

//「じゃんけん判定メソッド」の実行
$newgame->hantei($anata_hand,$te);

print '</font></b>';

}

print '</form>';

//「Ningen(にんげん)」というクラスを宣言
class Ningen {

//じゃんけんのかけごえ
public $message = 'じゃんけんぽん!<br>';

//「かけごえメソッド」の定義
public function kakegoe() {

//$messageを参照して$j_messageに入れる。
$j_message = $this->message;

//じゃんけんのかけごえ表示
print $j_message;

}

//「じゃんけんメソッド」の定義
public function janken() {

//じゃんけんの「手」をランダムに決定。(1=グー,2=チョキ,3=パー)
$c_hand = mt_rand(1,3);

print '私(コンピュータ)の手<br>';

//インスタンスを作成せずに、「じゃんけんの手」メソッドを実行して、コンピュータの手のテキスト&画像表示
Hyouji::janken_te($c_hand);

//戻り値「手」
return $c_hand;

}

//「じゃんけん判定メソッド」の定義 ($te1はあなたの手、$te2は私の手)
public function hantei($te1,$te2) {

//判定用変数
$judge = $te1 - $te2;

//判定用変数の中身がマイナスの場合には、+3する
if ($judge < 0) {
$judge = $judge + 3;
}

//判定結果表示
if ($judge == 0) {
print 'あいこです。';
} elseif ($judge == 1) {
print '私(コンピュータ)の勝ちです。';
} elseif ($judge == 2) {
print 'あなたの勝ちです。';
}

}
}

//「Hyouji(表示)」というクラスを宣言
class Hyouji {

//「じゃんけんの手」メソッドの定義
public function janken_te($hand) {
if ($hand == 1) {
print '<img src="gu.jpg"><br>';
print 'グー<br>';
} elseif ($hand == 2) {
print '<img src="choki.jpg"><br>';
print 'チョキ<br>';
} else {
print '<img src="pa.jpg"><br>';
print 'パー<br>';
}
}
}

?>
■■■■■■■■■■■■■■■■■■■■■■■■■

オブジェクト機能については、まだ深いところまで突っ込んでいませんが、「まあ、こんなものかな」程度の感想です。やはり、チームを組んでプログラムを作成するような場合には何となく便利そうですが、私のように一人だけでもくもくとプログラムを作っているような人には、それほど必要性は高くないような気がします。ただ、プログラムの種類によっては、効率良くプログラムが組めそうな気はしています(具体的なアイデアはありませんが)。

どうでもいい情報ですが、グーの画像は鉄鉱石、ちょきは和鋏、パーは和紙です。すべてWikipediaから拝借しました。





PHP関連記事(リンク一覧): さくらレンタルサーバーのアクセス履歴をPHPで表示 / PHPで画像のアップロード(さくらレンタルサーバーのPHPでImageMagick) / PHP REVERSI(オセロもどき)の続き / PHP REVERSI(リバーシ) - オセロもどきゲームの公開 / PHP版-簡易アクセスブロック(IPアドレス、ホスト名、OS、ブラウザ名で制御) / ...(記事連続表示)

速効!図解プログラミングPHP + MySQL―Windows/Linux PHP5対応
速効!図解プログラミングPHP + MySQL―Windows/Linux PHP5対応 をAmazon.co.jpでチェック