ポンクソフト

レースゲーム(スコアランキング) - Flash(ActionScript)とPHPの連携入門

前ページ Flash(ActionScript)とPHPの連携入門 TOP 次ページ

目次

  1. Flash(ActionScript)とPHPの連携入門
  2. ジャンピングゲーム(スコアランキング)
  3. レースゲーム(スコアランキング)
  4. チャット
  5. キャラクターチャット

実行画面

ハムスターをコースから外れないように走らせるゲームです。マウスの左ボタンを押している間ハムスターが回転します。ゲームオーバーになったときに、名前を入れて send ボタンを押すとランキングに登録することができます。
ゲーム画面へ
ソースダウンロード

今回のポイント

画面作成

ファイル名「race.fla」で新規 Flash ドキュメントを作成してください。

ステージのプロパティ

最初にステージのプロパティを適当に設定します。この解説で使っているムービーでは、サイズを「550×400」、背景色を「#F3E1B1」、フレームレートを「30fps」としています。

コースとスコアの作成

次にコースを描いてムービークリップに変換し、インスタンス名を「course_mc」にします。コースは道の中の部分を抜き、つまり背景色が見えるように作成してください。
続いて、画面中央あたりに移動距離を表示するテキストを配置します。「cm」は静止テキストにし、左の0はダイナミックテキストにして変数の欄に「score」と書きます。
race_course.gif

自機の作成

次に、1フレーム目に右向きの自キャラクタを描いてムービークリップに変換してください。
race_jiki.gif
インスタンスは画面下部のコース中央当たりに配置してください。
race_course2.gif

2フレーム目の作成

2フレーム目に空白キーフレームを挿入し、下図のようにゲームオーバー画面を作成します。文字「GAME OVER」「cm」「name」は静止テキストにします。cmの左の0はダイナミックテキストにして変数の欄に「score」と書きます。nameの右の欄もダイナミックテキストにして変数の欄に「name」と書きます。「send」と「retry」はボタンシンボルにします。
race_frame2.gif

ランキング無しのプログラムの記述

まずスコアランキング無しのプログラムを作成します。

1フレーム目のアクション

1フレーム目をクリックして、以下の ActionScript を記述します。
stop();

自キャラクタのアクション

自キャラクタのインスタンスをクリックして以下の ActionScript を記述します。
onClipEvent(load) {
  mf = false;
  level = 0.5;
  _root.score = 0;
}

onClipEvent(enterFrame) {
  var v = 2 + Math.log(level) * 3;
  _x += v * Math.cos(_rotation * Math.PI / 180);
  _y += v * Math.sin(_rotation * Math.PI / 180);
  if (mf) _rotation -= v;
  if (_root.course_mc.hitTest(_x, _y, true)) {
    _root.gotoAndStop(2);
  }
  level += 0.01;
  _root.score++;
}

onClipEvent(mouseDown) {
  mf = true;
}

onClipEvent(mouseUp) {
  mf = false;
}

実行

以上が完成したら保存してゲームを実行し、スコアランキング以外の部分が動くことを確認してください。

ランキング部分のプログラムの記述

次にスコアランキング部分のプログラムを作成します。

sendボタンのアクション

2フレーム目の「send」ボタンをクリックし、以下の ActionScript を記述します。
on(release) {
  if(_url.indexOf("http://ponk.jp/") != -1) {
    getURL("race.php", "_top", "POST");
  }
}

retryボタンのアクション

2フレーム目の「retry」ボタンをクリックし、以下の ActionScript を記述します。
on(release) {
  getURL("race.php?rn=" + Math.random(), "_top");
}

データベースとテーブルの作成

SQLiteManagerなどを使い、SQLiteのデータベース「race.db」を作り、テーブル「score」を以下の通り作ってください。
^*フィールド,*型
^name,TEXT
^score,INTEGER

ランキングプログラム(PHP)の作成

次にスコアランキングの登録・表示を行うPHPプログラムを作成します。以下のソースを入力してください。Flash からパブリッシュしたHTMLファイルを使うと良いでしょう。
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>レースゲーム</title>
</head>
<body>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,65,0" width="550" height="400" id="race" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="race.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#f3e1b1" /><embed src="race.swf" quality="high" bgcolor="#f3e1b1" width="550" height="400" name="race" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
<br><br>
<table border="1">
<tr><th>順位</th><th>お名前</th><th>距離</th></tr>
<?php
$con = sqlite_open('race.db');
$name = htmlspecialchars($_POST['name']);
$score = htmlspecialchars($_POST['score']);
if ($score) {
  if (!$name) $name = "名無しさん";
  sqlite_query($con, "insert into score values('$name',$score)");
}
$rs = sqlite_query($con, "select * from score order by score desc");
$i = 0;
while ($row = sqlite_fetch_array($rs)) {
  print "<tr><td>" . ($i + 1) . "</td><td>{$row['name']}</td><td>{$row['score']}cm</td></tr>\n";
  $i++;
}
sqlite_close($con);
?>
</table>
</body>
</html>
完成したら「race.php」という名前でサーバにアップロードしてください。

実行

以上が完成したらサーバ上の「race.php」を実行し、スコアが登録できることを確認してみてください。
前ページ Flash(ActionScript)とPHPの連携入門 TOP 次ページ
このエントリーをはてなブックマークに追加 そっか0