Permalänk
Medlem

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) { } }

Permalänk
Medlem

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.

Permalänk
Medlem

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..

Permalänk
Medlem

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

Permalänk
Medlem
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?