脳を少し鍛えるために、自宅でサイドプロジェクトを始めようと考えています。 リバーシは単純なゲームのように見えますが、可動性がゲームプレイに大きな影響を与えます。それは少なくとも三目並べからのステップアップです。これは、ある種の AI に対する 1 人のプレーヤーになります。
PCのC++でこれを試してみることを考えています。
どのような問題が発生する可能性がありますか?
どのグラフィックライブラリをお勧めしますか?
自分自身に尋ねるほど頭がよくない質問は何ですか?
問題...
まあ、ゲームの戦略部分を書くときは、単純に最も多くのピースを獲得できる動きをしないように気をつけてください。ボードの位置にも重みを与える必要があります。たとえば、ボードの隅に駒を配置する機会が与えられた場合、その駒は決して裏返すことができないため、(ゲームに勝つことを除いて) 他のどの動きよりも優先する必要があります。また、コーナー スポットに隣接してピースを配置することは、これまでにない最悪の動きです (コーナー スペースが開いている場合)。
お役に立てれば!
全体として、あなたが遭遇する問題はあなたとあなたのアプローチに依存します。友人は、複雑は別の観点から単純であると言う傾向があります。
グラフィックライブラリの選択は、どのような種類のゲームを作成するかによって異なりますか?この種のプロジェクトではOpenGLが一般的な選択ですが、GUIライブラリを使用することも、Windowsまたはxorg独自のライブラリを直接使用することもできます。気の利いたことをするつもりなら、OpenGLを使うだけです。
あなたが尋ねるべき質問:
このプロジェクトにはC++が賢明な選択ですか?CやPythonも検討してください。これに対する私の答えは、リバーシを書きたいだけなら、Pythonに行くということです。ただし、低水準言語を学びたい場合は、最初にCを実行してください。C ++はCの拡張機能であるため、Cよりも多くのことを学ぶことができます。私の判断では、C++について学ぶ必要があるほど努力する価値はありません。
グラフィックライブラリをどのように使用しますか?派手な効果を出す場合は、シーングラフに移動します。代わりに、ボタンが付いたリバーシグリッドをレンダリングできます。
UIをどのように実装する必要がありますか?一般的なUIの概念を使用する必要がありますか?通常のUIの概念(ウィンドウ、フレーム、ボタン、メニューバー、ダイアログ)は、人々が思っているほど良くはありません。それらを適切に実装するには多くの作業が必要です。入力を解釈するためにシーングラフを適用し、ゲームの制御にさまざまな巧妙な方法を試してください。イントロメニュー(それらはばかげて役に立たない作業です)を避け、ほとんどの構成でコマンドライン引数を使用します。
私はまだあなたが始めるためのいくつかのアイデアをあなたに与えます:
オセロボードは8x8で、全体で64セルです。セルごとに1バイトを割り当てることができます。これにより、ボードの状態ごとに64バイトになります。それは8つの長いintですが、それほど多くはありません!ゲームの進行状況全体を保存することができ、プレーヤーはそれに気付くことさえできません。したがって、状態を変更するときに常にコピーする不変の構造としてothelloボードを実装することをお勧めします。また、後でAIを使用したり、「元に戻す」機能を実装したりするのにも役立ちます。
1バイトには3つの状態(EMPTY、BLACK、WHITE)よりも多くの情報を格納できるため、2つの追加の状態(BLACK_ALLOWED、WHITE_ALLOWED、BOTH_ALLOWED)も提供することをお勧めします。新しい状態をコピーするときに、これらの値を計算できます。
ブロックを配置できる場所をチェックするためのアルゴリズムは、ボードを1つずつ通過し、空のセルから正規表現パターンのすべての方向にトレースできます:B + W => W ^、W + B =>B^このようにゲームのルールを、すべてを処理するシンプルなインターフェイス内にカプセル化できます。
他の人が言ったように、ゲームプレイと戦略、および関連するアルゴリズムを深く理解することから始めます。このリンクは役に立つかもしれません。基本的なオセロの戦略とアルゴリズムについて説明しています。
http://www.site-constructor.com/othello/Present/Basic_Strategy.html
みんながアルゴリズムとゲームロジックを最初に考えることをあなたに伝えるという私の考えを提案していたように。私にとっての次の答えはグラフィックライブラリでした。それはターゲットプラットフォーム、プログラミング言語、フレームワークなどによって異なります。ゲームが動作する主要なオペレーティング システム) -> www.mono-project.org. その間、私はこれを見つけました。この種のリソースが役立つと思います: http://home.datacomm.ch/t_wolf/tw/misc/reversi/html/index.html . しかし、これが終わったら、数独を実装してみることができます。
対戦する AI を作成する場合は、アルファ ベータ プルーニングを使用してミニマックスを調べる必要があります。あなたのお気に入りの検索エンジンは、このトピックについて多くのことを語ります。
自分でゲーム ロジックを理解したら、Peter Norvig の著書Paradigms of AI Programmingの第 18 章を読んでください。(ソースコードはこちら。) それはかなり短く、非常に読みやすいプログラムを持っており、ほぼすべての人間のお尻を蹴ることができます。あなたのソリューションをそれと比較することで、多くのことを学ぶべきです。
Reversiは、実装するのが非常に簡単なゲームである必要があります。AIの実装中に、ゲーム理論のいくつかの基本的なアルゴリズム(具体的にはmin-max)を学ぶのに最適です。
AIについて注意すべきことの1つは、リバーシ(対戦相手の動きに関係なく常に勝つもの)のために完璧なAIを作成することが完全に可能であるということです。したがって、戦略面では、AIが負けた場合でも、まだやるべきことがあります:)
私は何年も前、まだ学校に通っていたときにリバーシ ゲームを書きました。その戦略は非常に単純で、最大数のピースを求めただけでしたが、重み付けされているため、エッジ、特にコーナーを優先し、コーナーを与えるリスクのある正方形を好まなかった.
これは、それが何をしているのかをまだ理解していない人に対してはかなりうまく機能しましたが、いったん理解すると、それに対してその戦略を使用するのは非常に簡単でした. しかし、私が書いたにもかかわらず、最初の数回は私を打ち負かしたと言って自慢することはできません!
数回先読みを行う適切な AI は、はるかに複雑です。興味深い問題ですが、当時はユーザー インターフェイスの方に興味がありました。