これを 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();
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 );
psp->setSoft( it_tantei );
nds->setSoft( mario_cart );
// おやすみなさいイベント( シグナル )が来るまではゲームだすな
while( true ){
psp->run();
nds->run();
}
while( true ){
psp->run();
nds->run();
}
return 0;
}
// ↑実際は delete が必要です! ここには書いてませんが本来はスマートポインタが使われています。
// 眠くなったら↓が呼ばれる シグナルの登録は脳内でされている。
void signal_oyasuminasai( int sig )
{
exit(0);
}
// 以下、インターフェイスとか ここから下は少し気になる人とかだけ、覗いてみるのを推奨。
class Software{
public:
virtual bool isOnline()=0;
public:
virtual bool isOnline()=0;
};
class Hardware{
public:
virtual void run()=0;
virtual void setSoft( Software* soft )=0;
};
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:
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; }
public:
void setSoft( Software* soft ){ m_soft = soft; }
bool isWifi(){ return true; }
void run(){
if( m_soft->isOnline() ){
wifi_run(); // ここの処理はしばらくかえってこないよー
}else{
normal_run();
}
}
if( m_soft->isOnline() ){
wifi_run(); // ここの処理はしばらくかえってこないよー
}else{
normal_run();
}
}
void wifi_run(){}
void normal_run(){}
private:
Software* m_soft;
};
Software* m_soft;
};
むーー、省略したのに無駄に長くてすいません。
基本的に同時プレイしてるのですが、マリオカートDSで Wifi 対戦が始まったら、NDS しかプレイできません( ´д`)
って当たり前のことですけどね。。
私個人はシングルタスク / シングルスレッド環境なので、メインループで各々のタスクを毎フレーム実行してるのです。
なので同時プレイは実現できるのだぞ、と( PSPのゲームは待ち時間が長かったりもする )
フレームレートは考慮されてませんけどね(※1)
※1
実際問題、PSPタスク NDSタスク共に均一のタスク時間が割り当てられるかどうかは自分の気分次第だったりですからね。
とりあえず毎フレーム、実行は試みてますけど( 画面を見たりとか )
うーん、しかし今回のはハッキリ言ってどうでも良い話だな。
中途半端に省略してるし。
そういえば放置状態の続きは、また近いうち書きます(たぶん)
0 コメント:
コメントを投稿