Project Anthem(TCストライカーズ)

ぷろじぇくとあんせむ公式サイトであり雑記ブログ。当サイトはリンクフリーです。

ゲーム開発


 コーディング

 さて、1月ほどかけてリファクタリング。外見上変わったことはないのでお見せできるものはないのですが、内部的に随分きれいになりました。

  • プレイヤー、ボス、ステージのステートパターン化
  • 自機タイプをポリモーフィズム、オーバーライド
  • シートのカテゴリー化(使用場面毎にフォルダ化)
  • 雑魚をストラテジーパターン化
  • 命名ルールに則って再命名

 と、まあわかってる人にとっては当たり前のことですがオブジェクト指向の基本事項を導入しました。


参考にした本
 独習C# 新版 (独習) [ 山田 祥寛 ]
独習C# 新版 (独習) [ 山田 祥寛 ]


きれいなコードを書くための鉄則 [ Lepton ]
きれいなコードを書くための鉄則 [ Lepton ]

 
 いままでは命名ルールすら分かっていなかったので後で見返した際に「これなんだっけ」と思う変数が多かったのです。全体にcamel法で統一しました。今後、命名する際にも単純なルールと役割に基づいて命名できるので変数・関数名を考える手間が省けました。

 またステートパターンを多用したことで動きがわかりやすくなりました。前作はswitch文でステージ、ボスを進行させていたのですが、複雑になりすぎたため改善する必要があったのです。2の作成終盤なんてうんざりしてました。今回のリファクタリングで3だけではなく4以降もこのプロジェクトを使って作成できます。ステートパターンはシートを増やせばいくらでも複雑なことができますので拡張性も高くシリーズ物を作るにはもってこいではないでしょうか。

 コードがすっきりし空いた分で色々と考えることができるなります。なんか進まない時は今までに作ったものを見直して最適化すると新しいことに挑めるのかもしれません。私はここまで整理してやっと絵をかける状態になりました。リファクタリング前は「書いたとしても位置・ポーズ調整とかめんどくせえな」と思っていたのでやる気がでなかったです。素材を作ったらすぐ実装できるようにコードを整えておくというのも有効ですね。



サキュレーターでPC冷やすと早くなるよ
P_20180821_160635



 先日現代美術家の方とお話をする機会があって色々と伺ってきました。

 どうやってそのアイデアを得るのかなと気になっていたのですが、資料の集め方について伺ってみたところ、Ipad(指紋認証あるやつ)を取り出し見せてくださったのですが・・・


 「テレビでいいものが映ったらこれで撮る。」


 ・・・えっ??


 そんなのでいいのかと驚きました。結構有名な方で美術館で個展とかされています。そんな人でもテレビの映像を撮影して使っているとは思ってもいませんでした。勝手なイメージですが、著名な人はわざわざそういう写真を取れるところまで出向いたりお金をかけて資料を集めているもんだと・・・

 しかし、そうやって得たた資料をもとに作られた作品が20万円前後で売買されているわけです。この部分をどう捉えるかは差が出てくるでしょうね。

 以前の僕だったら、「高く売るためには経費をかけなければいけない」のような盲信がありましたので、やたらお金をかけて資料を集めたり展示会に出向いていました。今はそんなことを思っていませんが、著名な作家さんは違うだろうと思いこんでいました。



 もちろん、この手法が全てというわけではないでしょう。しかし、作品を作るにおいてヒントをどこから得るか、それは限りなく自由であるということがわかりました。

 そういえば以前も絵の先生から同じこと言われましたね。日常の風景からヒントを見つけていこう、と。植物とか家の壁とか観てると案外きれいだったりします。写真をとってPhotoshopで加工するだけでなかなかの素材になりますからね。そういえば我々のようなデジタル作家にとっては資料にするまでもなくそれ自体を利用できてしまうのでより楽チンですね。



 ボスの状態遷移が複雑になりすぎってなかなか新しいものを作れなかったのですが、ステートパターンなる書き方を実践して見た結果、とてもわかり易いコードになりました。

  
・ステートパターンとは

 状態遷移を簡単に実装するデザインパターンです。switch文の各caseを各クラスに分割すると考えていただければよいかと思います。
  
 こちらのサイトを参考にしました。 
 東京工業大学デジタル創作同好会


 いままではボスクラスに以下のように状態遷移を書いていました。

 switchi(var){

case 1: 攻撃パターン1
case 2: 攻撃パターン2
case 3: 攻撃パターン3
}



 しかし、これだと各攻撃パターンを制御する変数をボスクラスに持たせないといけません。その結果生じる問題点が以下の項目です。
  1. 変数が増えすぎてわかりにくい
  2. 想定外に値が変わってしまう


しかし、ステートパターンを使うと以下のようにクラス・シートを分割、することができます。

  • class 攻撃パターン1を含むクラス{}
  • class 攻撃パターン2を含むクラス{}
  • class 攻撃パターン3を含むクラス{}

こうすることで識別子が同じ変数を使えるようになり、変数の管理も簡単になります。その結果、攻撃パターン作成に専念できるようになりました。



・ステートパターンを実装した意義
 開発の簡略化です。ゲームが複雑になるに連れてコードも複雑になっていきます。するとシステムを管理することに主眼が言ってしまい、肝心なゲーム性に割く時間がなくなってしまいます。
 大別するとゲームはシステムとコンテンツに分けられます。ゲームをストレスなく進めるためにはシステムの洗練さが、没入するためにはコンテンツの充実が必要です。ステートパターンによって開発をシステム作成とコンテンツ作成を分割することができます。両者の結合性が高すぎるとコンテンツをつくることでシステムに影響を与えてしまうかもしれません。それを防ぐためにもステートパターンはよいかと思います。



 弾幕STGの醍醐味とも言われる処理落ちを擬似的に実装しました。
 
 

  


 以前ツイートしたように画面内のオブジェクトが一定数を超えるとFPSが下がる仕組みになっています。

 ポイントは弾数ではなくオブジェクト数という点です。つまり自分が発射した弾、それにともなうエフェクトも対象に含まれます。怒首領蜂大復活では自身のショット数を増やすことで意図的に処理落ちをさせるというテクニックが存在します。それと同じような挙動になりました。

 CAVEシューティングに馴染みの薄い人はこのテクニックには抵抗があるようですね。以前、友人にその話をしたところ”邪道”と言われてしまいましたorz。とはいえ上級者も普通に使っているのでOKです。


・実装のメリット

 とにかく面白いです。ゲームの処理自体が遅くなることで自身が覚醒しているような感覚になります。人は覚醒すると時間をゆっくりと感じるようになるんですね。走馬灯がまさにそれです。より一層 ”俺つえええええ” を体感できるようになります。
 もう一つ開発者側としても難しい弾幕を作りやすくなります。高速高密度の弾はプレイヤーの心を折ってしまいますが、低速化することでなんとかなるかも、という印象を与えることができます。実際、私も処理落ちがなければ諦めてたゲームがたくさんありますしね。



・疑似処理落ちが面白いゲーム

Eden’s Aegis 


同人ゲーで疑似処理落ち実装してるのこのゲーム以外知らない。もしあったら教えて下さい。

怒首領蜂大復活


意図的な処理落ちについてちゃんたけさんが明言してます。動画はアーケードなので本当の処理落ちですが、steam版は疑似処理落ち仕様です。

キャプチャ


 こんな感じでテキストファイルに会話内容を書いておきます。

 先頭の数字:フォント、キャラクターの指定 
 2番の数字:ポーズの指定

 先頭の数字でキャラクターを指定し、2番めの数字でそのキャラクターのポーズを指定します。


 
ついでに文字を一文字ずつ表示できるようになりました。こんな機能はなくてもいいのですが、こういう本筋とは関係ないところこそが遊びなんですよね。昨今のデザインを見ると細かいところでモーションするものが多いです。また、テキストファイルで読み込んだ文が終わると自動で次の段階に入ります。



・なぜする必要があったか

前作までは会話とポーズ・フォントを一つづつ指定してswitch文で遷移させていました。しかしそのやり方だと途中で挿入する場合すべて修正しなければいけません。今後の開発効率を考えると何らかの修正が必要でした。次に、英語版を作成するという理由が挙げられます。コンフィグから言語設定できるようにします。その際に引数によって読み込むファイルを変えるようにして英語版に対応したいと考えたからです。まとめると開発効率を上げるため、ですね。




↑このページのトップヘ