さいどうにっき

趣味や日常などを不定期で書いていきます

久しぶりの更新ですね(前編)

とある日、kagamiz先輩が僕のブログを面白いと言ってくれました。そういえば更新してなかったのでやろうか、いやでも面倒だしなあ、なんてことを考えつつ言葉のキャッチボールをしていると「ブログ書きましょう」という無言の圧力を感じました。そんなわけで1ヶ月ぶりくらいの更新*1です。

 

まずは最近のプログラミングについて。

GUIオセロ、(システムは)完成しました!やったぜ!

画面は発表会でのお楽しみということで載せませんが、以前に載せたものとそう大差ありません。あれから設定画面を追加し、CUIGUIの切り替え、CPU難易度の変更等が行えるようにしました。いいフォントが見つかって良かったです。

勿論、課題が残っていない訳ではありません。

ミニマックス*2遅すぎィ!

関数を用意し、その中でミニマックス法を用いてNPCが置くマスを決めるのですが、この計算が遅いんです。*3ミニマックス同士で対戦させると、軽く20分を超えました。たった60手でなんだそれ。たかだか一手に3分もかかることすらありました。駒の表示もないので、ひたすら3分も盤とにらめっこ。飽きます。

困り果てた結果kagamiz先輩に尋ねてコードを見てもらったところ、「計算回数が多すぎる」とのこと。最悪計算量は、盤の一辺のマスW(この場合はW = 8)に対し、W^9*4程にもなるとのことでした。そら遅いわ…

かくして高速化が最重要課題となったのですが、僕としては最小限に抑えたつもりなのです。つらい。他の方法なんて一切出て来ません。Undoを実装したものの、それでも遅いのは相変わらず。もっと根本から書き直すべきなのかもしれません。

 

開発とは全く無関係ですが、昨日くま先輩から「mallocの実装*5」を課題として与えられました。一応出来たものの、取ってくるサイズが4でなければまともにmallocできません。酷い出来です。完成はいつになるのやら…

 

後編は音ゲーのことばっかり書きます!乞うご期待!

*1:※過度ナ期待ハ禁物DEATH

*2:ミニマックス(もどき?)法は戦略の一種で、簡単にいえば「ひたすら損害を少なくするようにする」という方法

*3:2手先読みなら充分計算できますが、3手先読みさせると途端に遅くなります

*4:1億超えます

*5:めちゃんこでかいchar配列から領域を確保する関数の作成