おまえら、五目並べ作ってみろよ!!!

このエントリーをはてなブックマークに追加
147仕様書無しさん
そろそろマ板の限界
148仕様書無しさん:01/10/31 00:55
↑どゆこと。ム板ならいいってこと?
149仕様書無しさん:01/10/31 01:03
ム板の方がレベル高い人が多いということ。
ここにもレベル高い人いるけど、むこうの方が多いということ。
こっちだと下手するとネタスレに戻ってしまう危険があるということ。
150仕様書無しさん:01/10/31 01:28
>>149
そうなのか。2ちゃん初心者なんで。
どちらも、基本は同じメンツかと思ってた。
じゃ、マ板にしかいない俺って。
151仕様書無しさん:01/10/31 05:18
>>147
ワラタ
こっちは職業プログラマが多いからねぇ。。。
153仕様書無しさん:01/10/31 10:30
>>147 >>149 >>152
ぴくっ(耳の動く音)。なにっ。
プログラマー板を侮辱されるのは、土足で顔に乗られた気分だ。
負けるなみんな。
154仕様書無しさん:01/10/31 10:33
マ板とム板ってライバルなのか。こりゃ負けられぬ。
みんながんばれ。
155仕様書無しさん:01/10/31 10:46
つーかマ板ってネタ板なんだけど…
156名梨産:01/10/31 11:18
>>153
プログラマがプログラミングの技術以外の話をするのがココだと思ってるんで。。。
157149:01/10/31 16:17
>>153
ゴメンよ。
おれはどっちもよく顔をだすけんよくわかる
まあネタならネタで、実のあるネタを作り上げよう
158仕様書無しさん:01/10/31 18:24
なんかおもしろいのでage
159仕様書無しさん:01/10/31 20:41
昨日あんなに盛り上がってた人達はどこいったの?
160仕様書無しさん:01/10/31 22:11
じゃあ、プロトコルだけサクっと決めてマ板組とム板組で対戦ってのはどうだろう?
2chじゃ難しいかなぁ。。。
161仕様書無しさん:01/10/31 22:17
サーバ建てよう
162仕様書無しさん:01/10/31 22:27
まず、簡単にやらない?次のようなのはどう?
163162 misc.h:01/10/31 22:28
#ifndef __MISC_H__
#define __MISC_H__

#define D 3

struct Point{
int x;
int y;
};

//碁盤の初期化
void setGoban(int g[D][D]);
//碁盤を表示
void showGoban(const int g[D][D]);
//ユーザから入力を得る
void getInputFromUser(const int g[D][D], struct Point *p, int col);
//思考ルーチンから入力を得る
void getInputFromRoutine(const int g[D][D], struct Point *p, int col);
//碁盤に石を置く。col==1 黒:col==2 白
void putIshi(int g[D][D], struct Point p, int col);
//勝負を判定する:戻り値0勝負無し。1黒の勝ち、2白の勝ち
int hantei(const int g[D][D]);

#endif
164山崎まさよし:01/10/31 22:28
>>159
僕はここにいる。
165162 misc.c:01/10/31 22:32
#include <stdio.h>
#include "misc.h"
//pに石を置けるかを判定。戻り値0無効、1有効
//最初は何も無いところなら置けるとする。後で改良。
int valid(const int g[D][D], struct Point p, int col){
if(p.x < 0 || p.x >= D || p.y < 0 || p.y >= D) return 0;
if(g[p.x][p.y] == 0) return 1;
return 0;
}
void setGoban(int g[D][D]){
int i, j;
for(i = 0; i < D; i++)
for(j = 0; j < D; j++)
g[i][j] = 0;
}
void showGoban(const int g[D][D]){
int i, j;
printf(" ");
for(i = 0; i < D; i++)
printf("%2d", i+1);
printf("\n");
for(i = 0; i < D; i++){
printf("%2d", i+1);
for(j = 0; j < D; j++){
//0無し、1黒、2白
switch(g[i][j]){
case 0: printf("+"); break;
case 1: printf("●"); break;
case 2: printf("○"); break;
}
}
printf("\n");
}
}
void getInputFromUser(const int g[D][D], struct Point *pp, int col){
while(1){
printf("x座標y座標を入力してください(例:3 4):");
scanf("%d %d", &pp->x, &pp->y);
pp->x--; pp->y--;
if(valid(g, *pp, col)) break;
printf("そこは無効です。\n");
}
}
//はじめは思考ルーチンではなくユーザに入力させる。後で改良。
void getInputFromRoutine(const int g[D][D], struct Point *pp, int col){
getInputFromUser(g, pp, col);
}
void putIshi(int g[D][D], struct Point p, int col){
g[p.x][p.y] = col;
}
//勝負を判定する:戻り値0勝負無し。1黒の勝ち、2白の勝ち
//はじめはマスが埋まるまで0を戻し、埋まったら1を戻すようにする。後で改良。
int hantei(const int g[D][D]){
int i, j;
for(i = 0; i < D; i++)
for(j = 0; j < D; j++)
if(g[i][j]==0) return 0;
printf("勝負あり\n");
return 1;
}
166162 gomoku.c:01/10/31 22:32
#include <stdio.h>
#include "misc.h"

int goban[D][D];

int main()
{
struct Point p;
setGoban(goban);
showGoban(goban);
while(1){
/*ユーザの入力と表示*/
getInputFromUser(goban, &p, 1);
putIshi(goban, p, 1);
showGoban(goban);
/*判定*/
if(hantei(goban)) break;

/*思考ルーチンの入力と表示*/
getInputFromRoutine(goban, &p, 2);
putIshi(goban, p, 2);
showGoban(goban);
/*判定*/
if(hantei(goban)) break;
}
}
167162:01/10/31 22:33
あ、まちがえた。
#define D 3

#define D 19
だね。

そんで、関数を少しづつ実装。
168仕様書無しさん:01/10/31 22:50
>162 は面白いプログラムを書きますね。
1文字の define 使うなんてね。
169162:01/10/31 22:56
>>168
まあ、そうだね。DはDimにしといて。(本当はC++屋なんでdefine使わないんだよ。)
あと、判定関数hanteiだけど、考えてみると、石を置いたところの近辺を調べればよいから、
int hantei(const int g[D][D]);

int hantei(const int g[D][D], struct Point p, int col);
の方がよいような気がしてきた。

まあ、気に入らなければ忘れてくれ。
170!=130:01/10/31 23:02
あのー、素朴な疑問なんですが、
>>130のfive.exeは何で使われないんですか?
実はウィルスが潜んでたりするんですか?

設計自体はシンプルで良いと思うし、
肝心な部分はCで書けるようになってると思うのですが?
171名無しさん@そうだ選挙にいこう:01/10/31 23:12
>>169
int hantei(const int g[D][D], struct Point p, int col);
なんですけど、このconst int g[D][D]は何がconstなのかと。
個人的には const int** const g と書きたい気分。
172162:01/10/31 23:39
>>170
ごめん。なんとなく書いてみたかっただけ。dllとかちょっと引いちゃったのもあるけど。
>>130がわるいなんて思ってないよ。
>>171
逃げるようだけど、本当はこういうコーディングあんまりしないんだ。
(クラスん中でやっちゃうから。)
で、162のconstは「const int** const g」の最初のconstと同じ役割だよね。
(VCだと)171式ではウォーニングでるし、配列以外でポインタを渡すこともない
だろうと思ったんだ。でも、マジのCの人ならどうするの?
const int *const *const g?
今日は寝る。
173仕様書無しさん:01/11/01 00:21
今日はシバレるなぁ。
174仕様書無しさん:01/11/01 00:27
実際のコーディングの話になるとみんな黙っちゃうのが悲しいね
175仕様書無しさん:01/11/01 00:33
>>174
う〜ん、そうだね。
でも俺は2chには遊びに来てるので、好奇心の範囲であれば
大歓迎なんだけど、今回のように実際に作るとなるとね。
険しい道が待ってることは分かってるわけだし。
中途半端なことすると叩かれるし(w
176仕様書無しさん:01/11/01 00:40
でも、仕様を決める段階では異様に盛り上がってたよね。
つーことはここは○○SE板なのでは?
177名梨産:01/11/01 00:44
次の休日まで待ってはくれまいか、と。
178仕様書無しさん:01/11/01 00:46
>>176
だってやっぱ何かができあがっていく過程っておもろいじゃん。
そうじゃなきゃこういう仕事やっていないと思われ。
179仕様書無しさん:01/11/01 00:53
なんか進行がよくわからん。ここらであらすじでもまとめてちょ。
180仕様書無しさん:01/11/01 01:21
>>179
200も無いんだから読めば?
181仕様書無しさん:01/11/01 01:53
>>176
○○に何が入るのかはわからないけど(似非?)
ここで他の人(プログラマ、SE,etc.)を馬鹿にしてるが同じ穴の狢ってことだね
ってみんな薄々は自覚してるでしょうが

実際に物を作った奴はえらそうにして良いぞ うむ
182分裂くん ◆Q5WpkptY :01/11/01 08:44
>>181
まぁまぁ、かみつかない。
183仕様書無しさん:01/11/01 10:30
とりあえずここ読んでルールのおさらいしとけ
www2k.biglobe.ne.jp/~tomo/aigames/renju.html
184仕様書無しさん:01/11/01 11:46
>>183
だからそりゃ連珠だろーがよ
185仕様書無しさん:01/11/01 12:41
>>184
あ…五目並べか…
じゃぁ禁じ手もなしか…
じゃぁ先手必勝ってことで、終了。
186仕様書無しさん:01/11/01 12:54
ちなみに必勝法はコチラ

ttp://www.cs.vu.nl/~victor/thesis.html
(Chaper5ね)
187仕様書無しさん:01/11/01 12:55
s/Chaper/Chapter/
188162:01/11/01 22:27
新しいコード出てないみたいだから続けていい?

hantei関数なんだけど、>>169のように変更すると、次のようになるかな。
(本当は、碁盤の周りにも欄を作って番兵にするとよいと思うんだけど、
今回はそういう技巧は使わないで、補助関数whichを使う。これはxとy
を受け取り、それが板外の点なら0を戻し、板内ならそこの石の番号を
戻す関数。)

ただし、細かい判定はまだしていない。

int which(const int g[Dim][Dim], int x, int y){
if(x < 0 || x >= Dim || y < 0 || y >= Dim)
return 0; //範囲外なら0を戻すことにした
return g[x][y]; //範囲内ならそこの値を戻すだけ
}

//勝負を判定する:戻り値0勝負無し。1黒の勝ち、2白の勝ち
int hantei(const int g[Dim][Dim], struct Point p, int col){
int c1, c2;
int i;
//縦、ななめ、横、ななめ方向を表す
struct dir{int x, y;}d[4]
={{1,0},{1,1},{0,1},{1,-1}};

for(i=0; i<4; i++){
c1=0; c2=0;
//d[i]方向に同じ色の石を数える
while(which(g, p.x+d[i].x*(c1+1), p.y+d[i].y*(c1+1))==col)
c1++;
//今度は反対方向に数える
while(which(g, p.x-d[i].x*(c2+1), p.y-d[i].y*(c2+1))==col)
c2++;
if(c1+c2 == 4) return col; //今置いた石を入れると5
else if(c1+c2 > 4) return col==1?2:1; //5以上ならべると負け
}
return 0;
}
189162:01/11/01 22:30
それで、メイン部分は、次のようにする。関数へのポインタを使って
コードの重複を避けてみた。
なんか、ここだけ、「Cでやるぞ」って/* */使ってんのね。

#include <stdio.h>
//#include <stdlib.h>
//#include <time.h>
#include "misc.h"

int goban[Dim][Dim];

int main()
{
int ts = 0; //置いた石の数
int win; //勝者
/*関数へのポインタって好きくないけど...*/
void (*getInput[2])
(const int[Dim][Dim], struct Point *, int);
int turn = 1; //turn==1黒、turn==2白
struct Point p;

// srand((unsigned)time(NULL));
getInput[0] = getInputFromUser; //添字==turn-1
getInput[1] = getInputFromRoutine;
setGoban(goban);
showGoban(goban);
while(1){
/*入力と表示*/
getInput[turn-1](goban, &p, turn);
putIshi(goban, p, turn);
showGoban(goban);
/*判定*/
if(win = hantei(goban, p, turn)){
char *p = win==1?"黒":"白";
printf("%sの勝ち\n", p);
break;
}
if(++ts >= Dim*Dim){
printf("勝負無し\n");
break;
}
turn = turn==1?2:1; //turnを入れ替え
}
}
190162:01/11/01 22:33
これで一応フレームはできたと思う。あとは、getInputFromRoutineだね。
まあ、これが難しいんだけど。>誰かやってくれない?

>険しい道が待ってることは分かってるわけだし。
>中途半端なことすると叩かれるし(w
遠慮なく叩いてくれ。叩き合ってこそ2チャンネルじゃないか。なんつて。
191仕様書無しさん:01/11/01 23:24
turn ^= 0x03;
192仕様書無しさん:01/11/01 23:48
>>186
それは言わない約束では(w
193162:01/11/03 21:43
なんかさー、子供の頃、みんな帰っちゃったのに、1人でかくれんぼ続けてる
やつっていなかった?俺って、昔から、そういうやつだったんだよ。(w
194仕様書無しさん:01/11/03 22:39
>>162
寂しいこと言うなよ。
俺はいつもここをチェックしてる。
195名無し~3.EXE:01/11/03 23:17
<sup>?</sup>
196仕様書無しさん:01/11/05 22:55
で?
197仕様書無しさん:01/11/05 23:08
********仕様*************
言語:
Java .C#

環境:
Mac,Windows

グラフィック:
Swing など

ネットワーク機能は以下
SOAPで通信
**************************
198仕様書無しさん:01/11/07 15:44
最近不活発だな
199仕様書無しさん:01/11/08 23:13
まったくだ.。
200162:01/11/08 23:28
>>194
ありがと。

最近、テトリスとかブロック崩しが流行ってるね。
結構がんばってるみたい。

俺なりに5目考えたけど、やっぱり思考ルーチンが難しいな。
俺的には、アルゴリズムより、プログラム技術に興味があるので、あんまり
進まないんだけどお、まあ、とにかく、何かだそうか。

思考ルーチンは、相手の最後の一手を引数にとった方が楽なんで、
そうしようと思う。

なんかソースの板があるみたいだから、そっちにあげとく。
まあ、気が向いたら、批判してくれ。
まだ33の禁止とかやってないけど、今月はちょっと(かなり)忙しいんだ。
201162:01/11/08 23:47
ソース
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999294620
42から44

で、今実行してみたら、なんかバグがあるみたいだ。はずかシー。すさまじくはずかシー。
まあいいか。

思考ルーチンは、
 自分が5になるなら打つ
 相手が5になるなら止め打ち
 自分が両端のあいている3になるなら打つ
 相手が両端のあいている3になるなら止め打ち
 自分の並びを長くする
くらいだった。自分の並びを考えるときは「飛び」も入れた。
相手の並びを計算するときは「飛び」は入れなかった。理由は面倒だから。

ものすごく弱い。そのうえバグが。。。;;)
まあ、いいや、今はそんなところ。
202ビック東大:01/11/09 00:12
>201
違うな。相手オブジェクトにチェックさせるんだ。自分がズルをしていないか相手がチェックすれば自分でチェックする必要が無いわけだ。
つまり打ってから相手オブジェクトがOKを出せばそのまま表示するんだ。
NOだったらエラーを出してもう一度打たせろ。
203仕様書無しさん:01/11/09 00:30
おお。レスが。
>>202
でも、意味わからんな。
オブジェクトって何?Cだよ。
それと、それは思考ルーチンを強くすることとは関係ないよな。
禁じ手の話?でも、まだいっさいそういうことはやってないよ。
それと、誰がチェックしても、1度はするなら、効率も同じでわ?
何...かな?
204ビック東大:01/11/09 00:33
>203
チェックのやり方の問題だよ。開発効率やわかりやすさ。

ま、Cなら関係ないね。
197を見ててっきりjavaかC++でやるものかと思ったんだがね。
205仕様書無しさん:01/11/09 00:37
でもその考え方はCでも十分実現可能。
というかそうすべき。
206162:01/11/09 00:42
>>205
まじ?なぜ?
自分で打つ場所を相手に示して、相手がだめと言ったらまた考え直して、
また打つ場所を示して、相手がだめと言ったら、、、むちゃくちゃじゃない?

それに、打っていい場所かどうか自分でチェックできないなら、打つ場所の
候補すら考えられないでしょ?
本来は、打てる場所の中から「最適手」を選んで打つはずだから。ちゃう?

パパあげちゃうぞー。
207162:01/11/09 00:51
「相手」に誤解があるかな。
今考えてるのは、思考ルーチン対人間。人間が指定した場所が有効かどうか
の判定は、思考ルーチンではなく、ユーザー入力ルーチンが担当。思考ルー
チンの方は、自分で有効なのしか打たない。そうしたんだけど、まずいの?
208仕様書無しさん:01/11/09 00:58
「審判」ルーチンを作って、
そいつに「どうかなぁ?」って相談するようなモデルのが
それらしっぽく思える。
209仕様書無しさん:01/11/09 00:58
>>206
>>205はOO罵迦なので脳味噌が汚染されています。
210仕様書無しさん:01/11/09 01:00
>>209
うむ・・・確かにそうかも。職業病だな。
反省します。

叱ってくれてありがとう。
211162:01/11/09 01:09
レスがあるから寝れなくなっちゃった。明日はきびしいのに。
>>202 >>204 >>205 >>208 >>209 ありがと。
>>209 でも、俺もほんとうはOO屋なんだよ。がむばってC使ってんだ。
>>208 OOならそうするかな。
  でも、有効性の相談はやっぱり効率が悪いと思う。
  OOは、たいてい現実をシミュレートした方がよいと思う。
  審判に相談する人はいなさそう。
212162:01/11/09 01:17
前言、やや撤回。
打つ場所が有効かどうかは、本来、思考ルーチンでも人間でも同じ。
だから、これは共通の関数が使えると思う。これを「審判」と呼ぶならそうかな。

OOは今やってないけど、思考ルーチンと人間を別クラスにした場合、「審判」
をグローバル関数にするのはちょっとやだね。(Javaならできないし。)

俺なら、なるべく効率のよい「判定」関数をもった基底クラスを作って、思考ル
ーチンクラスと人間クラスをそこから派生させそう。
でも、OOネタはもうやめたほうがよいかな?
213仕様書無しさん:01/11/09 01:31
>>212
あのー、すごく不思議なんですが、
>>130の設計思想とどこが違うんでしょうか?
なんで再発明(という程でもないが)するの?
そのまま、乗っかっていれば問題なかったような気が。
214162:01/11/09 09:29
>>213
ごめんな。理由は
 自分で書いてみたかった。
 パスカルわからん。
です。でも、とりあえず書いたから、最初の理由は済んだ。

もし、130がまだ見てるなら、教えてくれ。
 1.思考ルーチンはどのファイルのどの辺?
  (教えてくれたら、なんとか読んでみたい。)
 2.なんでdllを使った? 
215130:01/11/11 00:48
おお。全然読んでなかったのに。
家のかちゅのお気に入りを何の気なしに読んでみたら、伸びてる…。

>214
1は、思考ルーチンは、わざとソースに入れませんでした。
何故なら、それを真似て作っても、面白いモノが出ないと思ったので。
見せろ、というなら、アップします。

2は、dll を使用すれば、どんな言語の使用者(C, C++, Delphi)でも思考ルーチンを作れるから(VB は知らん。作れるの?)。
まあ、Win 以外の環境では、ダメですが(なら、描画部分はGUIでもイイんだなって後で気づいた)。

あと、Judge ルーチンは、バグがあります。
なんか、使われなかったから、イイヤって放置してありますが。
今から直そうかな…。
216130:01/11/11 23:57
活気づけのために、思考ルーチンもアップしました。
非常に基本的な、重み付けしかしていない評価関数です。
見ても参考にはならないでしょう。
>>207
僕は、思考ルーチン vs 人間よりも、いろんな人の作った思考ルーチン vs 思考ルーチンの対決の方が楽しみです。
217仕様書無しさん:01/11/12 18:17
162 待ち age
テトリスのスレも口ばっかなヤツしかいないのな。
これが、マ版の限界ってヤツ?
218仕様書無しさん:01/11/12 18:20
馬鹿を罵る口はあっても馬鹿のために動かす手はない。
それだけだろ?
219162:01/11/12 22:20
久しぶりぶり。(しんちゃん風に。)

>>215 >>216(というかasuka02?)
レスありがと。
思考ルーチンアップしたのはどこかな?読んでみたいな。

思考ルーチン対思考ルーチンか。なんか負けたらすごく鬱になりそうだなあ。
(おぢさんは一応プロだけど、君はまだ学生だったりしないか?)

>>217
ありがと。
でも、この後どういう展開がいい?
162と130の思考ルーチンを戦わせて、162が圧敗するのを見てみる?
まあ、勝ち負けはともかく、あんまりアルゴリズムとか考えるのは、
老人には荷が重いな。
それに正直、アルゴリズムというより、パターンの数え上げになりそうな
気がする。それをロハでやるのはきっついなー。(こんなんでごめんな。)

俺自身は、プログラムの構造とかに興味があるんだけど、まあ、それも漠然と
してるかな。130の設定に乗って、思考ルーチンを作って、dll化して、、、でも
いいけど、他の人はどうする?

誰か、5目ならべのアルゴリズムの本とか知らないか。上の方にある必勝法って
のは本なの?
220130/asuka02:01/11/12 23:25
>>219
思考ルーチンは、前と同じ場所↓です。
http://www.2nd5.com/files/five.lzh
これを解凍してできる、dll フォルダ内の computer.h, computer.c です。
ちなみに、僕は、もう20代も後半です。
今回のプログラムは、仕事の合間(気分転換)に作りました(気分転換しすぎましたが)。
思考ルーチンは、生成ファイルのバイト数とかも考慮に入れると面白いかもしれません。
こんなに小さいのに、こんなに強いのか!とか。
まあ、もうあんまり人もいないみたいなので、(僕のプログラムを使っても使わなくても)対戦は望むべくもないと思いますが……。
221130:01/11/13 23:34
テトリスのスレは、盛り上がってるナー、と age てみる。
222仕様書無しさん:01/11/13 23:46
とりあえず
油揚げ
ひじき
ちくわ
だいず
じゃこ
をご飯とまぜておけば良いですか?
223ビック東大:01/11/13 23:47
http://game.2ch.net/test/read.cgi/ff/1002066745/
なぁおまえら、協力してやってくれないか。かわいそうで見てられないんだよ。
俺がやってもいいんだがいかんせん俺は他のものを作りたい。
お兄ちゃんお願い。サクラの一生のお願い。
224仕様書無しさん:01/11/14 00:34
>>223
クライベイビーの頼みは聞けん。
225130:01/11/14 02:07
>>222
とりあえず、それで正しいですが、縦に読めませんが。

>>223
さっきまで、つい、さっきまで、ゲームプログラマでした。
ホントに、ついさっきまで。
……。
それはそうと、別にそれは作りたくないので、咲耶たんや、サクラたんに頼まれても、出来ません。
確かに可哀想ですが。
226162:01/11/16 22:14
>>asuka02
遅レスでごめんな。いろいろ忙しくて。

>思考ルーチンは、前と同じ場所↓です。
ダウンロードしてみた。まだ読んでないけど、結構強いね。
>ちなみに、僕は、もう20代も後半です。
それは失礼。時間がふんだんにあるのかと思って。
仕事の合間にぱっと作っちゃうんだから、優秀なんだな。
ちなみに、俺は、2チャンでは逝ってよしの40代なんだ。
若いのには勝てんな。やっぱり。

>>225にちょっと気になることが書いてあるけど、大丈夫か?

また、しばらく留守にするけど、あげとくよ。
227CもしくはJAVAの五目:01/11/19 18:09
これ、某下請け企業の採用判定問題ですね。期限は1週間だったかな。
できないの? >>1 その会社良くないよ。
228ビック東大:01/11/19 20:21
いやぁ、40代の人がプログラマやってるんだ。40過ぎてもまだ希望があるね。
229仕様書無しさん:01/11/19 20:35
糞壁は灯台卒ではありませんが、なにか?
230130/asuka02:01/11/19 20:49
>>226
思考ルーチン、たまに、おかしいんですよね。
原因は「とび」だと思うんですけど。

> 仕事の合間にぱっと作っちゃうんだから、優秀なんだな。
あんまし優秀ってわけじゃないです。
優秀なら >>225 のような事もなかったわけですし。
詳細は述べ(れ)ませんが、一段落しました。
ご心配ありがとうございます。

それはそうと、やっぱ AI 関連は面白いですねー。
こんなヘボ・アルゴリズムでも、(自分が作ったのに)自分の予想外の所に打たれたりして、楽しいっす。
231162:01/11/20 22:09
>>228
40代いっぱいいるんじゃないの?それとも叩かれてるだけ?やだな。
>>230
一段落...なら、よかった。(だよな。)

AIは俺にはきついなー。今日あんまりにも無意味な会議に出させられたんで、
反抗的に、5目のアルゴ考えてみた。でも、人前に出せるようなものできないな。
232130:01/11/21 00:02
>>231
どんなアルゴリズム、考えました??興味あります。
AI的な発想でいくと、今アップしてあるものは、たんに1手読むだけなので、何手か先を読むようにすると、ある程度は強くなると思います。
たとえば、3手先を読むなら、まず、しらみつぶしに1手目の評価値を計算して、
次の手は、その中からある程度高い評価値をもった手、たとえば、評価値500以上とか、上位3手とかを、選んで、
そこから、さらに手を伸ばして探索する、を繰り返して、最終的に最も高い評価値を出したものを手として選ぶ、
なんてのが考え付きますね。
あとは、定石とかを加えれば、強くなるかも知れません。
233仕様書無しさん:01/11/21 14:47
禁じ手を打たせるように誘導するアルゴリズムが
一番強く憎たらしく感じると思う
234仕様書無しさん:01/12/04 14:24
>>232
>上位3手とかを、選んで、
これは盲点でした。
最近VBを始めたばかりで、練習でオセロなんか作ってたんですが、
そのCPUルーチンで3手先までありとあらゆる手を
全部しらみつぶしに評価するようにしていました。
これだと5手先くらいまで読もうとするといつまでも結果が帰ってこないんです。
でも、確かに上位何手かずつをピックアップしていけば
もっと先まで読んでも大丈夫そうですね。
これを基に自分なりの方法を考えてみたいと思います。
良いヒントありがとうございました。
235仕様書無しさん:02/01/19 04:13
バックギャモン、vectorでようやく一個見付けた
GAMMONかなー、タイトル。

思考は弱いらしいが面白いよ
五目並べよりも現実を見てくれ、なんてな
236仕様書無しさん:02/01/20 01:54
>>235
どういう意味?
あ、別に煽ってるわけじゃないよ。
ゲームとしての面白さを言ってるんなら、それって個人差じゃないかしらん。
237235:02/01/21 03:49
>236
ゲームに必要なのは。実現難解な思考が必要なのか、
強い思考か、それともゲームしてて面白い思考が重要
なのか、それとも思考にルールを合わせて改変しちゃう
のも有りだろうし、ロープレ等でなら敵もんスたあを思考
ルーチンに適合するようにお馬鹿設定するのも良い。
(バイオハザードならゾンビ、一般には昆虫等のシンプル
思考)

最強を目指すのもプログラマアの娯楽として思考ルー点
極めるのも良いのたろうけど、・・・・とかいろいろ考えてて
思わず書きこんだ。>235の真意は俺にもフメイヨ
238235:02/02/07 04:42
この辺の書籍って売り出されているの?
遠い昔に極めた記憶もあるけれど、周囲が俺に対しては
糞であってほしいようでプレスかかってっからあんまし
・・・ま、・・・だる。

とにもかくにも機械は賢くてもムカツクだけと言うのが需要読みか?
239仕様書無しさん
どうよ?