過去の投稿記事 new!
・【画像】漫画でわかる外国人参政権
・東京電力のHPで停電状態が確認できたり(サービス再開!)
・戦国時代 ~ 江戸時代の徳川家康が熱かった
・vaio のバッテリは寿命が短いような気がする
・話題の Western Digital 製 WD20EARS を購入した
・C01LC をビックカメラで買ってきた
・2025年には空中都市が現実化?!
・【動画】わかりやすい「宇宙ひも理論」
・今世紀には「富士山噴火」「東海連動地震」「首都圏直下型地震」か?
・滅びた町、南浜町が Googleストリートビューで見れる

【 amazon 送料無料キャンペーン 】

バックリンクはご自由にどうぞ!     http://mfsocket.blogspot.com/feeds/posts/default?alt=rss リンク集 / ログイン

2007/04/17
寝る前を C++ で表現してみる

 
寝る前の日課で、PSPNDS をほぼ同時にやっています。
 
 
これを C++ で表現すると、どんな形になるのかなぁと、ちょっとコーディングしてみた↓

#include <stdio.h>
 
int main( int argc, char*argv[] )
{
     // とりあえず PSP and NintendoDS を準備するかな
     Hardware* psp = new PSP();
     Hardware* nds = new NintendoDS();
     Software* it_tantei    = new IT_Tantei();
     Software* mario_cart = new MarioCartDS();
 
     // ゲームのせっと~
     psp->setSoft( it_tantei  );
     nds->setSoft( mario_cart );
 
    // おやすみなさいイベント( シグナル )が来るまではゲームだすな
    while( true ){
      psp->run();
      nds->run();
    }
    return 0;
}
// ↑実際は delete が必要です! ここには書いてませんが本来はスマートポインタが使われています。
 
// 眠くなったら↓が呼ばれる   シグナルの登録は脳内でされている。
void signal_oyasuminasai( int sig )
{
   exit(0);
}
 
// 以下、インターフェイスとか  ここから下は少し気になる人とかだけ、覗いてみるのを推奨。
class Software{
public:
 virtual bool isOnline()=0;
};
 
class Hardware{
public:
 virtual void run()=0;
 virtual void setSoft( Software* soft )=0;
};

class IT_Tantei : public Software{
public:
 bool isOnline(){  return false; }
};
 
class MarioCartDS : public Software{
public:
 bool isOnline(){ return isWifi();  }
 bool isWifi(){  return true; }
};

class PSP : public Hardware{
public:
 void run(){}
 void setSoft( Software* soft ){}
};
 
class NintendoDS : public Hardware{
public:
 void setSoft( Software* soft ){  m_soft = soft; }

 bool isWifi(){ return true; }
 
 void run(){
  if( m_soft->isOnline() ){
   wifi_run();  // ここの処理はしばらくかえってこないよー
  }else{
   normal_run();
  }
 }
 void wifi_run(){}
 void normal_run(){}
 
private:
 Software* m_soft;
};

むーー、省略したのに無駄に長くてすいません。
 
 
基本的に同時プレイしてるのですが、マリオカートDSで Wifi 対戦が始まったら、NDS しかプレイできません( ´д`)
って当たり前のことですけどね。。
 
 
私個人はシングルタスク / シングルスレッド環境なので、メインループで各々のタスクを毎フレーム実行してるのです。
なので同時プレイは実現できるのだぞ、と( PSPのゲームは待ち時間が長かったりもする )
 
フレームレートは考慮されてませんけどね(※1)
※1
実際問題、PSPタスク NDSタスク共に均一のタスク時間が割り当てられるかどうかは自分の気分次第だったりですからね。
とりあえず毎フレーム、実行は試みてますけど( 画面を見たりとか )
 
 
うーん、しかし今回のはハッキリ言ってどうでも良い話だな。
中途半端に省略してるし。
 
 
そういえば放置状態の続きは、また近いうち書きます(たぶん)

0 コメント:

  • コメントには <b>, <strong>, <em>, <i>, <a> など一部の HTML タグを使用できます。