特殊なカード効果のアルゴリズム
今回はガチガチのプログラミングのお話です。
Eraseではカードや状態変化をCardクラス,StatusEffectクラスのインスタンスとして表現していて、各種処理はdelegateでカードや状態変化自身に持たせているわけですが……。delegateって要は関数ポインタの子孫なので、内部にメモリ空間を持ってるわけじゃないんですよね。だから情報を内部に保持する代わりに親であるCardやStatusEffectの持つデータを参照する必要があります。ということで、StatusEffectからdelegateを呼び出す際、親を引数として渡してやるような構造になると。
delegateによる構造によるメリットが何かって、メソッドのマルチキャストにより「カードや状態変化にルール文を追加する」という処理を簡潔に書けるんですね。リアルタイムにカードをいじくれる、デジタル特有のシステムです。
これをEraseでは「インクルード(include)」というキーワード能力で呼んでいるのですが、コイツによってうさんくさいコンボが色々発生します。デザイナーズコンボも2,3コ用意してはいるんですが、想定以外にも色々な効果と化学反応を起こしそうな予感。正直全部のコンボは把握しきれないので、どんな悪用をされるか楽しみにしつつ……。
(この「インクルード」と、MtGでいう「刹那」に近い「インタラプト(interrupt)」のキーワード能力を持つカードは製品版にのみ収録予定です)
カードゲームのコーディングをするとよくわかるんですが、カードゲームのシステムそのものがかなりプログラミングに近いです。「カードがルールを内包する」という仕組みを持つ現代のカードゲームでは、ゲームシステムの論理構築が甘いと即座に仕様バグ(仕様の時点で矛盾が生じているのでルールとして成立しない)を起こすので、ルール同士の整合が取れた美しいシステムにするためには矛盾なく仕様を束ねあげるためのプログラミング能力が必要です。
MtGなんかはその点かなり上手く組まれたカードゲームなんですけど、あれの考案者(リチャード・ガーフィールド)は数学の博士号持ちなんですよね……。結局数学的素養って大事だよねって話かも。
<今日の10分お絵描き>
まーた紹介してないキャラを描く。主人公の少年みたいなイキイキしたツラしてますが、20代後半の成人男性です。