読者です 読者をやめる 読者になる 読者になる

さいどうにっき

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

オセロが弱い

ICT Advent Calendar 18日目の記事です。

こんばんは、旧長です。

某でかLTにて初めて作ったオセロを発表してから早4ヶ月。あれから改造を続け、

  1. 2つのキーでゲームが終わるようになり、
  2. どこに置けるのか分かるようになり、
  3. NPC対戦を実現し、
  4. ログ(棋譜)を残す機能を追加し、
  5. 遂にはDOSからの脱出を果たしました。

3番目については思い出話がありまして、NPC対戦が出来るようになった時、NPC同士の対戦をさせたんです。勝手にゲームが進んでいくのを見ていると、一人でキーボードをカタカタやって進めていたのが思い浮かんでじわっと来ましてね。非常に感慨深いんですよ。NPC VS NPCを作って良かった。本当に良かった。

ワーヤッタヤッターウェーイスゲー

タイトル上はオセロじゃあなくてREVERSIなんですが、「OTHELLOよりREVERSIって書くほうがカッコいい気がする」と思ってしまった結果なので、普段はオセロとしか行っていません。プロジェクト名はバッチリREVERSIなんですけどね。

 

それはさておき、今まで改造を続けてきたREVERSIにもまだ欠点がある訳です。

バ、バグはまだ見つかってないから大丈夫ですよきっと(願望)

NPCが弱い弱すぎる。

NPCは置けるところが見つかったらすぐに置くように作っていたため、斜め大好きっ子だったんですね。しかも角取れるのに取らなかったり、こっちが角取れるようになる位置に置いたりするんですよ。こんなアホの子萌えない。

何これ毎回勝てるんだけど。何なのこいつ。妹(5)でも勝てるだろこれ。まともにやり合えなければつまらぬ!もっと張り合いのある者を連れて参れ!…うん、自分で作るしかないよね。

 

という訳で、NPCの改造を始めました。

改造案① ランダム性を高める

強くなる訳ねえだろ!!ということで却下。

改造案② その時点で1番多く(または1番少なく)なるようなところに置く

これは実装しました。結果、ちょっとだけ強くなりました。ただしまだまだ弱い。まだだ、まだやれる!

改造案③ 駒の数で勝ってるか負けてるかによって最大、最小を変えてみる

具体的には、

①NPCの方が多い→最小

②NPCのほうが少ない→最大

にする、という案です。

実装した結果、負けることも増えてきました。

改造案④ マスに優先度を設ける

4隅は最大、角の周囲3マス×4は最小の値にして、残りのマスは適当に振り分けてみました。その結果、NPC同士の対戦において、次のような事態になってしまいました。 

f:id:ringoh72:20131218170844j:plain

4 隅 と 周 囲 3 マ ス だ け 埋 ま ら な い

×がついているのは駒(上の画像だと白)が置けるところです。

こんな欠陥(ある意味ではウリと言えないこともないような)がありますが、最初に比べると格段に強いです。2つのNPCを戦わせてみたら、改造NPCが全部勝ちました。頑張った甲斐があります。

とはいえ。

まだまだ弱いのが現状です。

プレイヤー戦だと、弱い僕ですらかなりの勝率になっています。

オセロ激弱だと言っていた某くま氏でも8割方勝てるのではないでしょうか。

この状態から抜け出すためにも、どうにかこうにかNPCを強くするのが当面の目標です(他にも某教材終わらせるとかDPできるようになるとか他言語やるとか目標は色々とあったりなかったり)。

明日は、我らが憂鬱先輩こと憂鬱な世界の住人様でございます。

 

つづく(大嘘)

 

おまけ
スター爆撃するなら、好きな数なので72個ください