Domanda

Quindi sto costruendo il gioco pacman in Java per insegnarmi la programmazione del gioco.

Ho la finestra di gioco di base con lo sprite pacman e gli sprite fantasma disegnati, il pacman si muove con i tasti freccia, non si sposta oltre i muri della finestra, ecc. Ora sto cercando di costruire il labirinto, come in questa immagine:

Pacman maze

Senza darmi la soluzione diretta / completa a questo, qualcuno può guidarmi su come può essere costruito? Sto parlando solo dei confini e dei tubi (segni a 'T') qui che non puoi attraversare e devi andare in giro. Non i punti che il pacman mangia ancora.

Ecco le mie domande:

1) Qual è l'algoritmo / metodo più efficiente per creare questo labirinto? Dovrà essere disegnato ogni volta che viene chiamato il metodo paint () o c'è un modo per disegnarlo solo all'inizio del gioco e mai più?

2) Come verrà effettivamente disegnato sullo schermo? Presumo che verrà utilizzato fillRect () ?

3) Qualsiasi suggerimento sul rilevamento delle collisioni (quindi il pacman / i fantasmi non possono attraversare i muri) sarebbe utile.

4) Qualsiasi suggerimento su come verrà calcolato lo spazio libero tra i tubi in modo che i punti possano essere riempiti tra loro sarà anche molto utile.

Grazie

È stato utile?

Soluzione

Non lo farei in questo modo.

Disegnerei la mappa grafica e quindi creerei un array di dati 2D che rappresenta la mappa. La mappa dei dati sarebbe responsabile per determinare le collisioni, mangiare punti, dove sono le caramelle e dove sono i fantasmi. Una volta gestita tutta la logica di tutto, basta usare l'array 2D per visualizzare tutto nelle coordinate dei pixel appropriate sulla mappa grafica.

Ad esempio l'utente sta premendo il tasto sinistro. Innanzitutto si determina che pacman si trova nell'elemento 3, 3. L'elemento 3, 2 contiene informazioni che indicano un muro in modo da poter implementare il codice per fargli ignorare il comando.

EDIT:

Ogni elemento rappresenterebbe la posizione di un punto. Ad esempio:

No, guardando la scheda direi che l'array sarebbe simile a questo.

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

E così via. Potresti voler scegliere una struttura di dati più flessibile rispetto ai soli caratteri, poiché alcune aree devono contenere un sacco di informazioni diverse. IE anche se l'area di generazione dei fantasmi è vuota, Pacman non è ammesso lì. Il movimento dei fantasmi e del pacman è diverso per le fughe laterali, il punto di spawn delle caramelle è un punto vuoto ma se vuoi rimanere flessibile vorrai indicare dove si trova su una base per mappa.

Un'altra cosa che dovresti ricordare è che pacman e i fantasmi sono spesso tra i punti, quindi contenere informazioni che rappresentano una percentuale di spazio che occupano tra 1,2 e 1,3 è importante per il rilevamento delle collisioni poiché oltre a determinare quando vuoi rimuovere punti, power-up e caramelle dal tabellone.

Altri suggerimenti

Ecco un suggerimento per te:

alt text http://www.freeimagehosting.net/uploads/66e4131f59.jpg

Questo suggerimento, usato correttamente, ti permetterà di gestire il rendering e il rilevamento delle collisioni e ti permetterà anche di rappresentare il labirinto in modo compatto.

  1. Puoi dipingere la mappa in una BufferedImage e disegnarla semplicemente su ogni paint (). Otterrai prestazioni abbastanza ragionevoli in questo modo.

  2. Se sei soddisfatto del fatto che i muri siano solidi, puoi disegnare ogni blocco quadrato di muro con fillRect. Se desideri avere lo stesso aspetto dell'immagine, devi capire come disegnare le linee nel modo giusto e usare gli archi per gli angoli.

  3. La mappa del gioco Pacman è composta da quadrati e Pacman e i fantasmi si muovono sempre da un quadrato a quello vicino in un passo animato (cioè premendo a destra, il pacman si sposta di un quadrato a destra). Ciò significa che il rilevamento delle collisioni è semplice: semplicemente non consentire spostamenti su quadrati non vuoti.

  4. Non capisco cosa stai cercando di chiedere qui.

1) Solo per dare il mio consiglio sul ridisegno. Qualcosa che puoi fare se trovi che ridisegna l'intera immagine è lenta, è determinare solo gli elementi che sono cambiati sullo schermo e ridisegnarli. Un approccio per questo sarebbe il seguente: Determinare gli sprite che si sono mossi. Determina (approssimativamente) un rettangolo attorno a quegli sprite. Ridisegna solo quei rettangoli. In questo modo si aggiornano solo parti dello schermo e non l'intero schermo. Ciò dovrebbe comportare un aumento delle prestazioni rispetto al ridisegno dell'intero schermo.

Le altre risposte sono state ragionevoli per le altre domande che hai posto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top