-1

趣味で Java で Pong を作っています。私はテトリスを完成させたばかりですが、ゲームの構築を誤って開始したため、プログラム全体で貧弱な設計が続き、私ができることが制限されました。

今度はちゃんと始めようと思いました。したい:

  • MVC モデルに従ってゲームを作成する
  • 賢明なクラス編成と分離を行う
  • カプセル化をうまく活用する
  • ゲームのルールから GUI を切り離す

そうは言っても、私が提案したクラス構造はクラスを適切に使用していますか?

メインクラス: JFrame を拡張します JPanels を JFrame に追加し、ゲームを初期化します

  • GamePanel と ScorePanel を JFrame に追加します
  • サイズや位置などを設定します... (frame.pack() を使用...)
  • ゲームを初期化します-public static void main(String[] args) {...

GamePanel class: extends JPanel : 自身の境界を知ること、およびオブジェクトがそれらのルールに違反しているかどうかについてのみ責任を負います...

  • paintComponent() は、形状 (パドルとボール) を画面に描画します
  • 境界と衝突 (ボールがパドルに衝突する) ルールがある
  • KeyListeners (正しい場所にあるかどうかわからない)
  • ゲームタイマーはゲームのビートを設定します

GameRules クラス: GamePanelからデータを取得し (ボールがパドルに衝突した場合など)、それに基づいてスコアやその他の情報を計算します...

  • ゲームの採点、ゲーム終了のルール、レベリング
  • ボールがバウンドするときの角度 (正しい場所かどうかは不明)

ScorePanel クラス: GUI スコア、レベル、およびその他の関連データをプレーヤーに表示する責任があります... GameRules クラスからデータを取得します。

  • paintComponent() は、スコアやその他のデータを画面に描画します

Paddle クラス: Rectangle2D (AWT) を拡張します 独自の (x,y) 座標を知る責任があります... 独自の色を持ち、新しい位置を設定します

  • getX()、getY()
  • getColor()
  • setLocation(x, y)

Ball クラス: Ellipse2D (AWT) を拡張します。それ自体の (x,y) 座標を知る責任があります... パドルと同じように


質問:

  • ボールがバウンドする角度を計算するための数学をどこに置くべきかわからない
  • keyListener はどこに行くべきですか?
  • ゲームを実行する代わりに「ゲーム ループ」を使用するにはどうすればよいpaintComponent()ですか?
  • MVCモデルに従おうとしています...これは達成できますか?

ありがとうございました!

編集

ここに画像の説明を入力

4

1 に答える 1

4

ボールがバウンドする角度を計算するための数学をどこに置くべきかわからない

GameRules は、他のどのクラスよりも優れたクラスです。数学がより複雑な場合は、GameMath クラスを作成できます。

keyListener はどこに行くべきですか?

私の最初の推測は、GamePanel クラスでしょう。

ゲームを paintComponent() で実行する代わりに、「ゲーム ループ」を使用するにはどうすればよいですか?

GamePanel の paintComponent メソッドは、パドルとボールの現在の状態を描画します。パドルとボールに独自の draw メソッドがあると便利です。つまり、paintComponent はパドルとボールの draw メソッドを呼び出すだけです。

ゲーム ループは、パドル クラスとボール クラスの値を更新します。独自のループで paintComponent を呼び出して安定したフレーム レートを取得し、別のループでパドルとボールの位置の更新を呼び出すことができます。

MVCモデルに従おうとしています...これは達成できますか?

Java Swing では、匿名アクション クラスの形式で、ビューにコントローラー コードを含めることができます。モデル クラスに描画コードを入れるように言いました。

コードは必ずしも分離されているわけではありませんが、機能は分離されています。モデル クラスの描画コードは、描画 JPanel によって実行されます。ビュー クラスのコントロール コードは、コントロール アクションの一部として実行されます。

この記事Sudoku Solver Swing GUIを見て、適度に複雑な Swing GUI を組み立てる方法を確認してください。お見せできるビデオゲームの例はありません。

于 2013-05-21T19:04:15.610 に答える