話
- 前回の日記:(日記)DRPGを作ろうとしてみる
「プログラミング初心者がゲームのようなものを作るのに挑戦」的な話をやっていて,それがなんとなく完成した感.
はい.
……で? っていう.
Before I sleep
昨日寝る前にぼんやりと考えたんですよ.
こういうやつって一体どこに行くのだろう? と.
なんだろう,例えば「プログラミング始めました! コンソールでじゃんけんゲーム作ってみた!」みたいな話であれば,こういう場所にコード全文貼ったりして→それ見た上級者が「こやつめハハハ」とか言いながらちょっとした指摘とかして……みたいな和やかな話になるのだろう.
ガチな「ゲーム作りました」という話だと,まぁ,どこぞの立派な公開場所に公開したりするのだろう.
でも今回みたいなのって,どっちでもない.
その間のどこか:「じゃんけんゲームよりは何歩か進んでいると思うが,ゲームとして公開されるに足るレベルの物になるには何十歩も足りない」みたいな存在だ.
世の中,いきなり公開レベルのゲームを作れる人ばかりではないハズだと思うから,このような存在が日々生み出されていてもおかしくないと思うのだが,そしたらそれらは一体どこに行ってしまうのだろうか?
作った人の所有する補助記憶装置の中で速やかに眠りにつくのだろうか.なんだかなぁ.
……
で,閃いたわけです.
「立派な場所」に公開できないのならば,「立派じゃない場所」に公開すればいいんじゃね? と.
そう,「ぼくのホームページ」を作ればよいのである!
ぼくのホームページ?
……ってどうすれば?
自慢ではないが,当方,そっち系は本当にさっぱりであるので,「ホームページ 無料」とかでググった.マジで.
その結果,以下のことをすればよさそうだということがわかった.
- 場所を借りる
- そこに HTML のファイルをアップロードする
(1)場所を借りる
ググるとなんかいろいろ出てくるが,正直どこがいいのかさっぱり謎である.
そもそも選択基準を持ち合わせていないのに悩んでいても無駄なので,適当に「忍者ホームページ」というところにした.
理由は 「なんか FTP のソフトの使い方が丁寧に説明されていたから」 である.
(知識0の人の理由って,まぁ,そんな感じだよね.)
(2)HTMLを用意する
index.html
なるファイル名のものを,言われるがままの手順で FTP やらでアップロードすればよいとのことだ.
そしたら当然「じゃあそのHTMLファイルってのはどうやって用意するんだよ?」という問題が出てくるわけだが,そこは私の綿密なる調査の結果,
【とりあえず markdown で書いたのを pandoc というソフトに食わせると html が吐き出される模様】
ということが事前に分かっていたので,これでどうにかすることとした.
で,まぁ,それで html が出てくるんだけども
「見出しっぽいところに下線を引きたいです……」とかいうわがままな考えに捉われてしまい,ググりまくって「h2
のときには下に線を引きましょうね」みたいな超最低限の css なるものをとりあえず書いた.
あとはゲームのようなものを zip に固めたものを一緒にアップロードし,そいつへのリンクを設ければ良いらしい.
もちろん「html リンク ダウンロード」とかググった.
<a>
とかいうやつの中に download
と書いとけばいいらしい.
(3)できた
そんなわけで, 現代のものとはとても思えない「ぼくのホームページ」 が爆誕した.すげぇ.
そんなわけで
超ヒマな人は「ゲームのようなもの」をプレイしてみてくだされ.
その後
無謀にもフリーゲーム投稿サイトみたいなところに突っ込んでみたら,速攻でコメントにてエラー指摘された.
曰く「ファイル読込エラーが発生して全く動かん」とのことであった.
「うーん,自分の環境ではそんなこと一回も起きてなかったのだが…?」と戸惑ったが,いろいろ試してみると「日本語なパス」になるとダメになるやつがあるという状況に見えた(全てじゃないってのがまた嫌らしい).
頑張って原因を探ってみると……
GetModuleFileNameA()
←これを使ってたんだけど,コレ,文字コードは何なの?っていう……
「文字列の文字コードはUTF-8ってことで」っていう前提で std::string
が用いられている個所にこのAPI由来の文字列がうっかりそのまま渡っていたのだ.
しかし「日本語を含まない(ASCIIな?)パス」だとギリギリ行けてしまっていた,という.
仕方ないので GetModuleFileNameW()
側の結果を WideCharToMultiByte()
なるやつで UTF-8 に変換するようにして対処した.
あとは,ファイルIOする箇所で fstream
のctor引数にこれまた「UTF-8だと思っている std::string
」がそのまま突っ込まれていたり,あるいは std::filesystem::path()
に突っ込まれたりしていて問題を起こしていた.
ここは std::filesystem::u8path()
を使うようにして対処.
……というわけで,まぁバグってはいたんだけども…… ちょっと前まではパスに「デスクトップ」を含む場所とかで余裕で動かせてたハズなんだよなぁ.←逆に何故動けていたのか? 不思議.