アンドゥ、リドゥ機能を付ける
いろいろググって調べ、
スタックを利用すると楽に作れるようなので使用。
スタックってプログラミングのテクニックぐらいのイメージしかなかったのですが、
リストのようにちゃんとクラスライブラリのコレクションクラスにあるんですねぇ。
ライブラリの知識ないとほんとC#は損しちゃうなぁ(;´・ω・)
まるまるバックアップする方法で、
マップタイル配列のメイン用のスタックと、リドゥ用のスタックを用意。
マップタイルを書きこむ処理の前に、
グリッド画面がクリックされたら、バックアップを実行。
メイン用のスタックをコピーしてプッシュ。
リドゥ用のスタックの中身はクリアする。
アンドゥのときは、
メイン用のスタックをピークで呼び出してコピーしてリドゥ用のスタックへプッシュ。
コピー元をポップする。
リドゥはリドゥ用のスタックをピークで呼び出してコピーしてメイン用へプッシュ。
コピー元をポップする。
という感じでなんとか動くようになった。
普通にスタック型のまま代入すると、
参照なのですべておんなじものになったりして苦しみました(;´・ω・)
コピー用に配列を動的確保してCopyToでコピー、それらをプッシュなどで使用。
という方法を用いたらうまくいきました。
スタックを利用すると楽に作れるようなので使用。
スタックってプログラミングのテクニックぐらいのイメージしかなかったのですが、
リストのようにちゃんとクラスライブラリのコレクションクラスにあるんですねぇ。
ライブラリの知識ないとほんとC#は損しちゃうなぁ(;´・ω・)
まるまるバックアップする方法で、
マップタイル配列のメイン用のスタックと、リドゥ用のスタックを用意。
マップタイルを書きこむ処理の前に、
グリッド画面がクリックされたら、バックアップを実行。
メイン用のスタックをコピーしてプッシュ。
リドゥ用のスタックの中身はクリアする。
アンドゥのときは、
メイン用のスタックをピークで呼び出してコピーしてリドゥ用のスタックへプッシュ。
コピー元をポップする。
リドゥはリドゥ用のスタックをピークで呼び出してコピーしてメイン用へプッシュ。
コピー元をポップする。
という感じでなんとか動くようになった。
普通にスタック型のまま代入すると、
参照なのですべておんなじものになったりして苦しみました(;´・ω・)
コピー用に配列を動的確保してCopyToでコピー、それらをプッシュなどで使用。
という方法を用いたらうまくいきました。
コメント
コメントを投稿