1read 100read
2013年05月ゲ製作技術10: 【オセロ,将棋】ボードゲーム【囲碁,War】 (267)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
Javaでゲーム作る話してるキチガイがいるよ(藁 (404)
フィアーゲーム 恐怖の作り方 fear game (398)
ゲームにおけるデータ構造・クラス設計・パターン2 (603)
人工知能or人工無脳作ろうぜ (904)
-RPGツクール総合スレッド@製作技術(Part15)- (591)
モナーモンスター作って (740)
【オセロ,将棋】ボードゲーム【囲碁,War】
1 :03/07/10 〜 最終レス :2013/05/12 比較的地味なボードゲーム専用のスレが欲しくて立ててみました。 私はc言語で作ったデータベースを使って人間と対戦できる将棋かチェス みたいなソフトを作りたいと思ってますが、グラフィックインターフェースの 作り方がわからなくてつっかえているレベルです。
2 : >>1 まずユーザインタフェースは、テキストベースで作れ。 盤面を表示して、指す座標をひとつずつ入力させるタイプ。 AIのテストなら、それくらいで十分だろ。
3 : もうひとつ逝っておくと、「私は云々」みたいなことは、>>1 に書くべきではないな。 単発質問スレだとおもわれるぞ?(もし真性単発質問スレだったらスマソw)
4 : ありがとうございます。単発というわけでなく話題提供のつもりでしたが まぎらわしかったですね。すみません。ボードゲームに関するいかなる 話題でも参考になるのでそういう風に解釈してください。 あと2でいわれたテキストベースというのは具体的にどのようなことを すればいいのかもう少し詳しく教えてくださいませんか。当方c言語を はじめて一ヶ月。BCCだけでとりあえず思考ルーチンだけはめどが たってきた程度で表示はまったくの素人なのです。
5 : 自信作のエロサイト! http://alink3.uic.to/user/angeler.html
6 : http://homepage.mac.com/maki170001/
7 : http://homepage.mac.com/hiroyuki44/jaz09.html
8 : >>4 盤面の状態はどうやって持ってるの?
9 : ミニゲームなのであらゆる可能なポジションに対しそれが最善で 何手で詰むかまたは引き分け(ドロー)かの情報を得ることができますので それを一度作ってデータベースとしてそれを参照しながら(数MBになる予定) 次の一手を考えるようにしたいと思ってます。まだ途中ですが。
10 : >>1 Cのコンソールでやるなら、オセロ、囲碁なら、●〇+で 将棋は歩v等か外字エディタとか。僕は今時間が空いているので、 コンソール×外字エディタの将棋をウインアプリに作り直している。 Win32APIにCreateFont関数があるから、それで逆の文字も表示できる。 一番良いのはやっぱりビットマップを用意して表示する。 参考に7行プログラミングで作られたもの。Cコンソール。 http://pc.2ch.net/test/read.cgi/tech/984182993/372 #include <stdio.h> int*i,p,t,a,d,v,m[91]={-10,-9,-8,-1,1,8,9,10},s;void k(){if(m[p]==0)for(i=m;*i ;i++){for(v=p+*i;m[v]==9-t;v+=*i);if(v-p-*i&&m[v]==t&&(s=a=v=p,d))do m[v]=t,v +=*i;while(m[v]-t);}}main(){for(m[40]=m[50]=s=t=3,m[41]=m[49]=6;s-1;a=d=0){for (p=8;++p<82;printf("・\0○\0●\0\n"+m[p]))p%9?k():m[p]=9;for(a?d=a=p=9:s?s=0, puts("pass"):s++;a==9;k())t-6?scanf("%d%d",&p,&v),p+=v*9:++p;t=9-t;}return 0;} >>2 さんが言っているような感じ。思考ルーチンができるなら、 めちゃ強いのを作ってから、グラフィカルなのに入っても遅くない。
11 : いきなり7行オセロかよ!初心者にはつらそう。 まぁ、適当にサンプルを書いておこう。 syouhai_hantei() cpu_no_sikou_routine() の二つの関数さえ書けば、完璧な囲碁ソフトだぜ! ちなみに、↓は囲碁だけどbanmen,koma,syohaiを変えれば、将棋でもチェスでも同じ。 ------------------ int banmen[19][19] = {{0}}; /* ←グローバル変数 */ char *koma[] = {"+", "●", "○"}; char *syohai[] = {"", "●の勝ちです", "○の勝ちです", "引き分けです"}; int i, j, r; while (1) { for (i = 0; i < 19; i++) { for (j = 0; j < 19; j++) { printf("%s", koma[banmen[i][j]]); } printf("\n"); }
12 : do { printf("縦?\n"); scanf("%d", &i); printf("横?\n"); scanf("%d", &j); } while(i < 0 || i >= 19 || j < 0 || j >= 19); banmen[i][j] = 1; r = syouhai_hantei(); if (r != 0) break; cpu_no_sikou_routine(&i, &j); banmen[i][j] = 1; r = syouhai_hantei(); if (r != 0) break; } printf("%sの勝ちです。", syohai[r]);
13 : ↑ cpu_no_sikou_routine(&i, &j); banmen[i][j] = 2; だった。ごめ。
14 : 話題もないですし対戦でもしてみます? 一応プラットフォームとしては リバーシ http://dahlia.xrea.jp:8080/hikky/index.php?%5B%5B%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%BB%A8%C3%CC%2FReversi%5D%5D もありますしプラットフォームから作るのもおもしろいんじゃないかと
15 : 放置されてるスレなんで上げてみた。 いいんじゃね、東大将棋とかがどうかしましたかって言うのは無理だけど なんか作りたいね。
16 : http://www.k-514.com/sample/sample.html _、_ 癒し系か・・・ ( ,_ノ` )y━・~~~ 見たらどうだ・・・
17 : http://www.39001.com/cgi-bin/cpc/gateway.cgi?id=ookazujp http://www.39001.com/cgi-bin/cpc/welcome.cgi?id=ookazujp http://www.bannerbridge.net/cgi-bin/click.cgi?mid=b000000002&pid=p000000244 http://www.bannerbridge.net/cgi-bin/click.cgi?mid=b000000003&pid=p000000244 http://www.bannerbridge.net/cgi-bin/click.cgi?mid=b000000017&pid=p000000244 http://www.adultshoping.com/index.cgi?id=1057809839 http://www.bannerbridge.net/cgi-bin/click.cgi?mid=b000000008&pid=p000000244 !!!!! ━━━━━━(゚∀゚)b━━━━━━ グッジョブ!!!!!
18 : 結局>>1 はどうなったの?
19 : 1より森田さんはどうなったの?
20 : JRA、将棋、行ってみます。 方針は、1億局指す、すべての局面の勝率を記憶する。 public class example3{ public static void main(String arg[]){ // int banmen[][] = new int[9][9]; char koma[] = {'+','F','O','+','f','o'}; String syohai[] = {" ","先手の勝ちです","後手の勝ちです","引き分けです"}; int i, j, r; banmen[0][4]=5;banmen[2][4]=4; banmen[6][4]=1; banmen[8][4]=2; { for (i = 0; i < 9; i=i+1) { for (j = 0; j < 9; j=j+1) { System.out.print(koma[banmen[i][j]]); } System.out.print("\n"); } } } }
21 : あぼーん
22 : 歩、香車、桂馬、銀、金、角、飛車、王、と金、成り香、成り桂、成り銀、竜馬、竜 pawn,lance,night,silver,gold,bishop,rook,oh,Tokin,yari,narikeiMa,argent,dragonHorse,dragon で行く。 lnsgogsnl .r.....b. ppppppppp ......... ......... ......... PPPPPPPPP .B.....R. LNSGOGSNL
23 : 囲碁や将棋で一番アツいところは、コンピュータの思考ルーチンだと思う。
24 : ∋8ノノハ.∩ http://endou2.kir.jp/hankaku11.html#.2ch.net 川o・-・)ノ <先生!こんなのがありました! http://endou2.kir.jp/hankaku04.html#.2ch.net http://endou2.kir.jp/hankaku03.html#.2ch.net http://endou2.kir.jp/hankaku10.html#.2ch.net http://endou2.kir.jp/hankaku05.html#.2ch.net http://endou2.kir.jp/hankaku08.html#.2ch.net http://endou2.kir.jp/hankaku07.html#.2ch.net http://endou2.kir.jp/hankaku01.html#.2ch.net http://endou2.kir.jp/hankaku06.html#.2ch.net http://endou2.kir.jp/hankaku02.html#.2ch.net http://endou2.kir.jp/hankaku09.html#.2ch.net
25 : >>23 もち、ろん、です。 名人が最善手と次善手しか指さないと仮定すれば、1兆局面を用意 すれば、80手まではOKになる。あとは森田将棋に頼む。 よもや3善手を指すような事はあるまいが、そのときは灯台将棋に引き継ぐ。
26 : http://www.leverage.jp/bloom/qry/search.qry?function=first
27 : public class example3{ public static void main(String arg[]){ int banmen[][] = { {2,3,4,5,8,5,4,3,2}, {0,7,0,0,0,0,0,6,0}, {1,1,1,1,1,1,1,1,1}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {10,10,10,10,10,10,10,10,10}, {0,15,0,0,0,0,0,16,0}, {11,12,13,14,17,14,13,12,11}}; char koma[] = {'.','f','y','m','s','g','k','h','o', '.','P','Y','M','S','G','K','H','O'}; String syohai[] = {" ","先手の勝ちです","後手の勝ちです","引き分けです"}; int i, j, r; { for (i = 0; i < 9; i=i+1) { for (j = 0; j < 9; j=j+1) { System.out.print(koma[banmen[i][j]]); } System.out.print("\n"); }}}}
28 : >>20 さん 22の見ると、なんか将棋は素人っぽくてワロタ(悪い意味ではないです) 駒をテキスト表示するなら一文字で下記を使うと良いかも(下段は成り駒) 飛、角、歩、香、桂、銀、金、玉 竜、馬、个、仝、今、全
29 : >>28 はじめて見るアイディアで参考になります。色携帯、アジアスタンダードには良いかもしれない。 敵方表現で4バイトは必要? 当方、敵駒含めても1バイトで表現したいので、大文字先手、小文字後手、 日本語成らず、英語(フランス語)成り、で。 改定版は fymsgokh,plnagobr チェス屋含めてインターナショナル。
30 : 試しに76歩、77歩を10億回まわして見た。P4、2.4Gで約10秒。 結構速いね。秒速100万手も夢ではない。 (劇刺で数十万手らしい) 'fymsgokh'は「フィムスゴコホ」と読む。タバコを吸うとスゴく咳き込む。 public class example3{ public static void main(String arg[]){ int banmen[][] = { {2,3,4,5,8,5,4,3,2}, {0,7,0,0,0,0,0,6,0}, {1,1,1,1,1,1,1,1,1}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {17,17,17,17,17,17,17,17,17}, {0,22,0,0,0,0,0,23,0}, {18,19,20,21,24,21,20,19,18}}; char koma[] = {'.','f','y','m','s','g','k','h','o','p','l','n','a','g','b','r', '.','F','Y','M','S','G','K','H','O','P','L','N','A','G','B','R'}; long i, j, r; for (i=0;i<1000000000;i=i+1){ banmen[6][2]=0; banmen[7][2]=17; banmen[7][2]=0; banmen[6][2]=17; } }}
31 : 初期面: 's00000000000000ymsgogsmy1h5k1fffffffff999FFFFFFFFF1K5H1YMSGOGSMY' この派板にチェスはなかったのか。
32 : 'S0000000000000000ymsgogsmy1h5k1fffffffff999FFFFFFFFF1K5H1YMSGOGSMY'
33 : 困らないか、盤上の駒数を計算すれば、足りないものが持ち駒。 0S5210y4o1my1y2gs1g1f4f1ff4s1f4bm2F3F2FS3F2G1F2F2S3H2YMOG3MY 0:平手 S:つぎ、先手番 5:先手持ち歩5 2:後手持ち歩2 1:先手持ち角1 0:後手持ち角0 任意の局面から、100万分の1秒以内で合法的な手を指したい。 200行から400行のプログラムで達成できればなんとかなるか。 9一に自分の駒があるか 8一に、、、、、 3五に自駒あるか、yes 自駒は前にひとつ進めるか、yes 進む先は盤内空枡または敵駒か、yes 候補手決定、return
34 : >>31-33 >'S0000000000000000ymsgogsmy1h5k1fffffffff999FFFFFFFFF1K5H1YMSGOGSMY' この暗号みたいな文字列が何を表わすのか教えて栗
35 : >>34 まあ、なんとなく"ymsgogsmy"は"香桂銀金王金銀桂香"であろうことはわかるのだが。
36 : >>34 2日古い旧版ですが、 "S0000000000000000" S:次の手番、先手 00:先手持ち歩 000000:先手その他持ち駒の数 00:後手持ち歩 000000:後手持ち駒 小文字英字:後手盤上駒 大文字英字:先手盤上駒 数字:連続空枡の数 のつもりでしたが、持ち駒については、盤上に足りないものだけを 表示すればよいことにした。 「何手目まで指したか」の情報も入れたほうが良いかな。 チェスプログラマからのアイディアですが、あちらは持ち駒がない。
37 : >36 なるほどあの文字列はそういう風にゲームの状態を表していたんですね。 当方将棋やチェスのプログラムを組んだことがないのでよくわかりませんが 初期状態としてプログラムを実行するときの引数などに与えれば、テストを 行ったり詰将棋を解かせたりするときに便利そうですね。 ただちょっと人間が読むにはちょっと読みにくい形式なので、例えば次のような 感じにセパレータをいれてみたりして読みやすくしてはどうでしょうか? 先手番:00000000:00000000:ymsgogsmy/1h5k1/fffffffff/9/9/9/FFFFFFFFF/1K5H1/YMSGOGSMY
38 : >>37 人間にもコンピュータにもと「ふたまた」をかけたものです。 気にかけていただき恐れ入ります。 2台のPC間の通信、局面データを保存するときのキーなどを想定しています。 ちなみに>>33 の '平手先手番:52:10:y4o1my/1y2gs1g1/f4f1ff/4s1f2/2bm2F2/1F2FS3/F2G1F2F/2S3H2/YMOG3MY'は 後手持ち駒:歩2 y・・・・o・my ・y・・gs・g・ f・・・・f・ff ・・・・s・f・・ ・・bm・・歩・・ ・歩・・歩銀・・・ 歩・・金・歩・・歩 ・・銀・・・飛・・ 香桂王金・・・桂香 先手持ち駒:角1歩5
39 : ∨香 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∨王 ̄ ̄∨桂∨香 後手:歩2  ̄ ̄∨香 ̄ ̄ ̄ ̄∨金∨銀 ̄ ̄∨金 ̄ ̄ ∨歩 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∨歩 ̄ ̄∨歩∨歩  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∨銀 ̄ ̄∨歩 ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄∨馬∨桂 ̄ ̄ ̄ ̄∧歩 ̄ ̄ ̄ ̄  ̄ ̄∧歩 ̄ ̄ ̄ ̄∧歩∧銀 ̄ ̄ ̄ ̄ ̄ ̄ ∧歩 ̄ ̄ ̄ ̄∧金 ̄ ̄∧歩 ̄ ̄ ̄ ̄∧歩  ̄ ̄ ̄ ̄∧銀 ̄ ̄ ̄ ̄ ̄ ̄∧飛 ̄ ̄ ̄ ̄ ∧香∧桂∧王∧金 ̄ ̄ ̄ ̄ ̄ ̄∧桂∧香 先手:角歩2
40 : 1人頑張ってる奴がいるな コンピューター将棋スレッド11 http://game.2ch.net/test/read.cgi/bgame/1064575087/ おまいら最強の将棋プログラムしてみろよ part2 http://pc2.2ch.net/test/read.cgi/tech/1043246252/
41 : だれか、Cで10億回まわして。
42 : >>40 頑張ってますよ。
43 : >>1 >c言語で作ったデータベースを使って人間と対戦できる将棋かチェス データーベースはC,JRA無関係なので、作りましょう。 まずは先手、機械、19手まで。 1:76歩 3: 14歩:xxx;24歩:xxx;34歩:xxx;44歩:xxx; 54歩:xxx;64歩:xxx;74歩:xxx;84歩:xxx; 94歩:xxx;32銀:xxx;42銀:xxx;32金:xxx; 42金:xxx;52金左:xxx;42玉:xxx;52玉:xxx; ......
44 : 1手目は76歩:77760 3手目は後手指手にかかわらず26歩:27260 13140:27260 23240:27260 33340:27260 ... 91920:27260 5手目 13140,14150:26250 ... 33340,53540:39480 33340,41320:69780 ...
45 : 1手目、3手目、コンピュータがいつも同じ手では面白くない。 1手目:30 2手目:30 3手目:8 4手目:26 5手目:4 6手目:16 7手目:2 8手目:12 9手目:2 10手目:8 ..... 位が適当か、
46 : 30*30*8*26*4*16*2*12*2*8=40,0062,7200 すでに46億か、無理だ。 30*30*4*16*2*8*2*4*1*2=1474,5600 15百万、この程度か。 あと50手を先手1手、後手2手で、32百万、掛けると、 472兆、ちょっと苦しい。 8*30*2*16*1*8*1*4*1*2=491520 、30分の一になった。 16兆。 これで60手までOK 機械でうまくはじき出せるか。
47 : 相手の手を2手用意したのでは、すぐに定跡から外れて役に立たないか。 4手まで用意で、40手までで、1兆。
48 : コンピューターの将棋は、終盤はプロ並の寄せをするようになったが 序盤から中盤はイマイチだからねぇ。
49 : 40手目まで先手後手5分の将棋を、コンピュータと強い人間が引き継いで指せば、人間勝利は当然。 では、130手で終局した互角の名勝負を、現在の最強ソフトと最強人間で指し継ぐとすれば、何手目くらいからが、良い勝負になるでしょう。
50 : >>49 ま、言いたい事は大体分かるけど、もっと分かりやすい日本語使おうな(5分→互角) ってか文章の最後のほうなんて、とても日本人とは思えんぞ。 あんまり将棋が指せない(棋力が低い)人なんだろうけど、 「40手目まで指し終わり、その状況がほぼ互角」ってのは、そうそうないと思うし、 お互いにプロ並の棋力があっても、なかなか互角だと断言できないだろうから難しいよ。 130手というと終盤の状況だろうし、その時点でもマァマァ長手数の部類になるから 「優劣なし、互角」と断言ができずに無理っぽい。 (矛盾してるっぽいが、もし本当に互角の状況なら手番があるほうが有利になる場合が多いのでは)
51 : //www.colina.demon.co.uk/chu.html. 中将棋のソースがあった。 if timeRemaining == 60000 then do -- byo yomi basicTime=sp.getByoYomiTime() -- 13 seconds - cautious maximumTime=55 -- leaves 5 seconds in which to actually make the move end if abbrev.equals(String "P") then return "Pawn" else if abbrev.equals("+P") then return "Tokin" else if abbrev.equals(String "K") then return "King" else if abbrev.equals(String "L") then return "Lance" else if abbrev.equals(String "S") then return "Silver General" else if abbrev.equals(String "G") then return "Gold General" else if abbrev.equals(String "B") then return "Bishop" else if abbrev.equals(String "R") then return "Rook"
52 : JavaにBitSetクラスというものがあるのを偶然見つけた。 81枡での駒の存非をビットで表現するのに便利そう。
53 : やさしいチェスプログラムがあった。 これを焼きなおして見よう。 //build start position int [] org = { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,124, 22, 23, 25,126, 23, 22,124, 99, 99, 21, 21, 21, 21, 21, 21, 21, 21, 99, 99, 00, 00, 00, 00, 00, 00, 00, 00, 99, 99, 00, 00, 00, 00, 00, 00, 00, 00, 99, 99, 00, 00, 00, 00, 00, 00, 00, 00, 99, 99, 00, 00, 00, 00, 00, 00, 00, 00, 99, 99, 11, 11, 11, 11, 11, 11, 11, 11, 99, 99,114, 12, 13, 15,116, 13, 12,114, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 }; for (int i=0; i < 120; i++) board [i] = org [i]; //update screen repaint ();
54 : >>36 後手盤上駒、先手盤上駒の順に分けると: '0S:lnsgkgsnl/1r5b1/ppppppppp/108/ppppppppp/1b5r1/lnsgkgsnl' '0S5210:l4k1nl/1r2gs1g1/p4p1pp4s1p/4Bn/83/p3p2ps3/p2g1p2p/2s3r2/lnkg3nl' 左上隅から順に81枡で後手駒終わり、次先手駒。大文字は成り。 文字の種類が少なくなってすっきりした。 >>38、39 8二香は誤り、8二飛 >>30 banmen[7][2]=17;は誤り、banmen[5][2]=17;
55 : 大文字と小文字を逆にして見た。 '0S5210:L4K1Nl/1R2GS1G1/F4F1FF/4S1F4bN/83/F3F2FS3/F2G1F2F/2S3R2/LNKG3NL' 「0S5210:香4王1桂香/1飛2金銀1金1/歩4歩1歩歩/4銀1歩2/2馬桂 /83/歩2/1歩2歩銀3/歩2金1歩2歩/2銀3飛2/香桂王金3桂香」
56 : 一兆と一口に言っても1秒で1局面を評価結論出して行って3万年かかる。 10000,0000,0000/60/60/24/365.25=31688.08781
57 : まずは盤が必要。 9x9 11x11 16x16 どれが良いか。9x10を延長して13x10+1にしよう。 なぜプラス1か? 99,99,99,99,99,99,99,99,99,99, 99,99,99,99,99,99,99,99,99,99, 99,18,19,20,21,24,21,20,19,18, 99,00,23,00,00,00,00,00,22,00, 99,17,17,17,17,17,17,17,17,17, .... .... 99,99,99,99,99,99,99,99,99,99, 99,99,99,99,99,99,99,99,99,99,99 のような感じ。99より48が良いか。 11x11の採用者は1列無駄だよね。チェスじゃないから 桂馬は横に飛ばないのに。
58 : 発見!! 64JAVA J2SE Itanium v 1.4.2_02 のダウンロード でも、ハードとOSの値段は?? あ、OSはRedHatでも良いか。
59 : Itanium2はサーバー用か。Athlon64用だと良かった。
60 : 案1: 人間とプログラムが対戦する際、 人間側の選択肢を「2択」データベースで用意する。 例えば人間初手なら: 1:76歩 2:26歩 3:投了 その他の手は選択不可とする。 プログラム側の対応手を1手用意する。 初手より70手までで320億応手。 70手終了時点で、 歩:1点、小駒:2点、大駒:10点で集計。得点多いほうが勝ち。 これなら全ての手をゼロ秒で送り出せる。 遊べると思います?
61 : ストレスが溜まると思う
62 : 中盤以降、どうやって2手に絞り込むのだ?
63 : 申し訳ない。へぼプログラムの考える最善2手だから、ロクな手では無いとおもわれ、 まずは携帯用ストレス解消用。ナズケテ「ストレス将棋」
64 : 序盤34手まで、13万通り、は過去局CDROMから頻出手を選ぶ。 以降は1局面あたり、プログラムで1000秒思考した結果最善2手を保存する。 PC1台で1314.9局面/年。1000台のPCにお願いして、131万局面。 約40手先、合計で74手まで用意できる。 コンピュータの考えた次善手をたどると実は人間側の勝ちになったりする?。
65 : 計算違いだ。34手目までは、過去の名局ただ1局のみをベースにする必要がある。 もしくは、最新の流行1局。こちらだと1年先の保証がない
66 : 計算バグ PC1台で31557.6局面/年 (24倍を忘れた) 40台程度の協力者でよい
67 : 40手までの「2ちゃんボードゲーム板標準手順」を将棋の強い方に上げてもらおう。 その後の30手をDB作成する。まずは1秒思考版で。
68 : 1. 盤、Bang、 は取りあえず 9x9=81の一次元配列にしよう。 あとで変更するかも知れない。 2. 駒、 こちらも適当に、 先手歩:16、先手香車:17、後手歩:32、、 3. generateArandomMove() 乱数で合法手を1手作成して返す。 4.何局か指して、勝率の良いもの選ぶ。 計画 1.詰め将棋、1手詰め 2.詰め将棋、3手詰め 3.詰め将棋、5手詰め 4、次の一手問題 5、2日制将棋1日目終了後指し継ぎ 6、序盤データベース
69 : 944422200 ....K.... ......... ....g.... ......... ......... ......... ......... ......... ......... 000010000 1手詰め、持ち駒、金 ランダムに3手指し終了した時点で駒台に敵玉がのっていれば 勝ち、その他は負け。
70 : 50万回試行した。結果は、、、、、、 41金:702 61金:727 42金:540 52金:663 62金:588 ちょっと予想と違う結果になった。 61金、62王、のあと9分の2の確率で王を取る。 52金、61王、のあと10分の1の確率で王が駒台にのる。 とりあえず理屈には合って居そう。 「逃げる」「取る」手を覚えさせれば、なんとかなりそう。 次の1手詰めをやってみよう 844322100 ......... ......G.. ......... ......dsK ........G ......... ......... ......... ......... 000000000 持ち駒無し
71 : >>70 61金で41王に逃げる確率は5百数十分の一、 王が移動しなければ、9分の一で、王確保。 52金後、王が移動しないと10分の一で王捕獲される。 「取る」プログラムが「逃げる」よりは簡単そう。 あと何を工夫するか。 王手をチェックすれば、大幅に高速になるのは「見え」てるが、指し将棋の 強化には約に立たないから後回し。 次の1手詰めは50万回では差が出ない、500万回、朝までかかる。
72 : >>70 10万回で 23銀不成り:468 23銀成り:341 35銀:245 少しはずしているが、まあ、近い。敵玉が逃げない場合も含めての敵玉捕獲確率のようなもの。 一気に次の1手問題。 601000000 LKS.....L ..S.r.... ....B..PP .PpG..... P.P....p. p.Nng.p.p kpn..p.r. ..g...... l....B..l 000012000 持ち駒金銀2、(95歩まで) 500万回 先手生駒:plnsgbrk 先手成り駒:tycagmd 英語圏でも将棋プログラムを開発しているから、あまり外れないほうが良いか。(少なくとも生駒) 桂馬の「桂」は何の意味があるのだろう。金銀さんご、、、、、、などの言葉があるから、「珊瑚」に関係ないのかなーー。それで、 coral にしてみた。大外れかもしれない。
73 : 500万回で最頻手は92銀:5883回。 お目当ての手は第16位で1739回。 約150の可能手の内。 終盤なので、玉の防御をすれば、もう少し良くなるか。
74 : 中盤の問題。 100万回。 400100000 LN...G.NL ......SK. P........ ..PBPR.P. .P.P..P.P p.pN.p... .pb.pg.rp ......s.. ln...g.kl 000011000
75 : 初手48玉、第3手59玉と出た。
76 : 中盤問題は本の正解とは異なる66角。それでも某ソフトと同じ。 もっと序盤問題から: 000000000 LN・GKGSNL ・R・S・・・B・ P・PPPP・PP ・P・・・・P・・ ・・・・・・・・・ ・・歩歩・・・・・ 歩歩・・歩歩歩歩歩 ・角・・・・・飛・ 香桂銀金玉金銀桂香 000000000 先後逆 先生の正解は68飛だが、、、 とりあえず、王の防御だけは入れた。20回に1回防御しない、そのとき駒台に上げられる。つみ判定しなくて良いから省力
77 : ほう、なんか面白いことやってる人がいますな。 1手指すのにものすごい時間かかりそうだが。
78 : 将棋ソフトの探索速度、秒速数十万手だそう。 DeepBlue の速度は秒速: 200Million moves だそうです。
79 : >>76 あまり序盤すぎて、どうにもならない。65歩と68飛が嫌われた手。 王が動くのが好まれて居る、が、 可能な局面の数と、乱数そのものの数に圧倒的な差があるので、乱数の偏りを見ているのかもしれない。 もう少し局面を進めて見よう。 000000000 LN・・・GBNL ・R・・G・S・・ P・・P・・SK・ ・・P・PPPP・ ・P・歩・・・・P 歩・歩・銀歩歩歩・ ・歩角・歩・桂・歩 ・・・飛金・銀玉・ 香桂・・・金・・香 000000000 200万回、嫌われた手:75歩:−236点 推奨手:25歩:1189点、45銀:637点、29玉:532点 どうなんでしょうか。先生推薦手は別の手。
80 : 全然駄目だ。25歩は確率的に取って来ない、24歩、20回に1回逃げない、敵玉捕獲確率が高い。 45銀も同じ、34銀、高確率敵玉捕獲。 相手が悪い手を指してこちらが勝ったとき、相手が良い手を指してこちらが勝ったときで、同じ1勝ではdame. 改善!
81 : 先手第1手目が10000勝10000敗とする。 第2手目が後手側100勝1敗の手で、この対局に先手が勝った場合: 100点与える。 負けた場合:1点引く。 やってみよう。
82 : うーん、バグフルだ
83 : 正月の休みに虫と戦えり 新年にバグ取れぬ間は目出もせず 新年にバグの取れたるめでたさや
84 : 休みは終わり、バグとりまずまず、局面で勝った手を再使用。 秒速約5000手。1000倍速必要。次の課題はキラー手の採用。 特定手の生成、王手、取る手、逃げる手、成る手、を高速に生成したい。
85 : 詰め将棋に限って言えば、詰んだ王将の位置を想定して その逆順で手を考えるってパターンもありかもしれないと想像。 完全に詰んだ形でしかも持ち駒無しっていうかなり限定された状況だし 自分が詰め将棋考えるときにそうしてるから。
86 : 「想定」はコンピュータの不得意科目だから難しそう。 詰め将棋に関しては、現在ソフトは人間を超えてる模様。後発組はなかなか追いつけない。 序盤はすごく弱いとの評判だから、、、なんとか、、、 序盤で差をつけてそのまま、、、
87 : いまのところ、あまりうまくいってない。バグなのか、、 ある新出局面が与えられる: 可能な指し手は200.そのうち190手以上が凡手。 全手試すと時間が足りない。如何に良い候補手を選ぶか、、 取る成るとか言っているとまた時間がかかる。 局面から何手目かの別に成功(killer)手を集積しようか。 手目別キラー勝率順、、、 どう? みんな、序盤がだめって言ってる、、、
88 : >>87 君は>>1 なのか? それとも>>20 かな? とにかくガンガレ
89 : おーっ援護だー、有り難い。100まで行くのに半年、1000までいけるかな、新スレッドの立て方知らないし、心配ないか。
90 : 負けてるくせに、手を変えないバグ発見。ゆっくりなおそう。 乱数将棋の強さをゼロとして、C将棋の強さ標準を作成することが可能。 2枚落ちで勝率5割なら600点、それにまた2枚落ち5割で1200点、、、、 絶対零度のようなもの、、、ケルビンじゃなく、ボドゲー8000点とかで呼んでください。 うちの特許じゃよ! 【香 落】100点 【角 落】250点 【飛 落】350点 【飛香落】450点 【二枚落】600点
91 : 6手まで指し終った段階で一歩でも取られていれば負け。 76、34、26,84、66は66同角で先手負け。
92 : n手まで将棋:n手まで指し終わり駒損の方が負け。 n=6: 76,14,56,13角、78銀、 n=8:
93 : データベース: 第1手目76歩、第3手目26歩として、第5手目を準備しよう。 約900手くらい。第7手目は3万手以上か。後手の全手に対応。
94 : グッドニュース:ひと月ぶりのバグ取りでやっと3手詰めが解けた。 5万局あまりの試行で発見。攻め手は王手に限ってないので、もち駒ありだとどこでも打って試す。29飛車とか 30万手程度だから、高速プログラムなら1秒以内か。とりあえず、というとこか。 30分程度かかった。秒速200手、デバッグ付きだから。 000000000 ・・・・・・・・・ ・・・・S・・・・ ・・・N・銀K・P ・・・飛・・・・・ ・・・・・・・・・ ・・・・・・・・・ ・・・・・・・・・ ・・・・・・・・・ ・・・・・・・・・ 001010000 飛金
95 : 32金、 43玉、 33飛車、 31桂馬:20分の1の確率で王手を無視して自由に指す。それにしても玉を取り返す気か。 20分の19はギブアップして決着する。 74飛車:王手を逃げないからと言って直ぐに取るとは限らない。あくまでも自由に。 95歩:玉将健在で後手の勝ち 次の問題 000000000 ・・・・・・・・・ ・・・・・・・・・ ・・・・・・・・・ ・・・・・・・・・ ・・・・・・・・・ ・・・・・・竜歩・ ・・・・・歩歩・b b=後手馬 ・・・・・銀K・・ ・・・・・・・桂香 001010000 飛金
96 : >>95 ×:玉を取り返す ○:玉を取られて、飛車を取り返す 後手後手言わんで玉方かな。 日本語でもこれだけバグが出る、、、
97 : コチコチコッチン、ボドゲーさん ................、動いてる にーにの角と、はーちはちの角が こんにちは、さようなら ちくたくコッチン角交換 「最強」もり上がっているな、、、わが道を行く、、、
98 : まずは頑張れー。 あまり盛り上がるとあちらでは板違いなりそう。 まだゲーム関連ではおまいら最強の2スレッドだけなんでいいが…
99 : お、訪問者だ。誰も来ないと思って、のんきに替え歌なぞ歌って失礼しました。 ちらかっていますが、、
100read 1read 1read 100read TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
C言語×ダンジョン×学園なゲームを創りたいスレ (752)
ゲームシナリオを作る時に何を考える? (346)
HSPでRPG作ろうぜ (421)
総合発表&雑談スレッド その3 (948)
むしろjavascriptでゲーム作ろうぜ (693)
■ ゲーム製作技術板雑談スレ01 (285)
--log9.info------------------
沖縄のスケーターは気合いが違います (245)
初心者が一ヵ月で縦コーン越え。 【VOL.2】 (507)
★岡山のスポーツパークテどうですか★ (339)
【バンブー】Loaded〜ローデッド【フレックス】 (759)
INDEPENDENT TRUCK★2 (578)
お前等が履いてるデニムってどれよ? (339)
【NEW】キャップ【ERA】 (299)
スス板@X板 (721)
【岡山】 広島sk8 part9 【岡山】 (400)
【京都】スケートボードかかってこんかい!【何でも】 (885)
☆over30!! X-オヤジスレッド2☆ (681)
【FLS】フリーラインスケート Freeline Skates (209)
東京のスケートスポット part2 (901)
【freestyle】 フリースタイル sk8 vol.3 【スケボー】 (487)
プール・ボウル (438)
ヘルメット☆プロテクター (215)
--log55.com------------------
B U N D E S L I G A ・ド イ ツ代表 158
Newcastle United FC 武藤嘉紀 Part23
Getafe CF 柴崎岳 Part17【待機中】
□■□■☆JUVENTUS 312☆■□■□
セリエAを見るぞ!No.181
BLUEMOONマンチェスターシティ 288cityzens
◆◇El Blanco Real Madrid 966◇◆
そろそろ歴代ベスト100を決めようぜ Part24