SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Flashによるマルチプレイヤーゲーム入門: 三目並べ

Pulse UI Frameworkによるオンラインゲームの作成

  • X ポスト
  • このエントリーをはてなブックマークに追加

コーディング開始

 ファイル生成後、以下の4つのクラスからサブクラスを作成する必要があります。

サブクラスの全体像
サブクラスの全体像
  • TictactoeGame」-これはゲームコードが開始されるメインクラスです。このクラスは、どのクラスをオーバーライドするかをPulseUIに指示する場所でもあります(今回のサンプルでは、次の3つのクラスをオーバーライドします)。
  • TictactoeSkinner」-すべての画面UIを描画するために使われるイメージ(スキン)ファイルを読み込むSkinnerサブクラスです。
  • TictactoeNewGameScreen」-このサブクラスはオプションですが、今回のゲームでは、Pulseサーバにゲームルームの詳細な特性(ターン制、ルームごとの最大プレイヤー数が2人であることなど)を伝えるために必要とされます。
  • TictactoeGameScreen」-ゲーム開始後にゲームルーム内で行われるすべてのアクションに関するクラスです。

サブクラスの詳細

TictactoeGame

 これはゲームコードが開始されるメインクラスです。

コンストラクタのオーバーライド

public function TictactoeGame() {
new TictactoeSkinner();
}

 コンストラクタはゲーム固有のSkinnerクラスをインスタンス化するのに適した場所です。Skinnerクラスの実装については、後ほど詳しく説明します。

PulseGameのgetGameIdメソッドのオーバーライド

public override function getGameId():String {
return "Tictactoe";
}

 Pulseランタイムでは、ゲームごとに一意のゲームIDを割り当てる必要があります。これにより1台のサーバ上で複数のゲームをホストできるわけです。このIDは同じゲームに参加している対戦相手を照合するためにも用いられます。つまり、ジグソーパズルをしているプレイヤーは三目並べをしているルームに入ることはできません。

startメソッドのオーバーライド

import tictactoe.gsrc.client.GNetClientObjectFactory;
...
protected override function start():void  {
var factory:GNetClientObjectFactory;
factory = new GNetClientObjectFactory();
m_netClient = new GameClient(factory, this);
s_instance = this;
super.start();
}

 startメソッドからすべてが開始されます。上のようにして、factoryオブジェクトを生成しなければなりません。このfactoryクラスは、コードの生成過程で生成されるクラスの1つです。

 GameClientも、引数として渡されたfactoryのインスタンスで生成されます。生成されたGameClientを、PulseGameクラスで定義されているm_netClientフィールドに代入する必要があります。

 必要なGameClientインスタンスは1つだけです。最後にsuper.start()を呼び出します。これでスプラッシュ画面が表示され、それが徐々に消えてプレイヤーをログイン画面に導きます。

 この段階で、プレイヤーにログイン画面が表示されます。プレイヤーは登録されたユーザー名とパスワードを入力するか、ゲストとしてログインできます。

ゲームのためのカスタムクラスの作成

protected override function initGameScreen():void  {
m_gameScreen = new TictactoeGameScreen(this);
m_gameScreen.init();
}

 上記の2つのオーバーライドは、ゲーム固有の画面を生成するために必要です。1つは新規ルーム作成中の画面で、もう1つはゲームプレイ中の画面です。

ターン制

 三目並べはターン制のゲームとして定義されます(TictactoeNewGameScreenのサブクラスの詳細を参照)。そのため、Pulseサーバは、自分のターン(番)になったことをクライアントに知らせるコールバックを送出します。ターン中は、プレイヤーに対して視覚的なサインを表示する必要があります。

public override function onPlayerTurn():void {
(m_gameScreen as TictactoeGameScreen).onPlayerTurn();
}

 このロジックは単純で、サインを表示するゲーム画面を呼び出しているだけです。

サーバとの通信

public override function onGameStateAction(gameState:GameStateClient):void{
(m_gameScreen as TictactoeGameScreen).onPlayerMoved(gameState);
}
public function sendGameState(xPos:int,yPos:int,value:int):void {
var putMsg:PutClient = new PutClient();
putMsg.setStateType(GameConstants.GS_IS_UNIQUE);
putMsg.setPutRow(xPos);
putMsg.setPutColumn(yPos);
putMsg.setPutValue(value);
m_netClient.sendGameStateAction(putMsg);
m_netClient.nextTurn();
}

 2つのメソッドを実装する必要があります。1つは対戦相手のアクションを受け取るメソッドで、もう1つは対戦相手にアクションを送るメソッドです。

 対戦相手のアクションを受け取るために、onGameStateActionをそのままオーバーライドして、ゲーム画面に渡します。

 対戦相手にアクションを送るため、ゲーム画面オブジェクトから呼び出される補助メソッドsendGameStateを作成します。ここでは、サーバに「プレイヤーのターンが完了し、次のプレイヤーのターンを通知してよい」ことも知らせます。なお、PutClientはスキーマファイル内で定義されており、コード生成段階で生成されることに注意してください。

 使用可能なゲーム状態の種類の詳細については、Pulse開発者ガイドを参照ください。

 2つのメソッドを実装する必要があります。1つは対戦相手のアクションを受け取るメソッドで、もう1つは対戦相手にアクションを送るメソッドです。

 対戦相手のアクションを受け取るために、onGameStateActionをそのままオーバーライドして、ゲーム画面に渡します。

 対戦相手にアクションを送るため、ゲーム画面オブジェクトから呼び出される補助メソッドsendGameStateを作成します。ここでは、サーバに「プレイヤーのターンが完了し、次のプレイヤーのターンを通知してよい」ことも知らせます。なお、PutClientはスキーマファイル内で定義されており、コード生成段階で生成されることに注意してください。

 使用可能なゲーム状態の種類の詳細については、Pulse開発者ガイドを参照ください。

次のページ
TictactoeSkinner

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Prashanth Hirematada(Prashanth Hirematada)

ゲーム開発会社Gamantraの創設者でありチーフアーキテクト。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3853 2009/05/08 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング