人脈
人脈は頑張って広げるものじゃなく、何かを頑張っていれば自然に広がっていくもの。
その結果できた人脈は重要。
« 2019年4月 | トップページ | 2019年6月 »
人脈は頑張って広げるものじゃなく、何かを頑張っていれば自然に広がっていくもの。
その結果できた人脈は重要。
<前巻までのあらすじ> ※前回はこちら
エルフに転生して魔王と戦った二人は、更なる異世界へと飛ばされた。
浴室や寝室でのラノベ的展開をこなした後、
遂に、深淵の謎、アカシックレコードに挑むのだが、その前にやるべきことを思い出す。
「そうだ、まだ”未来のプログラミング技法”というのを教えてもらってなかった!」と。
<第十七章・星系プログラミング入門>
令和元年のこの世界では、システムが外側にあると考えるのが一般的じゃ。
しかし、ワシの星系プログラミングではシステムが内側にある。
――ここでいうシステムとは、OSのことじゃ。例えるなら世界の理(ことわり)。ワールドシステムじゃ。
星系プログラミングでは、このワールドシステムを内側に持つ。
面倒なので具体的にいうと――、WorldSystem() という関数を作り、その中でOS関連の全ての処理を行う。
これを使えば、純粋なワールドループ処理が可能となる――のだが、その前に少しだけ平成時代に一般的だったシステムを解説してやろう。
――平成時代は、ワールドシステムが外側にある。その為、関数内で無限ループを作ることはできない、ああ――スレッド処理は除くぞ。
その結果、1つの関数には1工程分の処理しか書けず、それらの関数を自前のタスクで管理するという複雑な工程が必要になっておったのじゃ。
――さて、星系プログラミングでは全体の仕組みをシンプルにすることで、CPUやメモリへの負荷を減らし、作りやすさや視認性を向上させることができる。
作りやすくて視認性が高いということは、バグが発生し難く、バグが出ても直しやすいということじゃな。
星系プログラミングとは、星系を作るようにプログラムを組み立てることから名付けられた。決してカッコ良いからとかそういうことではない――ぞ?
オホン。
星系を作るには、星が必要じゃ。この星1つが1つの関数。それぞれがWorldSystem()を内包しておる。
この星のことを「Star関数」と呼ぶ。
Star関数から別のStar関数を実行し、星系を構築する。以上じゃ。
これだけで、どんなジャンルのゲームでも作ることができる。
書いてるプログラマはシングルタスクやスクリプトを書くような感覚で、マルチタスクのプログラムを組むことができるというわけじゃ。
具体的な例を書くと――。
「……しょう、…師匠! 大変です! 奴らの! 奴らの艦隊が後ろに!」
「…………」
「師匠!」
――っ! 覚醒したワシは、こやつの顔の近くの壁に「ドンッ!」と右手を叩きつけながら言った――。
「聞こえておる。想定内じゃ。 ――では、行こうかの」
星魂歴584年。
アカシックレコードとの最後の戦が始まる。
END.
<あとがき>
(星系プログラムの例↓ エラーチェックなどは省いてます)
// オプション&オープニング&タイトルを表示
void GameStart()
{
// オプション画面を実行
StarSettingWindow();
// OPをスクロール表示
StarOpening();
// タイトル画面表示
StarTitleFadeIn();
// クリック待ち
StarTitleClickWait();
}
// タイトル用のクリック待ち
void StarTitleClickWait()
{
while(1)
{
// 画像を描画
DrawTitle();
// その他の処理(入力系やマウス描画などの任意のワールドシステム処理)
WorldSystem();
// クリックしてたら戻る
if(in.ml) return;
}
}
※StarTitleClickWait()以外は省きますが、内部でWorldSystem()を使用してループさせています。
という感じで、普通のC言語な書き方で、どんなゲームでも作れます。
更に、C++のクラスやnamespaceを利用すれば大規模なゲームにも対応できます。
※StudioGIWのゲームは、全てこの方式(C/C++&星系プログラミング)で制作しています。
WorldSystem()関数ですが、Windowsの場合は、PeekMessage、TranslateMessage、DispatchMessageを利用して実現できます。
もっと簡単なのは、DXライブラリのProcessMessage関数ですね。
※WorldSystem()関数はゲーム毎に必要な処理を書いておく感じです。自身で考えてみてください。
尚、C言語以外でWorldSystem()関数を作れるかは不明です。(私の知る限りではありませんが、今後実装されるかも?)