ごあいさつ
私は、この場所での執筆を通して[アルゴリズム]と呼ばれる概念を世界に浸透させ、アルゴリズムのさらなる発展に貢献したいです。
なぜ、そのような展望を持つようになったのか?
事の経緯をお話しします。
私は十数年前、プログラマーの仕事に従事しておりました。
といっても仕事として、だいそれた内容ではありません。
そこでは、1年もたずに退職しました。
プログラミング業務から外されることに耐えられなかったのです。
職業訓練でC言語を学ぶ機会に恵まれ、修業中の生徒の中では最上位の能力との自負がありました。
大学在学時代の情報技術およびプログラミングは好成績であったので、プログラミングの分野において自身の右に出る者はいないだろうと、正直なところ高をくくっていました。
職業訓練校を途中で退所しインターネットでエンジニア転職サイトを活用。
人工知能でマッチングするとの謳い文句に釣られて派遣会社のスカウトを受け入れました。
今、思えば、就職活動の方法に問題はありました。
当時で自身の周囲における派遣就業の評判は悪かったのですが、求人圧力が強ければ強いほど、エンジニアに求められる素養が明確になるだろうと、派遣先就業を決意しました。
もともとは、ゲームプログラミングをしたいとの希望を持っていましたが、派遣先が見つからないため、ゲームプログラミングに類する実戦的なプログラミングを学ぶ機会として、ある会社の社内SE見習いとなりました。
実際にプログラマーとして働いてみて、内実は生半可なものではありませんでした。
なにより、就業先の業界や職種、はたまた使用環境やツールに関する知識と経験がまったくないと言っても過言ではない状態。
そんな状態では、納期を守ることは不可能に近く、運がよければ納期に間に合うぐらいの水準でした。
誰でも1年目はそんなものかもしれませんが、自分はプログラミングに中途半端な自信を持っていたり、ゲームプログラミングをしたいとの熱が強すぎて、やりたいことと出来ることの境界線が曖昧なまま、これといった成果を出すことができませんでした。
そして、プログラミングの構築をしていくにあたって、私は何度も行き詰まっていました。
その事実は、日々の私の活動意欲を著しく削り取りました。
得意だと思っていたプログラミングの仕事で、ここまで見事に無能の烙印を押されてしまうとは想像だに出来ず。
[悔しさ,辛さ,絶望]と向き合いながら悪戦苦闘していました。
そんな折、上司から言われた一言がきっかけで、私はこの世界に足を踏み入れることとなりました。
「きみさぁ、プログラミングを書くんだったら、アルゴリズムの知識がないと話にならないよ」
「は、はい…」(アルゴリズム?…なんだそれは?)
その言葉を聞いて、アルゴリズムというものの存在を知って以降は、自身として思考方法が変わったというか、様々な事柄に対して着眼点が変化したような印象でした。
専門書籍を購入して疑似言語を学習してみたり、実際にアプリのアルゴリズム図鑑でソートの動いている様子を観察するなどして、理解を深めていきました。
この頃から、競技プログラミングに取り組むようになりました。
競技プログラミングというのは、あるプログラミング課題に対する解答の正誤判定と処理速度を他の解答者と競うものです。
当時は、いかに高速処理で整理された構文でもって、正しい解答を出すかに焦点を絞っていました。
参考書通りに記載するのは簡単でしたが、動作の理由が分からなかったり、他解答者と比べて順位が極めて低くなる場合に、丸一日、長ければ数日かけて謎解きしていました。
派遣就業を辞めるに伴って、競技プログラミングからも徐々に遠ざかるようになりました。
しかし、アルゴリズム自体に興味を持つようになってから今日まで、アルゴリズムを勉強して書きまとめる作業を継続しています。
並行して、ゲームアプリの製作に取り組み、いくつかリリースすることも出来ました。
ここからは、プログラマーになった経緯をゲーム好きの観点からお話します。
私が「プログラマーになろう」と思ったのは「プログラミングを学びたい」と考えていたからです。
「プログラミングを学びたい」と思い至ったのは、もともとゲームをプレイするのが好きであったからです。
なぜゲームが関係するのかと言うと、2013年当時のゲームストアには革新的で面白いゲームアプリが少ない印象であり、「自分でゲームアプリを作ろう」と思い至ったからです。
下記の推移から、2013年はちょうど市場が発展する前段階である印象です。
開発者登録をしてゲームアプリをリリースしました。
なかには、画期的なシステムを採用したアプリもありました。
しかし、宣伝をして大きく流通させる段階までは至らずです。
ゲーム製作の動機として「なによりも自身がゲームのプレイを楽しみたい」との思いが強く、画期的なシステムを作ることに満足していたからです。
これが本当に画期的なシステムであったかどうか問題です。
当時の自身にとってそのように感じていたのみです。
実際のところは市場展開中のゲームアプリや開発中ゲームアプリにおいて採用されているシステムをすべて網羅していたわけではなかったので、あくまで当時の印象の範囲にとどまった内容です。
製作したアプリは、ゲームの「タスク要素」を基本としてテキストベースでタスクの実行を繰り返し資源を獲得するようなゲームであるとか、2022年8月にリリースされた「ダダサバイバー」の先駆けとも言える2Dゲームなどです。
しかし、ゲームアプリの開発や構想については2013年以前からも事前に温めていた会社や個人があった可能性があります。
一概には言えないため、画期的なシステムを作ったという認識は一人のプレイヤーとしての印象です。
ゲームプレイヤーとしての経験は趣味の範囲です。
しかしながら、特定のカテゴリーにおいて強みを持ち[戦略・戦術]において研究しながら各種ゲームやアプリを楽しんできました。
気になる方のために私のゲーム経歴詳細を記載します。
ゲーム経歴詳細
初めてゲームをプレイしたきっかけは友人との遊びでした。
友達の家で一緒にファミコンをプレイし、その面白さに惹かれました。
その後、据え置き機が進化し様々な機種が発売されるなかで、街のゲーム屋さんにゲームを買いに行き、新発売のゲームをプレイするのが醍醐味でした。
もちろん、中古ソフトでも掘り出し物があったりするので、ゲーマーにとってトキめく何かがありました。
学校から家に帰って、ゲームをプレイするのが日課でした。
友達や兄弟と一緒に対戦ゲームをすることは、自身の向上心を刺激するだけでなく、ゲームエフェクトや描写の進化によって、ゲームに没頭してしまうような興奮冷めやらぬ楽しさがありました。
そういった前期を終えて、中期にはゲームをひとりでプレイすることが基本になりました。
といっても、完全なひとりではなく、オンラインで繋がっているものです。
最初のオンラインゲームはMMORPGのジャンルに挑戦しました。
[初心者狩り,PK,廃課金,激レアアイテム,レイドボス,ダンジョン,パーティ]などもろもろの概念を知るきっかけになりました。
サービス有料化にともないMMORPGからは一旦手を引き、後期からは別のゲームに挑戦することになります。
特にプレイしたジャンルは戦略シミュレーションやリアルタイムストラテジーです。
これらジャンルのプレイについては趣向があり、様々なやり込みをしてきたので、その一端について[戦略,戦術]の観点から語ります。
まず戦略シミュレーションとリアルタイムストラテジーで分けてしまっているのですが、具体的にはターン性であるなどゲームによって時間の流れに違いがあります。
その点を踏まえた上で大まかなくくりとして「戦略ゲーム」として語らせてもらいます。
戦略ゲームでは、どのようにして自らの国家や勢力を拡大するかが主な目標となっています。
すべての戦略ゲームにおいて、大局的な攻略を述べるなら、まず、勢力の境界線付近に警備の護衛を置くことが重要になります。
あるいは、視界を確保し敵方の動きを監視しておく必要があります。
それらを起点として、敵方の持つ戦術を封殺するための手立てを打ちます。
実際の戦闘が開始されるまでに、敵方の人数や規模を調べて勝率を導き出します。
戦場では、策謀したとおりの状況にはなかなかならず、[味方]や[傍観者]と呼ばれる人々の協力をいかに得るかが鍵になります。
なかには[独善的行為者]や[離反者]などの存在もあり、彼らとも対話をしつつ戦機を探ります。
実際の戦術運用に関しては、かなり状況判断能力が問われるものと言えます。
先述のように時間の流れはまちまちで、あるひとつのゲーム内でも変化のある場合があり、もしくは敵方の動きによっては無数の変遷を見せるため、それら変化に逐次対応する臨機応変力が必要です。
よりミクロな視点から戦術運用を見るときには、各ユニットや各兵種の扱いに注意します。
[編成,コスト,作成制限,移動力,マップ適性,配置]等の情報からより適切な陣形と組み合わせを考案し実戦投入します。
兵種の存在はゲームバランスを保つために有効であり、いわゆる3すくみ状態(歩兵>槍兵,槍兵>騎兵,騎兵>歩兵)のような強弱を作り出します。
さらに、環境要因として[陸,海,空]等の条件が加われば、強弱は無数に存在することになります。
ただ丹念に、それらの強弱を記憶して適材適所に兵種組み合わせを配置していくのがセオリーですが、対人戦ゲームなら間違いなく裏の読み合いとなります。
勝利するためには必須の駆け引きであるため、兵種の強弱はあくまで基本概念に過ぎず、そこに対する各プレイヤーの創意工夫が試されます。
具体的な創意工夫の例として「奇策」が挙げられます。
あるゲームにおいて「バックドア」「おとり」「誘引」などの名称でもって扱われ、他にも調略分野に限って言えば、敵方の将やリーダー格の人間を、どのように味方もしくは無害な存在として自陣営に引き込むか思案します。
バックドアに被る部分もありますが、兵力運用に関して深ぼるなら[兵力集中,分散,隠蔽,水増,時間差攻撃]の種類があります。
緻密な戦術陣形に基づいた兵力運用に際して、これら方策を事前かつ適宜適切に決定判断できるかが勝利の要となります。
すこしマクロな視点に戻せば、敵方にこちらをわざと攻めさせて疲労を誘う。
敵方が複数あるならば、双方を争わせて漁夫の利を得る。
逆に、時をおかず電光石火に攻め立てて先攻利益を得る。
戦となる前段階もしくは戦時でも猶予のあるときに外交政策を用いて境界線を固める。
戦に備えることと同じぐらい重要な内政における国力充実を優先する。
※内政を整えることは純粋な生産力の差を作り出すことになり、諸勢力の中で抜きんでた財貨を温存でき運用できたなら、敵方にとって脅威となり迂闊には手出しできなくなります。
ただし、内政を整えて戦時に備えて兵力を駐屯させているだけでは、包囲網や間断ない攻撃に市街地が晒されたときに、いつまでも持ちこたえることはできません。
そこで必要になるのは、ただの簡素な防壁ではなく2重3重に張り巡らされた防壁です。
随所に物見櫓を設けて周辺視野を得つつ、定期的に定点観測および巡回を目的とした斥候を派遣することで防御とします。
斥候のかわりに低コストユニットを大量に送り込むことで偵察任務を果たす方法もあります。
また、スパイを雇用し敵方の内情を探ることもできます。
あるゲームにおいては、スキルの活用が勝敗の決め手となることがあります。
[バフ,デバフ]の概念は個人的には洋ゲーから見知った要素です。
[移動力,防御力,攻撃力,体力,透明化,視界確保]などです。
このゲームではサードパーソンシューティングとリアルタイムストラテジー要素が合成されていたため、バフをかける対象としては各プレイヤーの操作するキャラクターが優先されていました。
戦略ゲームの問題点を挙げるなら、長時間プレイする必要があることです。
ここで言う時間はプレイの累積時間のことではなく、1日のプレイ時間のことです。
上記で述べたとおり、勝利を得るためには[内政,外交,調略,情報整理]と時間を浪費していく必要があり、その時間に比例して勝利の確率が上がっていきます。
逆に言えば、そこには盲点があり、敵プレイヤーのリアル事情を予測してわざと戦いを長引かせるといったような策略を選択できます。
簡単に言えば我慢くらべのような物になってしまいますが、上手く使えば自陣営の疲弊を最小限に抑えた状態で、敵方の疲弊を蓄積させることにより、戦いを有利に運ぶことが可能です。
とはいえ、現在では、この手の戦略を使ってプレイすることは、ゲーム業界全体としてモラル的にも健康的にも忌避されている印象です。
過去にネットゲーム依存によって健康被害やトラブルの事案が発生したことが影響しています。
そして、問題に対してはゲーム開発側が対策を講じています。
それでも、ゲームにとって都度都度のアップデートが必要となる背景には、ユーザー側からの純粋なフィードバックがあります。
また、サーバーおよびゲームシステムのバグといった諸問題もあります。
いくつかの問題や改善点の中には、開発者と現存プレイヤーにとって未開拓の領域があるはずで、その分野をいかに詰めていくかが問われます。
そのため、システムの盲点は半永久的に存在することとなり、その間隙をぬうことが戦略ゲームにおける勝利への近道です。
奇抜なアイデアによって敵方に一泡吹かせた側が勝利者となり得ます。
月日が流れてゲームアプリの市場が大きくなるにつれて、ストアには画期的で面白いゲームが多く並ぶようになりました。
その要因のひとつとして、ゲームの開発が簡単になったことが挙げられます。
これまでゲームをプレイする側であった人や、ゲーム開発に興味はあっても開発環境構築が難しく手を出せなかった人にとって、ゲームエンジンや各種ツールの存在はゲーム開発の世界を大きく飛躍させることとなりました。
上記はパソコンゲームに関する情報なのでゲームアプリをプレイするユーザー層と別口になりますが、ゲーム開発環境の状況を知るための情報として掲載しています。
特にGIGAZINEの記事で紹介されているゲームエンジンでは、パソコンゲームだけでなくゲームアプリの作成も可能なエンジンがあり、これら記事がゲームアプリの情勢と間接的な相関関係を持っていると言えます。
そのため、ゲームアプリ開発がより簡単になったとして話を進めます。
ゲームアプリ開発が簡単になれば、より多くのアプリが作られリリースされることになります。
アプリの絶対数が増えれば、それだけ多くの検証が行われます。
ゲーム開発者やサポーターまたプレイヤーの力によって、より面白いコンテンツが生き残っていく土壌が形成されました。
技術の進歩は目覚ましいものがあり、これまでのゲームの歴史から考えれば驚くべき状況でした。
昔から色々なゲームをプレイしてきた私にとって、そういった環境が広がりを見せていることは大きな喜びを感じる出来事でした。
それと同時に、自分のゲーム開発の役目は終了したと思い至り、プログラミングからは遠ざかるようになりました。
しかし、先述のとおり、アルゴリズムについては現役で勉強中ですので、ここに書いた情報が誰かの助けになればと願うばかりです。
そもそも、アルゴリズムとは何なのか?
まずは、そこから学んでいきましょう。
Discussion
コメントは自由にしてもらって構いません。結局、ずっと反応に対する怖さと、それに対する自分の反応の怖さ、集団的にいじめられる怖さ、ある種で自分の記事の方向性が変わる恐れ、それらを管理する煩わしさがありました。なにか、自分の活動に支障が出ると、今現在関わっている人達はどこかで自分の悪い噂を流しているんだなどど不確実な虚妄を抱きます。しかし、よくよく考えると、よほど問題があれば運営さんが対応してくれるし、そうでなくても何かしら情報共有できることは素晴らしいことで、そもそもそのような虚妄は妄想の域を出ないばかりか、悪い噂を流すというのにも基準や評価がまちまちで、流してはいけないとの決まりもありません。様々な情報を共有してもらっていることに感謝します。そのお陰で今の自分が形成されたので、コメントや反応などしっかり参考にして進めていきたいです。