じゃあ、早速書いていきますか!まずはテトリスの時の依存をコピペ。大体同じのが必要になるだろうと。
ちなみに、面倒を極力省いてRustコーディングを楽しむ方法として
・通常のエディタとしてはPaiza.ioを使う
・・クラウドで保存できて別の場所PCでも続きが書ける
・・上限は分からないがバージョンをいくつも保存しておける
・途中での関数テストにはRustPlayGroundを使用
・・標準入力が普通に出来る(Paizaは面倒)のとメジャーなクレートは導入できる(こともある)
・実際の実行にはLinuxマシンを使う
・・WindowsはRust環境が構築しにくい、気がする
こちらRustPlayGround。これでアカウントに紐付いたクラウド保存が出来たらなぁ・・
書き出す前に一応確認。データをCharにする問題点があれば聞いてみようと。無いな!
Claude先生はマップデータの要素をEnumで書かせたいようだ
なるほどね・・でも、今回は普通に0と1のデータでマップは作れるので・・。今後「毒の沼地」とか「バリア」とか色んな属性を持ったマップを作らないといけなくなったときのために一応意識はしておこう
なんか妙に的確なアドバイスをしてくれるので聞いてみた。もしかして過去のやりとりを記憶していて、それを前提に話をしてくれているのか?と。
そんなことは無かった模様
ゲーム画面を見ながら苦労してマップをデータ化。けど、この型と文法で良いのか謎なので質問
えっ!そうだったのか。今回のマップは固定なので配列でやらせてもらうということで
続いて何は無くともプレイヤーを作らないと始まらないので・・今回はちゃんとオブジェクト指向っぽく構造体で作ってみる。銃撃するのに向きが必要なのだが・・これってEnumでやるんだよな?でもEnumの定義の仕方、使い方が(早速)わからない
ふんふん・・なるほどEnumも型なのか(違うかも)。で、Directionとして選択肢を用意してPlayer型のDirectフィールドではEnum Directionを指定すると。
この使用例では
・Player構造体の中にImplでMove_forwardメソッドを引数に可変参照のSelfを持ち込むことで、Directの向きによって破壊的に現在地Px,Pyを変更できると・・なるほど段々と分かって来た気がする。ところで#[derive(Clone, Copy)]ってなんだ?
はぁ?
あ、なるほど。というかこれが無いと実質面倒になることが多そうだな・・覚えておかないと。他にもこのDeriveで使われるものはあるんだろうか?
PartialEqとかEqとかも謎だな
==演算子が使えるようになるというが・・そんなの普通に使えるのでは?
ふんふん
何ぃ!?これは便利だ!特にオブジェクト指向で書くんだったら必須となるんじゃなかろうか。ぜひとも覚えておこう
ふんふん
はぁ〜なるほど。今回のトランキライザーガンには絶対に必要なので早速使うことになるだろう
じゃ続いて、いきなりだけどコマメにテストをしたいので早速ディスプレイ表示部分を書いていこう。と、思ったけど引数の型が分からない。
あ、そうなのか。王道は前者だけど実際は&[usize]やろな
Player型のフィールド、Chはテスト用にChar型(修正前なので上のはStringになってる)で、後は実際の表示用に2x2のキャラデータを入れたい(考えたら上下左右に向いてるものが必要なので、また考えないと・・)。そこんところは上のようにすると良いらしい。はぁ〜なるほど。って言うか、これChatGPT系のサポート無かったら100倍くらい時間かかると思う
というわけで、参照用のマップデータ
方向用EnumとPlayer型
Main内でPlayerインスタンス生成(これも今まで謎だったのでスッキリした)
そしてお楽しみのDisplay関数を書きかけ・・ってところでこの時間のClaude先生のリミットがやってきたので終了。
明日はこの続きから、バイトも無いし表示してPlayerを動かすところくらいまでは行きたいのう