コードの面構え、というか、書かれたコードの見た目は、C++でも、Javaでも、ActionScriptでも、C#でもなんとなく似通っているのですが、似通っているからこそ、混乱することもあるんです。
某アドベンチャーゲームの移植とかしているのですが、入力された単語と辞書とのマッチングが必要になります。が、辞書にあるはずの言葉を入れいているのに全然マッチしない(/_T)
おかしいなー、と、30分くらい考えて、思い出した。Javaでは文字列の比較は、String クラスだったら、if (cmd == dictword) みたいにしちゃだめで、正しくは、if(cmd.equals(dicword)) とか書かないといけないのでした。
ゲームオーバになって、最初からトライしようとしたら、持ち物などが、ゲームオーバ時を引き継いでしまっている。
初期データを読み込んで、ゲーム開始時に userData = initData; とかやっているわけですが、Javaは、intみたいな基本型は値渡しなのに、クラスインスタンスは参照渡しという、へんてこな仕様だったのでした。
つまり、コピーして渡していたつもりが、参照だけが渡ってしまったので、値が全部書き換えられ続けていたと。コピーコンストラクタをつくって、userData = new UserData(initData)のようにして、明示的にコピーするようにしました。なかなかに奥が深い。
コメント