![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
今オセロゲームをCで作成中なので、先ほども質問したのですが、
http://hp.vector.co.jp/authors/VA015468/platina/ …
のサイトのminiMax法の実装法ですと最終的な戻り値は評価値ですよね?
一番いい評価値の場所にコマを置くためには結局そのx.y座標が必要だと思うのですが、どこからそのx.y座標を最終的に得るのでしょうか?
ご教授願います
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
突如として割り込んでしまいすみません。
疑問点があるのであれば書籍を参考にするのはいかがでしょう?
>リバーシのアルゴリズム C++&Java対応―「探索アルゴリズム」「評価関数」の設計と実装 (I・O BOOKS) [単行本]
>http://www.amazon.co.jp/%E3%83%AA%E3%83%90%E3%83 …
第3章に探索アルゴリズムとして、ここの部分でMinimaxアルゴリズムをはじめとして複数が紹介がされています。
第4章が評価関数を扱っています。
リバーシの開発を行うのであれば必読と思います。
立ち読みで内容を確認してみてください。
No.3
- 回答日時:
Cじゃないんですが、このページか
Scheme言語(Lisp言語)によるミニマックス法の解説:
http://www.geocities.jp/m_hiroi/func/abcscm43.html
あるいはこのページ
Python言語によるミニマックス法の解説:
http://www.geocities.jp/m_hiroi/light/pyalgo24.h …
が参考になるんじゃないでしょうか。
No.2
- 回答日時:
best を更新するときに「どこに置いたのか」を覚えておく.
この回答への補足
回答ありがとうございます。
bestを更新するときにどこに置いたのかを覚えておくために、仮にxとy座標を覚える変数にそれを代入して、再帰関数で最終的に一番浅い階層の親の座標をコマとして置きたいのですが、どのようにすればいいかわかりません。
下のようにmini_max_x,mini_max_yを関数外で宣言して記憶するようにしたのですが、これでは一番下の階層の子節点の座標が表示されてしまいます。
しかしうまくいくような実装法が考えられませんでしたので、よろしければどのようにすればよいかお教えください。
________if(turn == 先手 && best < val){
__________best= val;
__________mini_max_x = j;
__________mini_max_y = i;
________}
________if(turn == 後手 && best <-val){
__________best= -val;
__________mini_max_x = j;
__________mini_max_y = i;
________}
No.1
- 回答日時:
一般的には「おける場所すべてに総当たり方式でおいてみる」でしょうね。
評価関数の戻り値に評価値、引数に置く場所の座標を与えます。
で、すべての組み合わせの座標を試してみて最大の効果を得られる場所の座標を記録しておきます。
この回答への補足
回答ありがとうございます。質問の仕方が悪かったので訂正します。
今ネットを参考にしつつ自分で作った関数があるのですが、下のようなもので
オセロ盤をxxx[SIZE][SIZE];でSIZE 8と定義してあります。
allDireCheckでは、渡された座標がおくことができるなら置き1を返すという処理をするものです。
この関数内でx,y座標を記憶し最終的に返すとなるとどこにどのように書けばよいかわかりません。
おおまかに教えてくださるとうれしいです。
int Minimax(手番 turn, 先読みの深さ depth){
__int val,best;
__/* 葉の場合、評価値を返す */
__if(depth == 0) return eval();
__best = -1000000;
__for(int i = 0 ; i < SIZE ; i++) {
____for(int j = 0 ; j < SIZE ; j++) {
______if( allDireCheck(turn,j,i) ){
________val = Minimax(次の turn, depth-1);
________if(turn == 先手 && best < val) best= val;
________if(turn == 後手 && best <-val) best=-val;
________盤面を1手戻す;
______}
__return best;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 退職・失業・リストラ 人事評価が最低評価で落ち込んでいます 9 2023/07/06 15:35
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- 中途・キャリア 転職活動における最終面接につきまして 2 2023/05/31 17:16
- 会社・職場 派遣契約で時間精算(時給)で働いているため、有給休暇を取れば、売上が減ってしまいます。 有給休暇での 2 2023/01/05 07:33
- 株式市場・株価 同日中の特定口座内での株式売買における実質損益について 4 2022/06/22 05:18
- 世界情勢 勉強しない日本の大学生と、死に物狂いで勉強するアメリカの大学生。日本が負けて当然の理由ですね^^ 11 2022/10/24 07:09
- 大学・短大 大学一年です。 英語の講義の最終回当日朝に、先生からのメールで「教務課から連絡がありました。成績の評 3 2023/02/01 20:38
- IT・エンジニアリング インフラエンジニア(ネットワークエンジニア)の検証業務について教えてください。 インフラ初心者なので 2 2022/06/26 00:08
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
エクセルで回転する座標の出し方
-
エクセルである点からの距離で...
-
始点、終点の二つの座標と半径...
-
Excel VBAでマウス移動&ダブル...
-
多角形の内部かどうか判定する方法
-
MFCでボタンを押して図形を操作...
-
多角形に長方形が入るかどうか...
-
バイキュービック補間のプログラム
-
3次元空間上の2つの座標から...
-
ワード上Shapeの位置情報を統一...
-
Fortranで直交座標から極座標変...
-
エクセルの座標表示について
-
エクセルシート上のマウスポイ...
-
シーケンサー(PLC?)で制...
-
直線上にある点の座標の求め方
-
座標系のみ拡大したい
-
C言語で制作するピラミッドアー...
-
switch文を教えてください。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
3次元空間上の2つの座標から...
-
エクセルである点からの距離で...
-
始点、終点の二つの座標と半径...
-
エクセルで回転する座標の出し方
-
閉図形の座標の配列が右回りか...
-
ワード上Shapeの位置情報を統一...
-
以下のプログラムは重心を求め...
-
C言語 配列で座標
-
ダイアログ内コントロールの位...
-
ガウシアンフィルタのCプログラム
-
空間上の二点を結ぶ直線上に任...
-
エクセルシート上のマウスポイ...
-
シーケンサー(PLC?)で制...
-
VB6のPrinter.ScaleWidth に対...
-
多角形の内部かどうか判定する方法
-
直線上にある点の座標の求め方
-
y=x^2の座標をプロットするプロ...
-
ピクチャボックスの座標取得
おすすめ情報