C言語で素晴らしいオ ..
[2ch|▼Menu]
159:デフォルトの名無しさん
04/12/11 07:12:28
>>113
やってみたいのでもう一回ソースでいいのでアップしてくれませんか?

160:デフォルトの名無しさん
04/12/27 19:23:42
>>157
自作プログラム改良の参考にしようと買ってみた。
添付プログラムと対戦させたら、20石以上差をつけて俺のが勝った。
K成→T大というエリートコースまっしぐらの人の書いた本が、
こんなレベルが低いなんて信じられない。

161:デフォルトの名無しさん
04/12/27 19:31:51
>>130
EasyAI vs 俺の・・・7-57
俺の vs EasyAI・・・50-14

評価関数が良いけど探索が遅い、ってのよりは、
評価関数が悪くても探索が速いほうが、強いことが多い気がします。

162:デフォルトの名無しさん
04/12/29 15:47:44
>>160
本ってのは、対象読者のレベルに合わせて書かれるものだ。

163:122
05/01/07 23:35:44
つえーな。おい。
対戦見てみたいのでUpしてくれませんか。

164:163, 122
05/01/07 23:37:25
すまん。
>>161
と書くのわすれたうえにあげてしまった。

165:デフォルトの名無しさん
05/01/19 10:12:08
今頃追いついた。
>21をやってみた。
#getch()はcygwinで見つからなかったので。
○○○○○○○○
○●○○○○○○
○●○○○○○○
○●●○○○●○
○●●●○○●○
○○○○○○●○
●●●●●●●○
○○○○○○●○
単純な割りに、それなりに打ってくるから楽しい。
#逆ルールリバーシは前に作ったがn88basic@pc98だ。

166:
05/01/28 13:41:30
↓をみてオセロ作ったんですけどこれを左右上下つなげてトーラス状にするにはどうしたらいんでしょう?
URLリンク(www.geocities.co.jp)

167:デフォルトの名無しさん
05/01/28 19:49:33
ABCDEFGH
O+++++++ 1
+++++++O 2
++++++++ 3
+++++O++ 4
++++O+++ 5
+++O++++ 6
++O+++++ 7
+O++++++ 8

みたいなときに、
G3にXを置くとこの絵のOの位置は
全部Xにならないといけないよね。

168:デフォルトの名無しさん
05/02/19 16:43:49
8で割った余りを座標に使えばよい

169:デフォルトの名無しさん
05/02/20 02:04:33
ところで、オセロの白と黒の配置って、何種類あるの?

170:デフォルトの名無しさん
05/02/20 04:50:58
さあ。ルールに沿って計算してみたら?
生きている間に計算おわるかはわからないが。

171:デフォルトの名無しさん
05/02/20 07:44:13
高々有限個だ

172:デフォルトの名無しさん
05/02/26 15:26:11
とりあえず3の60乗以下だな。

173:デフォルトの名無しさん
05/02/27 00:54:58
>>172
回転したパターンを省くと1/4になるよ。
でも最初の4駒も後から反転することを考えると ×2^4。

174:デフォルトの名無しさん
05/02/27 01:00:12
対角線で反転させれば減らせそう

175:デフォルトの名無しさん
05/03/05 02:34:09
でも、やっぱり焼け石に水

176:デフォルトの名無しさん
05/03/13 01:25:00
だよねぇ

177:デフォルトの名無しさん
05/04/09 15:16:01
java言語で少し作ってみたんだけどPEN4/2.59GHzのマシンで、
17−8万手/毎秒くらいしか読めない。
評価関数は駒数と打てる箇所の数しか調べてないのに。
やはりJAVAでは無理があるのか。。

178:デフォルトの名無しさん
05/04/11 13:12:17
ゴセロ

179:デフォルトの名無しさん
05/05/04 03:02:18
6行オセロに触発されて、5行オセロに挑戦したが、
5行半で力尽きた、やるせない思い出が…

180:デフォルトの名無しさん
05/05/18 17:36:19
┏━━━━━━━━━┓
┃┌─┬─┬─┬─┬─┬─┬─┬─┐┃
┃│★│#│☆│  │  │☆│#│★│┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│#│#│  │  │  │  │#│#│┃
┃├─┼─┏━━━━┓─┼─┤┃
┃│☆│  ┃☆│  │  │☆┃  │☆│┃
┃├─┼─┃─┼─┼─┼─┃─┼─┤┃
┃│  │  ┃  │■│■│  ┃  │  │┃
┃├─┼─┃─┼─┼─┼─┃─┼─┤┃
┃│  │  ┃  │■│■│  ┃  │  │┃
┃├─┼─┃─┼─┼─┼─┃─┼─┤┃
┃│☆│  ┃☆│  │  │☆┃  │☆│┃
┃├─┼─┗━━━━┛─┼─┤┃
┃│#│#│  │  │  │  │#│#│┃
┃├─┼─┼─┼─┼─┼─┼─┼─┤┃
┃│★│#│☆│  │  │☆│#│★│┃
┃└─┴─┴─┴─┴─┴─┴─┴─┘┃
┗━━━━━━━━━┛

★>☆>無印>#の順に(優先的に置く、自分の色に変える)

181:デフォルトの名無しさん
05/05/18 17:43:33
(あとは4分割した4×4の場所だけで相対的に総当りさせて計算させる程度でいいんじゃない?)←ここももうちょっと場当たり的じゃなく規則性をみいだせるかも
その後候補がいくつか挙がったら初めて自分の色をより多く増やせる場所を選ばせるとか

182:2chに囲碁・オセロ板が出来ました
05/05/21 21:57:15
前は囲碁・将棋板の中で細々とやってたけど、板分割で正式にオセロ板が!
まだ人口が少なくあまり盛り上がってないので、みんな キテ━━(゚∀゚)V━━ !!

囲碁・オセロ
URLリンク(game9.2ch.net)
オセロ 雑談・雑学・質問総合スレッド 第8局
スレリンク(gamestones板)

183:デフォルトの名無しさん
05/07/01 21:07:10
今月のCマガジンでリバーシ大会やってるぞ

184:デフォルトの名無しさん
05/07/03 22:29:29
>>183
とりあえず作ってみた
暇な人誰か対戦しようよ

185:デフォルトの名無しさん
05/07/06 18:21:43
>>183
ようやくdllが作れるよーになったトコ。
あと10日強で完成するんかなぁ・・・

186:デフォルトの名無しさん
05/07/06 23:34:37
オセロ作成中なんだけど定石ってのは覚えさせた方が吉?

187:デフォルトの名無しさん
05/07/07 08:42:54
>>186
うん、外部から読めるようにするとなお( ´・ω・`)

188:デフォルトの名無しさん
05/07/07 19:18:11
>>186
いや、定石なんて「固定観念」にとらわれたプログラムじゃだめ。
人間でもそうだけど、前例にとらわれず自分で考えて考え抜くプログラムが結局強いんだよ。


189:デフォルトの名無しさん
05/07/08 01:13:24
でもオセロは定石といえるものが圧倒的に強いよ
ド素人にもそれ>>180さえ尊守させれば、かなりなれた人間でもじゃんけん勝負で黒が勝つ程度になるくらい。
たまたま知らなかったのは仕方ないとして、プログラムで全てが解決するわけじゃないって事。
多少なりとも知識は必要なのだよ、ライブラリだと思えば素直に使えるだろう?

190:デフォルトの名無しさん
05/07/08 01:14:38
× かなりなれた人間でも
○ かなりなれた人間相手でも

ちなみにかなりなれた人間というのはクラスで最強程度、プロはの思考ルーチンはおそらくそれを発展させたもの

191:デフォルトの名無しさん
05/07/08 02:17:20
ふと思ったのだが、オセロで最短手数で終局する手順ってばどんなんだろう。

192:デフォルトの名無しさん
05/07/08 07:27:06
>>191
自分で作ったプログラムに誤りがなければ、9手+パス2回で11手(?)だった。
f5,f4,c3,c6,c5,d6,f3,c4,c7,PASS,PASS


193:デフォルトの名無しさん
05/07/08 10:39:05
素朴な疑問だけど、>180によると真ん中の4箇所の優先順位がないのはなんで?
#無印ってことなんかな?

194:デフォルトの名無しさん
05/07/08 10:45:05
デフォルトで石(コマ)が置いてあるからだよ
石の上から石を強制的に置けるプログラムにしてしまった場合全てのバランスが変わっちゃうし

195:デフォルトの名無しさん
05/07/08 10:58:08
>>194
「自分の色に変える」は?

196:デフォルトの名無しさん
05/07/08 11:05:03
180です
>>180
うわのびてますね!
補足すると
太線の━の内側にいる場合:太線の外側の無印が#、#に関してはさらに絶対においてはいけない、■は無印 等

かき損ねた事もありました
実際オセロはあまりやった事がないいい加減な持論なのです
僕のレスを引用してくれた人が肯定してくれたのはうれしいのですが、あまりじしんがありません

197:デフォルトの名無しさん
05/07/08 11:06:16
太線の━の内側にいる場合 ではなく 内側における場合 でした

198:デフォルトの名無しさん
05/07/08 11:06:51
ジサクジエンぽい・・


199:デフォルトの名無しさん
05/07/08 11:09:18
>>195
スマソ、馬鹿だ

200:193=195
05/07/08 11:42:19
>>180
納得。ほぼ同意。

私の自論だと、
--
・枠内(>180の┏内)におけるときは外はほぼ無視
・コーナーは取られないように死守
・自分が取るときは罠に填まらないように注意(特に最終局面は駒数次第)
・エッジは諸刃の剣(エッジで取り合いは避けたい)
・エッジの内側は安全地帯
・自分が偏らないよう相手を分断したい(手詰まり防止)
--
てな感じなんですが、さてどうプログラムに反映させたもんか…
#と思いつつ十数年も放置しているのは内緒。

201:デフォルトの名無しさん
05/07/09 05:45:30
むちゃくちゃ強いヤツだと、
簡単に、四隅取らせてくれるよ。でも勝てない。
四隅とっても意味なくされる。むしろ、わざと取らせているかのよう。
どういう評価法をつかってるんだろと思う

202:デフォルトの名無しさん
05/07/09 06:14:53
その通り、わざと取らせている。

確か、壁際に4つ同じ並びになるのは全く構わないが
□□????□□
□□○○○○□□
――――
5つ並び、かつ、はみ出してない側の壁から2つめが同色となる形は愚形となる
□□???○□□
□○○○○○□□
――――
なぜなら、この形で右下を取ると、すぐに割り込まれて
下の壁側全部と共に、左下を取られてしまうから
□□???○□□ □□???○●□ □□???○○□ □□???○●□ □□????●□ 
□○○○○○□□ □○○○○○□□ □○○○○○□○ □○○○○○●○ ●●●●●●●○ 
―――― ―――― ―――― ―――― ―――― 

この形に名前が付いている程で、強い人の間では常識なはず。
だから、他に取る場所がなくなった時に、渋々壁の5つ目を取らせるように
□□●??○□□
□□○○○○□□
――――
この形を相手に作らせるようにしているはず。
評価法は知らんけどね。

203:デフォルトの名無しさん
05/07/09 06:19:49
今調べたら、ウイングって名前だった。
URLリンク(www.google.co.jp)

204:193=195
05/07/09 09:10:19
>>202
そうそう、それ。
某オセロゲームにその手でよく嵌められて悔しいからこそのこの辺。
>・自分が取るときは罠に填まらないように注意(特に最終局面は駒数次第)
>・エッジは諸刃の剣(エッジで取り合いは避けたい)
うーむ、せめてそのリンク先のサイトくらいは読まないと強いオセロにならなさそうだなぁ。

205:193=195
05/07/09 11:03:59
連続失礼。
>202のサイトの基礎のまとめを実装するだけで、そこそこ強い気がするので引用してみる。
--
隅をとることは重要
確定石を増やすことは重要
考え無しに X 打ちをしない
単独 C 打ちは危険
打てる箇所が多くなるようにする
自分の石が内側に固まるよう努める
--
1、4は簡単として、2、5がちょっと厄介か。3は曖昧だし、6となるとどう評価関数を作るか…

206:デフォルトの名無しさん
05/07/10 01:38:42
どこかで読んだアイディアなんだが。
辺(というのかフチのところ)用の評価をする。
マス1つ1つの値を返すんじゃなくてマス8つの状態から1つの値を返すわけだ。
3の8乗だったらテーブル化も出来るだろう。

207:デフォルトの名無しさん
05/07/10 11:33:44
打てる箇所が多くなるようにする
でやってみたら何故か弱かった

後半は多く取った方がいいのかな

208:デフォルトの名無しさん
05/07/24 17:28:50
>>26のソース再うpきぼんぬ

209:デフォルトの名無しさん
05/08/01 00:42:49 BE:4827124-##
ゼブラとかもう完璧な強さじゃん。
評価関数の精度も抜群で、実質的にはもう完全解析に近い。
今さら研究対象にはならんよなぁ。

210:デフォルトの名無しさん
05/08/29 13:12:33
とりあえずBuroの論文でも読んだらいいんじゃない
実現は無理だろうけど大いに参考にはなるはず

211:デフォルトの名無しさん
05/08/29 13:52:10
>>209
ハァ?
ゼブラなんて穴突けば楽勝なんだが。

212:デフォルトの名無しさん
05/08/31 12:21:07
現在のところ世界で最も精度のよいオセロの評価関数は、
・Edax
・Saio
・Ntest
・Herakles
・Pirate
あたりだと思います。

ってmixiのコミュには書いてあった

213:デフォルトの名無しさん
05/08/31 21:51:01
国産で最強ってBooby?

214:デフォルトの名無しさん
05/09/05 20:13:19
>>26のが今行ったら落とせなくなってた、、。どなたかupキボン

215:デフォルトの名無しさん
05/09/09 17:13:00
C言語の本を一冊半読んだ程度の入門者ですが、
試しにオセロゲーム作ってみました。

敵の思考は、単なる乱数なのでとことんアホですが
最低限、ルールを忠実に守るレベルに達しただけで満足してしまいました。
みなさん凄いですね

216:デフォルトの名無しさん
05/09/10 03:11:26
一冊半読んでその内容だったら、やめてしまいなさい。

217:デフォルトの名無しさん
05/09/10 04:44:30
>>216
ん? >>215さんは、「C言語の本」を1冊半読んだのであって、オセロの思考ルーチンや
ツリーの探索の方法については、まだまだ初心者以前なんじゃないの?

つまんない煽りはやめたほうがいい。

218:デフォルトの名無しさん
05/09/10 05:13:05
Cの本1冊半ならそんなもんじゃない?
次はアルゴリズムの本にチャレンジ。

219:216
05/09/10 12:52:14
気悪い思いさせてごめん。

220:デフォルトの名無しさん
05/10/13 05:51:32
学習させたいのですが、よさげな棋譜(フリーなもの)を教えてください。

221:デフォルトの名無しさん
05/11/24 16:47:07
IOS

Logisthello

222:ハーピィ
05/12/05 02:44:10
E・∇・ヨノシ <222ゲット♫

223:デフォルトの名無しさん
05/12/06 16:21:30
黒白協力しあって、64個全て同色にするような手順はあるか?

224:デフォルトの名無しさん
05/12/06 20:44:22
いくらでもあるんじゃないの
普通に遊んでて真っ白だか真っ黒だかしたこと何回かあるけど

225:デフォルトの名無しさん
05/12/06 20:56:13
64マス全部埋めて同色ってことだと思ふ

226:223
05/12/06 21:05:33
うむ。確かにいくらでもあるね。例えば先手の黒が絶対に
白をとらないような戦略をとれば容易にできた。サンクス。

227:デフォルトの名無しさん
05/12/06 21:35:15
>>225
それで
61個とかだともっと何回もある

228:デフォルトの名無しさん
05/12/11 05:04:01
64-0 は限りなく可能

229:デフォルトの名無しさん
05/12/11 05:04:32
URLリンク(kansai2channeler.hp.infoseek.co.jp)

230:デフォルトの名無しさん
05/12/13 01:16:46
とりあえず、COMvsCOMで最も多くひっくり返せる
手を打つリバーシを作りたい。複数の手がある場合は適当に
選択。そこからだんだんと改良したい。
どんな感じでプログラムを組めばいいのか誰か解説頼む。

231:デフォルトの名無しさん
05/12/13 01:44:48
そうそう、そんな感じ

232:デフォルトの名無しさん
05/12/13 14:59:11
>>226
白を取れるときは取るのがルール。
取れなければそこで試合終了です代。

233:デフォルトの名無しさん
05/12/13 18:58:23
>>232
黒が白を取れなくても試合終了にはならない。
両者がどこにも置けなくなった時点で試合終了。

234:デフォルトの名無しさん
05/12/13 20:30:45
>>26>>38の再うpキボン

235:デフォルトの名無しさん
05/12/13 20:54:35
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)


236:デフォルトの名無しさん
05/12/15 20:25:11
>>235
> URLリンク(kansai2channeler.hp.infoseek.co.jp)
うほっいいソースコード…
盤面はこれを使わせてもらおう

237:デフォルトの名無しさん
06/02/05 02:04:11
Zebraに勝てとは言わないけど、せめてThell程度は倒せるプログラムを書こうぜ

238:デフォルトの名無しさん
06/04/02 23:01:11
>>230
プログラムは、Bookにでているような最善手には強い。
ちょっとはずしたところが弱い。
Bookからちょっとはずしたところで逆転して勝つというプログラムを作ればよい。
石差の評価関数が偶数でなく、奇数になるくらいのところ。
Zebraはかなりこの辺が弱い。



239:デフォルトの名無しさん
06/04/03 22:59:59
URLリンク(www.uploda.org)
オセロ作ってみました。アルゴリズムは適当。
変なとこあったら指摘お願いします。

240:デフォルトの名無しさん
06/04/04 17:51:42
>>239
流れた・・・
再うpおねがいします

241:239
06/04/04 21:44:50
URLリンク(up.spawn.jp)

再うpしました。

242:デフォルトの名無しさん
06/04/13 07:45:50
BOOK中心に作れば強いプログラムはできる。
ZEBRAなんかのBOOKは正確じゃないところがあり、もっといいBOOKを使用すれば強くなる。

243:デフォルトの名無しさん
06/04/15 23:22:05
どうやったらそういう手の込んだものが作れるんですか?
自分も多少Cの知識がありますが、どこでどの関数を使ったり、なぜifだの
do whileだの使ったりするのかが分かりません


244:デフォルトの名無しさん
06/04/16 01:14:08
正直、
>どこでどの関数を使ったり、なぜifだの do whileだの使ったりするのかが分かりません
のレベルでは
>自分も多少Cの知識がありますが、
こんなこと言うのは烏滸がましい。

245:デフォルトの名無しさん
06/05/13 22:10:19
1ヶ月近くレスがないわけだが、まだ開発してる人は見ているのかな?
他のコミュニティもあるし今更2chでやることもないのか。

246:デフォルトの名無しさん
06/07/14 12:57:01
全部未経験だがネット対戦できるオセロでも作るか
オセロの部分は他のソフトから持ってくるけど


247:デフォルトの名無しさん
06/07/15 10:58:12

main thread ウィンドウの処理
port thread 接続待機スレッド
access thread 一時アクセス用スレッド
battle thread 対戦中に通信するスレッド

こんな感じでいいのかな?スレッドも初めて使うけどw



248:デフォルトの名無しさん
06/07/15 13:10:51
オセロって関西だよね
パイレーツもかわいかったよね

249:デフォルトの名無しさん
06/07/18 14:18:41
w

250:デフォルトの名無しさん
06/07/27 14:40:00
x

251:デフォルトの名無しさん
06/08/06 23:39:28
みんなすげー。当方しがない高専生でCは教科書終わったところなんだけど人対人で最低限ルールを守るくらいのしか作れない。みんな実務経験あるんですか?

252:デフォルトの名無しさん
06/08/07 12:50:41
>>251
まあ、さすがに実務でオセロのエンジンを開発している人は
いないだろうけどね。っていうか、そんな仕事ないし。

> 人対人で最低限ルールを守るくらいのしか作れない

いやいや。それが一番大事な部分だよ。
プログラムが「ここはコマを次に打っていい場所」って
きちんと判断できないことには、ゲームが成立しないんだから。

打っていい場所を判別できるプログラムがあるなら、たとえ弱くても
人間相手に対戦できるプログラムを作るのは簡単だよね。極端な
話、盤の端から調べていって、最初に見つけた「コマを置いていい場所」
にコマを打つというプログラムでも、とにかくゲームにはなる。
もちろん、そんなんじゃまるで勝負にならないけど。

次の手としてどこを選ぶのがいいか? という点については、
ネットなり書籍なりで少しずつまねていけばいいよ。

>>157 で既出だけど、こんな本がある。

リバーシのアルゴリズム C++&Java対応
 ―「探索アルゴリズム」「評価関数」の設計と実装
URLリンク(www.amazon.co.jp)

253:デフォルトの名無しさん
06/08/11 23:39:58
>>251
経験無くても組めると思うけど
そんな、俺はしょぼい大学生
Cの講義と、C++の本でもある程度は組めるよ
でも、239氏のとか見てると感動する

254:デフォルトの名無しさん
06/08/20 16:34:29


 ------------------------
 |リバーシ2ch   _□×|
 ------------------------
 |メニューバー     |
 ------------------------
 |           |
 |   ●○●     |
 |      ●    |
 |           |
 |           |
 |           |
 ------------------------
 | お前が弱いな(緑)  |
 | オマエモナー(赤)  |
 ------------------------
 | 送信するメッセージ |
 ------------------------
 |対戦中 あなたの番です |
 ------------------------

こんな感じのリバーシ作ろう思うんだけど
まだないよね?

255:デフォルトの名無しさん
06/08/20 16:48:00
(緑)(赤)ってポケモンかよ

256:デフォルトの名無しさん
06/08/20 17:03:52
239氏のやつを再うpしてはもらえまいか

257:デフォルトの名無しさん
06/08/20 21:09:56
単純にCでプロンプト上で動くオセロはできたけど
>>254みたいなGUIなオセロ作るにゃ何がいるんだ?

258:254
06/08/21 08:23:25
未完成だがこんな感じ

pass 2ch
URLリンク(japanese-truth.hp.infoseek.co.jp)

このオセロのソースは他からの流用ね


259:254
06/08/21 08:28:45
今できるのはコンピューターとの対戦のみね(これもパクリだけど)

これからネットワーク部を作りたいんだけど
IPアドレスをなんかでやりとりしてそれを入力して対戦する感じに
仕様と思うんだけどどう?

260:デフォルトの名無しさん
06/08/21 12:38:47
いいんでないの?


261:260
06/08/21 12:39:50
お前 >>247 なの?
>>247のレスは馬鹿げてるからな!



262:デフォルトの名無しさん
06/08/21 13:30:08
リバーシみんなオンラインとかいうのがあるけど
これとは違うの?


263:jyo
06/08/21 13:47:30
誰が教えって下さい。お願い致します。
計算トレーニングプログラムを作成したいですが?
計算は、足し算、引き算、掛け算、割り算を選択する。
桁数は1桁、2桁をはじめに選択する。
計算式の数値はランダムで表示する。
計算式及び、答えを配列に保存し、終了後に全て計算式と答えを表示する。
問題は10問とする。
そのときの点数を表示する。
結果表示の時、一緒にかかった時間も表示する


264:デフォルトの名無しさん
06/08/21 15:12:00
>>263
日本語でok

265:258
06/08/21 15:34:49
で今迷ってるのは 掲示板でIPアドレスをやり取りして戦うのか
サーバーを用意して自動で取得するのかどっちかなんだよな

リバーシみんなオンラインもサーバーを使ってるけど
それじゃp2pの意味がない。

無料サーバー使うわけにもいかないしなw


266:デフォルトの名無しさん
06/08/22 02:42:58
daichatとか言う名前のp2pのチャットソフトがあるから見てみたら?
場合によっては、プロトコルをそのまま使えるかもよ。

267:デフォルトの名無しさん
06/08/22 10:04:41
>>266
258ではないが検索しても見つからんぞ
URL教えて栗

268:266
06/08/22 23:55:19
>>267
ゴメン、確かに見つからない。
漏れのディスクのバックアップ中からも見つからないからどこから入手したか判らないや。
#何度かディスクを飛ばしているから、ロストした可能性が高いと言えば高いのだが。

269:デフォルトの名無しさん
06/11/08 03:56:10
使うとよさそうな技法のキーワード
・BitBoard
・MTD(f)
・Mobility
・パターン
・パリティ
・ブック
・Move Odering
・MPC
・WLD Solve

270:デフォルトの名無しさん
06/11/09 02:43:45
>>269
揚げ足取りじゃないけどMove Orderingね。

読んで参考になるソース
URLリンク(www.radagast.se)
URLリンク(othellogateway.com)

271:デフォルトの名無しさん
06/12/15 22:38:02
どなたかこちらで一緒にオセロiアプリを一緒に作りませんか?
スレリンク(tech板)
興味があれば是非。

272:デフォルトの名無しさん
06/12/15 23:03:33
一緒にがかぶってた

273:デフォルトの名無しさん
07/02/02 20:59:24
スレリンク(tech板)

274:デフォルトの名無しさん
07/02/20 01:20:51
オセロ奥深杉wwwwwwwww
Thellの強、強+に勝てねーwwww

275:デフォルトの名無しさん
07/02/21 22:23:05
C++でつくってみますた。
開発環境はVC6。
ソース綺麗にするつもり無いです。

ここの
URLリンク(kasamatusan.sakura.ne.jp)
1MB
ichi76063.zip
zipパスは「mu」

276:デフォルトの名無しさん
07/02/21 22:33:14
途中で打てなくなる事があるが。

277:デフォルトの名無しさん
07/02/21 22:35:14
>>276
まじすか。打てる場所がなくなったんじゃなくて?

278:デフォルトの名無しさん
07/02/21 22:35:58
ちなみにルールでは初期配置はこれで黒が先手。
○●
●○


279:デフォルトの名無しさん
07/02/21 22:37:05
打てる場所はある。
盤上に打てる場所のマークもある。
しかし入力を受け付けないようだ。

280:デフォルトの名無しさん
07/02/21 22:40:35
半角で x△y(△=半角スペース)の書式で入力しないとバグります。

281:デフォルトの名無しさん
07/02/21 22:40:59
あれ?同じ進行を打ったら今度はちゃんと石が返った。

282:デフォルトの名無しさん
07/02/22 06:21:37
自分もオセロプログラム作っててそこそこ強くなったから
ここで公開しようかなと思ったけどC言語じゃなかった。

283:デフォルトの名無しさん
07/02/25 12:35:16
作ったプログラムを対戦させたらおもしろいかも(・∀・)

284:デフォルトの名無しさん
07/03/17 10:04:27
保守

285:デフォルトの名無しさん
07/04/26 18:26:26
あげあげ

286:デフォルトの名無しさん
07/06/17 15:10:35
あげ

287:デフォルトの名無しさん
07/06/17 16:45:33
素晴らしいをもう一度定義しなおすんだ

288:デフォルトの名無しさん
07/07/02 00:46:08
あげ

289:デフォルトの名無しさん
07/07/20 20:24:53
あげ

290:デフォルトの名無しさん
07/07/25 19:18:26
239さんの再うpしてほしい

291:名無しさん@そうだ選挙に行こう
07/07/29 18:49:34
239さんの再うpしてほしい

292:デフォルトの名無しさん
07/08/12 01:11:55
誰かうpしてくれ

293:デフォルトの名無しさん
07/08/18 15:00:33
/

294:デフォルトの名無しさん
07/08/18 17:16:41
だれかうp

295:デフォルトの名無しさん
07/08/18 17:18:28
もっと強いのうpしようか?

296:デフォルトの名無しさん
07/08/18 17:20:48
wktk

297:デフォルトの名無しさん
07/08/18 17:28:16
どぞー
URLリンク(radagast.se)
GCCやMinGWでコンパイルできる
VC++だと少し書き換えが必要
あとzlibが必要
動かすには↓に同梱されてるbook.binとcoeffs2.binが必要
URLリンク(radagast.se)

298:デフォルトの名無しさん
07/08/19 15:49:08
コンパイル出来んぞー!
gccだけでなく、gmakeも必要じゃん。
しかも「dir.hが無い」って言われた。
ANSIやISO規格にそんなん無いだろ。
もしかしてWin?

ちゃんとしたPOSIX規格の環境でmake
通るようにしる!


299:デフォルトの名無しさん
07/09/03 09:13:43
>>298
ビルド環境を書いたら?


300:デフォルトの名無しさん
07/09/17 05:12:20
誰か>>297を使えた人居る?

301:デフォルトの名無しさん
07/09/17 07:20:15
URLリンク(www.freewebs.com)

302:デフォルトの名無しさん
07/09/17 20:59:44
>>300
居る


303:デフォルトの名無しさん
07/09/18 07:55:56
どうだった?
強い?

304:デフォルトの名無しさん
07/09/18 12:54:09
>>303
≒wzebra

305:デフォルトの名無しさん
07/09/30 09:43:07
ほっしゅん

306:デフォルトの名無しさん
07/11/07 19:48:53
最強のプログラムは何?

307:デフォルトの名無しさん
07/11/18 04:06:30
>>306
総合力ではSaioだな。

上位の面子は2年程前(>>212)とほとんど変わってないな。

308:デフォルトの名無しさん
07/11/19 12:46:09
1 すばらしいオセロとは最強のオセロなのか?
最強のオセロプログラムは人間では全く歯が立たないのでNO

309:デフォルトの名無しさん
07/11/26 20:12:18
>>26
の改正版の再うpして頂けませんか?どなたか持っていませんかね

310:デフォルトの名無しさん
07/11/27 15:49:18
お前らがうpしてくれないからオレが最初から作ってみるから協力するんだぜ

311:デフォルトの名無しさん
07/11/27 16:38:34
>>310
すまんね 俺も>>26は持ってないんだ
協力するよ

312:デフォルトの名無しさん
07/11/27 16:58:39
どうせなら64bitCPU最適化版を作らないか
64bit×2のbit boardで

313:デフォルトの名無しさん
07/11/30 05:32:01
>>312
64bitのbit boardなら既にMMXで実現されてないか?

314:デフォルトの名無しさん
07/11/30 10:20:45
だとしたらそれが何か?

315:デフォルトの名無しさん
07/11/30 15:16:01
土日になったら作り始めるから、おまいら頼みますよ。
入門書卒業の専門情報処理科だから綺麗な物は作れないけど

316:デフォルトの名無しさん
07/11/30 15:25:00
>>315
最低でも人間の世界チャンピオン以上を目指すなら協力するよ

317:デフォルトの名無しさん
07/11/30 15:57:12
>>315
おー、頑張れ。

318:デフォルトの名無しさん
07/11/30 16:08:03
>>315
老若男女誰でも楽しめる、ほのぼのとしたオセロを作り上げてほしい

319:デフォルトの名無しさん
07/12/01 19:24:55
>>316
頑張ります。中級者レベルになってみせますので僕に力を
>>317
はい
>>318
最強と最弱のLv設定を出来るようにしてみたいですね
とりあえずは先手は決まってる状態から作ってみて完成出来たら
それぞれ機能を追加して行くというのが理想です。

やってみたら難しくネット上のソース読んでるだけで一日が終わってる・・・
>>26
┏━┯━┯━┯━┯━┯━┯━┯━┓
1┃  │  │  │  │  │  │  │  ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
2┃  │  │  │  │  │  │  │  ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
3┃  │  │  │  │  │  │  │  ┃

これ表示したかったけれど、盤の操作する関数が難しくなりそうなので
オレにはLvが高すぎる気がしてきた

320:デフォルトの名無しさん
07/12/02 09:03:54
>>319
難しくはならないよ
まず長さ91もしくは100のint配列を用意して各マスの状態は空き:0、黒:1、白:2、壁:3で表す
この配列の表す盤面を画面にプリントする関数を作れ

321:デフォルトの名無しさん
07/12/02 18:32:47
>>320
少しづつ出来てきたのでそれをうpするので、応用すれば表示出きるかYES/NOで
暇なときでいいですので答えて頂けませんか。
引き続き勉強行ってきます。

レス有難うございます

322:デフォルトの名無しさん
07/12/03 00:44:39
ほい
がんばれ

323:デフォルトの名無しさん
07/12/03 02:59:21
な、、何か・・・何か>>26と違うんだ・・・

すばらしいオセロの表示
URLリンク(kansai2channeler.hp.infoseek.co.jp)

324:デフォルトの名無しさん
07/12/03 04:35:27
そりゃ違うだろ

for(x=1; x < 9; x++){
state = getStone(pBoard,x,y);
switch (state) {
case NONE: stone = '.';break;
case BLACK: stone = 'B';break;
case WHITE: stone = 'W';break;
default: stone = 'E';
}
printf("%c",stone);
printf(" │");
}


for(x=1; x < 9; x++){
state = getStone(pBoard,x,y);
switch (state) {
case NONE: printf(" "); break;
case BLACK: printf("●");break;
case WHITE: printf("○");break;
default: printf("変");
}
printf(" │");
}

325:デフォルトの名無しさん
07/12/03 08:15:41
>>324
盤の表示だけは完成しました。あとは動きそうかな?程度に完成したあと
AI等実装していってみます。レス有難うございました。

326:デフォルトの名無しさん
07/12/03 10:34:47
盤は壁無しでやったのか
壁を省いた理由は何かあるの?

327:デフォルトの名無しさん
07/12/03 10:39:01
initBoardとgetStoneもちょっとおかしいな

328:デフォルトの名無しさん
07/12/03 12:33:39
>>326
気になって調べたのですが、壁があると着手状態のなんたらがやりやすい
みたいなのがあったので壁作る事にしました。

>>327
確認できた限りでは初期化の仕方間違ってる気がしたので壁ありで直しました
getStoneに関しては日本語の意味の間違いに気づき修正を

一通り出来たので次の工程にもう行くぜ!
URLリンク(kansai2channeler.hp.infoseek.co.jp)

329:デフォルトの名無しさん
07/12/03 13:55:13
>>328
5389.txtを見ての感想
Boardの配列[10][10]という宣言では添え字は[0〜9][0〜9]を指定します。
紙に書くと判り易いと思いますが、座標ズレが発生しています。

330:デフォルトの名無しさん
07/12/03 14:09:58
>>329
ばーか。

>>328
折角壁のスペースを確保しているのに、壁を無視して配置している希ガス。

331:329
07/12/03 14:22:10
>>328
URLリンク(kansai2channeler.hp.infoseek.co.jp)

332:デフォルトの名無しさん
07/12/03 14:29:39
>>328
ほらよ。
URLリンク(kansai2channeler.hp.infoseek.co.jp)

333:デフォルトの名無しさん
07/12/03 15:57:19
縦軸も横軸も数字になってるけど、普通は片方を
アルファベットにするもんだよ。

334:デフォルトの名無しさん
07/12/03 16:21:13
BOARDSIZEをdefineしてるのに10は決め打ちという不思議

335:デフォルトの名無しさん
07/12/03 17:07:43
>>329-331
こんなにミス、無駄がある現実・・・
配列を全部書くとイメージが凄いしやすいんですね。>>331のtxt頂きました有難うございます。
>>332のstaticとか縁の無い関数でしたが今少し使い道が分かった気がしました。
配列の初期化の方法でこういう方法がありましたかw参考になりました。
指摘コメントまで有難うございました。

>>333
列をアルファベットにするのが一般的っぽいので書き直す事にします
>>334
そこも直した方がいいみたいですね。ですがBOARDSIZEにしたら逆に見た目で
判断しずらくなったので長ったらしくなるまで少しの間数字にしておこうか迷う

336:デフォルトの名無しさん
07/12/03 17:55:31
>>335
オセロの派生版を作る野望がホンの微かでもないなら、8の決め打ちでもいいんじゃね?
BOARDSIZEを7にしたらどうせ同じルールじゃできなくなるわけだし。

337:デフォルトの名無しさん
07/12/11 14:49:59
>>335
最近は進んでるかい?

338:デフォルトの名無しさん
07/12/14 02:48:51
すいません、PCが壊れてしまい修理してました…。やっと戻ってきて再開できそうです。
派生盤等は現状で自分には考えられませんので決め打ちにしてみます。
PC戻ってきてもOCN規制で2chに書き込めず携帯から2ch発見しましたw
やれなかった分追い込みます。

339:デフォルトの名無しさん
07/12/15 03:14:44
プログラム初心者だが俺も作ってみようかな

340:デフォルトの名無しさん
07/12/15 03:18:28
がんばれ
協力するよ

341:339
07/12/15 08:44:36
332を参考にして交互に打てるのを作ってみました。
URLリンク(www.vipper.org)

かなり時間かかった。
とりあえず寝よう。。。

342:デフォルトの名無しさん
07/12/15 09:33:49
お疲れさん

343:デフォルトの名無しさん
07/12/15 10:24:16
>>341
勝手にアドバイスさせてもらうと、
isPlaceable() 内のdx, dyを
dx[] = {-1, 0, 1, -1, 1, -1, 0, 1};
dy[] = {-1, -1, -1, 0, 0, 1, 1, 1};
とすると、ループで書ける(x+dx[i]*count の形で表せる)のですっきりするよ。
同様にplace() も簡潔に書けると思う。

344:339
07/12/18 00:58:47
>>343
なんとかループに直すことができました。
あと、とりあえずランダムに打つAIをのっけてみました。

URLリンク(www.vipper.org)

次は適当な評価関数を作ってMinMax法を実装してみようと思います。

345:デフォルトの名無しさん
07/12/18 01:03:45
>>344
盤面はどうやって戻すつもり?

346:339
07/12/18 01:48:53
>>345
差分(打った場所、引っくり返した場所)を取っておこうかと思うのですが
はたしてこのままでいけるのかどうか実はよくわかってないです・・・

347:デフォルトの名無しさん
07/12/23 14:21:20
俺も大昔プログラミングの勉強する時にオセロを作ったよ。
作りこんでいくと遊び感覚でプログラミングの基本が勉強できるから良い課題だと思う。
中級を目指すなら、そのうち以下くらいは挑戦してみては? (今は意味不明かもしれんが・・・)

ポインタ→各種関数へのデータの引渡し
構造体→各種状態の保存
共用体→汎用関数からのステータス
ツリー構造→着手進行から高速サーチ可能なBook
再帰呼び出し→MinMax探索(αβ探索)
線形リスト→探索関数内での空マス保持リスト
ハッシュテーブル→探索局面の置換表
ソート→Move Ordering

F/W開発するハードエンジニアには、

ビット操作(含むMMX)→ビットボードによる高速化
同時実行率の高いコードの作成→処理の高速化
CPUキャッシュヒット率の高いコードの作成→処理の高速化

なんかも面白いと思う。

モンテカルロ法とか使って囲碁のプログラム書くのも良いけど、
基本の勉強にはオセロの方が色んな意味でわかり易い。

348:デフォルトの名無しさん
07/12/23 14:31:25
むりやり勉強とオセロを結びつけなくて良いよ

349:デフォルトの名無しさん
07/12/23 14:39:26
ど素人乙

350:デフォルトの名無しさん
07/12/23 17:29:24
モンテカルロ法はマルチスレッドの入門にいいかも

351:デフォルトの名無しさん
07/12/24 04:18:33
ニューラルネットワーク→葉局面評価関数

352:デフォルトの名無しさん
08/01/16 03:59:48
オセロ作るのにスタックを用いてるソース等見るのですが
スタックのがいいのですかね?

353:デフォルトの名無しさん
08/01/16 04:06:50
すいませんageてしまった

354:デフォルトの名無しさん
08/01/16 05:47:39
>>352
スタックを用いるといいのは盤面をintか何かの配列で表現するとき。
bit boardで表現するときは盤面全体をコピーしたほうがいいからスタックは不要。

355:デフォルトの名無しさん
08/01/16 06:04:20
>>354
配列で表現してみた方が自分にはイメージしやすいので、スタックを考慮して考えてみる事にします
レスありがとうございました!

356:デフォルトの名無しさん
08/01/20 02:47:48
論理的にしらみつぶしで先読みするタイプのものではなく
実際に対戦してみて経験を積むようなプログラムって
どのように書けばよいのでしょうか

357:デフォルトの名無しさん
08/01/20 05:09:44
>>356
強化学習が当てはまるけど
それぞれ独立した手法で通常は併用されるもの

358:デフォルトの名無しさん
08/01/20 05:40:58
強化学習はの実装はこれがわかりやすい
URLリンク(www.vector.co.jp)

359:デフォルトの名無しさん
08/01/20 10:03:16
宣伝乙

360:デフォルトの名無しさん
08/01/21 01:25:32
Cプログラマ必須テキスト!

URLリンク(mori.eco.to)


361:デフォルトの名無しさん
08/01/23 00:02:55
強化学習面白いな
確かHeraklesも使ってるんだっけ

362:デフォルトの名無しさん
08/01/27 06:19:42
AIを実装しようと挑戦中なのですが、MiniMax法について質問させて頂きます。

先手、後手ともに最善の手を取った場合を数手先読みし最善の場所を
決めるのがMiniMax法ですよね?
いざ実装してみようと試みたのですが最善手を評価する際のMAXとMIN
を以下のようにしたのですが、このようなやり方はダメな例ですか?

まずBord[10][10]というメインとなるボードと、それとは別に8*8の盤面にあらかじめ
数値を入れた盤面 (この数値の差分から数手先の最善手を決める) を用意しようと
考えています。

363:362
08/01/27 06:37:24
すいません何言ってるか分からないですよね。とりあえず>>362の方法で作ってみます
その上でどうか尋ねてみます。

364:デフォルトの名無しさん
08/01/27 09:43:00
MinMax法やばす・・・難しすぎるんだけど
とりあえずMiniMax法を作る上でのコツか何かありませんか

365:デフォルトの名無しさん
08/01/27 10:44:34
NegMax の方が実装は楽だが,minmax が作れないんじゃ一緒だろうねぇ.肝の部分は再帰使って数行で書けるんだけど.
プログラム例が載ってる本でも買えば?

366:デフォルトの名無しさん
08/01/27 10:45:23
int minmax (int min, int max)
{
for (i = 0; i < n; i++) {
move (i);
v = -minmax (-max, -min);
undo ();
if (v > max)
return v;
if (v > min)
min = v;
}
return min;
}

今30秒くらいで書いたけど基本はこれだけだと思う

367:デフォルトの名無しさん
08/01/27 11:30:57
>>365
ネット上の読み物で出来たらいいんですが、買うことを考えるべきですかね・・・
>>366みてみるとundoとかいう機能を作りずらい作りになってしまっている予感です
ネット上の拾いものからその行程が出来ないか試してみます
参考例ありがとうございました

368:デフォルトの名無しさん
08/01/27 15:40:51
書籍購入を躊躇うようなら、その程度ってこった。

369:デフォルトの名無しさん
08/01/27 15:46:51
NegaMax、MinMaxくらいならネットの説明だけでも十分すぎる。
まじで。

370:デフォルトの名無しさん
08/01/27 19:02:14
そんな脳を俺に下さい・・・

#define BOARD_SIZE 8
int Board[10][10];

自作関数1: ・x と y の座標を引数に貰い、Board[x][y] ( A1と打ったならば x = A(1)、y = 1 )
         について8方向を調べたあと置ける場所があるならばその場所を 返し、ひっくり返す。
        ・調べる方向は左上からy行x列方向に。
        ・手を指して次の盤面の状態にする

371:デフォルトの名無しさん
08/01/27 19:03:38
先手黒から見た評価関数の一部の例
>>366での
for (i = 0; i < n; i++) {
move (i);
v = -minmax (-max, -min);
undo ();
の部分だと思います
─────────────────────
/* ネット上の拾いものの解説 */
while( 打てる手がある ){

  @手を差して次の盤面を作る;

  Aval = minimax( 盤面, depth - 1 );       一手先を読む再帰。3手まで読んでみるつもり

  B盤面を1手戻す;
─────────────────────
/* 上記を例に作ってみた */
blackturn( int **board , depth )           2次元配列のポインタと、3手読みたいので3を貰う
{
  int val;
  if( depth == 0 ) return 評価値(盤面);

  for( y=1; y<=BOARD_SIZE; y++ ) {    盤面全部を検索し置ける場所を8*8全部調べる
    for( x=1; x<=BOARD_SIZE; x++ ) {
@     if( 自作関数1 ) {          board[x][y]に石が置けるならひっくり返してみる
        ターンを次にする;
        色を変える;
A       val = blackturn( &board , depth - 1 );

B問題点  ここの処理がスタックを用いておらず出来ません。通常どのように行って居るのでしょうか?
        長々と見ずらく申し訳ないですが伝わって頂ければ幸いです

372:デフォルトの名無しさん
08/01/27 19:56:38
石を返せることが分かってから返す際に石を置いた場所と返した場所の情報スタックに記録しておく
返した場所の代わりに方向とそれぞれの方向で返した数を記録してもいい

373:デフォルトの名無しさん
08/01/27 20:26:17
>>372
ネット上からスタックの例を見て条件満たせるよう作ってみます。
レスどうもありがとうございます!

374:デフォルトの名無しさん
08/01/27 20:26:47
もう世界一のプロが敗北してだいぶ経つんだし強さはもういらないだろ。
あとは人間との対局で統計データを取りながら
自動的にぎりぎりの強さで負けるような
ナチュラルな強さ調整機能をつけてくれ。

375:デフォルトの名無しさん
08/01/27 20:28:11
黙れ門外漢

376:デフォルトの名無しさん
08/01/27 22:15:23
>>375
お前のことか?

377:デフォルトの名無しさん
08/01/27 23:05:05
>>374>>376だよ(笑)

378:デフォルトの名無しさん
08/01/27 23:56:00
と門外漢が申しております

379:デフォルトの名無しさん
08/01/28 00:25:11
お前らこういう言い合い好きなんか

380:デフォルトの名無しさん
08/01/28 04:15:18
見るのも仕掛けるのも受けてたつのも好きだ

381:デフォルトの名無しさん
08/01/28 04:33:45
まぁそれくらいしか能が無いしな
がんばれ

382:デフォルトの名無しさん
08/01/28 06:23:57
石を返す処理って1方向ずつじゃないとダメっぽいんだな・・・
糞コード全開だぜ・・・

383:デフォルトの名無しさん
08/01/28 06:53:01
>>372の続きでスタックの質問なのですが
石を返す”場所”をスタックに書き込む処理というのは

Board[x][y]というBoardがあったとしますよね。
f5という入力の場所の記録を行う場合には
f5という数値を入れるのでしょうか?
スタックには       

             ← スタックポイントがここ
方向
石の数
場所
方向
石の数
場所(F5)       1番最初のデータ

という風に入れればいいのでしょうか?

384:デフォルトの名無しさん
08/01/28 10:14:42
>>383
これ無視して下さい。一から作り直すことにします

385:デフォルトの名無しさん
08/03/06 22:37:11
>>380
可能です。
以上。
はい、次。

386:デフォルトの名無しさん
08/03/06 23:05:43
誤爆か?

387:デフォルトの名無しさん
08/03/07 08:51:01
>>386
最近の流行


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5371日前に更新/112 KB
担当:undef