やっぱりプログラミングの王道は、ゲームでしょ!と、若き頃言っていたのを思い出す、ユゲタです。
「お題にTRY」シリーズの第二弾は「じゃんけんゲーム」を作ってみます。
いろいろな言語に挑戦してみて、それぞれの特性を学習して行きますよ〜。
初回はPHPです。
本日のIT謎掛け
「ゲームプログラミング」と、かけまして・・・
「お笑い芸人のネタ帳」と、ときます。
そのココロは・・・
楽しい半面、意外と静かに黙々と書いていくイメージです。
じゃんけんゲームの仕様作成
初回なので・・・ある程度の仕様を決めておきたいと思います。
まず、じゃんけんの基本「0:グー」「1:チョキ」「2:パー」をそれぞれ、配列に格納し、keyになる番号を入力します。
次に、コンピュータ側がランダムで値を決める。
入力後に、勝ち負け判定を行って、結果を表示。
比較的単純ですが、ほぼコマンドラインで動作することを考慮して、見た目はテキストのみで進めます。
このプログラミングから学習できるポイントは、
・配列操作
・乱数の取得
・入力値の受け取り(標準入力:STDIN)
・三つ巴の勝ち負け判定(パターン条件文)
てな感じでしょう。
ターミナル版
<?php
spr::input_number();
class spr{
// 基本データ
public static $spr_arr = array("グー","チョキ","パー");
// 入力処理
public static function input_number(){
print "- Input [0:グー , 1:チョキ , 2:パー] : ";
$stdin = trim(fgets(STDIN));
self::check_match($stdin);
}
// 勝敗判定
public static function check_match($stdin=""){
// 正常入力
if(isset(self::$spr_arr[$stdin])){
$com_spr = self::get_computer_spr();
print sprintf(" あなたの出した手は、%sです。\n" , self::$spr_arr[$stdin]);
print sprintf(" コンピュータの出した手は、%sです。\n" , self::$spr_arr[$com_spr]);
switch(self::threesomes($stdin,$com_spr)){
case "win":
print "あなたの勝ちです!\n";
break;
case "lose":
print "あなたの負けです!\n";
break;
case "draw":
print "あいこです!もう一回\n";
// あいこの場合はもう一回
self::input_number();
break;
}
}
// 入力値エラー
else{
print " ! Error : 番号で入力してください。\n";
self::input_number();
}
}
// コンピュータ側の出した手(ランダム)
public static function get_computer_spr(){
return rand(0,2);
}
// 三つ巴判定
public static function threesomes($my_spr,$com_spr){
if($my_spr == $com_spr){
return "draw";
}
else if(($my_spr == 0 && $com_spr == 1)){
return "win";
}
else if(($my_spr == 1 && $com_spr == 2)){
return "win";
}
else if(($my_spr == 2 && $com_spr == 0)){
return "win";
}
else{
return "lose";
}
}
}
実行
$ php 001.php
- Input [0:グー , 1:チョキ , 2:パー] : 1
あなたの出した手は、チョキです。
コンピュータの出した手は、グーです。
あなたの負けです!
$ php 001.php
- Input [0:グー , 1:チョキ , 2:パー] : 1
あなたの出した手は、チョキです。
コンピュータの出した手は、パーです。
あなたの勝ちです!
$ php 001.php
- Input [0:グー , 1:チョキ , 2:パー] : 1
あなたの出した手は、チョキです。
コンピュータの出した手は、パーです。
あなたの勝ちです!
$ php 001.php
- Input [0:グー , 1:チョキ , 2:パー] : a
! Error : 番号で入力してください。
- Input [0:グー , 1:チョキ , 2:パー] : 1
あなたの出した手は、チョキです。
コンピュータの出した手は、チョキです。
あいこです!
- Input [0:グー , 1:チョキ , 2:パー] : 2
あなたの出した手は、パーです。
コンピュータの出した手は、チョキです。
あなたの負けです!
まとめ
当初想定していたよりも、大きなプログラムになってしまいました。
判定箇所など、もっとコンパクトに書けるとは思いますが、今回は見やすさ、わかり易さも重視して、
ifを垂れ流してみました。
コンピュータの出しては0~2の整数値をランダムで出すだけですが、
前回の勝ち負け、あいこの時に、次に出す手をアルゴリズムで決めるというのもAIっぽくなるけど、if文だけでやると、かなり寒い結果になりそうなので、やっぱりここはランダム一発だけにしておきました。
ブラウザにHTMLを表示するパターンの方が、一般的かと思いましたが、今回は、他の言語と似た感じのターミナル版のみをプログラミングしてみました。
GUI版は、Javascriptでやることにしましょう。
0 件のコメント:
コメントを投稿