ruch w grze sokoban

0

ledwo zaczynam przygodę z programowaniem.
mam utworzoną tablicę 2D i na niej 'poustawiane' elementy gry(ściany, piłeczki, gracza).
Utknęłam przy próbie poruszenia się graczem. Utworzyłam metodę(w klasie w której implementuję KeyListener) odpowiedzialną za przycisnięcię klawisza, ale niestety nie działa:

public void keyPressed(KeyEvent e) {
        	int key = e.getKeyCode();
        	switch(key){
        	case KeyEvent.VK_A:
        		if(pole[poz1][poz2-1]==0)
        		{
        			pole[poz1][poz2-1]=4;
        			pole[poz1][poz2]=0;
        			poz2--;
        		}
        		break;
        	}
}

poz1 i poz2 to pozycja bohatera w mojej macierzy. może ktoś potrafi mi pomóc?

0

Źle podchodzisz do tematu.. Musisz wykorzystywać programowanie obiektowe, podam Ci przykład:

 	public GameDisplayComponent() {
		addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent e) {
				if (getGame() == null)
					return;
				if (e.getKeyCode() == KeyEvent.VK_UP)
					getGame().setDirection(Direction.UP);
			}
		});
	}

Czyli: Informacja o wciśnięciu klawisza jest przekazywana do obiektu Game jako kierunek, (metoda setDirection).

0
Ilidan18 napisał(a):

Źle podchodzisz do tematu.. Musisz wykorzystywać programowanie obiektowe, podam Ci przykład:

 	public GameDisplayComponent() {
		addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent e) {
				if (getGame() == null)
					return;
				if (e.getKeyCode() == KeyEvent.VK_UP)
					getGame().setDirection(Direction.UP);
			}
		});
	}

Czyli: Informacja o wciśnięciu klawisza jest przekazywana do obiektu Game jako kierunek, (metoda setDirection).

A w obiekcie Game znajduje się kolejny obiekt np.Gracz ,w którym to dopiero wykonujemy zmiany ;).

1 użytkowników online, w tym zalogowanych: 0, gości: 1