//21だけのフィールド
$select = $_POST['select'];
//////////////////////////////////////
// 初めてトランプを引く場合 //
//////////////////////////////////////
if($select==""){
//トランプの全ての絵柄を記憶する変数
$picture = array();
//#########################
// 親を決める #####
//#########################
list($msec,$sec)=split(' ',microtime());
mt_srand($msec*100000);
$start=mt_rand(0,1);
if($start==0){
print "あなたが親です!";
}
else{
print "コンピュータが親です";
}
//#########################
// 手札を配る #####
//#########################
//コンピュータ
$com_tranpu = array();
$com_tranpu[0] = tranpu();
$com_tranpu[1] = tranpu();
//ユーザ
$you_tranpu = array();
$you_tranpu[0] = tranpu();
$you_tranpu[1] = tranpu();
//トランプを表示させる
print "
";
print "コンピュータ";
if($start==1){
print "【親】";
}
else{
print "【子】";
}
print "
";
print_tranpu($com_tranpu[0]);
ura();
print " ";
print "あなた";
if($start==0){
print "【親】";
}
else{
print "【子】";
}
print "
";
print_tranpu($you_tranpu[0]);
print_tranpu($you_tranpu[1]);
print " |
";
//データを送信する為のフォームを表示する
print "| ";
print "";
print " | ";
print "";
print " |
";
}
///////////////////////////////////////
// もう1枚トランプを引く場合 //
///////////////////////////////////////
if($select==1){
//どちらが親かのデータを元に戻す
$start = $_POST['start'];
//トランプの全てを元に戻す
$picture_all = $_POST['picture_all'];
for($i=0;$i<$picture_all;$i++){
$form_picture = "picture".$i;
$picture[$i] = $_POST["$form_picture"];
}
//コンピュータの手札を元に戻す
$com_all = $_POST['com_all'];
for($i=0;$i<$com_all;$i++){
$com_picture = "com_tranpu".$i;
$com_tranpu[$i] = $_POST["$com_picture"];
}
//ユーザの手札を元に戻す
$you_all = $_POST['you_all'];
for($i=0;$i<$you_all;$i++){
$you_picture = "you_tranpu".$i;
$you_tranpu[$i] = $_POST["$you_picture"];
}
//トランプを表示させる
print "";
//コンピュータのトランプを表示する
print "コンピュータ";
if($start==1){
print "【親】";
}
else{
print "【子】";
}
print "
";
print_tranpu($com_tranpu[0]);
//一枚目は表示しているので、残りは裏を表示する
for($i=1;$i<$com_all;$i++){
ura();
}
print " ";
//ユーザのトランプを表示する
print "あなた";
if($start==0){
print "【親】";
}
else{
print "【子】";
}
print "
";
$you_tranpu[$you_all] = tranpu();
for($i=0;$i<$you_all+1;$i++){
print_tranpu($you_tranpu[$i]);
}
print "
>トランプを1枚引きました! ";
//合計点数を計算する
$you_sum = cal_point($you_tranpu);
$you_num = count($you_sum);
for($i=0;$i<$you_num;$i++){
print ">合計点数は".$you_sum[$i]."です。 ";
}
//全ての合計が21を超えていないかを確認する。
$sum = check_21($you_sum);
if($sum==1){
print ">おめでとうございます!21が出ました! ";
print "";
print " |
";
exit;
}
else if($sum==2){
print ">22以上になりました。失格です!
";
print "";
print "";
exit;
}
//データを送信する為のフォームを表示する
print "| ";
print "";
print " | ";
print "";
//データ送信フォームの終了
print " |
";
print "";
}
//////////////////////////////////////////
// トランプを引くのを止める場合 //
//////////////////////////////////////////
if($select==2){
//どちらが親かのデータを元に戻す
$start = $_POST['start'];
//トランプの全てを元に戻す
$picture_all = $_POST['picture_all'];
for($i=0;$i<$picture_all;$i++){
$form_picture = "picture".$i;
$picture[$i] = $_POST["$form_picture"];
}
//コンピュータの手札を元に戻す
$com_all = $_POST['com_all'];
for($i=0;$i<$com_all;$i++){
$com_picture = "com_tranpu".$i;
$com_tranpu[$i] = $_POST["$com_picture"];
}
//ユーザの手札を元に戻す
$you_all = $_POST['you_all'];
for($i=0;$i<$you_all;$i++){
$you_picture = "you_tranpu".$i;
$you_tranpu[$i] = $_POST["$you_picture"];
}
//コンピュータが引く
$com_flag = 1;
//コンピュータが引き終わるまで繰り返す
while($com_flag = 1){
//現在のポイント数を調べる
$com_sum = cal_point($com_tranpu);
//ポイントのMAXを調べる
$com_max = cal_max($com_sum);
//ポイントのMINを調べる
$com_min = cal_min($com_sum);
$com_num = check_21($com_sum);
if($com_num==2){
$com_point = $com_min;
break;
}
if($com_num==1){
$com_point = 21;
break;
}
if($com_max>16 && $com_max<22){
$com_point = cal_spot($com_sum);
$com_flag = 0;
break;
}
$com_tranpu[$com_all] = tranpu();
$com_all++;
$com_sum = cal_point($com_tranpu);
//print "親:";print_r($com_sum);print "
";
}
//トランプを表示させる
print "";
//コンピュータのトランプを表示する
print "コンピュータ";
if($start==1){
print "【親】";
}
else{
print "【子】";
}
print "
";
//一枚目は表示しているので、残りは裏を表示する
for($i=0;$i<$com_all;$i++){
print_tranpu($com_tranpu[$i]);
}
print " ";
//ユーザのトランプを表示する
print "あなた";
if($start==0){
print "【親】";
}
else{
print "【子】";
}
print "
";
//一枚目は表示しているので、残りは裏を表示する
for($i=0;$i<$you_all;$i++){
print_tranpu($you_tranpu[$i]);
}
$you_flag = check_21($tranpu);
if($you_flag==1){
$you_point = 21;
}
else if($you_flag==2){
$you_sum = cal_point($you_tranpu);
$you_point = cal_min($you_sum);
}
else{
$you_sum = cal_point($you_tranpu);
$you_point = cal_max2($you_sum);
}
print "
";
print ">コンピュータのポイントは".$com_point."です。 ";
print ">あなたのポイントは".$you_point."です。
";
//どちらが勝つか決める
$win_flag=1;
//両者が同一の時
if($you_point==$com_point){
if($start == 1){
//親が勝つ
win("com");
}
else{
//あなたが勝つ
win("you");
}
$win_flag=0;
}
//両方とも21を超える時
if($you_point>21 && $com_point>21 && $win_flag==1){
if($start == 1){
if($com_point<=$you_point){
//親が勝つ
win("com");
}
else{
//あなたが勝つ
win("you");
}
}
else{
if($you_point<=$com_point){
//あなたが勝つ
win("you");
}
else{
//親が勝つ
win("com");
}
}
$win_flag=0;
}
//どちらかが21を超える時
if($you_point>21 && $com_point<22 && $win_flag==1){
win("com");
$win_flag=0;
}
if($com_point>21 && $you_point<22 && $win_flag==1){
win("you");
$win_flag=0;
}
//両方とも21未満
if($you_point>$com_point && $com_point<22 && $you_point<22 && $win_flag==1){
win("you");
$win_flag=0;
}
if($com_point>$you_point && $com_point<22 && $you_point<22 && $win_flag==1){
win("com");
$win_flag=0;
}
print " >もう一度する";
print " |
";
}
//トランプを決定させる
function tranpu(){
global $picture;
$all = count($picture);
$flag = 1;
while($flag==1){
list($msec,$sec)=split(' ',microtime());
mt_srand($msec*100000);
$num = mt_rand(1,52);
if(in_array($num,$picture)){
}
else{
$flag=0;
}
}
$picture[$all] = $num;
return $num;
}
//特定範囲のポイントのMAXを返す
function cal_spot($tranpu){
$num = count($tranpu);
$max = 0;
for($i=0;$i<$num;$i++){
if($max<$tranpu[$i] && $tranpu[$i]<22 && $tranpu[$i]>16){
$max = $tranpu[$i];
}
}
return $max;
}
//MAXのポイントを返す
function cal_max($tranpu){
$num = count($tranpu);
$max = 0;
for($i=0;$i<$num;$i++){
if($max<$tranpu[$i]){
$max = $tranpu[$i];
}
}
return $max;
}
//22未満のMAXのポイントを返す
function cal_max2($tranpu){
$num = count($tranpu);
$max = 0;
for($i=0;$i<$num;$i++){
if($max<$tranpu[$i] && $tranpu[$i]<22){
$max = $tranpu[$i];
}
}
return $max;
}
//MINのポイントを返す
function cal_min($tranpu){
$num = count($tranpu);
$min = $tranpu[0];
for($i=0;$i<$num;$i++){
if($min>$tranpu[$i]){
$min = $tranpu[$i];
}
}
return $min;
}
//合計ポイントを計算する
function cal_point($tranpu){
$score = 0;
$all_score = array();
$all_score[0] = 0;
$num = count($tranpu);
for($i=0;$i<$num;$i++){
$point = $tranpu[$i]%13;
if($point==0 || $point>9){
$point = 10;
}
if($point==1){
$patern = count($all_score);
for($j=0;$j<$patern;$j++){
$all_score[$j+$patern] = $all_score[$j] + 11;
$all_score[$j] = $all_score[$j] + 1;
}
}
else{
//全ての合計ポイントに現在のポイントを足す
$patern = count($all_score);
for($j=0;$j<$patern;$j++){
$all_score[$j] = $all_score[$j] + $point;
}
}
}
return $all_score;
}
//合計点数による場合わけをする
function check_21($tranpu){
$num = count($tranpu);
$check = 0;
for($i=0;$i<$num;$i++){
$point = $tranpu[$i];
if($point==21){
//21がある
return 1;
}
if($point>21){
$check++;
}
else{
}
}
if($check==$num){
//数値オーバー
return 2;
}
else{
//21未満がある
return 0;
}
}
//トランプの画像を表示させる
function print_tranpu($tranpu){
$kind = $tranpu%13;
$path = "";
if($tranpu > 0 && $tranpu<=13){
$path = "./tranpu/heart/";
}
else if($tranpu >= 14 && $tranpu<=26){
$path = "./tranpu/diya/";
}
else if($tranpu >= 27 && $tranpu<=39){
$path = "./tranpu/spade/";
}
else if($tranpu >= 40 && $tranpu <=52){
$path = "./tranpu/clover/";
}
if($kind == 0){
$kind = 13;
}
$path = $path . $kind . ".gif";
print "
";
}
//トランプの裏画像を表示させる
function ura(){
$path = "./tranpu/other/ura.gif";
print "
";
}
function win($user){
if($user=="com"){
print ">コンピュータが勝利です!
";
}
else{
print ">あなたが勝利です!
";
}
}
?>