アプリ版:「スタンプのみでお礼する」機能のリリースについて

キチンと動作する場合と、上手く動作しない場合のあるプログラムがあるのですが、原因が全く分かりません。いずれも、「たまに」動作します。原因が分かる方はぜひ御回答ください。環境は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;
}
}
?>

A 回答 (1件)

全ソースを別ファイルであげるなどしたほうがよいでしょう。


これだけでは検証のしようがないです。

一般的な誤作動の原因は
変数関連やfor等のループ異常
データ入出力(SQLやtxtファイル)の異常が多いです。

よくやる方法としては
上からexit()でいくつかに区切って
一つ一つの動作を見る方法です。
まずは問題箇所の特定が重要なので、その方法が一番有効でしょう。
    • good
    • 0
この回答へのお礼

うーん。
参考書の通りに全てのコードを記述したのですが、うまくいきませんねぇ・・。
kyotokyoさんの言うとおり、exit()という方法を試してみようと思います。

ご回答ありがとうございました!

お礼日時:2010/02/16 02:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!