3

私は経験が限られており、それを拡張しようとしている新しいプログラマーです。これは私が学校の外で試みる最初のプロジェクトであるため、何を知る必要があるのか​​ わからないため、リソースがかなり変動します. ただし、Java を使用した基本的な GUI に関しては、いくつかの小さな基礎があります。

チェス ゲームを作成し、後で AI を実装したいと考えています。ただし、現時点では、ゲーム自体を構築しているだけです。今、私は単純な GUI フレームワークが必要です。きれいに見える必要も、複雑である必要もありません。駒がどこにあるかボードを表示し、駒をクリックすると、移動できる場所が強調表示され、正方形をクリックすると、出来上がり、移動が完了します。

これが、GUI インターフェイスの設計における私の主な質問です。ロジック部分とは別に行われますか?言い換えれば、ピースを作成する場合、.jpg などを用意する必要がありますか? または、この広場にポーンがある場合、これらの座標にポーンの絵を表示する別のクラスを作成することはできますか? GUI を構築するために何を知る必要がありますか? 私は主にGoogleを使用して周りを見回していますが、GUI部分を別のペースで進めながらチェス盤で作業を続けてもよいかどうかを知ることと一緒に、出発点をいただければ幸いです.

先に感謝します。私が尋ねる質問がすぐに見つかる情報である場合は申し訳ありません. 触れたことはあるかもしれませんが、私がやりたいことに対するその重要性を認識していなかった可能性があります。

再度、感謝します :)


興味のある人のためにこれを更新します。私は自分がやろうとしていることのより良い形を持っており、この構造を頭の中で持ち、紙に翻訳しています。現時点では、簡単にするためにすべて Java で記述します。

ともあれ、長文失礼いたしました。誰もこれを読む必要はありません。:)

少し混乱するかもしれませんが、MVC 形式を使用してみます。

モデル-ピースボード[8][8]を作成します。ピースは抽象クラスになり、座標と今呼び出している抽象メソッド canMove(x,y) で構成されます。私はもともと move(x,y) も持っていましたが、ピースが移動しないことに気付きました。したがって、私は canMove メソッドを使用して、ピースが実際にそのアクションを実行できるかどうかをコントローラーに確認させます。

コントローラ - ここではボードを作成し、すべての部品をセットアップします。ほとんどすべてを規制するので、これは最大のクラスになると思います。

View - これは基本的に GUI です。

これが、コントローラー/ビューの調整が機能するはずだと私が思う方法です。

  1. コントローラには hand という変数があります。ピースを最初にクリックすると、ピース自体のパラメーターである黒/白かどうかがチェックされます。それが正しい色であれば、それは手札に割り当てられます。次に、double 配列内のすべての正方形をチェックします。canMove() が true の場合、ビューでその四角を強調表示します。次に、2 回目のクリックで canMove() がチェックされます。true の場合は、同じ色の駒があるかどうかを確認し、そうでない場合はそこに移動します。false の場合、何もありません。手をクリックすると手が空になります。私にとって、問題はビューがコントローラーとどのように相互作用するかです。後でそれを理解します。

  2. すべての移動の最後に、すべてのピースの canMove() をチェックして、キングがその中にいるかどうかを確認します。もしそうなら、チェックしてください。チェックメイトについては、キングの周りのマスにマークを付け、彼がいるマスを含め、それらがすべてマークされているかどうかを確認する方法全体を用意すると思います。

ですから、私が理解しなければならないことを説明していないことに気付いたことがいくつかあります。ポーンのキャプチャとポーンの動きは非常に具体的です。キャスティング。canMove が適用されるためには、一部のピースの場合に障害物があってはなりません。

私のクラスでは何も教えてくれなかったので、ビューの構築は苦痛になるでしょう。最後になると思います。ビューなしでテストする方法がわからないので、最後ではないかもしれません。

4

3 に答える 3

4

これが、GUI インターフェイスの設計における私の主な質問です。ロジック部分とは別に行われますか?

はいぜったいに。

チェス エンジンとユーザー インターフェイスが、実際には 2 つの完全に異なるプログラムであり、別々のプロセスで実行されることは非常に一般的です。

チェス エンジンは通常、速度が最適化されており、多くの場合 C または C++ で記述されています (ただし、必要に応じて Java を使用することもできます)。多くの場合、GUI は Java で作成されます。多くの場合、エンジンと GUI は、さまざまなスキル セットを持つまったく異なるプログラマーのチームによって作成されます。

UCI としても知られるUniversal Chess Interfaceなど、通信用の標準プロトコルがあります。この標準を採用すれば、独自の GUI を作成して既存のエンジンで使用できます。その後、後で UCI プロトコルを実装する独自のエンジンを作成する場合は、GUI の設定を変更してそのエンジンを使用することができます。

コメントで述べたように、UCI 標準を実装することは、最初のプロジェクトには少し難しいかもしれません。しかし、現実の世界でどのように行われるかを知ることで、どのようなデザインを選択するかにインスピレーションを与えることができることを願っています.

于 2012-08-02T22:39:12.470 に答える
3

これは漠然とした「質問」ですが、ここにいくつかの最初の指針があります。

  • Model-view-controller パターンを読んでください(はい、ビジネス ロジックはモデルにあり、GUI はビューになります)。

  • を使用してみてくださいGridLayout

  • セルでJLabels またはs を使用するJButton

    • 彼らは簡単に画像を表示できます
    • 背景を黒または白に設定できます。
    • それらのクリックを簡単に聞くことができます。
于 2012-08-02T22:39:03.870 に答える
2

一言で言えば、そうです。ビジネス ロジックとプレゼンテーションは分離する必要があります。MVCを読んでください。幸運を。

編集: MVPを読むことも良い考えかもしれません。ただし、重要なポイントは、アプリケーション ロジックをディスプレイから分離する必要があるということです。これは、プログラミングの初心者にとっては野心的なプロジェクトのように思えます。このプロジェクトがあなたにとって素晴らしい学習体験となることを願っています。

于 2012-08-02T22:39:03.527 に答える