呪術廻戦で学ぶゲームプログラミング学習のコツ


# 初めに
**エルデンリングから学んだプログラミング学習に必要な７つのこと**という記事が面白かったので、

https://qiita.com/karamage/items/d0b323ac0143a9f51ebb

自分も何か有益な情報を提供できるかと思い、呪術廻戦で上手くゲームプログラミング学習を纏められないか考えて記事を書いてみました。
なるべくアニメの範囲＋劇場版呪術0の範囲で、纏めていこうかと思います。
(**追記:ですが、一応アニメの今後の展開に左右する情報は入ってるので、徹底的にネタバレを避けたい場合はブラウザバック推奨です。**)

ただ、これは大分時間かけた中で見出した方法なのでもしかしたら間違っている方法かもしれません。
というか多分無知ゆえに、変な方法になってると思います。

# まずは呪力操作を学ぼう（C++編）

# ![chounouryoku_woman.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533624/6d2dcf34-04d1-c816-08b0-fe22a211bc14.png)
僕はunityを使えません。メインシステムを使わず、個々の3Dモデル等に直接スクリプトをアタッチするという志向があまり向いてないと感じたからです。
では、何をやってるかというと、C++を使ったゲームプログラミング全般をやってます。1年～2年くらい学んでますがまったく上達してません。
ただ、何となく"上達のコツ"自体は掴めてきたので、今回はそれを共有しようかと思います。

### 呪力出力をしよう（虎杖の映画鑑賞～逕庭拳まで）

![kandou_movie_eigakan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533624/cc53c954-d0f3-fc6d-1c61-822b84b40cdc.png)

まずは呪力の出し方からですね。
visual studioをインストールして、C++を起動してください。
(「visual studio c++ 使い方」で検索すると、やり方は出てくると思います）

ロベールのC++入門講座というサイトを開いて、

http://www7b.biglobe.ne.jp/~robe/cpphtml/

第一部第二章のHelloプログラムを出力してください。
サンプルコード通りに打っても、多分できないと思います。
このサイトは大分古いバージョンのC++を扱っているので、今のVisual studioだと「間違ってるぞ」と怒られるんです。
コードを正しく出力するには、

```

#include <~~~~,h>  //の下の行に
using namespace std; //を付ける必要があります。

```
打ち終わったら、F5キーを押してデバッグしてください。
終わったらコード内容を保存するか消して次の章へ、次の章へを繰り返していき、プログラム（呪力）操作の基礎を学んでいきます。


**ある程度まではコードの書き写し（入力）でいいとは思いますが、書き写しは割とすぐ忘れるので、ポイントの要点をノートに書いたりすることをお勧めします。**

やがて58章、構造体までできたら、DXライブラリのサンプルを弄ってみる事をお勧めします。

http://www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01058.html

https://dxlib.xsrv.jp/

DXライブラリは、C言語の知識だけでゲームプログラミング開発が出来るようになってるライブラリです。
（DXライブラリの使い方はサイトに書いてあるので割愛します）

https://dxlib.xsrv.jp/dxprogram.html

**ここまで飽きなかったり面白いと思ったら十分才能があるかと思います。**


逆に「飽きた」、「俺は文字列なんか面白くねぇ、ゲームプログラミングやりたいんだ」

と思った時点で腕試しに上記リンクのサンプルを組んでみる事をお勧めします。
（飽きた時点でunityに移ってみてもいいかもしれません、簡単なランゲームぐらいなら作れるかも）

サンプルコードを一通り試し終えたら、二つの選択肢が与えられます。

**2Dゲームを作ってみるか、**
「龍神録プログラミングの館」

https://dixq.net/rp/

**3Dを試してみるか**

https://dxlib.xsrv.jp/program/dxprogram_3D.html

**(どちらもロベールと並行して学習することにはなるかと思います)**
**ここまでで、虎杖の逕庭拳レベルにはなったと思います。**
**(五条悟が交流会で言う、「今までの悠仁とは違うんだよ」レベル)**
![body_punch_hand_red.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533624/c6251fe7-6c8a-dd80-82f8-879dff5f184e.png)

c言語はライブラリが無いとどこまで行ってもファイル操作とか文字出力とか配列操作しかできないので、
基礎(C)さえ固めて応用(C++、アルゴリズム)を磨けば呪力操作のみで一級や特級にだってなれると思います。
また、「ここは俺のいる世界じゃねぇ！」と思ったら別の言語(pythonなど)にシフトしてもいいと思います。**術式は世界であり、合ってないと思ったら幸運にもチェンジできます。**



キャラ・モデル差し替え＆ステージ差し替え出来た！楽しい！！まで行ければ十分次のステップに進んでいいと思います。
後述の中級まで進めば、ゲームのルール変更⇒オリジナルゲームを作るまで行けると思います。


# ある程度呪力操作ができたら簡易領域を学ぼう

![iai_battou_woman.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533624/8b52af7d-b0e2-5f60-ebb8-1752c29f2dfe.png)

ただ、就活しなければならない学生にはあんまり悠長な時間は無いと思います。
なので三輪ちゃんや日下部さん（呪術0にいたロングコートの人）のように **"弱者の領域"** を学びましょう。

"弱者の領域"とは、広く浅く、そして時間もかけない護身用、最小の知識の事です。
呪術では、呪詛師から門弟を守るために蘆屋貞綱が開発した流派という事になっており、習熟度次第では十分一級（呪術界を牽引する存在）になれます。

**この辺りから本は必須になってきます。技術書を買ってブーストしましょう。**
...と言いたいところですが、一応お金が無くても領域展開ならまだしも簡易領域ぐらいは学びたいですよね。

なのでサイトと技術書、どちらも学べるように紹介します。**お勧めは技術書を買う方です。**

## シン・陰流簡易領域

### 初級（三輪ちゃんレベル）
C++の絵本

https://www.amazon.co.jp/dp/B071R1VQFM/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1


「実例で学ぶゲームAIプログラミング」の第一章「数学と物理入門」

https://www.amazon.co.jp/%E5%AE%9F%E4%BE%8B%E3%81%A7%E5%AD%A6%E3%81%B6%E3%82%B2%E3%83%BC%E3%83%A0AI%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-Mat-Buckland/dp/4873113393

（サンプルあり）

https://www.google.co.jp/books/edition/%E5%AE%9F%E4%BE%8B%E3%81%A7%E5%AD%A6%E3%81%B6%E3%82%B2%E3%83%BC%E3%83%A0AI%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9/JuF6Bx_BBxYC?hl=ja&gbpv=1&printsec=frontcover


「ゲームプログラミングC++」の付録「中級C++の復習」
（分からない所はロベールかC++の絵本と並行するとなお良し）

https://www.amazon.co.jp/%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0C-SanjayMadhav-ebook/dp/B07JVMJ9B1/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1760DMML3ECO3&keywords=%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0C%2B%2B&qid=1654699101&s=books&sprefix=%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0c+%2Cstripbooks%2C218&sr=1-1

「ゲーム開発のための数学・物理学入門 改訂版」

https://www.amazon.co.jp/%E3%82%B2%E3%83%BC%E3%83%A0%E9%96%8B%E7%99%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E6%95%B0%E5%AD%A6%E3%83%BB%E7%89%A9%E7%90%86%E5%AD%A6%E5%85%A5%E9%96%80-%E6%94%B9%E8%A8%82%E7%89%88-Professional-game-programming/dp/4797356774

**ネットで学ぶとなるとこんな感じ**

**三角関数**

https://daeudaeu.com/programming-sankaku/

https://takabosoft.com/77

https://yttm-work.jp/gmpg/gmpg_0043.html

**ベクトル**

https://zenn.dev/ryutorion/articles/game-math-vector

http://www.sousakuba.com/Programming/gs_vector.html

https://yttm-work.jp/math/math_0002.html

https://yttm-work.jp/gmpg/gmpg_0041.html

その他（当たり判定）

https://yttm-work.jp/collision/collision_index.html

(上記を読みながら、サンプルプログラム3D編や後述のswordbout、龍神録を弄ってみてください。違いが分かると思います。また、**初級～中級ぐらいで既にUnity、UnrealEngineで一本の小規模ゲームくらいなら作れると僕は思います**）

### 中級
**（通常の術式（伏黒の鵺とか大蛇、加茂憲紀）ぐらいの強さ、恐らく三輪ちゃん以上日下部さん未満ぐらい）**

「ゲームプログラミングC++」本編
「実例で学ぶゲームAIプログラミング」本編

「実例で学ぶゲーム3D数学」

https://www.amazon.co.jp/%E5%AE%9F%E4%BE%8B%E3%81%A7%E5%AD%A6%E3%81%B6%E3%82%B2%E3%83%BC%E3%83%A03D%E6%95%B0%E5%AD%A6-Fletcher-Dunn/dp/4873113776

「ゲームプログラマーになる前に覚えておきたい技術」

https://www.amazon.co.jp/%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AB%E3%81%AA%E3%82%8B%E5%89%8D%E3%81%AB%E8%A6%9A%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E6%8A%80%E8%A1%93-%E5%B9%B3%E5%B1%B1-%E5%B0%9A/dp/4798021180

「超本格! サンプルで覚える　C言語　3Dゲームプログラミング教室」

https://www.amazon.co.jp/%E8%B6%85%E6%9C%AC%E6%A0%BC-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E8%A6%9A%E3%81%88%E3%82%8B-C%E8%A8%80%E8%AA%9E-3D%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E6%95%99%E5%AE%A4-%E5%A4%A7%E6%A7%BB-%E9%9B%84%E4%B8%80%E9%83%8E-ebook/dp/B00R2T79KG


**ネットで学ぶとなるとこんな感じ**
DXライブラリサンプルアクションゲーム「Swordbout」

https://dxlib.xsrv.jp/SwordBout/

https://elekibear.com/20211007_01

https://yttm-work.jp/gmpg/gmpg_0022.html

http://marupeke296.com/COL_main.html

http://marupeke296.com/ALG_main.html

### 上級（領域展開・極ノ番）
（ここでいう**領域展開・極ノ番とは、自分一人の力で（面白いかどうかは別として)C、C++で一本の小規模・シューティングゲームを作れる事を指します。**)
**2D**
「シューティングゲームプログラミング」

https://www.amazon.co.jp/%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B2%E3%83%BC%E3%83%A0-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E6%9D%BE%E6%B5%A6-%E5%81%A5%E4%B8%80%E9%83%8E/dp/4797337214


「シューティングゲームアルゴリズムマニアックス」

https://www.amazon.co.jp/%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B2%E3%83%BC%E3%83%A0-%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%83%9E%E3%83%8B%E3%82%A2%E3%83%83%E3%82%AF%E3%82%B9-%E6%96%B0%E8%A3%85%E7%89%88-%E6%9D%BE%E6%B5%A6-%E5%81%A5%E4%B8%80%E9%83%8E/dp/4797359978

**3D**
（↓の公開されているモデル・モーションを利用したゲームはあくまで勉強目的**のみ**で使うことを強くお勧めします）

https://neokiex.hatenablog.com/entry/2019/12/11/125909

https://elekibear.com/20211120_01

# 終わりに
薄々感づいているかと思いますが、今回の方法では**自分が思い描いているゲームは作れません。**
（ゲームエンジンを使うなら話は大分別ですが）、基礎からしっかり固めて、その後最悪独学でもゲームを作れる方法を今回は選びました。

思い描いているゲームは、とりあえずこれらを学んでみてからでも遅くないかと自分は思っています。
また、ゲームプログラミングに本当に向いている人というのは、それらの過程に興味を持てる人だとも思います。

また、**呪術師は才能が9割と言われてますが、本編を見ている限りどんなに強い術式を持っていても学ぶ必要（先代のマニュアル、領域展開に必要な結界術、術式の精度向上、単純な呪力操作etc...）はあると思っています。**

**つまり、どんな強者でも学ぶ必要があり、逆に学ばなければ強者でも弱くなるのだと思います。**

これからはそれらを習得した、特級なんて物差しじゃ図れない若い技術者（呪術師）がどんどん出てくるとも思っており、今回の投稿がその一助になればいいな、と思っています。