ふにゃ1(開発状況)

バージョン情報ダイアログも作って、本体の完成は残すところヘルプのみ。
こっから先は、各コミットに関するコメントを、昨日書けなかった分も含め、順不同で。
- メニューに新しい速度オプションを追加
- フレーム数に基づくメソッド呼び出しのループを追加
- 「超速い」メニュー項目のパラメータを修正
- 速度設定の新しいキーバインディングを追加
- スピードメニューにキーボードショートカットを追加
秘密機能のスピードオプションはVB版では2倍速と1/2倍速に変更できましたが、これに加え、10倍速と1/10倍速も選べるようにしました。
これは本来funyak向けに考えていた機能で、アクションが難しい部分ではスローにしたり、待つ必要がある部分で倍速にしたり、というのを想定したものです。
こういったピンポイント利用をしやすくするため、スピード変更機能にショートカットキーも追加しました。
激しく非推奨ですが、設定ファイルを直接いじると、50倍速までは出せます。
コミット履歴からもわかるように、WPFでは、キーボードショートカットとメニューに表記されているショートカットっぽいテキストは別物です。
ショートカットキーさえ知っていれば、未解禁のメニューも実質押せるってわけです。
なので、解禁前は、実行しようとしても無視するようにしました。
ふにゃが寝ます!
寝てるとかわいいので、WPF版に移植するとしても、絶対にここは外してはいけないのです!!
メッセージ表示をモードレスにした都合上、最初のタイトル表記の時点から「自爆」メニューが使えるようになってしまったので、それに対するピンポイント対応です。
自爆できないようにするというのも選択肢ではあったのですが、ここはなんかできるようにしときたいと思ったので。
今回WPFを使って実装を進めているわけですが、別にWPFに詳しいわけでも得意なわけでもなく、DataContextの設定の仕方すら満足に知らなかったのです。
開発を手っ取り早く済ませたい都合上、これまでも「WPFの機能をちゃんと知っていればもっと簡潔に書けるのに」と思ったことは何度もありましたし、これからも何度もあるでしょう。
今回のDataContextの件は、無事知ることができたので簡潔に書けた例です。
ま、まあ、コードビハインドの1行がXAMLの1行になっただけなので、行数的には変わってないんですけどね。
XAML上で候補が出るようになったのはうれしい。
ふにゃのバナナ数のカンストは現在5000ですが、もっとカンストらしく9999とかにしたいなーとか思って、その準備段階として、定数で書くようにしました。
なお、秘密機能の条件のほうは、要求数据え置きです。
昨日めちゃくちゃ頑張ってたのがここ。
今どきの言い方をするなら、実績とかアチーブメントとかいうやつですね。
VB版ではふにゃの顔をダブルクリックすると、殺風景なメッセージボックスに何の説明もなく数字とtrue/Falseが並べて表示されましたが、これをもっとわかるようにしたのがWPF版でのこの変更です。
取ったバナナの数をわかりやすく表記し、秘密機能もどれがどれかわかるように表示します。
あと、今更条件を隠す意味もないと思ったので、画面上に条件も表示するようにしました。
前後しますが、プレイ記録画面実装に合わせるため、秘密機能が出てきたときのテキストも変更しました。
名前とは別にプレイ記録画面で説明も出るようにしたので、名前としては簡潔なものにしました。
一応統一感を意識して、簡潔な英単語1語にしています。
サンプル画像を使うステージと、画像が無くなってた時のフォールバック対応。
指定された画像がないときは、サンプルステージ用の画像を使うようにしました。
ステージファイルを開くメニューから選択するのが面倒ってときに、エクスプローラーからドラッグ&ドロップできると嬉しいなってことで。
こういうのってビジネスソフト向けの機能な気もしますが、WPFがそもそもゲームよりビジネス用途向けの技術なんで、こういうのをするのは簡単なんですよね。
Cleaterがロジック全部込みの、いわゆる“神クラス”(参考)になっていて、機能調整しにくい状態になっていたので、分離して使いやすくしました。
本当はステージデータ関連を分離したかったのですが、ステージデータ関連はあらゆる機能に密蜜の密に密結合していて、分離しようとするとかなり大変なロジックの修正が必要になってしまったので、逆に考えてステージデータ無関係な部分をきりのいい単位で分離しました。
ステージデータ関連の処理を分離したかった理由がこれ。
GitHub Copilotが書いたコミットメッセージからは何も意図が伝わってきませんが、ステージデータの読み込みに失敗したときにバグらないようにする対応です。
読み込み途中は、ステージデータを持っているCleaterオブジェクトをもう一つ用意しておいて、読み込み成功したときだけ、ゲーム画面が持っているCleaterオブジェクト本体と置き換えるようにしています。
こうしたことで、失敗したときに、途中まで読み込んだデータで画面上のステージが書き換えられてしまうことがなく、壊れたデータを開いてしまったときにも安全になったのです。
これは共通処理の切り出し。
ふにゃのモーションがランダムに流れるバージョン情報も再現しました。
今のところ、実行ファイルのプロパティで見られるバージョンと自動連動する機能はありませんが、それも開発中です。
Windows Formsと同じ方法だとエラーが出たんですよね…。
日記に書くほどのものでもなさそうだけど、一応書いたので。