ゲストさん | ログオン
/image/logo.png)
ゲストさん | ログオン
| 1/47ページ目(全469件:10件/ページ) | 次のページへ>
「ぐへへお姉ちゃんパンツ何色」から始めるクラス解説が大変面白かったので、2か月遅れですが風邪でぶっ倒れながら二番煎じをやってみるテスト。多分本家程テンポ良い展開にはならないと思う。あと少し難易度上がります。
この世界には(きっと)魔法少女と魔女がいます。それぞれクラス化してみます。名前は Syojo と Majo で良いでしょう( MahouSyojo とか長くてダレる)。さて、魔法少女は魔女を狩るため、早速その機能をつけましょう。
class Syojo
{
public:
virtual void hunt(Majo *m);
};
まぁ、雑ですがこんなところでしょうか。実際に魔女を狩るためには、以下のようにメソッドを呼び出せばおkです。
Syojo syojo;
Majo majo;
syojo.hunt(&majo);
ところで、魔法少女と一口に言っても色々なキャラがいて、それぞれ狩り方も異なります。これだけだと狩り方がワンパターンになってしまいます。まるで魔法少女のはずが魔獣のようです。一つの解法として、キャラクタ識別定数を持って、分岐させる手があります。
void Syojo::hunt(Majo *m)
{
switch(this->id)
{
case MADOKA:
arrow(m);
break;
case BLOSSOM:
oshiri_punch(m);
break;
:
:
}
}
ただ、このやり方だと、例えば「仲間割れ」とか新しい機能を積むたびにswitch分岐を増やすのもなんかダサいですよね。そこでオブジェクト指向でクラスの次に覚えさせられるアレ、継承が出てきます。
class Sayaka : public Syojo
{
public:
void hunt(Majo *m); // 滅多斬り
};
class Homuhomu : public Syojo
{
public:
void hunt(Majo *m); // 完全な世界
};
class Mami : public Syojo
{
public:
void hunt(Majo *m); // ティロなんとか()
};
これならちゃんと個性を持った行動ができますね。この場合の、狩りをさせるロジックも表記してみましょう。
Sayaka sayaka;
Homuhomu homu;
Mami mami;
Majo majo;
sayaka.hunt(&majo);
homu.hunt(&majo);
mami.hunt(&majo);
ここでちょっと不便なことに気づきます。もしかしたら Homuhomu の代わりに Kyoko がいるかもしれないし、そういう状況のたびにコードを書き換えるのはちょっとダサいですよね。そこで、下記のように解釈を変えてみましょう。
これならクラスの多態性を生かして、このように記述することが可能です。
Syojo *sisters[] = { &sayaka, &homu, &mami };
for(int i = sizeof(sisters) / sizeof(Syojo *); --i >= 0; )
{
sisters[i]->hunt(&majo);
}
これで狩りをさせる側は「狩りをしろ」と指示するだけで、sisters1号(実体は homu )は時を止めて戦い、sisters2号(実体は mami )は中二病な必殺技で敵を射止めます。
ところで、ここまでは便宜上その場で即席魔法少女オブジェクトを作っていましたが、実際はもっと早い段階で契約して魔法少女を作り、魔力を持たせて、徐々に強い魔女をけしかけて育てています。つまり、魔法少女は戦わせるよりも、死なせる(そして新しい魔法少女を作る)ことのほうがコストがかかるのです。
void Syojo::init(Kyubey *q)
{
this->keiyaku(q); // 魔法少女の
this->teatime(); // 初期化は
this->reajuu(); // 手間がかかる!
}
例えば、某プルプル魔女を狩ることを想定すると、魔法少女が数十人単位で必要になります。しかし、調達できる魔法少女にも限りがあります。仮に調達できた魔法少女を5人とします。この5人だけでは倒すのは困難でしょう。そのため下記のプロセスを繰り返すことになります。
とても効率が良いとは思えないですよね?実はこれはプログラム側から見ても効率が悪いのです。魔法少女の生成・破棄にはnew・delete、即ちメモリの確保と解放を行うのですが、これは実はとっても重い処理なのです。そこでQBさんは考えました。
「肉体と魂を分離して、肉体は使いまわせばいいじゃないか」
早速QBさんの構想をコードに書き起こしてみましょう。
class Syojo
{
public:
Syojo(void);
Soul *soul = NULL; // アクセサとかめんどくせーし
void hunt(majo *m) { soul->hunt(majo); };
};
class Soul
{
public:
virtual void hunt(majo *m) = 0;
};
その上で、このように魂を実装すればよいのです。
class Mami : public Soul
{
public:
static Soul *getInstance()
{
static Soul instance;
return &instance;
}
void hunt(majo *m); // ティロなんとか()
private:
Mami(void) {}
};
魔女と戦わせるには、下記のようにすればおkです。
Syojo syojo
Majo majo;
syojo.soul = Mami::getInstance();
syojo.hunt(&majo);
ただの抜け殻だった魔法少女に魂を入れることでマミさんに変化しました。このノリでMadokaやSayakaなどの魂を作って、入れてあげるとその場で魔法少女の攻撃パターンが変化します。体はマミさんなのに、攻撃パターンを見るとちょっとガサツな槍使い、なんてこともできるようになります。
ただし、魂が入っていないままで魔女をけしかけると、ぬるぽ(C++ではAccessViolationでしょうか)の原因となりますので、空っぽのソウルジェムを常に持たせておかなければなりません。ここは本編とちょっと異なるルールなので注意が必要です。
class EmptySoul : public Soul
{
public:
static Soul *getInstance()
{
static Soul instance;
return &instance;
}
void hunt(majo *m) {} // 何もしない
private:
EmptySoul(void) {}
};
Syojo::syojo(void)
{
this->soul = EmptySoul::getInstance();
}
これで、体さえ大量に用意しておけば魂を入れ替え差し替えで魔女を簡単にやっつけることもできるはずです。さらに、死んだ肉体は魂を抜いてストックしておくことでいくらでも使い回しが可能です。これはGoFのデザインパターンのうち、Stateパターンを再現しています。(厳密にはそれに加えFryweightパターンとSingletonパターンの複合技)
Stateパターンのたとえ話としてよくガチャピンが出てきますね。あの青虫はいつ頃からか「ガチャピンチャレンジ」と称して、スノーボードや空手、ロッククライミング、果ては宇宙旅行などと、色々なことをやっています。さて、そんなガチャピンですが、実はチャレンジの種目ごとに着ぐるみの中の人が違う ということをご存知でしょうか?ガチャピン単体では動くことはできず、中に人が入ることでいろんな行動ができます。さらに入る人によっては空手ができたり、また別の人ではロッククライミングができたりなどと、中の人によって同じチャレンジでも出来る種目が違ってきます。この場合ガチャピンの着ぐるみが肉体(Syojo)で、ガチャピンの中の人が状態(Soul)となります。
普段C#・AS3・PHPメインなのでC++の文法自信ないですが、もし間違っていたらTwitterとかで優しく突っ込んであげてください。
夢終劇.NETですが、バグだらけの状態でリリースしてしまったことをお詫び申し上げます。必ずアップデートをリリースいたしますので、それまでは同梱の弾幕風版をお楽しみいただけると幸いです。
さて、その夢終劇.NETについてですが、一つ皆様にお願いがあります。
現在夢終劇(.NET版)にて雑魚制作を担当したじゅけ氏と諸事情にてトラブルが起きておりまして、ついては1日でも早くアップデートを提供できるよう、急遽プログラマを1名募集いたします。
e-danmaqのお問い合わせ先E-Mailへ、下記情報を本文に入れて送信してください。
また暫くの間Web更新してなくてごめんなさい。このまま放っておくとまた1年とか行きそうなので、ここで冬コミの告知を。(出先からの更新なので画像とかないですがごめんなさい)
今回は、12月30日(金:2日目)、東サ-04a「danmaq」にて参加いたします。今回のメインディッシュとして、東方夢終劇の再販を行います。気づけば丁度夢終劇リリース5周年<建前>なので、デラックスパックのようなものを作りました。1枚のディスクに下記のものが全部詰まっています。
今回も例に倣ってヤケクソな部数作りましたので、大手サークルさんをゆっくり回ってから来ていただけると幸いです。東方夢終劇再販版のショップ委託については、これから考えるので少し遅くなると思います。
200245/!/thC/cap_s.jpgC81にお越しいただいた方限定で、下記のアイテムと交換で特別価格にて頒布いたします。
一部に対し一枚のみ有効です。また、交換用アイテムは回収させていただきます。
.NET版は弾幕風版と比べて、一部システム要件が異なりますので、ご注意ください。
百聞は一見に如かず!って方は、体験版が動作すればまず大丈夫かと思います。(製品版と同居できませんのでインストール前にアンインストールしてください)
夢終劇サポート ページを設けますので、そちらでお願いします。(現在工事中の為、超簡易版です)
240 243 /!/thC/TrialJacket_s.jpg クリックすると拡大します。
告知が当日になってしまい申し訳ございません。C80参加しますので詳細を。今回のメインはC81頒布予定のゲームの体験版と委託ゲーム作品です。
コミックマーケット80 8/13(土) 東ネ-37b 「danmaq」
東方夢終劇プレ アルファ版をご利用の方で、バージョン(タイトル画面右上端に出ます)が3.0.0.48以前の方は、大変お手数おかけいたしますが、一旦アンインストールの上、こちらから最新版をダウンロードいただき、最新版のsetup.exeを実行して最新版に更新してください。
3.0.0.48以前は当方の実装ミスにつき、環境によってはオンライン自動アップデートが動作しない場合があります。
今日は告知のみの更新となります。
移行(ほぼ)完了しました。長かった……。想像以上に時間とられた。
残りは暇があった時にサルベージします。
と言うわけで、一時閉鎖してから1か月余りたちましたが、ようやくブログいっこできました。まだ一部挙動がおかしい箇所や不便な個所がありますが……
まだ記事も半分程度しかサルベージできていないので、その辺も今週いっぱいには復活予定です。
オープンソースのブログ/CMSシステムです。danmaq Webページも従来のテキストエディタによる手書きブログから2011/6/23より全面的にこのシステム上に移行しました。
どうも表示がぶっ壊れているようなので、Webページをイチから作り直します。その間、更新停止いたしますので、どうかご理解ご了承のほどお願いします。
312 192 http://www.nicovideo.jp/thumb/sm14003977 http://www.nicovideo.jp/watch/sm14003977 seamless true 鏡音レンの顔に引力を持たせてみた
前回からの続き!……という割にあんま続いていないけど。一応KENZENという縛りがある以上不完全ではあるものの、それでも少しは"それ"に近づけた気がするんだ。俺も願わくば余命尽きる直前に、幸せ投げとか動画のような殺人的なラッキースケベで介錯してほしいものだな 'A`
発売から3か月で買ったミクさんだが、この動画を作るまでは累計7ファイル&22秒しかミクさんに喋らせて(歌わせて)なかったんだが……まじ何やってたんだ俺。動画作りながらそんなことを思い出して、彼女に対してなんか凄い申し訳なく思った。ミクさんに凄い罵られたい気分。このページ見てるあなたのミクさんにも凄い罵られたい 'A` そんなボイスを送ってくれたら、そしたら俺はもっと自分に正直になれる気がするんだ。夜のオカズコンテンツを製作するための、エネルギーになry(以下自分に正直になりすぎて最大級に痛々しいので削除)
ま た せ た な というのは少々早いですが一応告知。東方夢終劇の.NET移植版を時期未定でリリースすると発表していましたが、C81合わせでリリースします。
今年の正月辺りからサイト内のどっかでこっそりと公開していましたが、プレ アルファ版はこちらでダウンロードできます。プレ アルファ版なので1武器1ステージだけです。バグもちょこちょこ残ってたりします。動作は弾幕風版よりもめっちゃ軽くなる予定でしたが、現実にはほんのちょっと軽くなっている程度です。ただし、古いPCやOSの足切りラインが弾幕風版よりやや高いため(2005年のハイエンド~2007年のローエンド辺りから安全圏、OSは最低でもXP SP3が必要)、起動できるかどうかのテストに入れてみると良いかもしれません。
そういえば、すっかり忘れていたけど、今日はWeb巡回が楽しい日でしたねぇ。
ごめんなさい!こちらの設定の手違いで、2010年12月中旬~今日4/1の13:10までの4か月半の間、Web拍手(もどき)が正しく送られていませんでした。もしこの期間に送っちゃったよ!って方がいましたらもう一度送ってもらえると幸いです。
| 1/47ページ目(全469件:10件/ページ) | 次のページへ>