この記事の例では、php で実装された単純なマインスイーパー ゲームについて説明します。皆さんの参考に共有してください。詳細は以下の通りです
-
- $init = $_POST["init"];//ゲーム再開
- $clickvalue = $_POST["clickvalue"];//掃海
- $checkflag = 0;//勝利または敗北
- $click_count = 0;//クリック数
- if($init == null && $clickvalue == null){//初期化
- $_POST = array();//POST を配列で設定
- $_POST[" rows"] = 9;//行数を設定
- $_POST["cols"] = 9;//列数を設定
- $_POST["num"] = 10;//数値を設定
- $_POST["timeshow"] = " 00:00"; //開始時刻を設定
- $init = true;//初期化を設定
- }
- $rows = $_POST["rows"];//行を取得
- $cols = $_POST["cols"];//列を取得
- $ num = $_POST["num"];//数値を取得
- $starttime = $_POST["starttime"];//開始時間を取得
- if($init){// は初期化
- $timeshow = "00:00" ;//開始時刻を設定
- $data = array();//データの初期化
- for($i=0;$i<$rows;$i++){//すべての行
- for($j=0;$j $data["data".$i."_".$j] = 0;// 私のものを null に設定します
- $data["open".$i ."_".$j] = 0;//クローズでノードを設定
- }
- }
- $i=0;//インデックスをリセットし、鉱山を設定(ランダム設定)
- while($i < $num ){//私の番号
- $r = rand(0,$rows - 1);//行のインデックス
- $c = rand(0,$cols - 1);//col のインデックス
- if($data[" data".$r."_".$c] == 0){//地雷でない場合
- $data["data".$r."_".$c] = 100;//ノードを設定地雷付き
- $i++;
- }
- }
- for($i=0;$i<$rows;$i++){//すべての行
- for($j=0;$j<$cols;$j++){//すべての列
- if($data["data".$i."_".$j] == 100) continue;
- //地雷ではないので、隣接する地雷の数を設定します
- $cnt = 0;
- if($i - 1 >= 0 && $j - 1 >= 0 && $data["data".($i - 1)."_".($j - 1)] == 100) $cnt++;//左上
- if($i - 1 >= 0 && $data["data".($i - 1)."_".$j] == 100)$cnt++;//left
- if($i - 1 >= 0 && $j + 1 < $cols && $data["data".($i - 1)."_".($j + 1)] == 100) $cnt++;//左下
- if($j - 1 >= 0 && $data["data".$i."_".($j - 1)] == 100)$cnt++;//上
- if($j + 1 < $cols && $data["data".$i."_".($j + 1)] == 100)$cnt++;// lower
- if($i + 1 < $rows && $j - 1 >= 0 && $data["data".($i + 1)."_".($j - 1)] == 100)$cnt++;//右上
- if($i + 1 < $rows && $data["data".($i + 1)."_".$j] == 100)$cnt++;//right
- if($i + 1 < $rows && $j + 1 < $cols && $data["data".($i + 1)."_".($j + 1)] == 100)$cnt++;//右下
- $data["data".$i."_".$j] = $cnt;//数値を設定
- }
- }
- }else{
- $data = $_POST;// データを取得
- if($data ["data".$clickvalue] == 100){
- // ユーザーのクリック値をチェック
- $checkflag = 2;// 地雷をクリックするとゲームオーバー
- for($i=0;$i<$rows ;$i++){//すべての行
- for($j=0;$j<$cols;$j++){//すべての列
- $data["open".$i."_".$j ] = 1;
- //すべてのノードを開くように設定します
- }
- }
- }else{
- $node =explode("_", $clickvalue);// クリックのノードを取得します
- openNode($node[0], $node[1]);//開くノードを設定します
- for($i=0;$i<$rows;$i++){//すべての行
- for($j=0;$j<$cols; $j++){//すべての列
- if($data["open".$i."_".$j] == 1)$click_count++;
- //オープンノードの数を取得します
- }
- }
- if ($rows*$cols - $click_count == $num)$checkflag = 1;
- //すべてのノードが開いていればゲームクリア
- }
- }
- if($checkflag == 0 && $click_count == 1) {
- //ゲームが開始の場合、開始時間
- $starttime = date("H:i:s");
- }
- if($starttime){//時間と表示を計算します
- $now = date("H:i:s");
- $nowlist =explode(":",$now);
- $starttimelist =explode(":",$starttime);
- $time_count = $nowlist[0]*3600+$nowlist[1]*60 + $nowlist[2] - ($starttimelist[0]*3600+$starttimelist[1]*60 + $starttimelist[2]);
- $min = フロア($time_count / 60);
- $sec = $time_count % 60;
- $timeshow = ($min>9?$min:"0".$min).":".($sec>9?$sec:"0".$sec);
- }else{
- $timeshow = "00:00";//ゲームが停止の場合は、時間も停止します
- }
- function openNode($i,$j){//開くことができる場合はノードを開くように設定します
- global $rows;// 行を取得します
- global $cols;// 列を取得します
- global $data;//データを取得します
- if($i < 0 || $i >= $rows || $j < 0 || $j >= $cols || $data["open".$i."_ ".$j])return;
- //ノードではないか、すでに開かれています
- $data["open".$i."_".$j] = 1;//ノードを開きます
- if ($data["data".$i."_".$j] > 0)return;//続行する必要がありますか?
- openNode($i - 1,$j - 1);
- openNode($i - 1,$j);
- openNode($i - 1,$j + 1);
- openNode($i,$j - 1);
- openNode($i,$j + 1);
- openNode($i + 1,$j - 1);
- openNode($i + 1,$j);
- openNode($i + 1,$j + 1);
- }
- ?>
-
-
-
- 扫雷游戏
- 頭>
- <ボディ>
- <フォームアクション=""メソッド="投稿">
-
-
|