しばらく C++ を使っていなかったので、もう一度慣れるために小さなプロジェクトに取り組むことにしました。中国のチェッカー ゲームを作成しようとしていますが、C++ での GUI 設計の経験はありません。クリックすると、クリックしたグリッドのインデックス番号が表示されるグリッド (つまり、ビットマップの六角形など) を作成する本当に簡単な方法はありますか? 誰かがこれを行う方法の例を持っていれば、2D の正方形のグリッドだけでも役に立ちます。どんな助けでも大歓迎です、ありがとう!
5 に答える
あなたが簡単な方法のために取るものに依存します。
Qtは簡単な方法かもしれませんが、それに慣れるには時間がかかります(そうでない場合)。
私があなたなら、単純なwinapiアプリケーションを作成し、WM_CLICK
メッセージのハンドラーを作成し、単純なグリッドレンダラーを追加します。
まず、アプリに使用するAPIを決定します。Qt?SDL?Win32?OpenGL?QtとそのQGraphicsViewクラスを使用することをお勧めします(QGraphicsViewを使用するQtサンプルアプリの1つから始めて、好みに合わせて変更することができます)。
通常、GUI takeitを使用すると、ボードを表すウィジェットのイベントハンドラーを(たとえば仮想関数を介して)オーバーライドできるため、MouseClicked(int x、int y)などの独自の関数を呼び出してマウスクリックイベントを処理します。 )、ハンドラーはマウス座標xとyも提供します。
長方形のグリッドの場合は、座標をピクセル単位のセル幅で整数で除算します。
それが六角形のセルのグリッドである場合、それを理解することはより困難になります。最初に六角形の長方形の中心をマークする長方形のグリッドを定義し、次にエッジの周りの4つの三角形の領域内でさらに検出を追加できると思います。ただし、三角形のエッジを無視するだけで、長方形のセル定義だけでゲームを使用できる可能性があります。
1行の計算を使用して、マウス座標をゲームグリッド座標に変換するのは簡単です。
POINT grid_loc = POINT(click.x / grid.cell.width, click.y / grid.cell.height);
もちろん、それはゼロベースのゲームグリッドです。
GUIツールキットによって異なります。ただし、最も可能性の高い2つの方法は、
ゲームでクリックしようとしている各正方形、穴、またはその他の座標を保存し、クリックイベントハンドラーに取得した座標を使用して、クリックされた正方形を判別させます。
各正方形を独自のウィジェットにします。そうすれば、クリックされたときにクリックイベントを取得するのは正方形自体であり、オブジェクト指向の優れた方法で処理できます。ただし、これは、ダイヤモンドゲームのウィジェットが非常に多いことを意味します。