Trädvy Permalänk
Medlem
Plats
Blekinge
Registrerad
Maj 2008

Java, flytta pacman..

Hej, jag arbetar me att försöka skapa ett pacmanliknande spel. Jag har nu banan som en matris..

static int board[][] = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1}, {1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, {1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1}, {1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1}, {1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1}, {1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1}, {1,1,1,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1}, {0,0,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,0,0}, {1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1}, {1,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,1}, {1,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1}, {1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1}, {1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, {1,0,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1}, {1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} };

Där nummer 1 representerar väggarna och där 0 är vägen där pacman ska röra sig. I mitten finns en 2, det är pacmanplayern..

public void paint (Graphics g) { for(int i=0; i < board.length; i++) { for(int j=0; j < board.length; j++) { switch (board[i][j]) { case 0: { } break; case 1: { g.setColor(Color.blue); g.fillRect(xmat,ymat,35,35); g.setColor(Color.blue); g.drawRect(xmat,ymat,35,35); } break; case 2: { g.drawImage(img, xmat, ymat, null); } break; } xmat = xmat + 35; } ymat = ymat + 35; xmat = 0; } ymat = 0; }

Nästa steg är att få pacman att flytta sig vid knapptryckningarna, höger så ska den flytta ett steg höger i matrisen....osv. Hur och var ska jag skriva detta?

Här har jag att den sätter riktning i min playerklass.

public void playerMove(KeyEvent e) { //sätter riktning. sätter den ska stanna. if (e.getKeyCode() == KeyEvent.VK_UP) { direction=1; System.out.println("TEST UPP"); } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { direction=2; System.out.println("TEST NER"); } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { direction=3; System.out.println("TEST NER"); } else if (e.getKeyCode() == KeyEvent.VK_LEFT) { direction=4; System.out.println("TEST VÄNSTER"); } } public void move(){ //läser av riktningen och ändrar på x eller yberoende påriktning. //kollisionsdetektion här sen också. if (direction==1){ } else if (direction==2) { } else if (direction==3) { } else if (direction==4) { } }

Trädvy Permalänk
Medlem
Plats
Kristianstad
Registrerad
Apr 2009

Jag hade flyttat ut pac man ur matrisen. För annars blir det jobbigt och man måste hålla koll på
vad för typ som pac man står på. Spara pac mans koordinat och rita upp honom allra sist.
Därefter när du flyttar pac man är det bara till att uppdatera koord. Givetsvis måste du kolla så pac man inte går in i någon vägg.

Trädvy Permalänk
Medlem
Plats
Blekinge
Registrerad
Maj 2008

Men det borde inte vara så krångligt eller?

När man trycker höger är direction=2, kan man inte då skriva på något sätt att rutan i matrisen med värdet 2 (playern), ska flyttas en ruta höger? osv osv..

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Apr 2002

Om du bryter ut pacman, och på så sätt har hans kordianter vid sidan av så kan du göra något i stil med nedan.

switch ( direction ) { case 1 : //UP pacman.y--; break; case 2 : //RIGHT pacman.x++; break; case 3 : //DOWN pacman.y++; break; case 4 : //LEFT pacman.x--; break; } if(pacman.x < 0 || pacman.y < 0 || pacman.x > MAX_WIDTH || pacman.y > MAX_HIGTH) //OUTSIDE BOARD!!! else if(board[pacman.x][pacman.y] != 0) // CRASH

CPU: i7 6700k + Fractal Design S24 GPU: ASUS GeForce GTX 1070 8GB DUAL OC RAM: Kingston 16GB 2133MHz CL13 MB: MSI GAMING M7 PSU: EVGA Supernova G2 850W, 80+ Gold SSD: Samsung SM951 256GB M.2 NVMe + Samsung EVO 850 250GB M.2 Chassi: Fractal Design S OS: W10 Pro Skrämar: Acer XB270HU + 2x Dell U2412M
NAS: Synology DS415+ (4x WD RED 6 TB) Console: Xbox One

Trädvy Permalänk
Medlem
Plats
Blekinge
Registrerad
Maj 2008
Citat:

else if(board[pacman.x][pacman.y] != 0)
// CRASH

Detta är jag osäker på hur jag ska få att fungera, det andra har jag nog fått rätt nu så att den stoppar vid ytterväggarna. Men att den ska stoppa vid matrisens väggar kämpar jag med.... HJÄLP?