PHPに惚れました

今でも多分惚れてます。

PHP 配列の要素の重複チェックを使って簡単なゲームこさえてみた。

http://d.hatena.ne.jp/Xephy/20090310/1236693897の記事で作った配列の重複チェック関数を使ってちょこっとこさえてみた。

チンチロなんだけど少し変則的。
対人ではなく、役によって配当が変わる。
サイを4個振り、役にポーカーの要素も少し入れた。

公開用に強引に書き換えたので警告を吐いたりするかもしれません。
重複チェック関数を使用したのは箇所は役判定ですね。

あと、強引な方法でBet数の初期化をしています。

下の方に配当を記していますが時間をかければ十分ptsは増えます。
ゲームバランスを考えるのって難しいですね。。

何か不自然な所があれば指摘いただけると助かります。

スクリプト名:a.phpとしています。サイコロの画像は適当に拾うか文字で代替して下さい。

<?php
define("MAXPINZORO",1);      //MAXベットのピンゾロ
define("PINZORO",2);         //MAXベットでないピンゾロ
define("ZOROME",3);
define("HIHUMIYON",4);       //1234の組み合わせ
define("SHIGOROSAN",5);      //3456の組み合わせ
define("THREECARD",6);
define("TWOPAIR",7);
define("ONEPAIR",8);
define("BUTA",9);            //目なし

function array_isunique($array){      //配列の重複チェック関数

	if(!is_array($array)){
    	return false;
	}

	$arrayValue = array_count_values($array);	//配列の値の数をカウントする

	$arraykey = array_keys($arrayValue,1);	//重複していないキーを取り出す
		
	for($i=0;$i<count($arraykey);$i++){
		unset($arrayValue[$arraykey[$i]]);	//重複していない要素を削除
	}
	if(count($arrayValue)!=0){
		return $arrayValue;
	}else{
		return false;
	}
}

$selfuri="";
$selfurl = 'http://ddhost.no-ip.info/deltacolors/a.php';
if (strncmp( @$_SERVER['HTTP_REFERER'] , $selfurl , strlen($selfuri))!=strlen($selfuri)){
	$timeout = time() + 1 * 86400;
	setcookie('Bet',0,$expire);  //Betの初期化((再アクセス)リロードの時以外)
}

//JackPotを入れてるDBから値を取り出したり//
//ユーザーの現在のptsを取り出したり//

$myuri = 'http://ddhost.no-ip.info/deltacolors/manage.php';
if ( strncmp( @$_SERVER['HTTP_REFERER'] , $myuri , strlen($myuri) ) ) {

	if($_SERVER{'REQUEST_METHOD'} == "POST"){
		$bet = $_POST['Bet'];
	}else{
		$bet = $_COOKIE['Bet'];
	}
	
	$expire = time() + 60*60*24*180;
	setcookie('Bet',$bet,$expire);

	if($bet!=0){
		$odds=0;
		$rdc = rand(1, 6);
		$rdc2 = rand(1, 6);
		$rdc3 = rand(1, 6);
		$rdc4 = rand(1, 6);
		
		$html="";
		$html .= "<img src='pic/".$rdc.".gif' border='0'>";    //各サイコロの画像を表示
		$html .= "<img src='pic/".$rdc2.".gif' border='0'>";
		$html .= "<img src='pic/".$rdc3.".gif' border='0'>";
		$html .= "<img src='pic/".$rdc4.".gif' border='0'><br>";
		
		$chk = array_isunique(array($rdc,$rdc2,$rdc3,$rdc4));    //重複チェック関数呼び出し
		/*役判定ここから*/
		if($rdc==$rdc2 && $rdc2==$rdc3 && $rdc3==$rdc4 && $rdc4==$rdc){   //ピンゾロの場合
			if($rdc==1){
				if($bet==200){   //Maxベット
					$case = 1;    //役による分岐フラグ
				}else{           //それ以外
					$case = 2;
					$odds = 300;    //オッズ
				}
				$html .= "ピンゾロ!!";
			}else{
				$case = 3;
				$odds=100;
				$html .= $rdc."ゾロ!!";
			}
		}else if($chk){   //重複が存在すれば
			if(count($chk)==2){  //サイコロ4個振りで重複の要素が二つある=ツーペア
				$case = 7;
				$odds=7;
				$k = array_keys($chk);
				$html .= $k[0]."".$k[1]."のツーペア";
			}else{          //4個振りで重複が一つでない
				if(array_keys($chk,3)){    //4個振りでキーが3つ重複している=スリーカード
					$case = 6;
					$odds=20;
					$k = array_keys($chk);
					$html .= $k[0]."のスリーカード";
				}else{                     //それ以外=ワンペア
					$case = 8;
					$k = array_keys($chk);
					$html .= $k[0]."のワンペア";
				}
			}
		}else if($rdc+$rdc2+$rdc3+$rdc4==10 && $rdc*$rdc2*$rdc3*$rdc4==24){    //1234の組み合わせ
			$case = 4;
			$html .="ヒフミよん";
		}else if($rdc+$rdc2+$rdc3+$rdc4==18 && $rdc*$rdc2*$rdc3*$rdc4==360){    //3456の組み合わせ
			$case = 5;
			$html .="シゴロさん";
			$odds=50;
		}else{    //それ以外。つまり役なし
			$case = 9;
			$html .="掛け金没収";
			$odds=-2;
		}
		/*役判定ここまで*/
	}

	if($bet!=0){
		if($case==MAXPINZORO){
			$html .="";     //各ケースの表示
		}elseif($case==HIHUMIYON){
			$html .="";
		}elseif($case==ONEPAIR){
			$html .="";
		}else{                  //それ以外 今回はBet数×オッズを表示するのでelseでまとめて処理
			$html .="";
		}
		
		if($case==MAXPINZORO){	//MAXベットピンゾロ
                      //MAXベットピンゾロの時の処理
		}elseif($case==HIHUMIYON){		//ヒフミよん
                      //1234の組み合わせ時の処理
		}elseif($case==SHIGOROSAN){		//シゴロさん
                      //3456の組み合わせ時の処理
		}elseif($case==ONEPAIR){		//ワンペア
                      //ワンペアの時の処理
		}else{
			if($odds>=0){
                                //配当がプラスになる時の処理
			}else{
                                //マイナスの時
			}
		}
	}else{
		$html .="<br>";  //改行
	}
	if($bet!=0){
		$html .="<br><a href=\"a.php\">もっかい</a>";   //もう一回振る Cookieにベットを記録しているので再度指定しなくてよい
	}
}


//配当処理後のJackPotや所持ptsを取得とか//


$html .="<br>所持マイレージ<span style=\"color: #FF0000;\"> DBから引っ張ってきたポイント </span><br>";
$html .="Jackpot<span style=\"color: #FF0000;\"> DBから引っ張ってきたJackPot </span><br>";


$html .="<br><form action='' method='POST' style='margin:0px;'>
賭けマイレpt<select name='Bet'>";
for($i=100;$i<201;$i++){                //BETは100〜200ptsの間
$html .="<option value=$i>$i\n";
}
$html .="</select>
<input type='submit' value='勝負'>
</form><br>";

?>
<html lang="ja">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
	<meta name="robots" content="noindex,nofollow">
	<title>チンチロ+ポーカー</title>
</head>
<body>

<?php
	print $html;
?>
<br>
ピンゾロ<br>
 MAXbet   JackPot×マイレ取得回数<br>
 それ以外  BET×300倍 <br>
ゾロ目    BET×100倍 <br>
1234     JackPot,マイレが2/3 <br>
3456     JackPotが2倍 + BET×50倍 <br>
スリーカード BET×20倍 <br>
ツーペア   BET×7倍 <br>
ワンペア   BETの半額をJackPotへ <br>
目なし    BET数×(-2倍)
</body>
</html>

?>

装飾は一切してないので携帯での表示も可能です。
分岐は上記の配当に合わせています。特殊な配当な場合、defultの処理では賄えないので。。。