アプリ版:「スタンプのみでお礼する」機能のリリースについて

使用しているコンパイラ:Microsoft Visual Studio 2005
使用言語:C#

6×6マスのオセロゲームをC#でプログラミングしようと思っています。
プレイヤーのコマの配置はコンソールからの入力させます。
対戦相手はCOMでとりあえず、COMのレベルは最弱でも良しとします。

そこで質問なんですが、
下記の物の良い作り方とはどういったものがありますでしょうか?
・現在の盤上のどこが置ける場所かということを知るメソッド(もしくはクラス)
・裏返すコマはどれかを判別するメソッド(もしくはクラス)
・COMの思考クラス(ただし、COMレベルは最弱(置けるマスからランダム))
どなたかご意見ございましたら教えてください。
よろしくお願いします。

A 回答 (2件)

・現在の盤上のどこが置ける場所かということを知るメソッド(もしくはクラス)


・裏返すコマはどれかを判別するメソッド(もしくはクラス)
・COMの思考クラス(ただし、COMレベルは最弱(置けるマスからランダム))

>ソースコードで例を示していただくわけにはいかないでしょうか?

いや、それを作るということが、プログラミングということなんですが。オセロのような指向型ゲームは、コンピュータの思考部分をいかに作るかこそがポイントであって、「そのソースコードを教えてくれ」となったら、それはあなたの作ったものではなくなってしまいますよ。

とりあえず、ヒントとなるものだけ。

例えば、ある空白のマス目があったとして、その隣のマス目について、相手の駒があるか、あったら更にその先のマス目はどうか、更にその先は……。とチェックしていって、「そのマス目と、ずっと先にある自分の駒との間がすべて相手の駒で埋まっている」という状態であれば、それはひっくり返せるということになります。

それを全方向について行っていけば、そのマス目に駒を置いたとき全部でいくつひっくり返せるかが計算できます。これを全てのマス目について行えば、どこに置いたらいくつひっくり返せるかがすべてわかるわけです。

こうして算出できた値に、「四隅は10個相手の駒を取れたのと同じぐらい重要だからプラス10」というようにして重要度ごとにウェイトを加算していきます。その結果、もっとも値が大きいところが「次に駒を置くべきところ」と計算できるわけです。

こういった「総当り計算」による計算を「MIN-MAX(ミニマックス)」と呼びます。思考型アルゴリズムのもっとも基本的な考え方です。「ミニマックス」で検索すればたくさんヒットしますので、まずはこれを勉強して、ごく単純なミニマックスによるアルゴリズムを作ってみましょう。それで一応動くところまでくれば、後はそれをベースに、独自のアルゴリズムを考えていけばいいでしょう。
    • good
    • 0

よい作り方ってなんでしょう?


動けば何でもいいと思いますが。
一つ目二つ目は適当に作ってもらうとして、
三つ目は全てのマスに対して試行して、返せるコマが一番多いところに置く、
というようなことでいいとおもいますよ。

この回答への補足

説明不足で申し訳ございません。
私のいう良いというのは、
小さくて、ソースが複雑すぎない簡単なものであることです。
また、ソースコードで例を示していただくわけにはいかないでしょうか?

補足日時:2008/05/14 23:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!