1read 100read
2012年6月プログラム145: C言語で素晴らしいオセロを作らないか? (475) TOP カテ一覧 スレ一覧 2ch元 削除依頼
***Javaのオススメ入門書*** 『創るJava』 3.0 (556)
【魔法】リリカル☆Lisp【言語】 (209)
OpenWatcom C++ (715)
【Lua】組み込み系言語総合 その5【Squirrel】 (596)
【SICP】計算機プログラムの構造と解釈 Part3 (416)
Geckoベースのブラウザを作ろう。 (919)

C言語で素晴らしいオセロを作らないか?


1 :04/06/23 〜 最終レス :12/06/23
素晴らしいものだぞ

2 :

(●3○) エェー

3 :
>>1は2進数だけで作成されたデータです。
まだ未完成なので放置してください。

4 :
中島&松島?

5 :
そういえばオセロチャンピオンがスパコンとやってまったく歯が立たなかった
ときの一言
オセロチャンピオン「神のような強さだった!」

6 :
オセロは2進数で出来ています。
●=0
○=1

7 :
>>1 がつくったらいいんじゃないか?

8 :
>>1
オリバーパーカーとオーソンウェルズのどっちに近いのをつくるのかね?

9 :
>>5
枝刈りとかケチな事言わずに
全手検索くらいしそうだもんな。
終末まで予見するのは神かも試練。

10 :
This is kusosure!!

11 :
●●○○●
●○○●●
●●○○●
○●○●○
●●○○●

12 :
>>6
まだ置いてないとこはどう表現するんだ?

13 :
11でも10101010でもすきなのをどうぞ。
>>6には1ビットとは書いてない。

14 :
オセロ板のデータ構造はどうするんだ。
状態は3つか。 白、黒、空。

15 :
>>14
もう一つ、盤面外というのもあった方がいいかも。

16 :
はみ出るの

17 :

     ('A`)(゚∀゚)
     (゚∀゚)('A`)
----------------------------
     ('A`)(゚∀゚)
     (゚∀゚)('A`)(゚∀゚)
----------------------------
     ('A`)(゚∀゚)
     ('A`)('A`)('A`)

18 :
>16
4444444444
4000000004
4000000004
4000000004
4000210004
4000120004
4000000004
4000000004
4000000004
4444444444
とかすると挟む判定がやりやすいのだ

19 :
>>18
その都度判断するのはめんどくさいんで、テーブルでやるのが良し。

20 :
15年ほど前、森田オセロのソースコードが書籍になったことがあったな。

21 :
http://pc.2ch.net/tech/kako/984/984182993.html
337 名前:トリッキーの1 投稿日:2001/08/21(火) 23:55
面白い題材が上がっていたので復帰します(笑) 7行オセロ、人間対無能AIです。
#include <stdio.h>
int p,t,a,d,c,v,i,m[90]={0},s,r[]={-10,-9,-8,-1,1,8,9,10};void k(){if(m[p]==0)
for(i=0;i<8;i++){for(c=0,v=p+r[i];m[v]==3-t;v+=r[i])c++;if(c&&m[v]==t){a+=c;v=
p;if(d)do m[v]=t,v+=r[i];while(m[v]!=t);}}}char*h="・○●\n";int main(){for(i=
1,m[41]=m[49]=2;i<10;m[i++*9]=3)m[40]=m[50]=t=s=1;for(;;a=d=0){for(p=9;p<82;++
p)k(),printf("%.2s",&h[m[p]*2]);if(a)for(d=a=s=p=8;a==8;k())t-2?(scanf("%d %d"
,&p,&i),p+=i*9):++p;else if(s)s=0,printf("pass");else break;t=3-t;}return 0;}
もはやインデントを揃えた位では元のコードが読めなくなってしまっていますが、
もしコメント付き変数名まとものバージョンを欲しい方がいれば上げます。
338 名前:トリッキーの1投稿日:2001/08/21(火) 23:58
人間の入力は、「X軸 Y軸」と半角で入力します。
置けない場所を指定した場合は再度入力してください。
X=55などの変な入力をチェックしていないので、即クラッシュします。
両者置けなくなったらプログラム終了です。自分で数えてください。
もっとも、このコンピュータは激弱ですので負けようがないとおもいますが(笑

22 :
>>21
是非頂きたいものです。

23 :
#include<stdio.h>
int p,t,a,d,c,v,i,m[90]={ 0 },s,r[]={-10,-9,-8,-1,1,8,9,10};
void k()
{
if(m[p]==0)
for(i=0;i<8;i++)
{
for(c=0,v=p+r[i]; m[v]==3-t; v+=r[i])
c++;
if(c&&m[v]==t)
{
a+=c;
v=p;
if(d)
do
m[v]=t,v+=r[i];
while(m[v]!=t);
}
}
}
char *h="・○●\n";

24 :
int main()
{
for(i=1,m[41]=m[49]=2; i<10; m[i++*9]=3)
m[40]=m[50]=t=s=1;
for(;; a=d=0)
{
for(p=9; p<82; ++p)
k (),printf("%.2s",&h[m[p]*2]);
if(a)
for(d=a=s=p=8; a==8; k())
t-2? (scanf("%d %d",&p,&i),p+=i*9):++p;
else if(s)
s=0,printf("pass");
else
break;
t=3-t;
}
return 0;
}

25 :
http://s03.2log.net/home/chbouda774/ond1.swf

26 :
ttp://up.isp.2ch.net/up/79ab1d38086e.c
作ってみますた。
画面イメージはこんな感じ↓
   1  2  3  4  5  6  7  8
 ┏━┯━┯━┯━┯━┯━┯━┯━┓
1┃  │  │  │  │  │  │  │  ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
2┃  │  │  │  │  │  │  │  ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
3┃  │  │  │  │  │  │  │  ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
4┃  │  │  │○│●│  │  │  ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
5┃  │  │  │●│○│  │  │  ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
6┃  │  │  │  │  │  │  │  ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
7┃  │  │  │  │  │  │  │  ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
8┃  │  │  │  │  │  │  |  ┃
 ┗━┷━┷━┷━┷━┷━┷━┷━┛
最強ではないけど、結構強い。
初心者が勝てない、中級者が苦戦するレベル

27 :
>>26
やってみたけど、漏れは勝てなかった。
そのプログラム、結構嫌な手を打ってくるな。

28 :
>>26
落とせない...

29 :
落とせた!

30 :
>>27
アルゴリズムは結構単純ですけど、オセロだとそれでも強くなるみたいです。
>>29
どうでしたか?

31 :
オセロって言うな!!
オセロは商標。
ラッピングテープを指して「サランラップ」
配送屋を見ればどこの配送屋でも「宅急便」
というのと同じくらい恥ずかしいこと。

32 :
>>31
ハァ?なにいってんだ?オセロはオセロだろ

33 :
どうでもいいよそんなこと

34 :
プログラム公開する時には、リバーシにしといた方がいいかもな。
面倒を避けるために。

35 :
>>31
だったら、紙を金属の芯で止める道具のことをホッチキスと呼ばずにステイプルと呼んで下さい。

36 :
オセロの発案者はあくまでオリジナルと言っている。
オセロはオセロであって、リバーシとは別物なのである。
と言ってみるテスト。

37 :
>>26
全然勝てない。俺は結構強い方で、人とオセロをやって負けたことは無かったんだが。

38 :
ttp://yam-jp.com/~nanashi/img/gogogo1289.c
オセロの名前を削除しておきました。

39 :
でもオセロってシェイクスピアの作品名を借用したもんでしょ?
そんなの商標にできるのか?

40 :
日本にシェークスピアが来ていなかったからつい・・・

41 :
ちなみに一般公開されてるオセロプログラムで最強のやつはコレだ。
ttp://radagast.se/othello/download.html

42 :
>>38
こんな短いソースで、こんだけ強いオセロが作れるんだ。

43 :
>>30
負けた。少なく返すように置いていったら、全部ひっくり返された。
よくできていますね。コード短いし丁寧に作られてますね。

44 :
へー、強いんだ。読んでみようかな。
とりあえず大雑把な戦略を教えてくれない?>>26

45 :
全日本選手権入賞経験者の私が軽くレクチャーしよう。
オセロ脱初心者講座
@中盤までは全滅しない程度になるべく少なく石を取る。
A隅の斜め隣は危険(すぐに隅を取られる)なので無闇に打たない。
 隅の隣も実はかなり危険。
B露出してる場所(隣に石が少ないマス)に無闇に打たない。
C無闇に辺を取らない(辺を取るべきか取らないべきかの判断は
 上手くならないとつかないので最初はあまり取らないと覚えておく)。

46 :
多分バグ発見。
  1 2 3 4 5 6 7 8
 ┏━┯━┯━┯━┯━┯━┯━┯━┓
1┃ │ │ │ │ │ │ │ ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
2┃●│ │○│ │ │ │○│ ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
3┃●│○│○│ │○│○│ │ ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
4┃●│●│○│○│○│ │ │ ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
5┃●│●│●│○│○│ │ │ ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
6┃●│●│●│●│○│○│○│ ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
7┃●│●│●│●│★│ │ │ ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
8┃●│●│●│●│●│ │ │ ┃
 ┗━┷━┷━┷━┷━┷━┷━┷━┛
WHITE Passed.
>6 7

47 :
  1 2 3 4 5 6 7 8
 ┏━┯━┯━┯━┯━┯━┯━┯━┓
1┃ │ │ │ │ │ │ │ ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
2┃●│ │○│ │ │ │○│ ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
3┃●│●│○│ │○│○│ │ ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
4┃●│●│●│○│○│ │ │ ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
5┃●│●│●│●│○│ │ │ ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
6┃●│●│●│●│●│○│○│ ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
7┃●│●│●│●│●│★│ │ ┃
 ┠─┼─┼─┼─┼─┼─┼─┼─┨
8┃●│●│●│●│●│ │ │ ┃
 ┗━┷━┷━┷━┷━┷━┷━┷━┛
WHITE Passed.
>
ここで6 8に打たないでパスした。
打たなかったので(4 1)と打ったら(3 1) (2 1)と進んで
次は6 8に打ってきた。

48 :
1手目からの順
(3,5) (5,6) (6,3) (2,5) (6,6) (5,3) (4,6) (7,2)
(3,4) (4,7) (3,6) (2,7) (3,7) (2,8) (1,8) (7,6)
(3,8) (2,4) (1,4) (1,5) (3,3) (1,7) (1,6) (3,2)
(2,3) (1,3) (1,2) (2,6) (4,8) (5,8) (5,7) (6,7)

49 :
>>43
ありがとうございます。
>>44
<前半>
・四つ角を最優先し、出来るだけ端を取る
・出来るだけ多く取る
<中盤〜終盤>
・出来るだけ多く取る
<最後の数手>
・全部読む
という感じです。
>>45
参考にさせて頂きます。
>>46-48
★を表示するための処理をするときに出てきたバグだと思うので、直しておきました。
ご指摘ありがとうございます。
訂正版
ttp://yam-jp.com/~nanashi/img/gogogo1291.c

50 :
>>49
相当弱いプログラムだと思われます。

51 :
>>50
>>41の最強のプログラムの深さ2と、自作プログラムの深さ5を対戦させてみたら、
自作プログラムの方が負けましたけど、人間には中級車レベルの人になら勝てると思います。
上級者だったら弱く感じるかも知れませんけど・・・。
処理が重くて(効率が悪くて)あまり深く読めないのと、隅を優先させ過ぎたのが原因かも知れません。
深さを 60 に設定すれば、必ず勝てるプログラムになります。
その代わり、宇宙が終わるまでに計算が終わりませんけどw
>>45さんの戦略をプログラムすれば強くなると思います。

52 :
序盤は
・隅を狙う
・自分の打てる手数が多くなる手を打つ
だけでいいんじゃないのか?

53 :
隅の斜め隣は打たないってしたほうがいいと思う。
>>48のでもいきなり打ってるから。

54 :
>>52
序盤で隅を狙うのはよくない

55 :
>>53
打っても問題ない(打った方が良い)ケースもあるから、
ただ打たないっていうアルゴリズムは良くない。

56 :
序盤は思考しなくて定石通りに打てばいいと思うけど、
オセロの定石集とか、売ってあるのだろうか?

57 :
ネットで探せばいくつかデータはあったと思うけど。
著作権的に流用しちゃっていいものかどうかは不明。

58 :
>>49
コードがコンパクトにまとまっていていいですね。
オレはそんなに思考系は詳しくないんで質問なんですが、
オセロでMin-Max法だと葉ノードまで読まないと、正しい評価値がでませんよね?
途中で読みを中断した場合(特に序盤)どう枝を評価しているんですか?

59 :
素晴らしいオセロっていうのはな、たまには勝たせてくれるオセロだよ?
お前んちのじーちゃんはむきになって勝とうとしないだろ?
それとおなじことだよ。

60 :
また、話についていけなくなった奴が荒らしにきたな...。

61 :
序盤=データベースの範囲
終盤=完全読み
なので中盤がミソなわけだ。
とりあえず、偶数理論と開放度理論だけ取り込めば十分だと思う。
さらに盤の各マスにも点数をつけて、隅の点数を高く、
X(隅の斜め隣)を最も低く、C(隅の隣)を次に低く設定する。
偶数理論&開放度理論による点数加算が、マス固有の点数のマイナス分を上回っていれば
状況次第(Xに打たないと負けるような時)でXに打ち込む事もできるんじゃないかな。
作ったこと無いからわからんけど。

62 :
>>58
・数が多い方が良い
・隅と端を多く取るのが良い
という評価方法です。
>>59
勝たせてあげるプログラムを作るのは誰でも出来る。
勝たせてあげ「ない」プログラムを作るのが大変。
勝たせてあげ「ない」プログラムが出来れば、手加減するプログラムを作ることも出来る。
>>61
とりあえず、解放度理論だけ実装してみました。
ttp://ame.dip.jp/upload/1093/171329.c

63 :
だいぶ強くなった。

64 :
素晴らしーオセロってのは
やっぱ、ゲームしゃん、プレイヤーも勝つと楽しいよね
だから、初盤はコンピュータが有利なの
でも、最終的にはプレイヤーを勝たせてくれるような
そんな、自己満足なオセロがほしー

65 :
そんな接待オセロ、なにが楽しいのか。

66 :
>>64
こんなんで良かったらどうぞ(一応自作だけど、評価用の配列はオセロのサイトから拝借)。
つttp://yam-jp.com/~nanashi/img/gogogo1294.c
>だから、初盤はコンピュータが有利なの
>でも、最終的にはプレイヤーを勝たせてくれるような
一応、この条件は満たしている。
但し、楽しいかどうかは分からない。

67 :
>>65
初心者用には案外大切だと思います。
初めてやったときにボロ負けしたら激しく興味を無くすから、
最初くらいは勝たせてあげた方が良いのでは?
ただ強いだけのプログラムを作るよりも、手抜きをしていると分からないような接待オセロを作る方が
ずっと難しいような気がします。

68 :
>>67
ばれないように接待オセロと言っても、PCが弱いと、わざと負けてるって
バレバレじゃん。(もしくはプログラムが下手で本気で弱いか)
>初めてやったときにボロ負けしたら激しく興味を無くすから、
これは人によりけりだとおもう。
逆に、ちょっとコツをつかんだ程度で簡単に勝てるようになると
底の浅いゲームだと思って興味をなくすか。

69 :
>>68
>ばれないように接待オセロと言っても、PCが弱いと、わざと負けてるって
>バレバレじゃん。(もしくはプログラムが下手で本気で弱いか)
だから、単に強いだけのプログラムを作るより難しいといったのですが・・・。
強いプログラムというのは、評価関数がしっかりしていないと出来ません。
(意図的に)手加減をするプログラムも、評価関数がしっかりしていないと出来ません。
強いプログラムの上に上手な手加減の仕方をプログラムしないと、接待プログラムは出来ないのでは?
>これは人によりけりだとおもう。
>逆に、ちょっとコツをつかんだ程度で簡単に勝てるようになると
>底の浅いゲームだと思って興味をなくすか。
それを見極めるのもプロだと思います。
「こいつなら最初に(ゲーム上で)ボコボコにした方が伸びる」
「こいつはボロ負けすると挫折するタイプだから手加減してやろう」
みたいな感じで。

70 :
そこでニューラルネットですよ。

71 :
すばらしいオセロって、強い奴?それとも売れる奴?

72 :
相手とともに成長する奴

73 :
気づかないうちにオセロを移動させればいいんだよ。

74 :
>>69
>だから、単に強いだけのプログラムを作るより難しいといったのですが・・・。
なんか論点がずれてるな。
簡単か難しいかの話なんてしてないよ。
>それを見極めるのもプロだと思います。
だから、そういう論点じゃないでしょ。

75 :
>>71
将棋や囲碁だと、基本的に強いのが売れる。

76 :
>>69
オセロで接待されたい人っているの?

77 :
元々接待用ゲームだったらしいよ。

78 :
>>77
へー。

79 :
接待モードは、こんな感じで実装できそうだけど。
コンピュータが手番を渡されたら、まずその局面で探索。
評価値がマイナスだったら、最善手を打つ。
プラスが帰ってきたら、最善手だけでなく全ての手について点数を求める。
あらかじめ決めておいた最大値を点差が超えない範囲で、引き分けに近付く手を打つ。
最終的には僅差で負ける。
例えば最大下げ幅を8に設定してあって、最善手の点数が+16
他の候補手が+12,+10,+6,0,-4,-8だったら+10の手を選ぶというようにする。

80 :
相手が序盤からたくさん石取りまくるド素人だと、どんなに接待プレーしても
終盤調整で見え見えの手抜きしないといけなくなる。

81 :
>>71
エロい奴。
脱衣オセロとか。

82 :
>>81
技術の問題じゃない。
ヌードモデルやストリップの女性に金を払えば誰にでも可能。

83 :
アニメ絵でいいじゃん。

84 :
>>81
アタック 25 みたいに自分がとった分だけ見えるとか。(藁

85 :
それにしても、絵の才能の問題であって、技術的な部分はごく僅か。
そんな事より>>81>>83よ、ちょいと聞いてくれよ。スレとあんま関係ないけどさ。
昔、パソコン研究会をやってたんです。パソコン研究会。
そしたらなんか人がめちゃくちゃいっぱいで座れないんです。
で、よく見たらなんか盛り上がってて、エロゲーとか作っているんです。
もうね、アホかと。馬鹿かと。
お前らな、エロゲー如きで普段使ってないパソコンを使ってんじゃねーよ、ボケが。
エロゲーだよ、エロゲー。
なんか親子連れとかもいるし。一家4人でエロゲーか。おめでてーな。
よーしパパSM頼んじゃうぞー、とか言ってるの。もう見てらんない。
お前らな、エロゲーやるからその席空けろと。
パソコンってのはな、もっと殺伐としてるべきなんだよ。
デスクトップの隣に座った奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。
で、やっと座れたかと思ったら、隣の奴が、モロ出しロリゲーで、とか言ってるんです。
そこでまたぶち切れですよ。
あのな、ロリゲーなんてきょうび流行んねーんだよ。ボケが。
得意げな顔して何が、ロリゲーで、だ。
お前は本当にロリゲーを作りたいのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、ロリ絵を見たいだけちゃうんかと。
パソコン通の俺から言わせてもらえば今、パソコン通の間での最新流行はやっぱり、
特盛り計算量、これだね。
特盛り計算量AIプログラミング。これが通の使い方。
特盛り計算量ってのはアルゴリズムが多めに入ってる。そん代わりエロが少なめ。これ。
で、それにAIプログラミング(人工知能)。これ最強。
しかしこれをやると次からひろゆきにマークされるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。
まあお前、>>81>>83は、エロゲーでも作ってなさいってこった。

86 :
>>85は昔のネタで一人で盛り上がり、面白いと勘違いするバカ

87 :
オセロを教せーろ。

88 :
>>87
>>85なんかよりも格段に面白い

89 :
>>66
このオセロ2時間くらい楽しめたぞ
久々にオセロなんかしたら面白かった
ひまがあったらコードも見てみるよ

90 :
>>89
ありがとうございますm(_ _)m

91 :
C言語に関する雑談ならこちら
ラウンジでC言語
http://etc3.2ch.net/test/read.cgi/entrance/1093006298/l50

92 :
なんかコピペにクレームつけてるやつがいるな。
つまらなかったらスルーすればいいのに。

93 :
>>92
ごめん、吉野家テンプレを自分で改造して作った

94 :
ここはAIという高尚なスレなんだから、雑談は他でやってくれ。

95 :
>>94
とりあえず、>>62よりも強いプログラムをC言語で作って見せて下さい。
アップローダー
ttp://yam-jp.com/~nanashi/uploadzx.php

96 :
よし、おとーさんがんばっちゃおうかなー。

97 :
>>62
白黒の初期配置が逆じゃない?
他のプログラムとか、サイトとか見てたら逆っぽいのだけれど。

98 :
手加減させたいなら、読みの深度を落とすとか評価値が一番じゃない箇所に
置くとかそれだけで済むことだ。

99 :
>>97
変えておきます。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
【漏れは】猫でもわかる質問スレ【猫以下です】 (489)
iモード携帯電話用Java(iアプリ) Part22 (839)
FeliCa でソフトを作りまくるスレ 2ブロック目 (372)
各プログラミング言語を日本語よりに (353)
バカボンのDelphi不買・販促・その他談話室その29 (961)
C#は糞2.0 (797)
--log9.info------------------
5文字限定しりとり★17 (460)
● _ ※_5文字物語 _その200_※_● (490)
アオイとり (704)
(563)
愛知しりとり (389)
連想▲▲さよなら三角■■2 (520)
進む・戻るしりとり (577)
皇室シリトリ (327)
なかとり その19 (406)
いやん、尻が2文字目に食い込んじゃう 40 (305)
前の人の一番目の文字を取ってつなごう 27 (237)
◎◎前レスの秒数末尾の数でしりとり【8】◎◎ (675)
ここだけ古今東西でもよかばい!…通算68回目 (282)
3文字限定しりとり★27 (410)
新・漢字一文字取って地名を連ねようPart39 (342)
相撲しりとり (734)
--log55.com------------------
Oracle 質問総合スレ13
【安易ダサすぎ】データベース→DB→ドラゴンボール
SQL質疑応答スレ 18問目
Ubuntu MATE
KDEスレ Part 9
Kona Linux 4杯
CD/USB】PuppyLinux - 19匹め - 【軽量】
Kona Linux 3杯