[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 02/02 10:04 / Filesize : 194 KB / Number-of Response : 920
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

おまいら最強のリバーシプログラムしてみろよ part2



1 名前:デフォルトの名無しさん [2007/01/22(月) 06:13:18 ]
まずBearRevのDLLを作る
そして世界最強っぽいリバーシプログラムWZebraを倒すスレ
期間は三ヶ月以内で頼む
どんどんアイデアとプログラムを頼む

本格的リバーシ BearRev
www.vector.co.jp/games/soft/dl/win95/game/se098822.html

最強っぽいリバーシプログラムWZebra
www.radagast.se/othello/download.html

姉妹スレ おまいら最強の将棋プログラムしてみろよ part5
pc8.2ch.net/test/read.cgi/tech/1109307327/l50

696 名前:1 [2007/02/10(土) 05:15:39 ]
serch(bord ,-1, F) だと新規に
Fの手番で検索します

0番目から順に8方向探索して、
torerusuが1以上ならばそこにおけると判定します




int serch(board bord ,int z, int F){
int w,l;
for(w=z+1;w<64;w++){
fore(l,8)if(torerusu(bord,w,F,l)>0)break;
if(l<8)return w;}return 64;}

697 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 05:16:36 ]
アルゴリズムの説明はしないの?
説明すれば言ってることと書いてることの違いはわかるけど?

698 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 07:46:18 ]
1にできると思う?

699 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 07:52:08 ]
lp[] を作るためのiの初期化に失敗しているような気がする.
(lp[] を作る意図が不明なので「気がする」という表現にしておく.)

考えていることもろくに説明もせずに「誰かわかりますか?」って(ry


700 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 09:35:43 ]
5 名前:デフォルトの名無しさん[sage] 投稿日:2007/02/06(火) 20:41:01
11 名前:デフォルトの名無しさん[sage] 投稿日:2007/01/18(木) 19:19:37
質問するときに
〜したいのですが、上手くいきません。
〜したときにエラーが出ます。

という書き方はイクナイ。
何も書いてないのと同じ☆

〜したいのですが、〜で〜が失敗します。
〜したときに〜エラーが出ます。

隠さずくわしくかきましょう

701 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 09:42:33 ]
上手くいかない、じゃなくて何がどう上手くいかないか書けよ。
出し惜しみしてんじゃないよ。

コード見たりコンパイルするきないけど、
症状からだけでも判断できる場合がある。

702 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 09:49:49 ]
インデントの効用
制御構造が一目(言いすぎか?)で分かる。


703 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 09:59:57 ]
>>702
ちゃんと書かれたソースに関しては、言い過ぎではない。

但し、制御構造さえも置き換えるようなマクロを多用した糞コードでは殆ど無意味。

704 名前:701 mailto:sage [2007/02/10(土) 10:03:50 ]
w<64って変じゃないか?
あと関係ないけど、
if(torerusu(bord,w,F,l)>0)break;は
if(torerusu(bord,w,F,l))break;でいいんじゃないのか?

serchって取れるかどうかの判断結果だけ返すんだね。
なんか無駄っぽい。



705 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 10:11:11 ]
どうでもいいが、変数名とかがローマ字なのは痛々しい

706 名前:701 mailto:sage [2007/02/10(土) 10:15:17 ]
ごめんw<64はあってるっぽい。

707 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 10:26:25 ]
>>705
でも、変な英語よりはずっといいでしょ。

708 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 10:37:38 ]
>>702
ついでに改行を適度に入れることの効用.

 デバッガで1行毎に動きを追いかけて動作確認できる.

動作確認しているようなことは伝わってはくるが,
デバッガを使い出したら,あの書き方ではろくに動作確認できんと気が付くはず.

また,下手なマクロを書くとせっかくデバッガがあっても無駄になる.
かえって解りにくく,追いかけにくなるようなマクロを書いてどうするんだと
散々指摘されてるんだけどねぇ.


709 名前:デフォルトの名無しさん [2007/02/10(土) 11:10:28 ]
>>1のはindentなどのソース整形ツールで機械的に変えたくなった。

710 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 11:39:00 ]
無関係な突っ込み
n=z-8*m;

n=z % 8;


711 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 12:05:30 ]
誰かが言ったようにlp[]の初期化に失敗している。
7行オセロのソースを見ろよ。

712 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 12:10:32 ]
lp[] ={9,9,9,9,1,7,8,9}
これで大丈夫なのか?

713 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 12:19:47 ]
int lp[]={-9,-8,-7,-1,1,7,8,9};
で正常に1手目は出た。
llp[]の意味するところがわからんから後はどうなるかわからん。

ごみを生産するんじゃない。


714 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 12:24:28 ]
デバッガ使いたくないならprintfでもはさんでデバッグやれ。

if(z<64)printf("\n着手可能 %d %d",z/8+1,z%8+1);




715 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 12:37:18 ]
なぜintにしたか?
それはcharだとデバッガで文字として出てくるから。

716 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 12:43:38 ]
めんどくさいからそのまま春。
int serch(board bord ,int z, int F)
{
int w,l;
for(w=z+1;w<64;w++)
{

fore(l,8)
{
if(torerusu(bord,w,F,l)>0)return w;//break;なんなの?
}

//if(l<8)return w;これなんだ?
}
return 64;
}


717 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 13:11:45 ]
質問
mtのfor(;;)for(;;){
って意味あるの?

718 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 13:31:44 ]
わかった!
continueを知らないだけだ!

719 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 13:44:10 ]
>>717
break など使うものか!意地でも goto を使うんだ!
という意志の表れと見た。

720 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 13:48:05 ]
いや、breakで抜けた後もループしたいからforforしてるんだよ。
continueしらないだけ。

721 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 14:18:57 ]
読み直してみた。たしかに continue を知らないだけのようだ。

722 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 14:38:09 ]
#define PASS 64

723 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 14:46:10 ]
少しは努力しろ

724 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 14:54:56 ]
#define が多いけど、enum は使わないの?



725 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 14:56:32 ]
単に知らないの

726 名前:1 [2007/02/10(土) 17:40:47 ]
よりオブジェクト指向で書き直すことにしました ちょっと待っててくださいね

>>699>>713
lpは、周囲のマスを表すんです -9,-8,-7,-1,1,7,8,9となっていればOKなんですが
ここが、間違っていますかね?

>>704
if()は中身が正だったら真なんですか 1だけだと思ってました

>>708
マクロ使う理由は、関数に出来ないからなんですよ
breakとかreturnを使うと呼び出した関数側でリターンしてしまいます(remove()とか)

>>710
%を使うとやたらに鈍くなる可能性があります そこはz&7にした方がいいですね


>>716
すぐにリターンした方がいいですね

>>722
わかりました PASSにします

727 名前:1 [2007/02/10(土) 17:49:16 ]
みなさんありがとうございました
差し手の生成上手くいきました


fore(l,8){ if(l>3)i=l+1;m=i/3-1;n=i%3-1;lp[l]=8*m+n;}の部分を

fore(l,8){ if(l>3)i=l+1; else i=l;m=i/3-1;n=i%3-1;lp[l]=8*m+n;}

に変更したら上手くいきました

up2moe.moe.hm/img/q678.txt

728 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 17:52:41 ]
暗号解析も進んでるようだねw

729 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 17:58:59 ]
みんな優しいなあ

730 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:03:07 ]
>>727
問題外のソースの断片を貼らないでください。

731 名前:1 [2007/02/10(土) 18:30:51 ]
すみません 初歩なんですけど質問です

下のfnc内で他のメンバ関数(ここでは (z,F)ですが) を使いたいんですけど
(z,F)と書けば、呼び出せますか?またAAA()の場合もそのままかけるんでしょうか?


class board {
unsigned int bd[3][2];
public:
int operator()(int z, int F){int m;m=z>>5;z=z&31;return (bd[F][b]>>z)&1;}
int AAA(){}
void fnc() { ・・・}
};

732 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:32:49 ]
日本語でおk

733 名前:1 [2007/02/10(土) 18:42:33 ]
コンパイルは通るんですが、動作が変です
なぜでしょうか?
24を表示してほしいのですが、4となります


#include <stdio.h>
class board {
int a;
public:
int operator()(int x, int y, int z){return x*y*z;}
int fnc(){return (3,2,4);}

};

main(){
board x;
printf("%d\n",x.fnc());
}

734 名前:1 [2007/02/10(土) 18:43:51 ]
要約すると、メンバ関数内で、他のメンバ関数を使いたいという事です



735 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:45:08 ]
operator() ってなに?

736 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:48:01 ]
デバッガで1行ずつ実行すればいいんじゃないの?

737 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:49:08 ]
あ、ごめん
そういう内容ではなかったのね

738 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:49:51 ]
デバッガの使い方なんか知らないだろ
だから一行にまとめてしまってるんだし

739 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:50:19 ]
int fnc(){return operator()(3,2,4);}
int fnc(){return (*this)(3,2,4);}

740 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:50:57 ]
エスパーするなら、[]演算子のオーバーロードを勘違いしてるんじゃないかと

>>1は、いったいいつになったら日本語でアルゴリズムを書けるようになるんだろうな。

741 名前:1 [2007/02/10(土) 18:51:42 ]
>>735
ここです
関数呼び出し演算子
homepage2.nifty.com/well/Operator.html#paren

>>736
他のメンバ関数の呼び出し方を知りたいんですが

742 名前:1 [2007/02/10(土) 18:53:57 ]
>>739
わかりました!ありがとうございます
*thisは省略できるものだと思っていたのですがつけないと駄目みたいですね

743 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 18:55:49 ]
thisを知らなかっただけだろ

744 名前:1 [2007/02/10(土) 18:58:55 ]
>>743
727の10行目で使ってますよ



745 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:01:37 ]
>>741
C++ってこんなクソ仕様があるんだ・・・
こんなの使ったら、ホントに作ったやつじゃねーと解読できない
プログラムになっちゃうよ・・・・
とくに、>>1みたいな初心者が、無意味に多用したがるからな

746 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:08:02 ]
意味がわからずに使ってるからバグが入ってるんだよ

747 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:24:22 ]
1ってアルゴリズム考えるのがへたくそだなぁ

748 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:37:53 ]
>>726
lpは各方向のマスへのオフセットだろ。

ifでの真偽は、0で偽それ以外で真。

removeにbreakを入れないほうがイイ。
場合によってcontinueとbreakの使いわけができるようになる。
わけの分からんforを省ける。それとfor(;;cnt++)。

あとremoveの2つ目のreturnの判定は不要じゃないか?
よく分からんけど


749 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:40:15 ]
どんどんいい感じに普通のプログラムになっていってるね

750 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:50:51 ]
どのへんが?

751 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:52:41 ]
serch()

752 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:55:32 ]
aが抜けてるといいたいんだろ。最初から気付いていたよ。
あと board bordとかも。

753 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:55:46 ]
どの角度から見ても普通のプログラムには程遠いけどw

754 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 19:58:12 ]
うちで直したのは普通に近いよ。
gameクラスにグローバル変数ぶちこんで、susumu、removeも関数に直した。
gotoは直してないけどな…
printfがあちこちにぶち込んであるからぼろぼろだけどな。



755 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 20:01:06 ]
「普通」の基準が問題なんだなw

756 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 20:05:46 ]
bord()って使い方もまずいよな。

これって関数風に使う場合だしな。
[ ]のほうがあってると思うけどな。

757 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 20:48:10 ]
いや、みんなのデバッグが加わったことで
serch()が普通に近づいたってことだろ

758 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 21:01:19 ]
なんか盛り上がってるなw

759 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 21:06:46 ]
自分よりレベル低いのが居ると安心してしゃべれるんだろ

760 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 21:07:48 ]
>726 名前: 1 投稿日: 2007/02/10(土) 17:40:47
>よりオブジェクト指向で書き直すことにしました ちょっと待っててくださいね

それよりも SourceForge あたりにプロジェクト作ってみ?
と言ってみるテスト.


761 名前:デフォルトの名無しさん [2007/02/11(日) 16:23:04 ]
1って人間性がダメだな

762 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 16:26:34 ]
何ですかこの期待はずれなスレは

763 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 16:49:21 ]
おれにとっては期待以上だ

764 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 16:57:28 ]
まじめに作ってる人には期待してるよ
まだ結果は出てないし



765 名前:デフォルトの名無しさん [2007/02/13(火) 16:36:15 ]
age

766 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 17:05:19 ]
もう面倒だから打てる場所にランダムに打つルーチンで手を打とうぜ
文字をランダムに出力してシェイクスピアのオセロが完成する確率よりは遥かに大きい確率で勝てるものが作れる

767 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 17:36:05 ]
うん、君はそれで作れば?

768 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 17:47:43 ]
俺がポケコンで作ったときは、処理速度が遅いから
打てる中で一番多くひっくり返せる手を選ぶようにした。
思考に数秒かかる。
こんなんでも、それなりに面白い。

769 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 17:50:18 ]
bitboardとか知らないけど、俺も作ってみよう

770 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 17:52:09 ]
じゃあ俺はDで作っちゃうぞ

771 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 18:30:10 ]
じゃあ僕はバッチファイル!


772 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 21:02:00 ]
2次元配列で作ったけど、1次元が主流なんかな?

773 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 21:03:51 ]
なんでもいいかと

774 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 21:18:42 ]
1次元の利点は,
アドレス計算が高速,
関数の値として返せる,
引数の個数が減る,
位かな.絶対有利と言っていいと思う



775 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 22:00:54 ]
>>774
なるほど。
初めて作ったんだけど、>>496さんのを見て、1次元配列だったからちょっとびっくりした。

776 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 22:23:17 ]
>>774
8x8なら絶対有利と言うほどはないんじゃないかなぁ。
まあ10x10とかの手法使ってるなら絶対有利かもしれんが。

777 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 22:54:54 ]
2次元配列はどうも好みじゃない
関数にポインタ渡すときの宣言が嫌い

778 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 23:06:49 ]
Thellの「強+」って何手読みかな?

779 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 23:30:20 ]
bitboardにするとundoはやらないでコピーするもんなの?

780 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 23:47:40 ]
うん、そう。

781 名前:769 mailto:sage [2007/02/14(水) 00:37:59 ]
ひとまず動くものが出来たので晒してみます
555.sytes.net/up/img/414.zip





782 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 00:55:21 ]
GUIキタコレ!

783 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 00:59:04 ]
おお、お疲れ様です。
いい感じですね。

784 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:04:43 ]
>>781
dllの追加について何かヒントきぼん



785 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:26:02 ]
>>784
.net系の言語でプロジェクトの参照にRevPlugin.dllを追加、
RevPlugin.dll内にあるRev.IPlayerを実装したクラスを一つ以上作る、
それdllにしてPluginフォルダにぶちこむ、
でOKです。

SampleAIプロジェクトのRandomAI.csとかを参考にしてください。


786 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:26:46 ]
>>784
Interfaces.csにインターフェースが定義されてるから
これ実装すればいいんじゃない?
てかソース見てみよう。

787 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:28:50 ]
.NETはパスだな
もまいらがんばってくれ

788 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:30:55 ]
と言うか何語ですかこれ? GUI 部分は別に要らないですが、
思考部分を Unix でコンパイルするにはどうすれば?

789 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:32:20 ]
>>788
C#ていう言語。
monoで使えるかも?

790 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:34:12 ]
>>789
C# と mono ですか。調べてみます。d

791 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:40:13 ]
僕もC#でプログラムを作ってたのでちょうどいいですね。
独自のGUIも既にありますけど、
これに対応すれば他の人が作ったのと対戦しやすそうですね。

792 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:46:41 ]
>>788
AIは適当に作った物なのでコンパイルする価値無いかも・・・

793 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 02:12:42 ]
>>769
初期化エラーになります><

794 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 02:27:52 ]
んなこと言ってる奴は自分でなんとかしろカス



795 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 07:53:42 ]
C#か・・・
dllならC++で作って読ませることもできるかな?

796 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 12:42:22 ]
>>781
これ良いですね。
MinMaxAIに勝てないし、昔自作したオセロプログラムで対戦しても歯が立たないorz

出来れば、のお願いが2つ。
・初期配置を逆にしてほしい。
・直前手を表示してほしい。(印を付けるとか)
オセロルールでは初期配置が逆なので上記のようにソフトを2つ並べて
手動で対戦するときにそのほうが都合が良いので。
勝手言ってすまん。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<194KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef