2015-03-22 10:56
Grayscale.P025_KifuLarabe.L100_KifuIO.KifuParserA_Impl
というクラスが、ビューとドキュメントを結合してしまっていて 開発の障害なので、
・棋譜パーサーA
・ビューA
の2つに分けたいんだぜ☆
できはするんだろうが、どうやるのか☆ 今日は やってみるんだぜ☆
まず、いきなり手のひらを返すようだが、 棋譜パーサーA には
ビュー の操作は含まれていない☆
棋譜パーサーAは イベントハンドラー を登録できる仕組みにしてあって、
棋譜パーサーAが動いている最中に 画面上も動くように 拡張できるしかけになっている☆
今回、GUIをクライアント、棋譜パーサーをサーバー、と ぶったぎる計画なので、
棋譜パーサーに、画面を動かすイベントハンドラーは登録できない、ようにする予定☆
棋譜パーサーAに、画面上の操作を入れんな☆ という改造計画なんだぜ☆
では、どのような イベントハンドラー を登録しているのか調べてみたんだぜ☆
・新しい局面図が作成された直後
→ 登録: 特に、なにもしない空っぽの処理
消せ☆www
・平手初期局面にリセットしたとき
→ 登録: 画面を再描画します
むう☆ 棋譜パーサーA を使うような処理があるんだったら、GUI側は
問答無用で 画面を再描画するように改造しよう☆w
・一手進めたとき
→ 未使用
消せ☆www
12:57
ざっくり改造したら
棋譜入力テキストボックスに、2回指し手を入力してしまう制御の流れになって
しまったんだぜ☆
・棋譜をパースした直後に テキストボックスに指し手の符号を追加する☆
・画面を再描画するタイミングで、テキストボックスに指し手の符号を追加する☆
パースの直後に 画面操作を実行する作りをやめて、
画面操作をするタイミングを決めておいて、何をそのときやるのか 溜めておく、
という作りにした方が良さそうだな☆ww
14:18
符号が表示されなくなったんだぜ☆ww
見直すぜ☆ww 符号を表示する
shogiGui.Shape_PnlTaikyoku.SetFugo( ... )
の呼出し箇所一覧☆
・Util_InGui#IttesasiPaint
・Util_InGui#Makimodosi_Gui
・SceneB_1TumamitaiKoma#MouseLeftButtonUp
・SceneB_2OkuKoma#MouseLeftButtonUp
・WidgetsLoader_KifuNarabe#After_NaruNaranai
思ったよりいっぱいあった☆ww
ここに、
・Ui_PnlMain#timer1_Tick
も追加したんだが、
1手指したあとに、再描画がスルーされることがあるな☆ww
タイマーは必ず通るだろうと思って再描画を置いておいたんだが、
タイマーによる再描画は優先順位が低くなるように排他処理をしたので すっとばされる☆ww
これは、空っぽの符号を[コマ送り]することで 再描画をさせることにする☆ww
15:04
で、次は ビュー部分から、こんなの将棋サーバー側でやることだろ、と思う部分を
切り離せるか試してみるぜ☆
独特な仕組みなんだが、
テキストボックスに符号を入れる。
↓
[コマ送り]ボタンを押す。
↓
棋譜が更新される。
で、1セットになっている☆ これが開発の足を引っ張っている☆ww
いったん、
次のような形に変更したい☆ww
テキストボックスに符号を入れる。
↓
[コマ送り]ボタンを押すと、符号は 記憶される。
↓
[レシーブ]ボタンを押すと、記憶された符号を使って 棋譜が更新される。
というように、テキストボックスを よそもの にすることで、
[コマ送り]ボタン無しでも 棋譜更新 が進むようにするんだぜ☆
[レシーブ]ボタンさえあればいい、みたいな☆ww
16:47
改造を進めていくと、Komaokuri_Srv メソッドが空っぽのメソッドになっていた☆ww
いつ消した☆ww
中には TuginoItteSusumu_Srv といったメソッドが入っていたはずなのだが☆ww
17:37
消してしまっていたメソッドを復旧させたんだぜ☆
そして、
.exe を参照設定に入れていたという 変なこともやめて .dll を参照設定に
入れなおしたんだぜ☆
17:56
[コマ送り]ボタンを押したあとと、
[巻き戻し]ボタンを押したあとで、
画面の再描画処理が異なる☆wwwww
そろえろ☆www
[コマ送り]ボタンを押したら、入力棋譜テキストボックス の符号が1つずつ消えていって
欲しいんだが、
その機能も なくなってしまった模様☆ww
普及作業なんだぜ☆ww
18:35
[コマ送り]ボタンは修復したんだが、[再生]ボタンは壊れているんだぜ☆
これも直すぜ☆
19:00
[再生]ボタンは動くようにした……んだが 途中で強制終了しているんだぜ☆
なぜなんだぜ☆……(/_\);;
[再生]ボタンはどうやら、棋譜のほとんど全部を再生し終わったあとで
強制終了しているんだぜ☆
直せなかったんだが、対コンピューター は動いているので 先に進むぜ☆
19:19
次☆
駒を進ませる(1手指す)という処理なんだが、
Ui_02Action#Komamove1a
これも 画面がやるような部分と、将棋サーバーがやるような部分が、いっしょくたに
なっていて 開発の進行を妨げている☆
・画面がやるような部分
・将棋サーバーがやるような部分
に、ばっさり分けたいと思うんだぜ☆ 2箇所で使われている☆
・P200_KifuNarabe.L050_Scene. SceneB_2OkuKoma#MouseLeftButtonDown
・P200_KifuNarabe.L100_GUI. WidgetsLoader_KifuNarabe#After_NaruNaranai
23:27
ちょっぴり 分けた☆
次にやりたいのは、
・サーバーに処理を投げる。
・サーバーからの返信を待ち続ける。
・サーバーからの返事を受け取る。
・何か作業を進める。
※くり返し
という1セットのプログラミングを、何個も連続させる、といった
処理の流れへ改造したいんだぜ☆
実現の仕方としては、タイマーを使う方法がある☆
タイマー(100ミリ秒毎)
state = 1 のとき
処理A
state = 2 のとき
処理B
state = 3 のとき
処理C
といった作りにしておいて、処理が終わるたびに state の数字を変えていくんだぜ☆
とりあえず、 P200_KifuNarabeプロジェクトに L051_Timed フォルダーを
掘っておいたんだぜ☆
今後、このタイマーを使ったプログラムに置き換えていくぜ☆
微速微進 寄り道 遅々前進☆! なんだぜ☆wwww
[0回]
PR
http://grayscale.dou-jin.com/Entry/161/【将棋】めざせ世界コンピュータ将棋選手権☆(69) きふわらべの開発を地味に進めるんだぜ☆ww