質問

だから私はJavaでパックマンゲームを構築して、ゲームプログラミングを自習しています。

パックマンスプライトとゴーストスプライトが描かれた基本的なゲームウィンドウがあります。パックマンは矢印キーで移動し、ウィンドウの壁を越えて移動しません。今、迷路を構築しようとしていますこの写真のように:

パックマン迷路

これに対する直接/完全なソリューションを提供せずに、誰かがこれをどのように構築できるかについて私を導くことができますか?ここでは、境界とパイプ( 'T'マーク)についてのみ説明していますが、これらは通過できず、回避する必要があります。パックマンが食べるドットではありません。

ここに私の質問があります:

1)この迷路を作成するための最も効率的なアルゴリズム/方法は何ですか? paint()メソッドが呼び出されるたびに描画する必要がありますか、それともゲームの開始時にのみ描画し、二度と描画する方法はありますか?

2)これは実際にどのように画面に描画されますか? fillRect()が使用されると思いますか?

3)衝突検出に関するヒント(パックマン/ゴーストが壁を通過できないようにする)が役立ちます。

4)パイプ間の空きスペースがどのように計算されるかについてのヒントは、それらの間にドットを埋めることができるので非常に役立ちます。

ありがとう

役に立ちましたか?

解決

私はそうはしません。

グラフィカルマップを描画してから、マップを表す2Dデータ配列を作成します。データマップは、衝突の判定、ドットの食べ方、キャンディーの場所、ゴーストの場所を決定します。すべてのすべてのロジックが処理されると、2D配列を使用して、グラフィカルマップ上の適切なピクセル座標ですべてを表示します。

たとえば、ユーザーは左キーを押しています。まず、pacmanが要素3、3にあることを確認します。要素3、2には壁を示す情報が含まれているため、コードを実装してコマンドを無視することができます。

編集:

各要素は、ドットが存在する可能性のある場所を表します。例:

いいえ、ボードを見ると、配列は次のようになります。

d,d,d,d,d,d,d,d,d,d,d,d,w,w,d,d,d,d,d,d,d,d,d,d,d,d
d,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,d
p,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,p    
d,w,w,w,w,d,w,w,w,w,w,d,w,w,d,w,w,w,w,w,d,w,w,w,w,d    
d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d,d

など。ただし、一部の領域にはさまざまな情報を含める必要があるため、単なる文字よりも柔軟なデータ構造を選択することをお勧めします。 IEは、ゴーストスポーンエリアが空白であっても、pacmanは許可されていません。ゴーストとパックマンの動きはサイドエスケープによって異なります。キャンディスポーンポイントは空白のスポットですが、柔軟性を維持したい場合は、マップごとに位置を指定する必要があります。

覚えておくべきもう1つのことは、pacmanとゴーストがポイントの中間にあることが多いことです。そのため、衝突検出には、スペースの割合を表す情報を含めることが重要です。ボードからドット、パワーアップ、キャンディーを削除するタイミングを決定します。

他のヒント

ヒントは次のとおりです。

代替テキストhttp://www.freeimagehosting.net/uploads/66e4131f59.jpg

このヒントを適切に使用すると、レンダリングと衝突検出を処理でき、迷路をコンパクトに表現することもできます。

  1. マップをBufferedImageにペイントし、すべてのpaint()でそれをdrawImageすることができます。この方法で非常に合理的なパフォーマンスが得られます。

  2. 壁がしっかりしていることに満足している場合、fillRectを使用して各正方形の壁ブロックを描画できます。写真と同じ外観にしたい場合は、正しい方法で線を描画し、角に円弧を使用する方法を考える必要があります。

  3. Pacmanゲームマップは正方形とPacmanで構成され、幽霊は常にアニメーション化されたステップで1つの正方形から隣接する正方形に移動します(つまり、右を押すと、pacmanは1つの正方形を右に移動します)。これは、衝突の検出が簡単であることを意味します。単に、空でない正方形への移動を許可しないでください。

  4. ここで何を尋ねようとしているのかわかりません。

1)再描画についてのアドバイスをお願いします。画像全体の再描画が遅い場合にできることは、画面上で変更された要素のみを判断し、それらを再描画することです。このアプローチは次のとおりです。移動したスプライトを特定します。これらのスプライトの周りの長方形を決定(概算)します。それらの長方形のみを再描画します。この方法では、画面全体ではなく、画面の一部のみを更新します。これにより、画面全体を再描画するよりもパフォーマンスが向上します。

他の答えは、あなたが尋ねた他の質問に対して妥当でした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top