カテゴリー「リバーシ・オセロ」の記事

2016年8月21日 (日)

Excelでオセロ(リバーシ)を作ってみた その2

8月13日に、「Excelでオセロ(リバーシ)を作ってみた」を投稿しました。

しかし、Excel 2016で動作させると、「応答なし」になってしまいました。
(2013も同じカモ)
 
WindowsがExcelに対し、一定時間以上応答がない場合に応答なしという表示を出してしまっているみたいですね。
 
入力処理や、CPUのAI部に、DoEventsを追記して対処しました。
それだけだと、DoEvents時にキーバッファにより、不用意にカーソルが移動してしまったり、セルにキー入力したものが代入されてしまいます。
 
なので、PeekMessageによるキーバッファをクリアするようにしています。
これで、「応答なし」への対応を大丈夫だと思うのですが、チラつきが目立つようになってしまったのが、気に入りません。
何か、もっと良い手法があるのでしょうね。
 
 
ついでに(?)以下の画面のように、着手個所を強調するように変更してあります。
Ws003723
 
 
そして、動作確認・・・・
Ex_rev01_v
「全然、勝てない!!」
 
一応、ダウンロードできるようにしておきました→こちら

| | コメント (0) | トラックバック (0)

2016年8月15日 (月)

自作リバーシ(オセロ)同士で対戦→強さの検証をしてみた

昨日、Excelでオセロを作ったので、どの程度の強さなのかを確かめてみようかと思いました。
※2つのリバーシソフトを起動させて、手入力により対戦させます。
残念ながらExcelリバーシは、別ウィンドウをアクティブにすると正常動作しなくなってしまいます。
したがって、同AIの「ポケコン版リバーシ」と対戦する事にしました。
(着手ロジックは全く同じものなので、それでも強さは図れます)
 
2010年に作った「ヨウコのリバーシ」(の最強レベル)と対戦してみます。
強さの基準(比較物)として、適正かどうかは怪しいところです。
「ヨウコのリバーシ」なんて、リバーシソフトの中では「最弱と言っても良い」くらい弱いからです。
しかし、他の強いソフトには「まず勝てる訳ありません」ので、基準はこの程度で、よろしいかと。
(そんな、弱いリバーシソフトですが、オセロ素人の私では、何回やっても勝てません)
 
「ポケコンリバーシ」は「ヨウコのリバーシ」と比較すると、盤面評価はプアなモノです。
ですから、同じような深さの読みであれば、「ヨウコのリバーシ」の方が強いはずなのですが、結果はどうなるのでしょうか?
(定石のデータも「ヨウコ」の方が多くもっています)
 
 
 
黒「ヨウコのリバーシ」 対  白「ポケコンリバーシ」
 
→  「ヨウコ」の勝ち
 
07
 
 
想像とおり、「ヨウコ」の勝ちでした。
しかし、私が「ヨウコ」と対戦したら、中盤までに詰まされてしまいますので、私よりは善戦したのか?
 
 
 
Yoko_vs_pocket01
 
 
 
 
黒「ポケコンリバーシ」 対 白「ヨウコのリバーシ」
 
→ 「ポケコンリバーシ」の勝ち
 
22
 
 
Yoko_vs_pocket02_1
 
 
なんと、意外な事に、「ポケコンリバーシ」が勝ってしまいました。
 
僅か、2番勝負だけで「どっちが強い」とは判断は出来ませんが、「ヨウコのリバーシ」と”同程度”な「強さ」と言っても良さそうです。
やはり、「強からず、弱からず」・・・・でしょうか。

| | コメント (0) | トラックバック (0)

2016年8月13日 (土)

Excelでオセロ(リバーシ)を作ってみた

最近、プログラミングが全く出来ていません。
X1版ゼビウスを(改善点はあるにせよ)作り終えてしまったので、「次は何をするのか」を思案しておるところです。

出来れば、X1 Turbo Zで、ゼビウスを作ってみたいとは思っているのですが・・・・
(X1 Turbo Z持ってないけど)
 
そんな訳で、「ちょっと、コーヒーブレイク(?)」として、「Excelでコンピュータ対戦オセロ」を作ってみました。
(※以降「リバーシ」と書きます。Othello、オセロは株式会社メガハウスの登録商標)
 
なぜ、そんな無意味な事をするのか?
 
それは、Excel VBAの実行速度に興味が沸いたからなのです。
 
Excelには、随分と楽をさせてもらっています。
ちょっとした、ツールは、殆どExcelで作ってしまっています。

Excel VBAを使いこなしている訳ではありませんが (自分が必要となるものならば) 「サクッっと作れる」のが、非常に便利です。
 
昔ながらのBASICのスキルが、かなり使えるのも私には向いているのかもしれません。
そして、「ソコソコ」な速さで動いているような気がします。
 
ならば、「リバーシの先読み」をしたら、どの程度で動くのか、確かめたくなるではありませんか。
 
00
 
「サクッっと完成!」
(やっぱり、BASICって楽だな~)
えーと見た目はアレですが・・・・
 
なお、これは、以前ポケコン(PC-G850) で作ったロジックをそのまま採用しています。
なので、リバーシの素人(?)からしてみたら、「強からず、弱からず」だと思います。
(ファイミコンオセロの最強レベルよりは強い)
 
 
なお、ポケコン版(PC-G850)の最強レベルは、以下の通りです。
 
  必勝読み前までは 4手先読み
  必勝読み   空き13マスから
  完全読み   空き10マスから
 
ポケコン(PC-G850)は、Z80なのですが、(最強レベルだと)「かなり、待たされます」
8ビットマシンでは、(私のプログラミング技術では)、こんなモノです。
 
今回、いくらなんでも、そこまで遅くは無いであろうと思い、最強レベルは以下の仕様にしました。
 
  必勝読み前までは 6手先読み
  必勝読み   空き18マスから
  完全読み   空き15マスから
 
 
早速、リバーシ素人の私がプレイ開始!
コンピュータの強さは、レベル3 (上から2番目=ポケコン版の最強レベルと同じ強さ)
 
 
01
 
自分は「黒」です。(先手)
 
02
 
残り4マスで、42対18と、「黒の数は」多い
・・・しかし、置けるトコロが、B2しかないヨ
もう、中盤から、コンピュータに支配されまくっていました。
 
03
だよね~
04
 
んで、やっぱり負けです。
次は白(後手)で、チャレンジ
Excel_reversi_0000
 
勝てない・・・・
と言う事は、「ちゃんと出来ている」って事かな。
 
↑動画キャプチャの時間短縮(編集工程削減の為)、あまり深く考えずに着手しています。
だから、負けた?
 
さすがに、4手先読み程度ならば、Excel VBAでも、サクサクと動きます。
 
しかし、最強レベル(S)を選択すると、とっても遅くってダメでした。
18マス空きからの、必勝読みなんて、フリーズしたかと思ってしまいましたよ。
(30年前ならば、コレでもOKかと思いますが、現代ではありえません)
 
 
【まとめ】
 
「Excel VBA の実行速度は、(想像以上に)遅かった!!」
 
 
一応、ダウンロードできるようにしておきました→こちら
(使う人は皆無だろうけどね)
 
【蛇足】
 
なお、ポケコン風リバーシはこちら
そして、「普通の」Windows版リバーシはこちら

| | コメント (0) | トラックバック (0)

2016年7月 5日 (火)

Z80の学び直しはポケコンでリバーシを作った事

Kei moroboshiさん とポケコンの話になったので、思い出しました。

Z80の学び直しはポケコン(PC-G850)であったという事です。
 
PC-G850のBASICのみで、リバーシ(オセロ)を作ってみて(想定通り)遅いので、マシン語に作り替えたのがZ80の学び直しのきっかけでした。
 
何となくZ80を思い出してきたので、X1でゼビウスを作ろうと思ったのでした。
 
そんなZ80初心者(?)が作った、コンピュータ対戦型リバーシ(オセロ)ですが、8ビットCPUのレベルで言えば、まぁまぁ強いんじゃないかな。
「どうかな?」
 
ポケコン PC-G850限定だと、あまりに使える人が少ないので、それをWindowsでも動くようにして、「お手軽」に遊べるようになっています。
 
     ダウンロード
 
そんな、リバーシ(オセロ)を久しぶりにやってみると・・・・・
 
Ws003649
 
 
「ぼろ負け!!」
 
もうちょっと、(勝てはせずとも)粘れたような気がしたんだけどな。

| | コメント (0) | トラックバック (0)

2014年10月26日 (日)

BASICプログラミングに戻ってきた。【Windows版ポケコン風リバーシ】

ポケコン(PC-G850)版リバーシも(とりあえず)完成しました。
(AI部と表示部を機械語、BASIC部分は速度に問題の無い箇所だけになっている)
 
しかし、ほとんどの多くの人が持っていないだろうポケコンなので「自分で作って自分で遊ぶ」スタイルは、当時のままですね。
せっかく作ったのだから、少しでも多くの人に使ってもらいたいのは心情です(?)
なので、以下の3案で検討してみました。
 
【方法1】
 
  Web上で動作させる。
  →オール機械語にする事により(Version0さんのエミュレータアプレットを使用する事で)可能
 
  メリット
  あまりプラットフォームに依存せず、多くの人が使える。
 
  デメリット
  オール機械語にするのがメンドクサイ
  それでも実行時の処理速度が遅い
  今後、(強く)改善したい場合に(Z80のコーディングでは)「サクッと作れない」
 
【方法2】
 
  Windows版として作り変える。
  →Z80部分をエミュレートさせる。
 
  メリット
  Z80で作ったAI部分を作り変える必要がない。
  (しかも、自分自身としてやった事が無いので、面白そう)
  今後、ポケコン版を改版した場合でも何も変更せずにWindows版としても利用できる。
 
  デメリット
  処理速度が犠牲になる。(方法1よりは速いが)
  今後、(強く)改善したい場合に、(Z80のコーディングが必要)「サクッと作れない」
  Windowsのみ(方法1に比べると使える人が少なくなる)
 
【方法3】
 
  Windows版として作り変える。
  →全てをActiveBasicで作り変える。
 
  メリット
  BASIC(ActiveBasic)なので、分かりやすい。
  今後、(強く)改善したい場合に、ラクチン!
  処理速度に期待できる。方法1、2よりも速い
 
  デメリット
  全てを作り直す事になる。
  Windowsのみ(方法1に比べると使える人が少なくなる)
 
検討の結果、方法3でいくことにしました。
これは、Windows版のスペシャルバージョン(レベル)の設定が可能だからです。
ポケコンと同一の評価関数で、どこまで深く読めるのかを確かめたかったという理由です。
(どこまで強くすることが出来るか・・・です)
やはり、久しぶりのActiveBasicですが、ほんとラクチンです!
(機械語に比べると・・・・です)

・・・・と云うわけで、Windows版は簡単に作れました。

よろしかったら、お試し下さい。
Windows版ポケコン風リバーシ ダウンロード
 
Screenshot
 
 
Windows版スペシャルのレベルSを作りましたが、想定していた通りの強さ(読みの深さ)でした。
ポケコン版と比較すれば、かなり強くはなりましたが、枝狩りのアルゴリズムと評価関数がショボイので、他の強いと言われているリバーシソフトと対戦すれば、ぼろ負けは必至です。
 

| | コメント (0) | トラックバック (0)

2014年9月23日 (火)

ファミコン対ポケコン

「ファミコン」と「ポケコン」とでは、使途が違うでは無いか・・・

  
土俵が全然違うのに「一体何で対決させるのか?」
 
   「それは、これだ!」
 
Famicom_ohello1
 
ファミコン版オセロ!

自作ポケコンリバーシ(オセロ)も、概ね作り終わったので、(自作ソフトの)実力を測ってみたいと思った訳です。
※以降「ポケコンリバーシ」と書きます。

 
現代のリバーシ(オセロ)とは、比較にならないので、8ビット同士で良い”ものさし”が無いかと思っていたのです。

ファミコン版オセロは、通常だとレベル4までしか選択できませんが、レベル4に勝つと「スペシャルステージ」としてレベル5との対戦が可能です。

先手・後手(白・黒)の共にレベル4に対し、ポケコンリバーシで勝てたので、レベル5に進めました。
 
    「さぁ、対決です!」
 
Famicom_pcg850
 
先手(黒)がポケコンリバーシ、後手(白)がファミコンオセロです。
 
 
(どうでも、良いケド、久しぶりにアナログキャプチャをした。何だか縦長になっていないか?。まぁいいか)
 
動画では、4分弱で対決が終了していますが、対決には30分程はかかったと思います。
ポケコンリバーシも待たされますが、ファミコンのレベル5は、ちょっと考えすぎです。
中盤の1手で、7分位待ちました。(終盤の必勝読みなら分からなくは無いけど)

ファミコンが無限ループに入ってしまったのかと思って心配してしまいましたよ。
 
結果としては、5戦してポケコンリバーシの全勝となりました。

    「もしかすると、かなり低レベルの戦いなのかな?」

(現代のリバーシ(オセロ)ソフトと比較してはなりませぬ。なにしろ8ビット同士ですからね)

しかし、対戦状況(棋譜)を確認しても、私のオセロの実力では、”良いのか、悪いのか”よく分かりません。

時間が出来たら、棋譜をゼブラさんにでも見てもらおうかと思っています。


まぁ、(でも)結果は満足しています。
詳細(棋譜やポケコンリバーシの仕様等)も時間が出来たら、晒してみようかと・・・思っています。
いつになるか分かりませんケドね。

| | コメント (8) | トラックバック (0)

2014年9月21日 (日)

今更ですが「森田オセロ」ってスゴイ【ポケコン版リバーシ(オセロ)】

あまりにも弱かったポケコンリバーシ。

主たるプログラムを機械語にしたので、先読みも少しは深くなりました。

8ビット時代で「強いオセロプログラム」・・と云えば「森田オセロ」を思い出します。
しかし、その「森田オセロ」が、どの程度の強さ(と読みの深さ)だったのかは、全然知りませんでした。
 
色々と調べたら、あやおりさんのブログに記載されていました。
 
当時のパソコン性能からしたら驚異的なのではないでしょうか??
(発表時期によって、違いはあるかもしれませんが・・・・)
 
「森田オセロ」の仕様(性能)
  ①  1~40手 3~6手先読み 比較的浅い読み。
    序・中盤では変化が広く深い先読みより時間ロスが大きい
  ② 41~46手 5~9手先読み ①よりも高速な評価関数を使用
    局面変化が狭くなってきているので時間がかからない。
  ③ 47~48手 必勝読み (空きマス 13個より)
  ④ 49~60手 完全読み (空きマス 11個より)
 【引用】総評で、「森田オセロは残り12手の読み切りを、平均して3分以内で済ませています。
 この時間はこれまでのオセロプレイヤーが10手読み切る時間に過ぎません。
 【引用終わり】
「スゴイですね!」

では、私が作ったオセロプログラムはどうなのでしょう???

残り13個の空きマスで、必勝読みをさせてみると、速いパターンだと57秒で済みましたが、遅いパターン(負けパターン)だと5分以上かかってしまいました。

※(勝ち・負けのみの判定で、石差は考慮しない。そして勝ちの場所があったら探索を終了させる)


私のプログラムでは、”必勝読み”だけでは無く、序盤・中盤で、(最大)9手なんて、とても待っていられません。

・・・・と云う訳で、
「トモカズオセロ」の仕様(性能)
  ①  1~47手 4手先読み プアな評価関数による
  ② 48~49手 必勝読み (空きマス 12個より)※
  ④ 50~60手 完全読み (空きマス 10個より)
  ※当初は「森田オセロ」と同じく47手からの必勝読みにしていましたが、
   負けパターンの時の多くは、非常に待たされるので、やめました。
 
00
そして、レベルを0から3まで設定出来るようにしたので、初心者でも「強すぎてツマラン」と云う事は無いでしょう。
(上級者ではレベル3でも物足りない・・・・とも言える)
 
 
それでも(レベル3では)ソコソコの強さになったので、主たるプログラムは概ね完成・・・と云う事にしておきます。
(コレって、突き詰めるとキリが無いんですよね。まだまだ枝狩りの性能がイマイチだけど)

・・・んで、またもや拙作ソフト「ヨウコのリバーシ」と対戦させてみました。
 
01y
 
01p  
もはや「ヨウコのレベル1」ごときでは、楽勝です。(先手・後手ともに)
02y
02p
「ヨウコのレベル2」でも勝てました。(先手・後手ともに)
次回は「定石」の実装かな??
これで、序盤で大きく崩れる事は減る事でしょうね。

ハテ「なぜ、いまさら、Z80のプログラミングをしているのだ???」

| | コメント (1) | トラックバック (0)

2014年8月31日 (日)

Z80でαβ探索 【ポケコン版リバーシ(オセロ)】

満足したら終了してしまう!
(諦めたら終わってしまう)
高校の時には、ソレで満足してしまったんで(オセロ開発がMiniMax探索の実装で)終わってしまったのです。
 
前回記事にて「評価関数をもっと凝ったものにする」とも書きましたが、評価関数は”後回し”にします。
 
その前に、MiniMax探索を実装させる事にしました。
その探索結果に誤りが無いかの確認を行うには、評価関数がより単純である方が都合が良い(容易い)と思ったからなのです。
 
先読み設定の深さ(以降「葉」と書く」)に達していなければ、再帰を行う事により、MiniMaxを実装させました。
 
※「再帰処理」なんて、言葉は高校の時には知りませんでした。
「MiniMax」という言葉も知りませんでした。
しかし、”言葉は知らず”とも、再帰処理でMiniMaxを作っていたんですけどね・・・
そう云った、作り(再帰)って「”行儀の悪い”作り方かもしれんなぁ」なんて思っていましたが、普通の事だったんですね。
 
MiniMax &  8ビットCPU (機械語でも)では遅い!!
(3手読みでもキツイ。これと同じ事を29年前にも体験したゾ)
 
01by
 
01bp
 
そして、αβを実装させ、(着手数にもよりますが)体感的に速くなりました。
中盤の比較的着手数の多いシーンだと(MiniMaxと比較して)5倍ほど速くなっています。
 
詳細はコチラに書きました。
 
やる事(やりたい事)が増えてきました。
次回は、さらに探索速度を速める工夫をして終盤処理を作ってみます。

| | コメント (0) | トラックバック (0)

2012年3月 8日 (木)

久しぶりのオセロ

自作リバーシソフトの高校生版(高校3年に作ったソフトをWindows版に移植したモノ)を久しぶりにやってみた。

このソフト、私にとってはかなり強かった。

はたして・・・・

白が私、黒がコンピュータ
次は白番(私)です。

圧倒的に黒が多いですが、「もう勝ったも同然です」

01

終局
相手(コンピュータ)は指定打ちに出来ました。

02

23対41で勝ち

もう一回、今度は白(後手)でやってみます。

次、黒番(私)
やはり、白が圧倒的に多いのですが、「これも勝ちかな??」

03

終局

「勝てました!」

04

もうチョット、レベル3は強かったような記憶がありましたが、(まぐれかな?)先手、後手共に勝てました。
コンピュータリバーシのレベルで言えば、当ソフトはかなり弱い部類です。
一応、相手の着手数を減らすように打っているはずなのですが、辺の評価がかなり変な感じです。
序盤から、結構多く返す事もしばしばあったりして、それに助けられた感じですね。

・・・とは、言っても、初心者(以前の方)からすれば、(このソフトだって)強くは感じるはずです。

まぁ、何とも低レベルな対局でした。

| | コメント (0) | トラックバック (0)

2010年11月 2日 (火)

ハンデ戦 4隅渡して勝てるのか!?

ハンデ戦  4隅渡して勝てるのか!?

昼休みにやってみた。
ハンデとしてリミ(レベル1)は既に4隅が自分の石になっている状態。
いくら何でも4隅取られてたら勝てないだろ。

・・・・「ヨウコ」強えーー!
見事でした。

| | コメント (0) | トラックバック (0)