1 :
名無しの学生さん :
01/10/28 23:20 五目並べのプログラム作って、ここに貼ってみろよ!あ、アプレット使わないでプログラム組んでね。期限は明日の夜まで。
一度言ってみたかった言葉を言います。
2ゲット。
でも、むなしいスレだね。宿題だろ。
>>1
>>1 これを明日もっていけ
int main(int argc, char **argv)
{
printf("五目並べのプログラム\n");
return 0;
}
4 :
仕様書無しさん :01/10/28 23:28
予言してやろう。
>>7 の書き込みは。
「何だお前らその程度か」だ!
5 :
仕様書無しさん :01/10/28 23:29
何だお
6 :
仕様書無しさん :01/10/28 23:29
何だお前らその
7 :
仕様書無しさん :01/10/28 23:29
何だお前らその程度か
9 :
仕様書無しさん :01/10/28 23:35
int main(void){ int unko[100][100]; for(int c=0;c<100;c++){ for(int h=0;h<100;h++){ if(unko[c][h]==1 && unko[c+1][h]==1 && unko[c+2][h]==1 && unko [c+3][h] && unko[c+4][h]==1 ){ printf("win"); } } } return 0; }
10 :
仕様書無しさん :01/10/28 23:38
五目並べってやったことない... 仕様がわからん
11 :
仕様書無しさん :01/10/28 23:39
unko[99+4][h]
@echo ●●●●●
13 :
名無しの学生さん :01/10/28 23:43
JAVAだよ。ヴァーカ
14 :
仕様書無しさん :01/10/28 23:44
10 print 1+1 20 go to 10
15 :
仕様書無しさん :01/10/28 23:47
public void main(){ int unko[][]=new int[100][100]; for(int c=0;c<100;c++){ for(int h=0;h<100;h++){ if(unko[c][h]==1 && unko[c+1][h]==1 && unko[c+2][h]==1 && unko [c+3][h] && unko[c+4][h]==1 ){ printf("win"); } } } return; }
おまえ,自分の宿題くらい自分でしろYO!!!
17 :
仕様書無しさん :01/10/28 23:50
class Baka { public static void main(String[] args) { for (int i = 0; i < 10000; i++) { System.out.println("JAVAだよ。ヴァーカ"); } } }
18 :
仕様書無しさん :01/10/28 23:54
1>>ヴァーカ
19 :
仕様書無しさん :01/10/28 23:55
五目並べをOOで設計するとどうなるのかね
五目並べとは プレイヤが交互に白黒の碁石を置いて行き、石を5つ縦横斜めいずれか並べられれば勝ち。 両端に何も無い3ができると相手は必ず3を封じ込めなければならない。 etc.. すごく複雑なシステムだよ。飛び3とか、飛び4とか、頭痛くなる。
21 :
名無しの学生さん :01/10/29 00:11
おまえら、わかんねーのかよ。ヴァーカ
>>21 ちがうだろ!
「なんだお前らその程度か」だろ!
>21 うるせー氏ねクソ早稲田。あ、慶応か。
25 :
仕様書無しさん :01/10/29 00:13
26 :
名無しの学生さん :01/10/29 00:15
JAVAだよ。ヴァーカ >25
27 :
仕様書無しさん :01/10/29 00:15
28 :
名無しの学生さん :01/10/29 00:15
ヴァーカ。
16進ダンプの表で2050行有るけど、何処にUPすればよいの?
五目並べなんてつまんねーから重力四目並べにしとけ こっちの方がおもろいyo
何故わざわざダンプにするのかいな。
>>1 をここで甘やかしたら、プログラマにはならないんだろうな。
>>31 最初から、プログラマになる気なんかないでしょ。
実力、発想、言葉遣い、どれをとっても最低だわ。
コンパイルも知らない情報処理科(大卒)を見たことあります。
↑ 失礼、高卒だったかも
こんな時間までsageでご苦労なことです。 オレモナー
1は本当にルール知って書いてるのか? 黒は33にしたら反則負けとかあるんだぜ。 とりあえず1よ。 きちんとした仕様ださなきゃ それは1の責任になるんだぜ 知ってっか? そんなんじゃ会社入ったら潰されるぞ。 まぁ潰される前に入れなきゃ意味無いか(藁
38 :
仕様書無しさん :01/10/29 05:44
五目並べと連珠とルール結構違うよね。 確かに正確なルールの制定は必要です。 変更可能にするのはちょと面倒かな。
むか〜しリアル厨房の時に挑戦して、飛び三とか 十字の禁じ手とかの判定で挫折したことがあります。 単なる対戦だったら馬鹿でもできるんだけどね。
そうきたか。。。
ほげってほげほげほー。
43 :
仕様書無しさん :01/10/29 17:58
>>40 しいたけは嫌いなのでニンジンと入れ替え。
長ネギも嫌いなので万能ネギと入れ替え。
グリンピースも嫌いなのでコーンと入れ替え。
糞スレッドは下げよう。
45 :
仕様書無しさん :01/10/29 18:41
糞スレッドにしないためにも、実際に五目並べ作りましょう。 とりあえず、人間同士や対CPU戦はありきたりなので、 アルゴリズム同士の対戦が出来るような仕様をまとめてみます。
学費ドブに捨てるやつがまた一人
五目焼きそば作ってほしい
言語とかなるべく関係なくやりたい と思ってる。 インフラ整ってるからネットワーク対戦を模すればいいかな。 プロトコル決めればJavaでもCでもHSPでもOKだしね。
>>45 それ、すっごく(・∀・)イイ!!
よーし、パパ特製アルゴリズム考えちゃうぞー!!
ホントに作るの?作るんならもーさっさと作ろうぜい。
GUIにして。 カラフルで楽しいのがいいー。 くにおくんの要素も取り入れて欲しい。
うだうだ言っててもはじまらない。 ******仕様****** 言語:C言語 環境:Windows98 コンパイラ:LSI−C(試食版) 概要: CUI。対戦用COM思考ルーチンはとりあえずペンディング 交互にテンキーで操作する。シロは○、黒は●で表現。 一手打つ度に碁盤イメージ毎書き直す。古い碁盤イメージはスクロールで流す。 細かい部分はPGの判断で作る。 ************** 五目並べのルール知らないから足りない部分は追加修正よろぴく。 やるんならさっさとやれ。やらないなら終了!
>49 そこでまたぶち切れですよ。
>>52 本当にその仕様でいいのか、小一時間問い詰めたい。
>>54 十分だろ。後から凝った作りが出来るよう考えて関数を設計してくれ。
足らない部分は仕様を付け加えてくれ。
なるべくシンプルに逝こう。じゃなきゃ、ああだこうだ言ってるだけで終わるに決まってる。
56 :
仕様書無しさん :01/10/29 20:54
納得しない人もいるだろうね。 というわけで、納得するまで設計を煮詰める組と とっとと作る組の2班に分かれてみましょう。
>>1 はどうする?
書いたのを写して学校へ提出か?
ちなみに、おれが提案したのは1の宿題とは無関係ね。(w もし作りたいなら、だ
59 :
仕様書無しさん :01/10/29 22:36
#include <stdio.h> int main(void) { printf("\t\b\b"); }
見てくれは、猫でも出来る・・・、位で適当にして アルゴリズムを練りまくろう!
61 :
仕様書無しさん :01/10/29 22:40
62 :
仕様書無しさん :01/10/29 22:41
五目と囲碁の違いは?
63 :
名無しの学生さん :01/10/29 22:42
おい。おまえら馬鹿か?作れないんだろ?ワラ
少なくとも
>>1 が出てくる限り作ろうとは思わない。
面白そうだけどね。
>>1 はjavaだろ?じゃぁ仕様の言語の部分はjava以外って事でどう?(w
おまえら、OOPやってるわりに、生産性がないな。 日本人得意の丁稚奉公でJAVAでやってやれ。 1も得する、みんなも得する。いいことが2つもあるんだぞ。
>>67 ボク、早く寝て明日の授業に備えましょうね〜。(w
69 :
仕様書無しさん :01/10/29 23:38
なあ1よ、こんな所で誰かが書き込むのを待つより ネットを検索した方が早いと思わないか?
>>1 ここでやれば。
こんなふーに。
+++++++++++++++++++
+++++++++++++++++++
+++++++●○++++++++++
+++++++●○++++++++++
++++++++●++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++
+++++++++++++++++++ +++++++++++++++++++ +++++++●○++++++++++ +++++++●○++++++++++ +++++++○●++++++++++ +++++++++++++++++++ +++++++++++++++++++ +++++++++++++++++++ +++++++++++++++++++
+++++++++++++++++++ +++++++++++++++++++ +++++++●○++++++++++ +++++++●○++++++++++ ++++++●●●++++++++++ +++++++++++++++++++ +++++++++++++++++++ +++++++++++++++++++ +++++++++++++++++++
+++++++++++++++++++ +++++++++++++++++++ +++++++●○++++++++++ +++++++○○++++++++++ ++++++○●●++++++++++ +++++○+++++++++++++ +++++++++++++++++++ +++++++++++++++++++ +++++++++++++++++++
+++++++++++++++++++ ++++++++●++++++++++ +++++++●●++++++++++ +++++++○●++++++++++ ++++++○●●++++++++++ +++++○+++++++++++++ +++++++++++++++++++ +++++++++++++++++++ +++++++++++++++++++
+++++++++++++++++++ ++++++++●++++++++++ +++++++●●++++++++++ +++++++○●++++++++++ ++++++○○○○+++++++++ +++++○+++++++++++++ +++++++++++++++++++ +++++++++++++++++++ +++++++++++++++++++
+++++++++++++++++++ ++++++++●++++++++++ +++++++●●++++++++++ +++++++●●++++++++++ ++++++●○○○+++++++++ +++++●+++++++++++++ ++++●++++++++++++++ +++++++++++++++++++ +++++++++++++++++++
++++++++○++++++++++ ++++++++○++++++++++ +++++++●○++++++++++ +++++++●○++++++++++ ++++++●○○○+++++++++ +++++●+++++++++++++ ++++●++++++++++++++ +++++++++++++++++++ +++++++++++++++++++
++++++++○++++++++++ ++++++++○++++++++++ +++++++●○++++++++++ +++++++●○++++++++++ ++++++●●●●●++++++++ +++++●+++++++++++++ ++++●++++++++++++++ +++++++++++++++++++ +++++++++++++++++++
++++++++○++++++++++ ++++++++○++++++++++ +++++++○○++++++++++ ++++++○○○++++++++++ ++++++●●●●●++++++++ +++++●+++++++++++++ ++++●++++++++++++++ +++++++++++++++++++ +++++++++++++++++++
81 :
仕様書無しさん :01/10/30 00:05
++++++++○++++++++++ ++++++++○++++++++++ +++++++●○++++++++++ +++++++●○++++++++++ ++++++●○○○+++++++++ +++++●+++++++++++++ ++++●++++++++++++++ +++++++++++++++++++ +++++++++++++++++++
それは、オセロだろって。。 ((c)ツクダオリジナル)
なんでいつの間にかオセロのスレッドになってんだよ。
84 :
仕様書無しさん :01/10/30 00:16
++++++++++++++++++++ ++++++++++++++++++++ +●+●+●●●+●++●++●●●++ +●+●+●+++●++●++●+●++ +●●●+●●●+●++●++●+●++ +●+●+●+++●++●++●+●++ +●+●+●●●+●●+●●+●●●++ ++++++++++++++++++++ ++++++++++++++++++++
原因はピカチュウ。
86 :
仕様書無しさん :01/10/30 00:39
INT 碁盤(19,19) WHILE(真){ X←X座標を入力 Y←Y座標を入力 盤状態表示関数 IF(判定関数==終了定数) 終了 DO{ X←ランダム(0〜18) Y←ランダム(0〜18) }WHILE(碁盤(X,Y)に石が置いてある) 盤状態表示関数 IF(判定関数==終了定数) 終了 }
アホですが何か?
89 :
仕様書無しさん :01/10/30 01:23
ちょっと聞いてみたかっただけです。 安心しました。
90 :
仕様書無しさん :01/10/30 06:14
>>1 はむかつくね。それはそれとして、どうせやるなら、
>>86 を実装するのに賛成。
XPのテストファーストってのでやってみない?
だめかな?
「どうせやるなら」は「XPの...」にかかります。
92 :
asuka02 :01/10/30 06:22
>>52 作ってみました。
http://www.2nd5.com/files/five.lzh 使用した言語/コンパイラ
five.exe Delphi 6
input.dll CBuilder 5
使用方法
five black.dll white.dll -33
などとして、呼び出します。
black.dll は黒の手を出す DLL。
同様に white.dll は白の手を出す DLLです。
また、-33 は 33 を禁じます。
同様に -44, -43 があります。
デフォルトの DLL は、解凍して出来る dll\input.cpp/input.h で、単に人間の入力を受けるだけです。
この DLL を、コンピュータの思考ルーチンのモノに置き換えると、面白いと思います。
というか、誰か作ってください。お願いします。
僕は、もう寝るので、バグや、意見などは昼過ぎにならないと見れませんので、よろしくお願いします。
>>92 なぜか判りませんが、カレントディレクトリを five.exe と同じディレクトリにしないとダメみたいです。
>>92 あと、1-19, A-Z 以外の文字を入力すると、終了します。
>>92 なんか、dll を解放できないみたいです。原因不明っす。
っていうか、CBuilder で DLL 初めて作ったことが原因かも。
それでも、いいってかただけ。よろしくお願いします。
96 :
仕様書無しさん :01/10/30 09:13
思考ルーチンの考察。 相手を禁手に追い込むって思考がなかなか難しいね。
へー。作ったんだ。大分仕様と違うみたいだけどまぁ、完成させることが目的だし。 とりあえず、パチパチパチ。ご苦労さん。 ちなみに実行はしてない。
99 :
仕様書無しさん :01/10/30 11:13
10手ぐらい先を読む思考ルーチンがいいな。 だれか作ってよ。
100 :
仕様書無しさん :01/10/30 11:15
10*10 = 100ゲット
101 :
仕様書無しさん :01/10/30 11:17
そういや昔ファミコンで五目並べってあったね。
>>96 とりあえず、オーソドックスに、
普通に何手か先まで総当りで調べて、評価関数が最も高い値を返す手を探すのじゃダメかな?
と、とりあえず次の週末まで待ってはくれまいか、と。
起きました。 とりあえず、同梱のソースに dll の関数の説明入れました。 インターフェースとして、こんなカンジで、いかがでしょう?
105 :
仕様書無しさん :01/10/30 12:49
>>102 そそそ
その評価関数がね。
どこに重みを置くかって、ルール可変にすることも加味すると
意外と面倒だということが今更判明して、ちょっと鬱。
気分転換にネットワーク対戦用のプロトコルを思案中さ。
>>105 その通り!リアル厨房の時に正にそこで挫折した。
ポケコンだったから表示とかメモリ/速度とかの問題もあったんだけどね。
仕様提案:
・CUI(MS−DOS:Win系以外の人ゴメン!)
・各自独立した思考EXEを作成
・メインの勝敗判定EXEから交互に各自の思考EXEを呼び出す
・1手ごとに盤面を固定のファイルに吐き出す
・相手のEXEが思考用に作成するバッファの解析は禁止
とすればコンパイラも選ばないし、公平に判定できる。
バッファも各自自由に確保できるし。
age忘れ。
>>71-82 おもろい、ちょっと死にかけたヨ
そうそう、昔書いたのはオセロだったなぁ・・・
盤の状態を返すインタフェースを公開しる。 GUIはお好みの実装にできるようにしとく。
>>109 そっか。ファイル操作だけならDOSアプリでも関係無いから
メインEXEはGUIでもいいな。
111 :
仕様書無しさん :01/10/30 15:31
>>106 exe形式、とか限定するとLinuxしか触れない人は難儀するでしょ。
だからTCPで結べばいいと考えてるんですけど、どうでしょ?
実際にはどこかのサーバで中継しないとローカルIPの人は
困りそうだけど、それもまあなんとかするさ。
>>111 初学者のお勉強も兼ねるならDOSのCUIがベストだとは思うけど。。
俺もDos/Winアプリしか作ったことないし。
二分化する?
113 :
仕様書無しさん :01/10/30 16:01
単純にファイル渡しでいいのでは? 行形式 X,Y,n, コメント nは0か1 で0なら白1なら黒 黒番なら、 相手が作ったWhite.txt を読み込んで、White.txtを削除 Black.txtにそれまでの全部の手順を吐き出して手番を渡す。 だけって方式は?
>>113 Black.txtとWhite.txtを分ける必要は無いと思われ。
フォーマットはそれでいいでしょ。
個人的に拡張子は.csvをきぼん。
115 :
仕様書無しさん :01/10/30 16:12
ファイルの更新のチェックは? 一定時間ごとに監視? DOSのプログラムは正直わからんです。 cygwin上で作ってもOKですか?
>>115 思考EXEが終了するまでメインEXEが待てばいいんでしょ?
更新チェックすると共有違反になったらヤだし、DB使うのもアレだし。
バッチファイルで小細工すればいいかな?
117 :
仕様書無しさん :01/10/30 16:20
>>115 テキストファイルを読み書きできるexeが作れれば何でもいいと思われ。
メインexeは誰かが作るだろ。
別けておけば、ファイルがあれば転送するだけのツールを用意すれば メール対戦とかネット対戦とかに簡単に対応出来ると思うんだけど・・・どう? それと LINUX とかを考えると (n,X,Y) とリスト形式にするのはどうですか? ()の中以外は無視とすれば 改行コードに関係ないでしょう。 で n は0,1じゃなくて 手番 を示し 1から始まる 1=黒 2=白 3=黒 と偶数奇数で白黒 X,Y は 1〜15 の数字で Xが横 Yが縦 左上がそれぞれの1 1234・・・15 1 2 3
基本ルール案 1 最初は黒が先手で (1,8,8) 2 縦横斜めで 「五連」を先に並べた方が「勝ち」です 3 黒は五連を並べる前の「三三」「四四」と「長連(六個以上)」が禁じ手 「打っても、打たされても負け」 4 白には禁手なし、長連も勝ち 5 升目が埋まり、かつ勝負がつかない時は「引き分け」 競技方法 引数の一番目でファイル名を渡される。 ファイルの末尾に自分の手番を追加してゆく事で競技が進行する 黒番ならファイルは存在しないので、指定の名前でファイルを作成し (1,8,8) と書いて終了する 最初の1回目に起動した後、常駐してもよい。その場合ファイルに その旨を書き出す。 双方が常駐すればファイルは #BlackRsident#(1,8,8)#WhiteRsident#(2,8,9) のようになる(改行は除く) これを見て以後 親はforkしない これが無ければ 親が手番毎に 引数にファイル名を渡して forkする
へー。進行してるね。読んでみたところ、こんな感じ? *********仕様************* 言語: C言語 環境: Windowsをメイン グラフィック: CUI(但し描画は単体の実行ファイルなのでGUIも作ってヨシ) その他: ネットワーク機能は以下 ・ネットを介した人間同士、COM同士の対戦が出来る。 ・碁盤情報は所定のフォーマットでファイル化してネット上でやりとり。(csvファイル) 実行ファイル構成は以下 ・描画ルーチンは独立した実行ファイル。 ・ユーザー手入力、もしくはCOMの思考ロジックで手を返す実行ファイル。 ・手入力、通信、描画ルーチン呼び出しなどを含むメイン部分の実行ファイル ************************** 間違い、勘違い等は修正してください。みんなが飽きる前に形になると良いね(w
>>118 りょーかいです。
Win/Dos以外の事はようわからんちんなので、お任せします。
それだけで拡張性があるのなら、そのフォーマットに合わせましょう。
競技方法案2 引数の一番目で出力ファイル名を渡され、2番目で入力ファイル名が渡される 2番目の入力ファイル名を読み、 出力ファイルに全てを書き末尾に自分の手番 を追加してゆく事で競技が進行する 黒番ならファイルには空白しか存在しないので、出力ファイルに (1,8,8) と書き 入力ファイルを削除する事で手番を渡す。 常駐に付いては同じ、 常駐時は、入力ファイルが存在し、かつ出力ファイルが存在しない事で判定す ればよい。 常駐しない場合は、入力ファイルの削除をしなくても親が削除してくれるものとする
>>119 でも
>>122 でも 常駐物でない場合=1手毎に起動される場合 は同じです
ただ常駐する場合、122の方が ファイルの有無だけで試合を進行出来るので
○ 判定の負荷が軽い
○ 親が無くても動かせる
というメリットがあると思います。 どうでしょう?
とりあえず、すぐに作り始める人は 引数が2つあれば
>>122 引数が1つなら
>>119 で動くように
作って下さい。
簡単にするには常駐モードを使わずに、1手毎にファイルに書いたら終了という事でお願いします
この場合引数が2つなら2番目の引数のファイルを読んで、でなければ1番目のファイルを読んで
1番目のファイル名で出力して終わるだけです
それから、終了は それぞれ判定出来ると思いますが、
降参=投了はX,Yそれぞれに99を入れて下さい(23,99,99) なら黒の投了となります
親を作る人は時間管理をして対戦する場合 それぞれの対戦者に与えるファイルは別けた方が
いいです。でないと勝手に対戦してしまい時間が正確に測れないかもしれません。
パラメータの読み込みができてファイルの読み書きができる 実行ファイルが作れればC言語に限定する必要は無いでしょう。 俺はC系とBasic系しかわからんちんだけど、他の言語の ソースも見てみたい(藁
ありゃ?
http://web.kyoto-inet.or.jp/people/arka01/renju/unyou.html 6 競技の開始
6-1 対局者間で仮先、仮後を決める。
6-2 仮後に決まった対局者は白石を持ち、その中から白石1個を仮先に決まった
対局者に渡さなければならない。
6-3 白石1個を受け取った仮先の対局者は、黒1を天元とする定められた珠型の
中から1種類を選択し、黒1・白2・黒3の順に打って仮後の対局者に示す。
6-4 仮後は、仮先の示した珠型を見て黒番か白番かを選択することができる。
6-5 白番に決まった対局者が白4を自由に打つ。
6-6 5珠2カ所打ち
黒は第5手目として2カ所を選定し、黒石2個を置いて白番に提示する。
6-7 白は黒の2カ所の5珠のうちの一方を選択する権利を有し、打たせたい方の
石を残し、他方の石を盤から取り上げて選択の意思表示とする。
6-8 5手目までで特別な開始規則を終わる。これを珠型交替5珠2カ所打ちという。
これをどう対戦仕様に盛り込んだらいいだろ?
127 :
仕様書無しさん :01/10/30 17:32
>>126 そりゃ連珠じゃよ。五目並べのルール厳しい版。
最初の5手は度外視してもいいでしょ。
128 :
仕様書無しさん :01/10/30 18:01
では 僭越なら 五目並べ 対戦仕様のまとめ 1、データ形式: 起動時の引数 1番目が出力ファイル 2番目が入力ファイル 1手はASCII コードで (n,x,y)と示される nは手番を示し奇数なら黒=先手 偶数なら白 値が0なら強制終了を示す x,yは左上を1として 1〜15の数字 99は負けを宣言する時使用 2、初手: 入力ファイルが空白なら黒=先手で (1,8,8)と出力 入力ファイルが(1,8,8) だけなら後手を示す、 この場合(1,8,8)(2,8,9)のように出力する 3、勝敗: 縦横斜めで 「五連」を先に並べた方が「勝ち」 升目が埋まり、かつ勝負がつかない時は「引き分け」 黒は五連を並べる前の「三三」「四四」と「長連(六個以上)」が禁じ手 「打っても、打たされても負け」 白には禁手なし、長連も勝ち 5、常駐: GUI型のように一度起動されたら試合終了迄起動したままの方が楽な場合 #BlackRsident#(1,8,8)#WhiteRsident#(2,8,9)のように最初のファイル書 き出し時に宣言する。 ただし、常駐モードでは入力ファイルを出力ファ イル書出後に削除する事。 またマナーとして手番でない場合はCPU 負荷をあまりかけないようにする事 6、その他 以下はサポートしなくてもよい $Limit=nn$ nnは数字で制限秒 "コメント" 自分の手番データの前に挿入する 文字コードはシフトJIS コメント中に半角の ()を含まない事 #White=n# nnは数字で今回の思考時間 #Black=n# 手番データの後に親に追加される
129 :
仕様書無しさん :01/10/30 19:54
仕様だけじゃしようがないよ しょう学生じゃないんだから みんなちゃんとしようね。
130 :
asuka02 :01/10/30 20:07
いつのまにか、スゲー進んでますね。
作っていたんですが、もう仕様と全然違うので、アレかと思いますが。
とりあえず。
http://www.2nd5.com/files/five.lzh に、コンピュータと対戦できるバージョンを上げました。
あと、dll が解放できなかったのは、IDE 上だったからみたいです。
five input.dll computer.dll -33
で、33 を禁じ手にして、先手(黒)ユーザー、後手(白)コンピュータで対戦できます。
せめてC++にして、データとルール部分を分ける。 ルールクラスはアダプタ化して、別ゲームも対応しやすくする。 ルールの追加は、Decoratorパターン辺りで拡張。 GUIは・・・とりあえず、他にも使いまわせるよう、方眼模様に 石が置かれるクラスを作り、それを拡張する方向で。 五目並べが出来てしまえば、将棋やオセロの7割は既に出来てる ようなもんだ。(コピペなしでね) 以上、OOの妄想でした。
× Rsident ○ Resident
勉強も兼ねてwebdavクライアントにするのはどうかね
>>132 了解 Resident と読み替えて下さい
>>133 128はは思考ルーチンと親を別ける為の仕様です。
親同士の通信とは別ければ良いのではないでしょうか?
>>128 の仕様ですが C 言語 で 以下のようなルーチンで読める形式とします
つまり( 1, 8, 8) のように数字の前に空白はOKですが (1 ,8 ,8 ) のように数字の後に空白はダメとします
#include <stdio.h>
struct _data { int n,x,y ;} data[255];
int GetGomokuData(FILE *fp,int *pn,int *px,int *py)
{
while(!feof(fp))
{ int c= fgetc(fp);
if(c!='(') continue;
if(3==fscanf(fp,"%d,%d,%d",pn,px,py) )
{
while(!feof(fp))
{ c= fgetc(fp);
if(c==')') return 0;
}
return EOF;
}
return -1;
}
return EOF;
}
int main(int argc, char* argv[])
{
int i;
int c=0;
FILE *rfp=fopen(argv[2],"rt");
while ( GetGomokuData(rfp , &(data[c].n) , &(data[c].x) , &(data[c].y))==0) c++;
136 :
仕様書無しさん :01/10/30 21:08
思考ルーチンの出力は 次の1手だけ出すので良いのではないですか?
定石本見れば? このルールだと先手必勝だろ。
139 :
仕様書無しさん :01/10/30 21:30
>>138 完全0和ゲームだし、厳密に言えば先手が必ず勝つ(らしい)けど
そこまでたどり着くとは限らないし、思考時間に制限時間をつければ
そこそこ白熱したものになると思うのよ。
なんてったって、「強い後手」を作るのが楽しくなるだろ?
140 :
仕様書無しさん :01/10/30 21:37
>>128 リファレンスとなる実装からフォーマットを決めるより、正規表現とかにすべきだ。こんな掲示版で汎用性をどこまで考えるかわからんが。
あるいは、棋譜XML考えるのもありかもしれん。
つーか、すでに存在しないのかね。汎用棋譜用フォーマットみたいなのって。
141 :
仕様書無しさん :01/10/30 21:46
こっちが3を作ったときに、相手が4を作って、それを防いだら新たに3が できてしまう場合とかって33とカウントするんでしたっけ?
142 :
仕様書無しさん :01/10/30 21:53
>>141 当然。それが秘技『サザントラップ』です。
143 :
仕様書無しさん :01/10/30 21:54
共謀法あたりを使いながら全手解析かけて、相手がどんな手をうって きても対応するに十分な定石を調べ、ハッシュか何かで保存しようと すると、どれくらいのデータ量いるんだろう。
>>141 連珠だとその状態に陥って33を打った時点で負け。
相手に禁じ手を打たせるのが強い人。
五目並べならそういうのも関係無いんだよね。
突然社長と呑みに逝っちゃったんで、疲れたから寝ますです。。。
>>130 あっさりコンピュータに負けてしまいました
そろそろマ板の限界
148 :
仕様書無しさん :01/10/31 00:55
↑どゆこと。ム板ならいいってこと?
ム板の方がレベル高い人が多いということ。 ここにもレベル高い人いるけど、むこうの方が多いということ。 こっちだと下手するとネタスレに戻ってしまう危険があるということ。
>>149 そうなのか。2ちゃん初心者なんで。
どちらも、基本は同じメンツかと思ってた。
じゃ、マ板にしかいない俺って。
こっちは職業プログラマが多いからねぇ。。。
153 :
仕様書無しさん :01/10/31 10:30
マ板とム板ってライバルなのか。こりゃ負けられぬ。 みんながんばれ。
つーかマ板ってネタ板なんだけど…
>>153 プログラマがプログラミングの技術以外の話をするのがココだと思ってるんで。。。
>>153 ゴメンよ。
おれはどっちもよく顔をだすけんよくわかる
まあネタならネタで、実のあるネタを作り上げよう
なんかおもしろいのでage
昨日あんなに盛り上がってた人達はどこいったの?
160 :
仕様書無しさん :01/10/31 22:11
じゃあ、プロトコルだけサクっと決めてマ板組とム板組で対戦ってのはどうだろう? 2chじゃ難しいかなぁ。。。
161 :
仕様書無しさん :01/10/31 22:17
サーバ建てよう
まず、簡単にやらない?次のようなのはどう?
163 :
162 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
#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; }
#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; } }
あ、まちがえた。 #define D 3 は #define D 19 だね。 そんで、関数を少しづつ実装。
>162 は面白いプログラムを書きますね。 1文字の define 使うなんてね。
>>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 と書きたい気分。
>>170 ごめん。なんとなく書いてみたかっただけ。dllとかちょっと引いちゃったのもあるけど。
>>130 がわるいなんて思ってないよ。
>>171 逃げるようだけど、本当はこういうコーディングあんまりしないんだ。
(クラスん中でやっちゃうから。)
で、162のconstは「const int** const g」の最初のconstと同じ役割だよね。
(VCだと)171式ではウォーニングでるし、配列以外でポインタを渡すこともない
だろうと思ったんだ。でも、マジのCの人ならどうするの?
const int *const *const g?
今日は寝る。
今日はシバレるなぁ。
174 :
仕様書無しさん :01/11/01 00:27
実際のコーディングの話になるとみんな黙っちゃうのが悲しいね
175 :
仕様書無しさん :01/11/01 00:33
>>174 う〜ん、そうだね。
でも俺は2chには遊びに来てるので、好奇心の範囲であれば
大歓迎なんだけど、今回のように実際に作るとなるとね。
険しい道が待ってることは分かってるわけだし。
中途半端なことすると叩かれるし(w
でも、仕様を決める段階では異様に盛り上がってたよね。 つーことはここは○○SE板なのでは?
次の休日まで待ってはくれまいか、と。
>>176 だってやっぱ何かができあがっていく過程っておもろいじゃん。
そうじゃなきゃこういう仕事やっていないと思われ。
なんか進行がよくわからん。ここらであらすじでもまとめてちょ。
181 :
仕様書無しさん :01/11/01 01:53
>>176 ○○に何が入るのかはわからないけど(似非?)
ここで他の人(プログラマ、SE,etc.)を馬鹿にしてるが同じ穴の狢ってことだね
ってみんな薄々は自覚してるでしょうが
実際に物を作った奴はえらそうにして良いぞ うむ
183 :
仕様書無しさん :01/11/01 10:30
とりあえずここ読んでルールのおさらいしとけ www2k.biglobe.ne.jp/~tomo/aigames/renju.html
185 :
仕様書無しさん :01/11/01 12:41
>>184 あ…五目並べか…
じゃぁ禁じ手もなしか…
じゃぁ先手必勝ってことで、終了。
s/Chaper/Chapter/
新しいコード出てないみたいだから続けていい?
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;
}
それで、メイン部分は、次のようにする。関数へのポインタを使って コードの重複を避けてみた。 なんか、ここだけ、「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を入れ替え } }
これで一応フレームはできたと思う。あとは、getInputFromRoutineだね。 まあ、これが難しいんだけど。>誰かやってくれない? >険しい道が待ってることは分かってるわけだし。 >中途半端なことすると叩かれるし(w 遠慮なく叩いてくれ。叩き合ってこそ2チャンネルじゃないか。なんつて。
turn ^= 0x03;
なんかさー、子供の頃、みんな帰っちゃったのに、1人でかくれんぼ続けてる やつっていなかった?俺って、昔から、そういうやつだったんだよ。(w
>>162 寂しいこと言うなよ。
俺はいつもここをチェックしてる。
<sup>?</sup>
196 :
仕様書無しさん :01/11/05 22:55
で?
197 :
仕様書無しさん :01/11/05 23:08
********仕様************* 言語: Java .C# 環境: Mac,Windows グラフィック: Swing など ネットワーク機能は以下 SOAPで通信 **************************
最近不活発だな
199 :
仕様書無しさん :01/11/08 23:13
まったくだ.。
>>194 ありがと。
最近、テトリスとかブロック崩しが流行ってるね。
結構がんばってるみたい。
俺なりに5目考えたけど、やっぱり思考ルーチンが難しいな。
俺的には、アルゴリズムより、プログラム技術に興味があるので、あんまり
進まないんだけどお、まあ、とにかく、何かだそうか。
思考ルーチンは、相手の最後の一手を引数にとった方が楽なんで、
そうしようと思う。
なんかソースの板があるみたいだから、そっちにあげとく。
まあ、気が向いたら、批判してくれ。
まだ33の禁止とかやってないけど、今月はちょっと(かなり)忙しいんだ。
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++でやるものかと思ったんだがね。
でもその考え方はCでも十分実現可能。 というかそうすべき。
>>205 まじ?なぜ?
自分で打つ場所を相手に示して、相手がだめと言ったらまた考え直して、
また打つ場所を示して、相手がだめと言ったら、、、むちゃくちゃじゃない?
それに、打っていい場所かどうか自分でチェックできないなら、打つ場所の
候補すら考えられないでしょ?
本来は、打てる場所の中から「最適手」を選んで打つはずだから。ちゃう?
パパあげちゃうぞー。
「相手」に誤解があるかな。 今考えてるのは、思考ルーチン対人間。人間が指定した場所が有効かどうか の判定は、思考ルーチンではなく、ユーザー入力ルーチンが担当。思考ルー チンの方は、自分で有効なのしか打たない。そうしたんだけど、まずいの?
208 :
仕様書無しさん :01/11/09 00:58
「審判」ルーチンを作って、 そいつに「どうかなぁ?」って相談するようなモデルのが それらしっぽく思える。
>>209 うむ・・・確かにそうかも。職業病だな。
反省します。
叱ってくれてありがとう。
レスがあるから寝れなくなっちゃった。明日はきびしいのに。
>>202 >>204 >>205 >>208 >>209 ありがと。
>>209 でも、俺もほんとうはOO屋なんだよ。がむばってC使ってんだ。
>>208 OOならそうするかな。
でも、有効性の相談はやっぱり効率が悪いと思う。
OOは、たいてい現実をシミュレートした方がよいと思う。
審判に相談する人はいなさそう。
前言、やや撤回。 打つ場所が有効かどうかは、本来、思考ルーチンでも人間でも同じ。 だから、これは共通の関数が使えると思う。これを「審判」と呼ぶならそうかな。 OOは今やってないけど、思考ルーチンと人間を別クラスにした場合、「審判」 をグローバル関数にするのはちょっとやだね。(Javaならできないし。) 俺なら、なるべく効率のよい「判定」関数をもった基底クラスを作って、思考ル ーチンクラスと人間クラスをそこから派生させそう。 でも、OOネタはもうやめたほうがよいかな?
>>212 あのー、すごく不思議なんですが、
>>130 の設計思想とどこが違うんでしょうか?
なんで再発明(という程でもないが)するの?
そのまま、乗っかっていれば問題なかったような気が。
>>213 ごめんな。理由は
自分で書いてみたかった。
パスカルわからん。
です。でも、とりあえず書いたから、最初の理由は済んだ。
もし、130がまだ見てるなら、教えてくれ。
1.思考ルーチンはどのファイルのどの辺?
(教えてくれたら、なんとか読んでみたい。)
2.なんでdllを使った?
おお。全然読んでなかったのに。 家のかちゅのお気に入りを何の気なしに読んでみたら、伸びてる…。 >214 1は、思考ルーチンは、わざとソースに入れませんでした。 何故なら、それを真似て作っても、面白いモノが出ないと思ったので。 見せろ、というなら、アップします。 2は、dll を使用すれば、どんな言語の使用者(C, C++, Delphi)でも思考ルーチンを作れるから(VB は知らん。作れるの?)。 まあ、Win 以外の環境では、ダメですが(なら、描画部分はGUIでもイイんだなって後で気づいた)。 あと、Judge ルーチンは、バグがあります。 なんか、使われなかったから、イイヤって放置してありますが。 今から直そうかな…。
活気づけのために、思考ルーチンもアップしました。
非常に基本的な、重み付けしかしていない評価関数です。
見ても参考にはならないでしょう。
>>207 僕は、思考ルーチン vs 人間よりも、いろんな人の作った思考ルーチン vs 思考ルーチンの対決の方が楽しみです。
217 :
仕様書無しさん :01/11/12 18:17
162 待ち age テトリスのスレも口ばっかなヤツしかいないのな。 これが、マ版の限界ってヤツ?
218 :
仕様書無しさん :01/11/12 18:20
馬鹿を罵る口はあっても馬鹿のために動かす手はない。 それだけだろ?
久しぶりぶり。(しんちゃん風に。)
>>215 >>216 (というかasuka02?)
レスありがと。
思考ルーチンアップしたのはどこかな?読んでみたいな。
思考ルーチン対思考ルーチンか。なんか負けたらすごく鬱になりそうだなあ。
(おぢさんは一応プロだけど、君はまだ学生だったりしないか?)
>>217 ありがと。
でも、この後どういう展開がいい?
162と130の思考ルーチンを戦わせて、162が圧敗するのを見てみる?
まあ、勝ち負けはともかく、あんまりアルゴリズムとか考えるのは、
老人には荷が重いな。
それに正直、アルゴリズムというより、パターンの数え上げになりそうな
気がする。それをロハでやるのはきっついなー。(こんなんでごめんな。)
俺自身は、プログラムの構造とかに興味があるんだけど、まあ、それも漠然と
してるかな。130の設定に乗って、思考ルーチンを作って、dll化して、、、でも
いいけど、他の人はどうする?
誰か、5目ならべのアルゴリズムの本とか知らないか。上の方にある必勝法って
のは本なの?
220 :
130/asuka02 :01/11/12 23:25
>>219 思考ルーチンは、前と同じ場所↓です。
http://www.2nd5.com/files/five.lzh これを解凍してできる、dll フォルダ内の computer.h, computer.c です。
ちなみに、僕は、もう20代も後半です。
今回のプログラムは、仕事の合間(気分転換)に作りました(気分転換しすぎましたが)。
思考ルーチンは、生成ファイルのバイト数とかも考慮に入れると面白いかもしれません。
こんなに小さいのに、こんなに強いのか!とか。
まあ、もうあんまり人もいないみたいなので、(僕のプログラムを使っても使わなくても)対戦は望むべくもないと思いますが……。
テトリスのスレは、盛り上がってるナー、と age てみる。
222 :
仕様書無しさん :01/11/13 23:46
とりあえず 油揚げ ひじき ちくわ だいず じゃこ をご飯とまぜておけば良いですか?
223 :
ビック東大 :01/11/13 23:47
>>222 とりあえず、それで正しいですが、縦に読めませんが。
>>223 さっきまで、つい、さっきまで、ゲームプログラマでした。
ホントに、ついさっきまで。
……。
それはそうと、別にそれは作りたくないので、咲耶たんや、サクラたんに頼まれても、出来ません。
確かに可哀想ですが。
>>asuka02
遅レスでごめんな。いろいろ忙しくて。
>思考ルーチンは、前と同じ場所↓です。
ダウンロードしてみた。まだ読んでないけど、結構強いね。
>ちなみに、僕は、もう20代も後半です。
それは失礼。時間がふんだんにあるのかと思って。
仕事の合間にぱっと作っちゃうんだから、優秀なんだな。
ちなみに、俺は、2チャンでは逝ってよしの40代なんだ。
若いのには勝てんな。やっぱり。
>>225 にちょっと気になることが書いてあるけど、大丈夫か?
また、しばらく留守にするけど、あげとくよ。
227 :
CもしくはJAVAの五目 :01/11/19 18:09
これ、某下請け企業の採用判定問題ですね。期限は1週間だったかな。
できないの?
>>1 その会社良くないよ。
228 :
ビック東大 :01/11/19 20:21
いやぁ、40代の人がプログラマやってるんだ。40過ぎてもまだ希望があるね。
糞壁は灯台卒ではありませんが、なにか?
230 :
130/asuka02 :01/11/19 20:49
>>226 思考ルーチン、たまに、おかしいんですよね。
原因は「とび」だと思うんですけど。
> 仕事の合間にぱっと作っちゃうんだから、優秀なんだな。
あんまし優秀ってわけじゃないです。
優秀なら
>>225 のような事もなかったわけですし。
詳細は述べ(れ)ませんが、一段落しました。
ご心配ありがとうございます。
それはそうと、やっぱ AI 関連は面白いですねー。
こんなヘボ・アルゴリズムでも、(自分が作ったのに)自分の予想外の所に打たれたりして、楽しいっす。
>>228 40代いっぱいいるんじゃないの?それとも叩かれてるだけ?やだな。
>>230 一段落...なら、よかった。(だよな。)
AIは俺にはきついなー。今日あんまりにも無意味な会議に出させられたんで、
反抗的に、5目のアルゴ考えてみた。でも、人前に出せるようなものできないな。
>>231 どんなアルゴリズム、考えました??興味あります。
AI的な発想でいくと、今アップしてあるものは、たんに1手読むだけなので、何手か先を読むようにすると、ある程度は強くなると思います。
たとえば、3手先を読むなら、まず、しらみつぶしに1手目の評価値を計算して、
次の手は、その中からある程度高い評価値をもった手、たとえば、評価値500以上とか、上位3手とかを、選んで、
そこから、さらに手を伸ばして探索する、を繰り返して、最終的に最も高い評価値を出したものを手として選ぶ、
なんてのが考え付きますね。
あとは、定石とかを加えれば、強くなるかも知れません。
禁じ手を打たせるように誘導するアルゴリズムが 一番強く憎たらしく感じると思う
234 :
仕様書無しさん :01/12/04 14:24
>>232 >上位3手とかを、選んで、
これは盲点でした。
最近VBを始めたばかりで、練習でオセロなんか作ってたんですが、
そのCPUルーチンで3手先までありとあらゆる手を
全部しらみつぶしに評価するようにしていました。
これだと5手先くらいまで読もうとするといつまでも結果が帰ってこないんです。
でも、確かに上位何手かずつをピックアップしていけば
もっと先まで読んでも大丈夫そうですね。
これを基に自分なりの方法を考えてみたいと思います。
良いヒントありがとうございました。
バックギャモン、vectorでようやく一個見付けた GAMMONかなー、タイトル。 思考は弱いらしいが面白いよ 五目並べよりも現実を見てくれ、なんてな
>>235 どういう意味?
あ、別に煽ってるわけじゃないよ。
ゲームとしての面白さを言ってるんなら、それって個人差じゃないかしらん。
>236 ゲームに必要なのは。実現難解な思考が必要なのか、 強い思考か、それともゲームしてて面白い思考が重要 なのか、それとも思考にルールを合わせて改変しちゃう のも有りだろうし、ロープレ等でなら敵もんスたあを思考 ルーチンに適合するようにお馬鹿設定するのも良い。 (バイオハザードならゾンビ、一般には昆虫等のシンプル 思考) 最強を目指すのもプログラマアの娯楽として思考ルー点 極めるのも良いのたろうけど、・・・・とかいろいろ考えてて 思わず書きこんだ。>235の真意は俺にもフメイヨ
この辺の書籍って売り出されているの? 遠い昔に極めた記憶もあるけれど、周囲が俺に対しては 糞であってほしいようでプレスかかってっからあんまし ・・・ま、・・・だる。 とにもかくにも機械は賢くてもムカツクだけと言うのが需要読みか?
どうよ?