久しぶりにC++でコードを書いています。

 今、「ドラクエもどき制作プロジェクト」に使うためのクラスを書いています。
 久しぶりのプログラムなので、思いも掛けない所で苦戦中です。いやぁ、だいぶ腕が落ちていますね……。数年前ならこんなところで躓かなかったのに、しょーもないケアレスミスでコンパイルエラーの連発。解決するのに数時間を要しました。

 今書いているクラスは「マルチウィンドゥクラス」です。プログラムで枠を描画するのでは無く、キャラクターエディタで作成した枠のパーツを、表示する文字列の長さに応じて自動調整してウィンドゥを作成・描画する方式にしています。
 まぁ仕組みは簡単なので、敢えてここでは詳細は省きます。

 実はこの「マルチウィンドゥクラス」も、以前完成させていました。文字列にルビを振ったり色を変えたり、かんたんなマクロが使えるような物を作成していましたが、以前も書いたとおりサーバの不調に巻き込まれ、綺麗さっぱり無くなってしまいました。

 また、キャラクターエディタも2022年度版を先日まで作成していましたが、これまた綺麗さっぱりぶっ飛び……。透過色の設定まで出来るように拡張していたのに、また作り直しです。と言っても古いバージョンに書き足して作成するだけなのですが。

 介護と用事の合間を縫っての制作なので時間はかかりますが、コツコツとコードを書いていこうと思います。

 こんなプログラムもC#とUnityを使えば楽に書けるのかなぁ……? 未だC#もUnityも未経験なので、想像も付きませんが。
 豚は相変わらずDXライブラリを使用して、コードを書いています。近いうちにC#とPythonに本格的に手を付ける予定なので、そちらの方が良ければ乗り換えようと思います。

情報の教科書を買ってみた。

 メルカリで『高等学校「情報」教科』の教科書が、新品未使用で売られていたので購入してみました。

 豚はてっきり高校では今流行のPythonを教えるのかと思っていましたが、意外とC言語なんですね。
 まだ読んでは居ませんが、一応将来の社会復帰時にプログラミング言語の教育に携わりたいと思っているので、今の高校生がどんなことを勉強しているのか知りたいです。
 実際に高校で「情報」という教科が増えるという事が決まった時、豚にとある学習塾から講師として来て貰えないかという声がかかりました。当時は鬱が酷く(今でも余り変わりませんが)て、とても教壇に立つことは出来ないと思いましたので、お断りしてしまいました。

 まだ「C言語ワークブック」の方は見ていませんが、「最新情報の科学」の方はパラパラと見てみましたが、とても面白そうで豚が現役高校生時代にこの科目があったら、楽しみでしかたがなかったやろうなと思うほど、面白そうな内容でした。

 学校によって採用する教科書は違うので、全部の高校がC言語を学ぶとは思いませんが、どんなことを学ぶんだろう?と思うと、読んでみるのが楽しみです。printfから双方向線形リスト構造まで、全体を突っ込んで学ぶのか? それとも軽く触りだけを教えて、広く浅く学ぶのか?

 豚の高校時代には、通っていたのが新設校でもあったので、実験的に情報と言う教科があるコースがありました。
「進学理系」「進学文系」「就職科」と、高校二年の時に分かれるのですが、情報は就職科にのみ設けられていて、何を思ったのかIBMのJXが30台ほど並んでいる教室がありました。
 豚は進学理系だったので授業でコンピュータを習うことはありませんでしたが、パソコンクラブでZ80アセンブラのかなり深いところまで学びました。何故かゲームマシンと化していたPC-8801mkⅡSR(これは5台しかなかった)で、RPGを作ろうとして勉強したのですが、その経験が専門学校や就職にもかなり役に立ちました。

 話は戻って教科書のの件ですが、このまま「情報」の教科でC言語を習うのであれば、豚にとっても凄く楽しみです。C言語なら未だに教えるだけのスキルは持っています。
 まぁこれからは弟だけで無く年老いた両親の介護も入ってくると思うので、社会復帰出来るかどうかは未知数ですが……。

コードを書き始めてはみたものの……。

 前回の記事でゲームパッドの入力を司るクラスを書いていると言いましたが、コードを書いている最中で「ほんまにこのクラスは要るんやろうか?」と思い始めました。
 と言うのも、豚は「DXライブラリ」を使わせて頂いてコードを書いているのですが、このライブラリは凄く良くて来ていて、ゲームパッドの状態を知らせてくれる関数もあるので、わざわざクラス化する必要も無いのかなと思いました。
 しかしその度々に関数を直接呼び出すのもスマートでは無いので、マウスの入力も同時に知る事が出来るようにクラスを作っていこうかと思っています。
 まぁマウスの状態を知る関数もDXライブラリには有るので、これもクラス化する必要があるのかと言われれば考えてしまうのですが……。

 何故豚がクラスに拘るのかと言いますと、今回の目標である「ドラクエもどき」を作成するに当たって、クラスライブラリを作成しようと思っています。自分だけのクラスライブラリを作っていれば、次回作を作るときにも便利になりますし、何より自分の思うとおりに動作をデザインする事が出来ます。本来はC/C++の標準ライブラリには無い物で、痒いところに手が届くと言うような関数を作って行くものなのですが、豚は究極の面倒くさがりなので、同じコードを何度も書くのが面倒でクラス化してしまおうと考えているわけです。

 そう言う意味でも今回のようにいきなりコードを書き始めるのは間違いで、クラス分けを終えてから一つ一つクラスを作っていき、最後にメインプログラムを制作するべきです。
 まだ本格的にコードは書き始めていませんので、今からもう一度ゲームの設計を考えるところからやり直そうと思います。

 今回のプロジェクトに使える時間は、各種ツールの制作も含めて2年半。勿論、弟の介護がメインになるのでフルに時間が使えるわけではありませんが、やれる限り頑張ってみようと思います。(鬱の波には勝てませんが……。)

今日はドラクエⅡ発売35周年らしい……。

豚が初めてプレイしたドラクエです。

 豚が初めてプレイしたドラクエは「ドラゴンクエストⅡ」でした。中学生の時だったか、高校に入ってからだったかは憶えていないけど、豚はファミコンを持っていなかったので友人から本体を借りてプレイしたのが最初です。
 その後、MSXでも初愛されているのを店頭で見つけて衝動買い(と言っても当時のお小遣いを使い果たしました)し、試験期間だったにも関わらずのめり込みました。
 ロンダルキアへの洞窟で理不尽な目に遭いながらも何とか洞窟を抜け、一面白銀の世界に出たときには本当に感動しました。それが余りに印象的すぎたので、クリアしたときの事は憶えていません。

 そして時間は流れ高校生になってから、あの名作「ドラゴンクエストⅢ」が発売されました。
 その時は友人が学校を休んでドラクエⅢを買いに出かけていました。皮肉な事にその様子がテレビのニュースで放映されてしまい、翌日学校でこっぴどく怒られていたのを憶えています。
 その時もファミコンを持っていなかった豚は、その友人が攻略してから本体ごと借り受けて、熱心にプレイしていました。
その時から「いつかこのゲームをパソコンに移植してやる!」と思い始め、豚のライフワークである「ドラクエもどき制作プロジェクト」を立ち上げるきっかけになりました。

豚は未だにⅢが最高傑作だと思っています。

 あれから数十年、いつかはやろうと思って居たライフワークですが、豚が社会人をドロップアウトしてから時間を取れるようになり、またコツコツと取り組み始めています。
 高校時代に思い立ってから今はもう50歳になってしまいましたが、豚がこの世を去るまでには何とか形にしたいと思っています。
 本当は「ドラクエⅢ移植プロジェクト」として立ち上げたのですが、「ドラクエⅢ」は色んな新しい技術が詰め込まれており、豚が一人でゲームの分析からドット絵の作成、マップの作成、イベントの作成、それらに伴うモジュールの作成と考えていると、「これはとても無理だぞ」と言う事が見えてきました。
そこで友人の助言もあり、いきなり「ドラクエⅢ」に取り組むのでは無く「ドラクエⅡ」若しくは「ドラクエⅠ」の移植から始めて見る事にしました。
 しかし万一このプロジェクトが成就しても、「ドラゴンクエスト」としてPCで公開する事は出来ません。ありとあらゆる権利関係を侵害する事になりますので、「ドラクエ」と似て非なるもの、即ち「ドラクエもどき」を作る事にしました。
 と言っても公開しないだけで「ドラクエⅠ」又は「ドラクエⅡ」の移植を諦めたわけではありません。
 完全に自己満足になりますが、外部には一切公開しない形で移植をしようと思ってます。
 但し、豚は全く音楽を作る事が出来ませんので、音楽は「すぎやまこういちさんのオーケストラ版」やファミコン音声からそのままお借りしようと思っています。その他のマップチップやキャラクタ等は、レトロフリーク又はエミュレータで画像を撮影して、1ドット1トット独自に作成したオリジナルのキャラクターエディタで再現していくつもりです。
 実は昨年には「ドラクエⅢ」の出発点の街でのスクロールまで、出来るようになっていました。後は足りないキャラクタを作成してマップも作成して、と進めていけるところでしたが、豚の悪い癖でサーバやNAS、それにメインマシンのあちこちに、同じ名前のフォルダやファイルを作っていて、どれが最新の物かわからなくなってしまい、最後はサーバのHDDが吹っ飛ぶという悲惨な目に遭いました。
 結局また一から制作し直して、ついでにそれらを制作するために必要なツールも、始めから書き直す事にしました。
 今はゲームパッドの入力を司るクラスを、C++で書いているところです。

 世の中には強者がいて、ExcelでドラクエⅡを完全再現している人が居たり(これは公開されています。良いのか悪いのかは別にして、完成度は完璧です)、僅か数時間でDOSプロンプト上で動作するテキストキャラクターのみでドラクエⅠを作る人が居たり、みんな凄いなぁと感心しています。
 でも、もしスクエアエニックスが公式に「ドラクエ」シリーズをPCで公開したとしても、豚は自力でコツコツと作っていこうと思っています。

 正直、弟の介護に関わる時間は今後は劇的に増えていくと思います。豚が自分の時間をどの位確保できるかわからないですが、今日から3年以内には何らかの結果を残そうと考えています。

 しかし誰か手伝ってくれないかなぁ……。一人で何から何までやるのは相当キツいです……。これもまぁ自分の夢ですので、他人を巻き込むのは筋が違うかも知れませんね。

C++について……。

 以前から何度も書いていますが、豚は30年前には専門学校でC/C++を教えていました。当時はまだ構造化プログラミングが主流で、オブジェクト指向プログラミングという概念が登場したばかりでしたので、教える側も毎日が勉強の連続でした。教員同士で勉強会をしたりしていましたが、まだハッキリと「オブジェクト指向とは何ぞや?」と言う質問に答えられる人は少なかったと思います。
 今はすっかりオブジェクト指向プログラミングが当たり前になっていて、初めて触るプログラミング言語がC#やPythonなんて人には最初からオブジェクト指向という概念を学ぶので、自然に身に付いているんだと思います。
 豚はアセンブラからプログラミングの世界に足を踏み入れましたので、OOP(オブジェクト指向プログラミング)という概念は中々身に付かず、プログラマに転職した後もそれこそ今でもまだ、OOPとは?と言う質問にハッキリ答えられません。(だからC++でスパゲッティコードを書いてしまったりするのですが……。)

 しかし今はインターネットやSNS、動画サイトなどのお陰で、その気になれば無料でプログラミング言語を学ぶことが出来ます。当時は高嶺の花だった開発環境は個人使用に限りと言う条件が付きますが、無料で使用することが出来ます。また当時は専門学校で学んでいた事も、動画サイトで無料で学ぶことが出来ます。
 ここから先はC++限定となりますが、豚もYoutubeを徘徊していて、物凄くわかりやすく丁寧にC++を教えてくれる配信者さんを見つけて、改めて学び直しています。多分配信者さんはプログラマの方だと思うのですが、年齢は豚よりも少し上という感じ。本当にわかりやすくOOPと言う概念も込みで色んなサンプルを織り交ぜながら教えてくれています。
 物事というのは書籍で黙々と学ぶよりも、授業スタイルで学ぶ方が身に付きやすいですね。今日は基本中の基本と言うべきnamespaceについての動画を視聴していたのですが、豚が教員時代はまだC++の黎明期でnamespaceについて解説してある書籍は皆無でした。もしかするとこの概念はC++が発展してくる最中で、新たに追加された概念かも知れません。豚も約5年間プログラマをやっていましたが、一回も使ったことは有りませんでした。

「温故知新」と言いますが、一度習得したものでも改めて始めから学び直してみると、新たな気づきが有るものですね。豚はまだこの方の動画を飛ばし飛ばしにしか視聴していないので、一度最初からじっくりと視聴してみようと思っています。

 しかし昔は良かったなと思うことがよくあります。何か一つ強い言語(CだったりCOBOLだったり、アセンブラだったり)を持っていれば、それなりにやっていけましたから。
 今は次から次に出てくる新技術を身につけていないととても対応出来ませんから、本当にしんどいと思います。まぁその分、プログラミングへの敷居は低くなりましたが……。

来年の指針。

 ネットの記事で「40代以降の転職」について読んだのですが、やはりこの業界で生きて行くには常に最新の技術を持っておく必要があり、20年も前の教科書に載っているような技術ではとても戦えないとの事でした。
 豚が持ち合わせている技術はC/C++とアセンブラですので、正に20年以上前の教科書で学ぶような技術です。勿論「温故知新」という言葉通り、古の言語を使えるのはプラスだと思います。しかし現在の主流言語(PythonやらC#やらその他Web系の開発言語なども)が使えないようでは全くお話にならないと言うのが現状です。
 そこで来年から2カ年系計画で、豚が学んで行く技術を決めました。
・Python
 この言語は外しようが無い必須言語だと思います。今最も熱い言語で、今後も幅をきかせてゆくだろうと思っています。これはかなり深いところまで学習しようと思います。

・C#
 これは豚のライフワークである「ドラクエもどき開発プロジェクト」の一環で、Unityを使ってみようと思っているのですが、Unityを弄る上で必須言語がC#の様です。
 どちらかと言うと「勉強したい」と言うより「勉強せざるを得ない」と言う感じで、どうしても避けては通れない言語です。

・C/C++
 古の開発言語であるC/C++ですが、まだまだ豚は知らないことが沢山あり、ロジック次第では本当に何でも書けてしまうこの言語を、手放すわけにはいきません。
 また、DXライブラリを使用させて頂く上で、この言語は必須となっているので、腕を鈍らさないためにも引き続き勉強をしていこうと思っています。
 寧ろこの言語が豚にとって主流となると思われます。

・Excel マクロ/VBA
 豚が現役の頃は表計算と言えば「マルチプラン」か「ロータス123」でしたので、恥ずかしながらExcelは未だかつて触ったことがありません。
 簡単な表計算さえ出来ないので、一般知識程度には触れるようになっておこうと思います。
 豚はOffce365に加入しているので、使わなければ勿体ないです。
 取り敢えずの目標は、今手入力で作成している「弟の発作発生リスト」をExcelで簡単に見やすく表にまとめる事です。
 療育センターの主治医に提出する物なので、見やすい一覧を作りたいです。

・Access マクロ/VBA
 これはExcelにも共通することなのですが、「弟の発作発生リスト」をExcelから引っ張ってきてデータベース化するのを目標としています。
 Accessはかなり古いバージョンになりますが、プログラマ時代にVBAでアプリを書いていましたので、基礎の基礎は把握しているつもりです。
 しかし近代のバージョンにあるような機能などは全く把握すらして居らず、一からの勉強をすることにしました。
 豚にとってはリレーションシップを張ったりするよりもSQLで書いてしまった方が早いのですが、また力業になってしまって全然スマートでは無いデータベースになってしまうので、標準のAccessを使ってデータベースを作ったり操作したり出来るようになりたいと思います。

 他にも時間があればWordも弄れるようになってみたいし、Javaも触れるようになっておきたいのですが、2年間に学ぶことが多すぎるので、あくまでも時間があれば勉強したい科目として上げておきたいと思います。
 豚はWordも全く触れないので、基本的な書類作成ぐらいは出来るようになっておきたいとは思うのですが。豚の現役時代は、ワープロと言えば「一太郎」の時代でしたので、DOSベースでの一太郎なら多少は触れます。しかしWindows化されてからは機能が多すぎて豚には付いていけなくなってしまいました。
 しかし高校生ですら学校で習うツールなので、「Word」「Excel」「Access」「Power Point」位は自由に使いたいなぁと思ってもいます。まぁ時間があればですが。

 以上、令和4年と令和5年の2年間に渡って身につけたい最低限のスキルを挙げましたが、勿論中心は弟の介護です。介護生活を送りつつ時間を見つけてスキルアップをしていきたいと思います。
 さて52歳の豚は笑っているでしょうか? それとも挫折に涙しているでしょうか?
 それは50歳の今をどう生きるかにかかってきていると思うので、もうこれ以上時間を無駄にすることなくスキルアップに励むつもりです。

 しかしこれだけのスキルを、いま流行りのネットスクール(とでも言うのでしょうか、ネット上で勉強できる専門学校の様なもので、教科ごとに購入することができる様です)で学ぶとすると軽く百万円はぶんどられてしまうので、地道に書籍を参考に勉強するしかないですね……。

VS2022の公開。

 Visual Studio2022 Communityが公開されました。正に今日公開されたばかりなのですが、早速ダウンロードしてみました。
 今まではVS2019 Communityを使っていたので、そんなに目立って使い方が変わったわけでは無いのですが、細かいところが色々と変わっているようです。
 こればかりは実際にコードを書いて慣れていくしか無いので、徐々に勉強していこうと思います。

 それよりも気になったのはMac向けにもVisual Studioが公開されている事です。実際に使った事は無いのでどの程度の物なのか分かりませんが、Windows版並に使えたら、Macでの作業も楽になりそうです。
 久しぶりにMac Book Proを起動してみて、インストールしてみようと思います。但し公開されているバージョンは、まだテスト版だったような気もするので、その辺りの確認も必要です。
 Visal Studio CodeのMac版は以前から公開されているので、それと豚が勘違いしている可能性もあります。

 それにしても良い時代になりましたね。昔、豚がC言語を触り始めた頃は、Microsoft C(MS-C)の開発環境は98,000円で売られていました。とても高くて一介の学生が手を出せる物では無かったので、色々と機能を削られたMicrosoft Quisc C 2.0を購入しました。しかし廉価版とは言え29,800円で購入した記憶があります。
 その代わり当時のコンパイラ製品には、しっかりと紙に印刷された分厚いマニュアルが幾冊も付いてきました。当然言語リファレンスも付いてきていましたので、ボロボロになるまで隅から隅まで読みふけりました。
 今は殆どがオンラインマニュアルと市販の書籍に分散化されてしまって、豚にとってはかえって使いにくいなぁと思ってしまいます。だからわざわざ、C/C++辞典のような紙媒体の辞書を別途購入して、そちらで調べたりしています。

 やっぱり豚はアナログ人間なんだなぁと思います……。

温故知新。

 昨日から既に廃刊された「C Magazine」のバックナンバーを読み始めています。
 今購読している「日経ソフトウェア」は既に「日経Python」と化していますが、「C Magazine」はタイトル通りC/C++の専門誌です。
 この雑誌は今から30年ぐらい前に、専門学校の教員だった頃に通勤時によく読んでいました。「今更C言語?」と思われそうですが、豚のホームベースがZ80/8086アセンブラとC言語ですので、懐かしくも興味深く読み直しています。
 本当は一日一冊読みたいのですが、非常に内容が濃い雑誌ですので一週間で二冊をノルマにして読んでいこうと思っています。勿論紙媒体はとっくの昔に廃棄してしまっているので、一冊100円で購入した電子書籍での読書です。時々確認したい事項の有るときには、VSを起動して実際にコードを書いてみたりしています。時折豚が知らなかったテクニック等も掲載されていたりするので、非常に面白いです。(発行されている当時は、余り読み込んで居らず流し読みをしていたので……。)

 兎にも角にも豚は先ず「綺麗なコードを書く」練習をしなければなりません。元々アセンブラでこの世界に足を踏み入れたので、「少しでも速いコード」を書くためなら多少の可読性は無視してコードを書いてしまう癖が付いていたので、エンジニアに転職した時には周りに迷惑を掛けました。時間が経つと自分でも何を書いていたのか分からなくなるようなコードですので、今後はもっと可読性のある綺麗なコードを書く癖を付けていこうと思っています。

 何はともあれこの「C Magazine」ですが、50冊くらいは有るので最終号まで読んで行くには相当な時間がかかると思います。
 まぁ焦らずじっくりと読んでいこうと思います。