キチンと動作する場合と、上手く動作しない場合のあるプログラムがあるのですが、原因が全く分かりません。いずれも、「たまに」動作します。原因が分かる方はぜひ御回答ください。環境はWin XAMPP1.7.2を使用しました。非常に長くなってしまい、申し訳ありません。
宝探しゲーム(文字は表示されるが、ゲーム部分がスッポリ無い)
<?php
//-------------------------------------------------------
//宝探しゲーム
//-----------------------------------------------------
//セッションの開始
session_start();
//タイトルと説明表示
echo "<h1>宝探し</h1>";
echo "<p>マップ上の適当な場所をクリック!</p>";
//ゲーム状態を判定する
$stat = $_SESSION['stat'];
if (!$stat || $_GET['m'] == "reset"){ //初めての場合、リセット時
init_game();
draw_map();
exit;
}
//パネルを開くとき
if ($_GET['m'] == 'click'){
click_panel();
}
// ゲームパラメータの初期化
function init_game()
{
//ゲームの初期化
$_SESSION['stat'] ='playing';
$_SESSION['turn'] =0;
//宝の位置を設定する
$_SESSION['takara_x'] = rand(0,8);
$_SESSION['takara_y'] = rand(0,8);
//マップを初期化
for ($y = 0; $y < 9; $y++){
for ($x = 0; $x < 9; $x++){
$_SESSION["map"][$y][$x] = "*";
}
}
}
//マップの描画(tableタグ表示)
function draw_map()
{
//マップを描画する
$map = $_SESSION['map'];
$s = "<table border='1'>";
for ($y = 0; $y < 9; $y++) {
$s .="<tr>";
for ($x = 0; $x < 9; $x++){
$v = $_SESSION["map"][$y][$x];
$color = "#FFFFFF";
if ($v == "*"){
$v = "<a href ='?m=click&x=$x&y=$y'>*</a>";
$color = "#COCOCO";
}
$s .= "<td width='24' align='center' bgcolor='$color'>";
$s .= "$v</td>";
}
$S .="</tr>";
}
$s .= "</table>";
echo $s;
echo "<p>現在、{$_SESSION['turn']}手目です。</p>";
echo "<p><a href='?m=reset'>* RESTART *</a></p>";
}
//パネルクリック時の処理
function click_panel()
{
$x = intval($_GET['x']);
$y = intval($_GET['y']);
$takara_x = $_SESSION['takara_x'];
$takara_y = $_SESSION['takara_y'];
$_SESSION['turn']++;
//宝を有無を判定
if ($takara_x == $x && $takara_y == $y) {
//宝を見つけた判定
$_SESSION["map"][$y][$x] = '<font color="red">@</font>';
echo '<h1>☆大当たり☆</h1>';
draw_map();
init_game();
}else{
//間違えた場合は宝までの距離を表示
$dist = abs($takara_x - $x) + abs($takara_y - $y);
$_SESSION['map'][$y][$x] = $dist;
echo "<p>残念でした!ヒント・・あと $dist の距離のところ</p>";
draw_map();
exit;
}
}
?>
No.1ベストアンサー
- 回答日時:
全ソースを別ファイルであげるなどしたほうがよいでしょう。
これだけでは検証のしようがないです。
一般的な誤作動の原因は
変数関連やfor等のループ異常
データ入出力(SQLやtxtファイル)の異常が多いです。
よくやる方法としては
上からexit()でいくつかに区切って
一つ一つの動作を見る方法です。
まずは問題箇所の特定が重要なので、その方法が一番有効でしょう。
うーん。
参考書の通りに全てのコードを記述したのですが、うまくいきませんねぇ・・。
kyotokyoさんの言うとおり、exit()という方法を試してみようと思います。
ご回答ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- PHP sessioncookieをではなくcookieを使わなければならない理由について… 4 2022/11/07 13:01
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Dosブロンプトでtabを出力したい
-
switch()文で値の大小比較
-
小数点以下0の非表示
-
バッチファイルでpingの結果を...
-
phpでcookieがうまく保存されない
-
findstrのerrorlevel
-
shシェルスクリプト 空白行の...
-
syntax error, unexpected 'ech...
-
オブジェクトの中身の判定(PHP)
-
$_SERVER["REQUEST_METHOD"]に...
-
画像の削除
-
三項演算子/echoとprintの違い
-
ナベアツプログラム(3の倍数...
-
Windowsのsetコマンドでの小数...
-
電話番号入力確認 やっぱり分...
-
シェルで正規表現 YYYY/MM/DD
-
Javascriptの関数をPHPで作りま...
-
PHPでのパスワード制限のセキュ...
-
ダブルクウォートやヒアドキュ...
-
bashの関数の引数にスペースが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Dosブロンプトでtabを出力したい
-
switch()文で値の大小比較
-
phpでcookieがうまく保存されない
-
バッチファイルでpingの結果を...
-
shシェルスクリプト 空白行の...
-
syntax error, unexpected 'ech...
-
findstrのerrorlevel
-
バッチファイルで、全てのウィ...
-
PHPで訪問回数を表示するカウン...
-
PHP一覧表示した項目にリンクを...
-
DBのハッシュ化したパスワード...
-
小数点以下0の非表示
-
Windowsのsetコマンドでの小数...
-
オブジェクトの中身の判定(PHP)
-
PHPでのパスワード制限のセキュ...
-
bashの関数の引数にスペースが...
-
RSSにdiv,ul classを付けたいの...
-
pdftkを使った処理をバッチファ...
-
ゼロとNULLを区別して number_f...
-
コマンドプロンプト フォルダ内...
おすすめ情報