リバーシゲームを作ってみました。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tk-xleader

リバーシゲームを作ってみました。

#1

投稿記事 by tk-xleader » 17年前

暇だったんで作ってみました。

https://www.webfile.jp/dl.php?i=388372& ... c348a882d8

からダウンロードできます。

管理人

Re:リバーシゲームを作ってみました。

#2

投稿記事 by 管理人 » 17年前

おぉ、素晴らしい。
この敵のアルゴリズムはどうやって計算されてるんですか?

tk-xleader

Re:リバーシゲームを作ってみました。

#3

投稿記事 by tk-xleader » 17年前

単純にその場で一番多く取れる場所を選択しているだけです。
もっと強くしようと思ったら、これをいくらか繰り返して、先読みするという方法が考えられるのですが、複雑すぎると大変だなぁと思って、一番楽なアルゴリズムを実装しました。

描画にはDxライブラリを使っています。

ソースコードをアップします。(まぁしかしこんな汚いコードをよく公開する気になるな。っ手ほど汚いですが…)

管理人

Re:リバーシゲームを作ってみました。

#4

投稿記事 by 管理人 » 17年前

なるほど、ぷよぷよ作ったときもそんな風にシミュレートしました。
やっぱ適切な方法をとるにはGAみたいなアルゴリズムを組まないといけないんですかねぇ。
連鎖のプログラムはついに解らずに断念しましたし、
AIプログラムってホント難しいですよね。
将棋は未だに勝てないらしいですし、ゲームで一番難しいAIは将棋のAIなのかな?

tk-xleader

Re:リバーシゲームを作ってみました。

#5

投稿記事 by tk-xleader » 17年前

早速バグ発見です。

https://www.webfile.jp/dl.php?i=388372& ... c348a882d8

から、修正版をダウンロード出来ます。

ちなみに、ソースコードのうち、「Debugs.cpp」と「Debugs.h」はWindowsプログラムでバグ修正を効率よくやろうと作ったものです。
ご自由に使ってもらっていいですよ。

array

Re:リバーシゲームを作ってみました。

#6

投稿記事 by array » 17年前

遊ぼうとしたらクリックが反応しませんでした><; 操作手順はクリックで良いんですよね。

tk-xleader

Re:リバーシゲームを作ってみました。

#7

投稿記事 by tk-xleader » 17年前

>arrayさん

はい、駒をおきたいところにクリックするだけです。忘れてた、パスは右クリックです。

>管理人さん

http://ja.wikipedia.org/wiki/%E3%82%B3% ... 6%E6%A3%8B

どうなんでしょうか、確実に進化はしているようです。

管理人

Re:リバーシゲームを作ってみました。

#8

投稿記事 by 管理人 » 17年前

あぁそれ見ましたよw

>2008年現在ではコンピュータ将棋は、プロの底辺レベルに達したとみなされているものの、プロのトップレベルの実力には依然達していない。

って書いてありますし、プロのトップに勝つにはまだ難しそうですね。

KEV

Re:リバーシゲームを作ってみました。

#9

投稿記事 by KEV » 17年前

遊ばせてもらいましたー。
参考になります。
俺オセロよぇぇ…

COMの計算速度が一定なのを見る限り
毎回全部のセルで判定してるのかな。

tk-xleader

Re:リバーシゲームを作ってみました。

#10

投稿記事 by tk-xleader » 17年前

将棋は指せるのは指せるのですが…滅茶苦茶弱いですよ。

しかし弱いなぁ(自分で作っといて!?)…、普通にこんな状態になります。

ちなみに、「オセロ」は商標なんですよね。それで一応避けています。
http://ja.wikipedia.org/wiki/%E3%82%AA% ... %E6%88%AF)
によると、最高性能のオセロAIはすでに正解チャンピオンですらかないません。

tk-xleader

Re:リバーシゲームを作ってみました。

#11

投稿記事 by tk-xleader » 17年前

>KEVさん

COMはわざとウェイトかけてます。こうすれば少し雰囲気出るかな?と思って…
実際に全セル計算してはいますが、それでも全く速度は気になりません。(処理落ちはあまり重視してません。)

KEV

Re:リバーシゲームを作ってみました。

#12

投稿記事 by KEV » 17年前

あぁそうだったんですね。
確かにゲームには雰囲気は大事ですよね。

同時に5個以上取られる場合はウェイトを長くするとかにすると
やらしさがアップしそうです(ぇ。

tk-xleader

Re:リバーシゲームを作ってみました。

#13

投稿記事 by tk-xleader » 17年前

ウェイトかけてるのは、もうひとつ理由があって、このウェイトを外すと、プレイヤーがパスした時に、連続パスになってしまうので、ここで調整できるようにしてあります。

ちなみに、角を取る事を意識すれば、だいぶ違いますよ。COMは取れる数の事しか考えません(角を取りにいかない。)から…

toyo

Re:リバーシゲームを作ってみました。

#14

投稿記事 by toyo » 17年前

昔ASCIIという雑誌でコンピュータオセロの対決をしてたのを思い出しました
当事から森田さんの作ったプログラムがかなり強かったですね
その後も森田オセロはいろいろなハードで出ましたし
当事はPC88やPC98の時代でしたが今のCPUなら終盤の局面ではかなり手前から総当りの最良手順が計算できるのではないでしょうか
将棋やチェス、オセロのようなゲームを「二人・零和・有限・確定・完全情報・ゲーム」というらしいですがこういうゲームのアルゴリズムにはα-β法というのが有効なようです。

nayo

Re:リバーシゲームを作ってみました。

#15

投稿記事 by nayo » 17年前

オセロはコンソール画面でできる簡単なゲームはないかと考えて作りましたね
端から内側へ2番目、四隅の隣の位置におかないように意識するだけで結構勝てるかと思います
ただ序盤は負けてるように見えますけど

しかし敵のアルゴリズムを考えるのは難しいですね

Hermit

Re:リバーシゲームを作ってみました。

#16

投稿記事 by Hermit » 17年前

DXライブラリを入れていないからでしょうかね?
駒が表示されないんだけど・・・実行方法が変でしょうか?
(デスクトップにおいています)

あと、全部一色になったとき(途中で置く場所がなくなったとき)
勝ち負けの判定は必要だと思います。
まともに勝負しようとすると、必ず全部自分の色になって次が置けなくなるので。

まあ、ゲームと思わず、ソースを見るだけのものであればそれはそれで有りかとも思いますが(^^;

そういえば・・・リバーシとは駒の置き方ちがいません?
(金田はじめちゃん・・・だったっけ? の事件簿では・・・)

tk-xleader

Re:リバーシゲームを作ってみました。

#17

投稿記事 by tk-xleader » 17年前

>リバーシとは駒の置き方ちがいません?

リバーシは「オセロ」を含むゲームの総称としても使われています。その意味で使っています。

http://ja.wikipedia.org/wiki/%E3%82%AA% ... C.E3.82.B7

>駒が表示されないんだけど・・・実行方法が変でしょうか?

付属の、「Piece」というフォルダがあるはずですが、それは同じ場所においているでしょうか?
また、Dxライブラリはスタティックリンクなライブラリなので、特にランタイムが必要でもないはずです。(DirectX7が必要ではあります。)

>あと、全部一色になったとき(途中で置く場所がなくなったとき)
>勝ち負けの判定は必要だと思います。
>まともに勝負しようとすると、必ず全部自分の色になって次が置けなくなるので。

パスすると、COMもパスをするはずなので、それで勝負が決まるはずです。

>まあ、ゲームと思わず、ソースを見るだけのものであればそれはそれで有りかとも思いますが(^^;

…?? どういうことでしょうか?

Hermit

Re:リバーシゲームを作ってみました。

#18

投稿記事 by Hermit » 17年前

パスが必要だったんですね。失礼しました。

で、フォルダーの状態ですが、

ls した状態ですと、

C:\Users\usr.usr-PC.000\Desktop\Reversi>ls -R
.:
Log.txt Piece Readme.txt Reversi.exe

./Piece:
Brack.bmp Thumbs.db White.bmp

の様になります。
OS は Windows Vista Home Premium

>…?? どういうことでしょうか?
バグ出しの為のアップかなと思ったということです。

tk-xleader

Re:リバーシゲームを作ってみました。

#19

投稿記事 by tk-xleader » 17年前

>バグ出しの為のアップかなと思ったということです。

まぁこのゲーム自体は本格的な開発ではありませんし、話のネタにでもなるかな~、と思って作ったものですから…

>OS は Windows Vista Home Premium

VistaではDxライブラリは最新版である必要があるみたいです。出来ればデスクトップ以外のところに置いたほうがいいとは思うのですが…

https://www.webfile.jp/dl.php?i=388372& ... c348a882d8

とりあえず、最新版のダウンロードをしてみてください。

lbfuvab

Re:リバーシゲームを作ってみました。

#20

投稿記事 by lbfuvab » 17年前

う~ん、リバーシのAIは見た事ないですが
チェスならオープンソースなのがいくつかありますね。
ex) GNU chess , Crafty


tk-xleader

Re:リバーシゲームを作ってみました。

#22

投稿記事 by tk-xleader » 17年前

>リバーシのAIは見た事ないですが
>チェスならオープンソースなのがいくつかありますね。

ゲーム自体はオセロに準じています、商標の問題でリバーシという名称を使用しています。
しかし、僕のはたぶん最弱のAIでしょう。だって取れる駒の数しか考えないんですから…(なぜ角を取らない!?)

ただ…、この最弱のAIに駒の全取りを一度もしたことがないんですよ、どんだけ弱いんだろう…

lbfuvab

Re:リバーシゲームを作ってみました。

#23

投稿記事 by lbfuvab » 17年前

AI作成の助けになるようなサイトを発見しました。
http://hitsujiai.blog48.fc2.com/blog-entry-26.html
なかなか斬新です。

tk-xleader

Re:リバーシゲームを作ってみました。

#24

投稿記事 by tk-xleader » 17年前

確かに、僕のは評価関数なる手法をとってませんからねぇ、弱いのも当然です。

逆に、このAIに対してどこまで滅多打ちできるかというのが僕としては気になります。(こんな弱小オセロマシンにパーフェクトで勝ってみたい。)

組木紙織

Re:リバーシゲームを作ってみました。

#25

投稿記事 by 組木紙織 » 17年前

以前私が作ったリバーシです。
AIの判定は確か順番に取れるかどうか確認をして行って一番最初に取れるところに置いています。
うまくやればパーフェクトで勝てます。

C++ Windows SDKで作っています。

array

Re:リバーシゲームを作ってみました。

#26

投稿記事 by array » 17年前

>組木紙織さん

遊ばせてもらいました。

なんか凄い致命的そうなバグが・・・・(多分

取れる位置なら相手の駒の上にも置けちゃうのですが(笑

途中で全部黒にしてやりました^^

組木紙織

Re:リバーシゲームを作ってみました。

#27

投稿記事 by 組木紙織 » 17年前

それ多分仕様です。(笑)
気になるのなら、
ソースコードもあったと思うので、自由に改造してくれて構いません。
なんならAIを強くしてもらっても。

何せ一年以上前のことなので、どんな設計にしたかとか、どこまで完成させたとか一切忘れています。

tk-xleader

Re:リバーシゲームを作ってみました。

#28

投稿記事 by tk-xleader » 17年前

遊ばせてもらいました。

一応勝てるんですけど、全くパーフェクトなんて程遠い状態です。

たかぎ

Re:リバーシゲームを作ってみました。

#29

投稿記事 by たかぎ » 17年前

さっきやってみたらパーフェクトでした。

GPGA

Re:リバーシゲームを作ってみました。

#30

投稿記事 by GPGA » 17年前

同じくパーフェクトいただきました。
ところで、相手の駒を全部埋めた時点をパーエフェクトと言っていいんですかね?

マスをすべて埋めると同時に相手の駒をすべて埋めるのをパーフェクトと呼ばれると
かなり難しいですね。

バグ

Re:リバーシゲームを作ってみました。

#31

投稿記事 by バグ » 17年前

DXライブラリ版とSDK版が発表されてるので、MFC版でも作ってみようかな…(笑)

バグ

Re:リバーシゲームを作ってみました。

#32

投稿記事 by バグ » 17年前

それから、コンソール版とかも(笑)

Hermit

Re:リバーシゲームを作ってみました。

#33

投稿記事 by Hermit » 17年前

最新版、Vista のデスクトップに置いても、表示は良いようです。

報告遅れてすいません。
ちょっと、ジュニアオリンピックの役員研修で大阪に出かけていたもので。

tk-xleader

Re:リバーシゲームを作ってみました。

#34

投稿記事 by tk-xleader » 17年前

>最新版、Vista のデスクトップに置いても、表示は良いようです。

報告ありがとうございます。とりあえずバグはなし、ということでよさそうですね。

>DXライブラリ版とSDK版が発表されてるので、MFC版でも作ってみようかな…(笑)
>それから、コンソール版とかも(笑)

なるほど、なら.NETでも…、といいたいところですが、.NET言語の中でポピュラーなC#とVB…、どっちも書けないんですよ…
でも、さまざまなバージョンができると、この先オセロ/リバーシゲームに関する質問が減りそうです。

たかぎ

Re:リバーシゲームを作ってみました。

#35

投稿記事 by たかぎ » 17年前

> DXライブラリ版とSDK版が発表されてるので、MFC版でも作ってみようかな…(笑)
> それから、コンソール版とかも(笑)
> なるほど、なら.NETでも…

だったらCGI版でも作りましょうか...

> といいたいところですが、.NET言語の中でポピュラーなC#とVB…、どっちも書けないんですよ…

GUIだけC#やC++/CLIで作って、内部処理はC/C++で作るのがよいでしょうね。

バグ

Re:リバーシゲームを作ってみました。

#36

投稿記事 by バグ » 17年前

>>tkmakwins15さん
質問自体の数は変わらないんじゃないでしょうか?
実際、リバーシのコアの部分はそんなに難易度の高いものではないですし…
こういったプログラムの場合は、むしろCPUのアルゴリズムの方が本体っぽいですよね(苦笑)

tk-xleader

Re:リバーシゲームを作ってみました。

#37

投稿記事 by tk-xleader » 17年前

>こういったプログラムの場合は、むしろCPUのアルゴリズムの方が本体っぽいですよね(苦笑)

確かに、AIづくりが一番大変なところですね。

>GUIだけC#やC++/CLIで作って、内部処理はC/C++で作るのがよいでしょうね。

うーん、それはC#の場合は、C#でGUIを作って、内部処理に関してはDLLImportで呼び出すということでしょうか?

たかぎ

Re:リバーシゲームを作ってみました。

#38

投稿記事 by たかぎ » 17年前

> うーん、それはC#の場合は、C#でGUIを作って、内部処理に関してはDLLImportで呼び出すということでしょうか?

あるいは、インタフェース部分だけC++/CLIにするかです(その程度なら簡単です)。

閉鎖

“C言語何でも質問掲示板” へ戻る