ゲストさん | ログオン
/image/logo.png)
ゲストさん | ログオン
| 1/48ページ目(全471件:10件/ページ) | 次のページへ>
頒布場所は東3ホール L-48b「danmaq」です。頒布物は以下の通りとなります。
1年間ガラパゴスな自作ブログシステム使ってやってみたけど、やっぱWordPressに移行しよう、そうしよう
今から勉強するんで来月以降になりそうな感じ
160160!/thC/tinami.jpg弾幕風版だけでもプレイしたいとのご意見がいくつかありましたので、(2012.4.4追記)夢終劇の頒布を始めました。ただし、ショップ委託についてはもう少し.NET版のバグ改善パッチを出してからとしたいのでご理解の程宜しくお願いします
東3ホール L-48b "danmaq"です。出し物は夢終劇と、もう一つ制作中のSTGの体験版の予定です。
エイプリルフール終わったので、見たい方はこっち
夢終劇.NETですが、バグだらけの状態でリリースしてしまったことをお詫び申し上げます。必ずアップデートをリリースいたしますので、それまでは同梱の弾幕風版をお楽しみいただけると幸いです。
ついては1日でも早くアップデートを提供できるよう、急遽プログラマを1名募集いたします。前回募集で1名も集まらなかったため、再募集いたします。
e-danmaqのお問い合わせ先E-Mailへ、下記情報を本文に入れて送信してください。
どうか、ご参加のほどよろしくお願いします。
「ぐへへお姉ちゃんパンツ何色」から始めるクラス解説が大変面白かったので、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とかで優しく突っ込んであげてください。
また暫くの間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より全面的にこのシステム上に移行しました。
| 1/48ページ目(全471件:10件/ページ) | 次のページへ>