リバーシゲームを作ってみました。
Re:リバーシゲームを作ってみました。
単純にその場で一番多く取れる場所を選択しているだけです。
もっと強くしようと思ったら、これをいくらか繰り返して、先読みするという方法が考えられるのですが、複雑すぎると大変だなぁと思って、一番楽なアルゴリズムを実装しました。
描画にはDxライブラリを使っています。
ソースコードをアップします。(まぁしかしこんな汚いコードをよく公開する気になるな。っ手ほど汚いですが…)
もっと強くしようと思ったら、これをいくらか繰り返して、先読みするという方法が考えられるのですが、複雑すぎると大変だなぁと思って、一番楽なアルゴリズムを実装しました。
描画にはDxライブラリを使っています。
ソースコードをアップします。(まぁしかしこんな汚いコードをよく公開する気になるな。っ手ほど汚いですが…)
Re:リバーシゲームを作ってみました。
なるほど、ぷよぷよ作ったときもそんな風にシミュレートしました。
やっぱ適切な方法をとるにはGAみたいなアルゴリズムを組まないといけないんですかねぇ。
連鎖のプログラムはついに解らずに断念しましたし、
AIプログラムってホント難しいですよね。
将棋は未だに勝てないらしいですし、ゲームで一番難しいAIは将棋のAIなのかな?
やっぱ適切な方法をとるにはGAみたいなアルゴリズムを組まないといけないんですかねぇ。
連鎖のプログラムはついに解らずに断念しましたし、
AIプログラムってホント難しいですよね。
将棋は未だに勝てないらしいですし、ゲームで一番難しいAIは将棋のAIなのかな?
Re:リバーシゲームを作ってみました。
早速バグ発見です。
https://www.webfile.jp/dl.php?i=388372& ... c348a882d8
から、修正版をダウンロード出来ます。
ちなみに、ソースコードのうち、「Debugs.cpp」と「Debugs.h」はWindowsプログラムでバグ修正を効率よくやろうと作ったものです。
ご自由に使ってもらっていいですよ。
https://www.webfile.jp/dl.php?i=388372& ... c348a882d8
から、修正版をダウンロード出来ます。
ちなみに、ソースコードのうち、「Debugs.cpp」と「Debugs.h」はWindowsプログラムでバグ修正を効率よくやろうと作ったものです。
ご自由に使ってもらっていいですよ。
Re:リバーシゲームを作ってみました。
>arrayさん
はい、駒をおきたいところにクリックするだけです。忘れてた、パスは右クリックです。
>管理人さん
http://ja.wikipedia.org/wiki/%E3%82%B3% ... 6%E6%A3%8B
どうなんでしょうか、確実に進化はしているようです。
はい、駒をおきたいところにクリックするだけです。忘れてた、パスは右クリックです。
>管理人さん
http://ja.wikipedia.org/wiki/%E3%82%B3% ... 6%E6%A3%8B
どうなんでしょうか、確実に進化はしているようです。
Re:リバーシゲームを作ってみました。
あぁそれ見ましたよw
>2008年現在ではコンピュータ将棋は、プロの底辺レベルに達したとみなされているものの、プロのトップレベルの実力には依然達していない。
って書いてありますし、プロのトップに勝つにはまだ難しそうですね。
>2008年現在ではコンピュータ将棋は、プロの底辺レベルに達したとみなされているものの、プロのトップレベルの実力には依然達していない。
って書いてありますし、プロのトップに勝つにはまだ難しそうですね。
Re:リバーシゲームを作ってみました。
将棋は指せるのは指せるのですが…滅茶苦茶弱いですよ。
しかし弱いなぁ(自分で作っといて!?)…、普通にこんな状態になります。
ちなみに、「オセロ」は商標なんですよね。それで一応避けています。
http://ja.wikipedia.org/wiki/%E3%82%AA% ... %E6%88%AF)
によると、最高性能のオセロAIはすでに正解チャンピオンですらかないません。
しかし弱いなぁ(自分で作っといて!?)…、普通にこんな状態になります。
ちなみに、「オセロ」は商標なんですよね。それで一応避けています。
http://ja.wikipedia.org/wiki/%E3%82%AA% ... %E6%88%AF)
によると、最高性能のオセロAIはすでに正解チャンピオンですらかないません。
Re:リバーシゲームを作ってみました。
>KEVさん
COMはわざとウェイトかけてます。こうすれば少し雰囲気出るかな?と思って…
実際に全セル計算してはいますが、それでも全く速度は気になりません。(処理落ちはあまり重視してません。)
COMはわざとウェイトかけてます。こうすれば少し雰囲気出るかな?と思って…
実際に全セル計算してはいますが、それでも全く速度は気になりません。(処理落ちはあまり重視してません。)
Re:リバーシゲームを作ってみました。
あぁそうだったんですね。
確かにゲームには雰囲気は大事ですよね。
同時に5個以上取られる場合はウェイトを長くするとかにすると
やらしさがアップしそうです(ぇ。
確かにゲームには雰囲気は大事ですよね。
同時に5個以上取られる場合はウェイトを長くするとかにすると
やらしさがアップしそうです(ぇ。
Re:リバーシゲームを作ってみました。
ウェイトかけてるのは、もうひとつ理由があって、このウェイトを外すと、プレイヤーがパスした時に、連続パスになってしまうので、ここで調整できるようにしてあります。
ちなみに、角を取る事を意識すれば、だいぶ違いますよ。COMは取れる数の事しか考えません(角を取りにいかない。)から…
ちなみに、角を取る事を意識すれば、だいぶ違いますよ。COMは取れる数の事しか考えません(角を取りにいかない。)から…
Re:リバーシゲームを作ってみました。
昔ASCIIという雑誌でコンピュータオセロの対決をしてたのを思い出しました
当事から森田さんの作ったプログラムがかなり強かったですね
その後も森田オセロはいろいろなハードで出ましたし
当事はPC88やPC98の時代でしたが今のCPUなら終盤の局面ではかなり手前から総当りの最良手順が計算できるのではないでしょうか
将棋やチェス、オセロのようなゲームを「二人・零和・有限・確定・完全情報・ゲーム」というらしいですがこういうゲームのアルゴリズムにはα-β法というのが有効なようです。
当事から森田さんの作ったプログラムがかなり強かったですね
その後も森田オセロはいろいろなハードで出ましたし
当事はPC88やPC98の時代でしたが今のCPUなら終盤の局面ではかなり手前から総当りの最良手順が計算できるのではないでしょうか
将棋やチェス、オセロのようなゲームを「二人・零和・有限・確定・完全情報・ゲーム」というらしいですがこういうゲームのアルゴリズムにはα-β法というのが有効なようです。
Re:リバーシゲームを作ってみました。
オセロはコンソール画面でできる簡単なゲームはないかと考えて作りましたね
端から内側へ2番目、四隅の隣の位置におかないように意識するだけで結構勝てるかと思います
ただ序盤は負けてるように見えますけど
しかし敵のアルゴリズムを考えるのは難しいですね
端から内側へ2番目、四隅の隣の位置におかないように意識するだけで結構勝てるかと思います
ただ序盤は負けてるように見えますけど
しかし敵のアルゴリズムを考えるのは難しいですね
Re:リバーシゲームを作ってみました。
DXライブラリを入れていないからでしょうかね?
駒が表示されないんだけど・・・実行方法が変でしょうか?
(デスクトップにおいています)
あと、全部一色になったとき(途中で置く場所がなくなったとき)
勝ち負けの判定は必要だと思います。
まともに勝負しようとすると、必ず全部自分の色になって次が置けなくなるので。
まあ、ゲームと思わず、ソースを見るだけのものであればそれはそれで有りかとも思いますが(^^;
そういえば・・・リバーシとは駒の置き方ちがいません?
(金田はじめちゃん・・・だったっけ? の事件簿では・・・)
駒が表示されないんだけど・・・実行方法が変でしょうか?
(デスクトップにおいています)
あと、全部一色になったとき(途中で置く場所がなくなったとき)
勝ち負けの判定は必要だと思います。
まともに勝負しようとすると、必ず全部自分の色になって次が置けなくなるので。
まあ、ゲームと思わず、ソースを見るだけのものであればそれはそれで有りかとも思いますが(^^;
そういえば・・・リバーシとは駒の置き方ちがいません?
(金田はじめちゃん・・・だったっけ? の事件簿では・・・)
Re:リバーシゲームを作ってみました。
>リバーシとは駒の置き方ちがいません?
リバーシは「オセロ」を含むゲームの総称としても使われています。その意味で使っています。
http://ja.wikipedia.org/wiki/%E3%82%AA% ... C.E3.82.B7
>駒が表示されないんだけど・・・実行方法が変でしょうか?
付属の、「Piece」というフォルダがあるはずですが、それは同じ場所においているでしょうか?
また、Dxライブラリはスタティックリンクなライブラリなので、特にランタイムが必要でもないはずです。(DirectX7が必要ではあります。)
>あと、全部一色になったとき(途中で置く場所がなくなったとき)
>勝ち負けの判定は必要だと思います。
>まともに勝負しようとすると、必ず全部自分の色になって次が置けなくなるので。
パスすると、COMもパスをするはずなので、それで勝負が決まるはずです。
>まあ、ゲームと思わず、ソースを見るだけのものであればそれはそれで有りかとも思いますが(^^;
…?? どういうことでしょうか?
リバーシは「オセロ」を含むゲームの総称としても使われています。その意味で使っています。
http://ja.wikipedia.org/wiki/%E3%82%AA% ... C.E3.82.B7
>駒が表示されないんだけど・・・実行方法が変でしょうか?
付属の、「Piece」というフォルダがあるはずですが、それは同じ場所においているでしょうか?
また、Dxライブラリはスタティックリンクなライブラリなので、特にランタイムが必要でもないはずです。(DirectX7が必要ではあります。)
>あと、全部一色になったとき(途中で置く場所がなくなったとき)
>勝ち負けの判定は必要だと思います。
>まともに勝負しようとすると、必ず全部自分の色になって次が置けなくなるので。
パスすると、COMもパスをするはずなので、それで勝負が決まるはずです。
>まあ、ゲームと思わず、ソースを見るだけのものであればそれはそれで有りかとも思いますが(^^;
…?? どういうことでしょうか?
Re:リバーシゲームを作ってみました。
パスが必要だったんですね。失礼しました。
で、フォルダーの状態ですが、
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
>…?? どういうことでしょうか?
バグ出しの為のアップかなと思ったということです。
で、フォルダーの状態ですが、
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
>…?? どういうことでしょうか?
バグ出しの為のアップかなと思ったということです。
Re:リバーシゲームを作ってみました。
>バグ出しの為のアップかなと思ったということです。
まぁこのゲーム自体は本格的な開発ではありませんし、話のネタにでもなるかな~、と思って作ったものですから…
>OS は Windows Vista Home Premium
VistaではDxライブラリは最新版である必要があるみたいです。出来ればデスクトップ以外のところに置いたほうがいいとは思うのですが…
https://www.webfile.jp/dl.php?i=388372& ... c348a882d8
とりあえず、最新版のダウンロードをしてみてください。
まぁこのゲーム自体は本格的な開発ではありませんし、話のネタにでもなるかな~、と思って作ったものですから…
>OS は Windows Vista Home Premium
VistaではDxライブラリは最新版である必要があるみたいです。出来ればデスクトップ以外のところに置いたほうがいいとは思うのですが…
https://www.webfile.jp/dl.php?i=388372& ... c348a882d8
とりあえず、最新版のダウンロードをしてみてください。
Re:リバーシゲームを作ってみました。
う~ん、リバーシのAIは見た事ないですが
チェスならオープンソースなのがいくつかありますね。
ex) GNU chess , Crafty
チェスならオープンソースなのがいくつかありますね。
ex) GNU chess , Crafty
Re:リバーシゲームを作ってみました。
>リバーシのAIは見た事ないですが
>チェスならオープンソースなのがいくつかありますね。
ゲーム自体はオセロに準じています、商標の問題でリバーシという名称を使用しています。
しかし、僕のはたぶん最弱のAIでしょう。だって取れる駒の数しか考えないんですから…(なぜ角を取らない!?)
ただ…、この最弱のAIに駒の全取りを一度もしたことがないんですよ、どんだけ弱いんだろう…
>チェスならオープンソースなのがいくつかありますね。
ゲーム自体はオセロに準じています、商標の問題でリバーシという名称を使用しています。
しかし、僕のはたぶん最弱のAIでしょう。だって取れる駒の数しか考えないんですから…(なぜ角を取らない!?)
ただ…、この最弱のAIに駒の全取りを一度もしたことがないんですよ、どんだけ弱いんだろう…
Re:リバーシゲームを作ってみました。
確かに、僕のは評価関数なる手法をとってませんからねぇ、弱いのも当然です。
逆に、このAIに対してどこまで滅多打ちできるかというのが僕としては気になります。(こんな弱小オセロマシンにパーフェクトで勝ってみたい。)
逆に、このAIに対してどこまで滅多打ちできるかというのが僕としては気になります。(こんな弱小オセロマシンにパーフェクトで勝ってみたい。)
Re:リバーシゲームを作ってみました。
以前私が作ったリバーシです。
AIの判定は確か順番に取れるかどうか確認をして行って一番最初に取れるところに置いています。
うまくやればパーフェクトで勝てます。
C++ Windows SDKで作っています。
AIの判定は確か順番に取れるかどうか確認をして行って一番最初に取れるところに置いています。
うまくやればパーフェクトで勝てます。
C++ Windows SDKで作っています。
Re:リバーシゲームを作ってみました。
>組木紙織さん
遊ばせてもらいました。
なんか凄い致命的そうなバグが・・・・(多分
取れる位置なら相手の駒の上にも置けちゃうのですが(笑
途中で全部黒にしてやりました^^
遊ばせてもらいました。
なんか凄い致命的そうなバグが・・・・(多分
取れる位置なら相手の駒の上にも置けちゃうのですが(笑
途中で全部黒にしてやりました^^
Re:リバーシゲームを作ってみました。
それ多分仕様です。(笑)
気になるのなら、
ソースコードもあったと思うので、自由に改造してくれて構いません。
なんならAIを強くしてもらっても。
何せ一年以上前のことなので、どんな設計にしたかとか、どこまで完成させたとか一切忘れています。
気になるのなら、
ソースコードもあったと思うので、自由に改造してくれて構いません。
なんならAIを強くしてもらっても。
何せ一年以上前のことなので、どんな設計にしたかとか、どこまで完成させたとか一切忘れています。
Re:リバーシゲームを作ってみました。
同じくパーフェクトいただきました。
ところで、相手の駒を全部埋めた時点をパーエフェクトと言っていいんですかね?
マスをすべて埋めると同時に相手の駒をすべて埋めるのをパーフェクトと呼ばれると
かなり難しいですね。
ところで、相手の駒を全部埋めた時点をパーエフェクトと言っていいんですかね?
マスをすべて埋めると同時に相手の駒をすべて埋めるのをパーフェクトと呼ばれると
かなり難しいですね。
Re:リバーシゲームを作ってみました。
最新版、Vista のデスクトップに置いても、表示は良いようです。
報告遅れてすいません。
ちょっと、ジュニアオリンピックの役員研修で大阪に出かけていたもので。
報告遅れてすいません。
ちょっと、ジュニアオリンピックの役員研修で大阪に出かけていたもので。
Re:リバーシゲームを作ってみました。
>最新版、Vista のデスクトップに置いても、表示は良いようです。
報告ありがとうございます。とりあえずバグはなし、ということでよさそうですね。
>DXライブラリ版とSDK版が発表されてるので、MFC版でも作ってみようかな…(笑)
>それから、コンソール版とかも(笑)
なるほど、なら.NETでも…、といいたいところですが、.NET言語の中でポピュラーなC#とVB…、どっちも書けないんですよ…
でも、さまざまなバージョンができると、この先オセロ/リバーシゲームに関する質問が減りそうです。
報告ありがとうございます。とりあえずバグはなし、ということでよさそうですね。
>DXライブラリ版とSDK版が発表されてるので、MFC版でも作ってみようかな…(笑)
>それから、コンソール版とかも(笑)
なるほど、なら.NETでも…、といいたいところですが、.NET言語の中でポピュラーなC#とVB…、どっちも書けないんですよ…
でも、さまざまなバージョンができると、この先オセロ/リバーシゲームに関する質問が減りそうです。
Re:リバーシゲームを作ってみました。
> DXライブラリ版とSDK版が発表されてるので、MFC版でも作ってみようかな…(笑)
> それから、コンソール版とかも(笑)
> なるほど、なら.NETでも…
だったらCGI版でも作りましょうか...
> といいたいところですが、.NET言語の中でポピュラーなC#とVB…、どっちも書けないんですよ…
GUIだけC#やC++/CLIで作って、内部処理はC/C++で作るのがよいでしょうね。
> それから、コンソール版とかも(笑)
> なるほど、なら.NETでも…
だったらCGI版でも作りましょうか...
> といいたいところですが、.NET言語の中でポピュラーなC#とVB…、どっちも書けないんですよ…
GUIだけC#やC++/CLIで作って、内部処理はC/C++で作るのがよいでしょうね。
Re:リバーシゲームを作ってみました。
>>tkmakwins15さん
質問自体の数は変わらないんじゃないでしょうか?
実際、リバーシのコアの部分はそんなに難易度の高いものではないですし…
こういったプログラムの場合は、むしろCPUのアルゴリズムの方が本体っぽいですよね(苦笑)
質問自体の数は変わらないんじゃないでしょうか?
実際、リバーシのコアの部分はそんなに難易度の高いものではないですし…
こういったプログラムの場合は、むしろCPUのアルゴリズムの方が本体っぽいですよね(苦笑)
Re:リバーシゲームを作ってみました。
>こういったプログラムの場合は、むしろCPUのアルゴリズムの方が本体っぽいですよね(苦笑)
確かに、AIづくりが一番大変なところですね。
>GUIだけC#やC++/CLIで作って、内部処理はC/C++で作るのがよいでしょうね。
うーん、それはC#の場合は、C#でGUIを作って、内部処理に関してはDLLImportで呼び出すということでしょうか?
確かに、AIづくりが一番大変なところですね。
>GUIだけC#やC++/CLIで作って、内部処理はC/C++で作るのがよいでしょうね。
うーん、それはC#の場合は、C#でGUIを作って、内部処理に関してはDLLImportで呼び出すということでしょうか?
Re:リバーシゲームを作ってみました。
> うーん、それはC#の場合は、C#でGUIを作って、内部処理に関してはDLLImportで呼び出すということでしょうか?
あるいは、インタフェース部分だけC++/CLIにするかです(その程度なら簡単です)。
あるいは、インタフェース部分だけC++/CLIにするかです(その程度なら簡単です)。