定期更新ゲームの作り方(更新機能前編)

このページにアクセスすると更新ができるってページを作ります。

renew.phpとしてファイルを作成。

まず試しに、id1とid2のじゃんけんをさせましょう。

 

データベース接続

// データベース情報
$db['user'] = "ユーザー名"; // ユーザー名
$db['pass'] = "パスワード"; // パスワード
$dsn = 'mysql:host=mysql○○○.db.sakura.ne.jp; dbname=ユーザー名_データベース名; charset=utf8';
$pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));

 

データ取得・変数格納

変数にデータを入れます。

変数は$〇〇で定義され、後ろに二つまで名前を付けて二次元配列を作ることができます。

$○○[数字][‘文字’]

数字はソートすると0から自動で振るので、自分でも0から入れるようにすると間違えにくいです。

// データ取得
$stmt = $pdo->prepare('SELECT * FROM SampleTable order by id');
$stmt->execute(array());
$count = 0;
foreach ($stmt as $row) {
  $user[$count] = $row ;
  $count++ ;
}

order by id はid昇順でソートの意味。

$count でユーザー数をカウントしておきます。

foreach{}内で$rowに一人分のデータが入っているので、$user[$count]、id1の人なら$user[0]にデータを格納します。

$count++ は$countの数値を+1すると言う意味です。ここもセミコロンは必要です。

データがなくなるまでforeachはループされます。

 

htmlデータ作成

$html に更新結果用のhtmlを入れていきます。

まずはヘッダー部分は更新内容によって変動しないので前回と同じようなものを書いていきます。

// ヘッダー作成
$html = '
<html>
  <head>
    <title>更新結果</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
';

 

じゃんけん

$left = 0;
$right = $left+1;

// じゃんけん開始
$html .= $user[$left]['name'].' vs '.$user[$right]['name'].'<br>';
$html .= $user[$left]['hand'].' vs '.$user[$right]['hand'].'<br>';

if ($user[$left]['hand'] == 'rock') {
  if ($user[$right]['hand'] == 'rock') {
    $html .= '引き分け!<br>';
  } elseif ($user[$right]['hand'] == 'scissors') {
    $html .= $user[$left]['name'].'の勝ち!<br>';
  } elseif ($user[$right]['hand'] == 'paper') {
    $html .= $user[$right]['name'].'の勝ち!<br>';
  }
} elseif ($user[$left]['hand'] == 'scissors') {
  if ($user[$right]['hand'] == 'rock') {
    $html .= $user[$right]['name'].'の勝ち!<br>';
  } elseif ($user[$right]['hand'] == 'scissors') {
    $html .= '引き分け!<br>';
  } elseif ($user[$right]['hand'] == 'paper') {
    $html .= $user[$left]['name'].'の勝ち!<br>';
  }
} elseif ($user[$left]['hand'] == 'paper') {
  if ($user[$right]['hand'] == 'rock') {
    $html .= $user[$left]['name'].'の勝ち!<br>';
  } elseif ($user[$right]['hand'] == 'scissors') {
    $html .= $user[$right]['name'].'の勝ち!<br>';
  } elseif ($user[$right]['hand'] == 'paper') {
    $html .= '引き分け!<br>';
  }
}

だいたい今までやったことなので分かるかとも思いますが一応解説を

$left = 0;
$right = $left+1;

勝負する人の $user[] の[]内に入れる数字をここで定義します。

$html .= $user[$left]['name'].' vs '.$user[$right]['name'].'<br>';
$html .= $user[$left]['hand'].' vs '.$user[$right]['hand'].'<br>';

勝負する人の名前と手を表示させます。

handカラムには日本語でグーとかチョキとか入れておけば見やすいんですが、私はあんまり全角を格納したくないのでこうなってます。

=だと左の中に既に入っているものは消して右のものを入れるんですが、

.=だと既存の中身はそのままに後ろに追記する形になります。

if(){

} elseif (){

}

elseif() はifに繋げつつももう一度条件を書きたい時に使います。

意味はif()と同じ。

 

html出力

$html .= '</html>';

// htmlとして出力
$fhandle = fopen('result.html', 'w');
fwrite( $fhandle, $html);
fclose( $fhandle );

echo '更新完了';

result.html がファイル名です。

終わったらわかるように適当に文字でも出力しておきます。

 

ここまで出来たら実行してみましょう。

<?php
// データベース情報
$db['user'] = "ユーザー名"; // ユーザー名
$db['pass'] = "パスワード"; // パスワード
$dsn = 'mysql:host=mysql○○○.db.sakura.ne.jp; dbname=ユーザー名_データベース名; charset=utf8';
$pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));

// データ取得
$stmt = $pdo->prepare('SELECT * FROM SampleTable order by id');
$stmt->execute(array());
$count = 0;
foreach ($stmt as $row) {
  $user[$count] = $row ;
  $count++ ;
}

// ヘッダー作成
$html = '
<html>
  <head>
    <title>更新結果</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
';

$left = 0;
$right = $left+1;

// じゃんけん開始
$html .= $user[$left]['name'].' vs '.$user[$right]['name'].'<br>';
$html .= $user[$left]['hand'].' vs '.$user[$right]['hand'].'<br>';

if ($user[$left]['hand'] == 'rock') {
  if ($user[$right]['hand'] == 'rock') {
    $html .= '引き分け!<br>';
  } elseif ($user[$right]['hand'] == 'scissors') {
    $html .= $user[$left]['name'].'の勝ち!<br>';
  } elseif ($user[$right]['hand'] == 'paper') {
    $html .= $user[$right]['name'].'の勝ち!<br>';
  }
} elseif ($user[$left]['hand'] == 'scissors') {
  if ($user[$right]['hand'] == 'rock') {
    $html .= $user[$right]['name'].'の勝ち!<br>';
  } elseif ($user[$right]['hand'] == 'scissors') {
    $html .= '引き分け!<br>';
  } elseif ($user[$right]['hand'] == 'paper') {
    $html .= $user[$left]['name'].'の勝ち!<br>';
  }
} elseif ($user[$left]['hand'] == 'paper') {
  if ($user[$right]['hand'] == 'rock') {
    $html .= $user[$left]['name'].'の勝ち!<br>';
  } elseif ($user[$right]['hand'] == 'scissors') {
    $html .= $user[$right]['name'].'の勝ち!<br>';
  } elseif ($user[$right]['hand'] == 'paper') {
    $html .= '引き分け!<br>';
  }
}

$html .= '</html>';

// htmlとして出力
$fhandle = fopen('result.html', 'w');
fwrite( $fhandle, $html);
fclose( $fhandle );

echo '更新完了';
?>

ここまでちゃんとできていれば、renew.phpにアクセスすると更新完了の文字が出ると思います。

宣言画面にリンクを作ったresult.htmlにアクセスして結果を確認しましょう。

うまくいかない場合は、登録が二人以上いるか、handカラムに手が入っているか等を確認しましょう。

次回は複数人でじゃんけんできるように改造していきます。

 

そろそろ自分のゲーム作らなきゃという焦りが出てきたので、続きは反響があったら書きます。

ここまででも十分全くわからない人のとっかかりにはなれたんじゃないかと。。。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です