滅するまでの記録

滅するまでの記録

滅するまでの記録です

プログラミング学習日記2026/05/14 帰ってきた「ゲーム制作でC++入門」

 もう帰ってこないと思った?そんなこと無いんだなコレが

 ところで学習用PCを変更したので環境を作り直さないといけない。例によってWeztermを入れてGeminiを入れて、Geminiに依頼してC++実行環境を整えてもらってFreshを入れて・・ってのもやったんだけど

 やっぱAntigravityが楽で良いワ!正直になろう

 

 というわけでAntigravityにC++実行環境を作ってくれと依頼。何っ!?ソースのあるフォルダ(=Antigravityで開いているフォルダ)でターミナルを開いてMake runってするだけで実行できるのか・・どうやらMakeって拡張機能を入れてくれたかららしい。素のターミナルだとGcc どーのこーの ./ディレクトリ とか2ステップ必要だったのでこいつはむちゃくちゃ楽で良い

 

 おお、実行された・・が、なんだこの醜い文字表示はぁ!

 

 もちろんAntigravityに何とかしてくれと泣きつく。ちゃんとターミナルのフォントなんかをいじれる項目があるんだな

 

 具体的にはこう

 

 結果・・美しすぎます!

 

 というわけで(図書館で一度返却してその場で借り直すという方法で延長して)続きから再開。CUIでプログラムを作ろうという章。ここまではLinuxで大丈夫なのだけど、次の章までには持ち出せるWindowsマシンを用意しておかないといけないな。やっぱあいつかなぁ・・

 

 より精密な乱数を発生させるためのシード生成だけど、srandが変数なのかと思ったらrandがそのままなので拡張するための命令みたいなものなんだな。へぇ〜

 

 乱数の幅を決定するのに配列の要素数を使うわけだけど・・配列のSizeofを配列0インデックスのSizeofで割るってなんだよ?

 なんとSizeofってバイト数だったのか・・なるほど・・って、これ配列の中身が(特に)メッセージの文字列だった場合はどうすんの?最大の文字列に合わせてメモリが確保されてるってことなのか?

 

 なるほどそういう事でしたか。あくまでStringに関してはということで。納得したわい

 

 ズコーッ!よく使う機能なんだからさすがにLenくらいは標準で入ってても良くないか?それがライブラリでしかも2017年(って事ですよね?)まで使えなかったとは・・

 

 スッキリしたところで次に行こう。えーと、クイズプログラムを作ろう、と。問題が表示されて、回答をしたら正解か判定されて全問終わったら正解数をスコアとして表示すると。

 で、もう写経とかメンドいからまずは今までの知識で勝手に書いてしまおうじゃないか。問題と答えはペアなのでドットリストのリストにしたいところだけど、多分無いので構造体で作って、配列にして格納して、WhileTrueで回して終わったらBreakってことで

 こんなでどうかしら・・最後のReturn0はAntigravityがつけてくれました。ところでC++はCoutの<<でのチェーン出力はマジで良いですね〜。あとWhile(cin)も良いねぇ

 

 実行、惜しくも全問正解ならず。ここまでやってからC++ゲーム本のコードを見たけど、そういえばまだこの本では構造体をやってなかったか?配列の組み合わせで書いてありました。これなぁ!C++プライマーのまえがきにあったけど、最初から効率的な書き方で教えろよと。肝心なSizeofで要素数を出す部分とかも解説無しでシレッと書いてあるだけだし・・GPTに聞けるから良いようなものの丸覚えで済まさせんなって

 

 続いておみくじプログラムを作るという・・いや、もう面倒だからザッと眺めて分からない部分だけ質問しよう。はやくCUI(と、本では書かれてる)の非同期ゲームの作成に取り掛かりたいぜ・・。

 乱数発生部分で謎の表記があったので質問。質問へのリアクションはAntigravityだと激遅なので結局WEBのGPTに質問するんですけどね。ふーん・・rd()ってことは関数を作るってことか?シード値を作るけど、それも乱数って話か・・これもうこのシード値を使えば良くないのか?

 

 この味も素っ気もないmt19937ってのがカッコ良いな。乱数発生器に乱数のシード値を食わせることでより乱数にしてるってことか。

 

 なるほど、乱数の範囲を決めるにはまた別のフィルターみたいなのを作らないといけないわけかw

 

 一行版、また微妙に違う方式を混ぜて来たか・・今回はスルーしておくけど。

 毎回生成すると遅くなるって・・じゃあどうやって呼んだら使い回せるのかを教えてくれないと

 

 ほーん、なるほど。これは実用的で気に入った

 

 なるほど関数化。C++ゲーム本はこういうのも無い。ひたすら非効率に写経させるスタイル(に思える)。

 

 あれ?dice(mt)なのか・・rd()でシード値が出るのと同じならmt()にしなくて良いのかな?

 うーん、関数を束縛した同名の変数が作られてるってことか?

 

 うーん、operateor()ってなんだ?

 

 なるほど・・Mt19937のインスタンスをつくってるわけか?

 

 お〜なるほど!内部で引数に()をつけてるって事か

 

 つまりは仕様ですって話だな(^_^;)

 

 ここでエラーが出ないのがすごいなw

 

 お〜なるほどね

 

 非常に合点が行きました。やっぱりC++ゲーム本の文字の大きさでC++の入門を済ませようってのは無理あるんじゃないかなぁ・・いや、入門だから良いのか?今回の乱数についてもコードにシレッと書いてあるだけで解説ゼロでしたからなぁ。本当に理解したかったら各自勝手に調べるよね?ってノリで書いてるのかも知れないが。

 

 ところで期限切れで堺市に返却されていったC++プライマーだけど・・・ちゃんと一通りやりますよ。なんと公式?で全文まるごと収録されたPDFが配布されているらしいのだ!Webの検索AIが示してくれたGithubにはなぜか無かったけど

 別のところに堂々と置いてあるんですけど・・良いんですかね?コレ

 デカめのタブレットに放り込んで英語でC++の学習にチャレンジだ!うーん、おぼつかない言語でもっとおぼつかない言語の学習をする・・これは前野良沢Style