趣味で 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モデルに従おうとしています...これは達成できますか?
ありがとうございました!
編集