第7回 ネットワークiアプリのためのサーバサイド活用(2)90Xi専用ゲームiアプリ開発講座(4/4 ページ)

» 2004年11月29日 20時38分 公開
[澤橋辰典・武上将樹,ITmedia]
前のページへ 1|2|3|4       

サーバ側で設計を工夫する

 プログラムで行うことが増加し、複雑に入り組んでくると、ひとつひとつのクラスやメソッドが肥大し、後の修正や、機能追加のさいの障害になりかねない。そうならないためには、コーディングを行いながら、上手く全体の設計を修正していく必要がある。今回もコーディングを行いながら、設計を組み替えていく作業を行った。

 一つめは、ACTIONに応じて処理を振り分ける制御クラスを作成したことだ。具体的には、アプリからのリクエストに応じて行われる処理を、SWITCH文を用いて切り替えている。処理の内容も、中身に応じたクラスに処理させることで、直感的に分かりやすくなるよう配慮した。

class DuelActionController{
  function open($request)
  {
   //制御
    switch($action){
     //対戦相手検出
     case ACTION_SEARCH:
      $list   = new DuelistList($utn);
      $result = $list->search();
       break;
     //バトル
      case ACTION_ATTACK:
        $duel   = new Duel($user_id);
        $result = $duel->attack($card);
        break;
     //ゲーム終了
      case ACTION_RESULT:
        $duel   = new Duel($user_id);
        $result = $duel->finalize($res);
        break;
      default:
        $this->_respondError();
     }
//略
}

 またさらにもう一つ、DBAccessクラスを管理するDBオブジェクト管理クラスを作成した。DBAceessクラスをいちいちインスタンス化するのは面倒だし、場合に応じて何をインスタンス化すべきか考えるのも複雑になってしまうので、DBAccessクラスを管理するクラスを作成したわけだ。

 getDAOメソッドを利用してDBAccessサブクラスのインスタンスを取得する。インスタンスは初めて作るときのみ生成し、それ以降は使いまわす。使う側は何も考えずに、getDAOメソッドで必要なものを呼びだすだけで、最適な処理を行える。

class DuelDBObjectManager{
  
  function DBObjectManager()
  {
    $_userDBO     = NULL;
    $_waitingDBO  = NULL;
    $_duelDBO     = NULL;
  }
  
  function getDAO($dao_name)
  {
      switch ($dao_name){
      case USER_DAO:
        return $this->_getUserDAO();
      case WAITING_DAO:
        return $this->_getWaitingDAO();
      case DUEL_DAO:
        return $this->_getDuelDAO();
     }
    return NULL;
  }
  
  //略
  function _getDuelDAO()
  {
   if($this->_duelDAO == NULL){
    $this->_duelDAO = new DuelDBA();
   }
    return $dbm;
  }
}

今回のまとめ

http://www.apcon.jp/itmedia2004/07/download.htm

 今回解説したサンプルアプリは、http://www.apcon.jp/itmedia2004/07/download.htmから、直接ダウンロードして試すことができる(ドコモ端末のみ)。また、ソースはこちらからダウンロードが可能だ。

 これまで、2回に渡ってネットワーク対戦アプリのサーバ側(加えてアプリの通信部分)の解説を行ってきた。ここまでくると、ネットワーク対戦アプリに必要なパーツは一通り揃ったといってよいだろう。しかし、まだまだ基本的なところしか用意されていない。これでは目の肥えたユーザーは満足してくれないかもしれない。次回はこのアプリをさらによいもの、面白いものにするため、どういう改善方法があるかという点について考察する。

筆者紹介──澤橋辰典・武上将樹

 ケータイアプリ(iアプリ/EZアプリ/Vアプリ)のNo1ポータルサイト「アプリ★ゲット」を運営するスパイシーソフトに勤務。

 澤橋は学生時代、iアプリのコンテストでゲームアプリやツールアプリを制作し、入賞経験がある。また、所属していたサークルの後輩に、ものづくりの楽しさやアプリの奥義を授け、その後輩も入賞していることから、自らをiアプリエヴァンジェリスト(伝道者)と呼んでいる。現在も大手企業にOEM提供しているアプリの開発を行っている。

 武上は、イーアクセスとの共同事業「どこでも読メール」や、各社にOEM提供しているアプリメールサービスなどで、主にサーバサイドやデータベースまわりの開発を担当している。ゲームアプリは、もっぱらプレイ専門。

前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

アクセストップ10

2026年06月02日 更新
  1. Switch 2の「箱の中にHDMIケーブルが入っていなかった」との問い合わせ、任天堂に寄せられる (2026年05月29日)
  2. 「Rakuten Linkで着信拒否できない件」を楽天モバイルはどう考えているのか 置き去りにされた基本機能の行方 (2026年05月29日)
  3. NTTドコモが5G SAを無料キャンペーンから「無料提供」に改訂――Opensignalで評価を上げることはできるのか (2026年05月31日)
  4. d払い、dポイントのキャンペーンまとめ【6月1日最新版】 1万〜3万ポイントの高額還元がめじろ押し (2026年06月01日)
  5. ソフトバンクが「今回もやる」とGalaxy S26を月額1円で販売――販売方法を早急に見直さないと撤退を迫られるメーカーも (2026年03月08日)
  6. 楽天モバイル販売ランキング:「MNPで一括1円」のエントリー4機種が3〜6位に並ぶ【2026年4月】 (2026年05月31日)
  7. 「Pokemon GO Fest 2026:東京」熱戦レポート:1000人レイドに大興奮、「メガミュウツーX・Y」討伐に驚きの仕掛けも (2026年06月01日)
  8. ダイソーで770円の「超速USB充電器」が外出先で意外と便利 USB PD+QuickCharge 3.0ポート搭載で古めの急速充電デバイスもOK (2026年05月30日)
  9. LINEで「最終学歴」や「子供の有無」が筒抜け? 広告設定で物議も「トークや個人情報は参照していない」 (2026年05月30日)
  10. Xiaomiが異例の早さでハイエンドスマホを投入する理由 今秋に「ワクワクする」機種投入も? (2026年05月30日)
最新トピックスPR

過去記事カレンダー