Spostamenti su una matrice in Java

20 April 2010

Java

Un piccolo esempio di rappresentazione di un movimento su una matrice, l’esempio è puramente esemplificativo..
Per realizzare un’applicazione con un’interfaccia grafica utilizzeremo poi i KeyListener per catturare gli eventi dei tasti freccia ed il paintComponent per stampare a video il movimento, e rappresenteremo gli oggetti con una classe ad-hock tipo “Omino” 🙂

import java.util.Scanner;
 
/**
 * Semplice classe che implementa una matrice con
 * un solo omino presente su di essa che si muove
 * nelle direzioni
 * nord : tasto 2
 * sud : tasto 3
 * est : tasto 4
 * ovest : tasto 1
 * uscita : tasto 0
 */
 
/**
 * @author Alessandro Musacchio
 *
 */
public class Matrice {
 
	private int[][] matrice;
	private int posX;
	private int posY;
	private int dim;
 
	public Matrice(int dim) {
		this.matrice = new int[dim][dim];
		this.dim = dim;
		this.posX = 0;
		this.posY = 0;
		// Setto la posizione iniziale da cui parte l'omino
		this.matrice[posY][posX] = 1;
	}
 
	public int[][] getMatrice() {
		return matrice;
	}
 
	public boolean muoviDestra() {
		// Controllo se sono al bordo
		if (posX+1 == dim) return false;
		// Mi muovo
		this.matrice[posY][posX] = 0; // Lascio il posto attuale
		this.posX++; // Modifico le coordinate
		this.matrice[posY][posX] = 1; // Occupo il nuovo posto
		return true;
	}
 
	public boolean muoviSinistra() {
		// Controllo se sono al bordo
		if (posX-1 == -1) return false;
		// Mi muovo
		this.matrice[posY][posX] = 0; // Lascio il posto attuale
		this.posX--; // Modifico le coordinate
		this.matrice[posY][posX] = 1; // Occupo il nuovo posto
		return true;
	}
 
	public boolean muoviSu() {
		// Controllo se sono al bordo
		if (posY-1 == -1) return false;
		// Mi muovo
		this.matrice[posY][posX] = 0; // Lascio il posto attuale
		this.posY--; // Modifico le coordinate
		this.matrice[posY][posX] = 1; // Occupo il nuovo posto
		return true;
	}
 
	public boolean muoviGiu() {
		// Controllo se sono al bordo
		if (posY+1 == dim) return false;
		// Mi muovo
		this.matrice[posY][posX] = 0; // Lascio il posto attuale
		this.posY++; // Modifico le coordinate
		this.matrice[posY][posX] = 1; // Occupo il nuovo posto
		return true;
	}
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Matrice mappa = new Matrice(10);
		Scanner sc = new Scanner(System.in);
		int val = 0;
		do {
			val = sc.nextInt();
			if (val == 1) {
				if (mappa.muoviSinistra()) {
					System.out.println("Mosso Sinistra");
				} else {
					System.out.println("Sei al bordo");
				}
			}
			if (val == 2) {
				if (mappa.muoviSu()) {
					System.out.println("Mosso Su");
				} else {
					System.out.println("Sei al bordo");
				}
			}
			if (val == 3) {
				if (mappa.muoviGiu()) {
					System.out.println("Mosso Giù");
				} else {
					System.out.println("Sei al bordo");
				}
			}
			if (val == 4) {
				if (mappa.muoviDestra()) {
					System.out.println("Mosso Destra");
				} else {
					System.out.println("Sei al bordo");
				}
			}
		} while (val != 0);
	}
}
Se ti è stato utile il mio articolo, spendi un secondo del tuo tempo e dammi un +1, Google ed io ne saremmo felici 🙂 Grazie mille 🙂
,

5 Responses to “Spostamenti su una matrice in Java”

  1. Salvatore Gentile Says:

    grazie mille!!!
    proprio quello che stavo cercando,
    e come al solito funziona perfettamente… 😀

    ciao

  2. predator1987 Says:

    Di niente 🙂
    Quando vuoi scrivimi tranquillamente.. 🙂

  3. Salvatore Gentile Says:

    Quando vuoi scrivimi tranquillamente..
    ecco fatto… 😀
    alè e come potrei fare a modificarlo, prendendo solo il caso di spostamento orizzontale, per mettere un’altro omino(nemico) dalla parte destra della matrice(nel caso di spostamento da sin a des) e che arrivato ad un certo punto (ad es metà matrice) lui mi avvista ed inizia a sparare?
    grazie anticipatamente 😀 scusa la rottura di scatole!!!!

  4. predator1987 Says:

    Ciao Sa.. Non ti preoccupare che non disturbi 🙂
    Supponendo di utilizzare questa rappresenzazione numerica della matrice, un nemico potrebbe essere rappresentato dal numero “9”, quindi quando si inizializza la matrice si mette il numero “1” in posizione (5,0) ad esempio ed il numero “9” in posizione (5,9), ora per muove il nemico bisogna utilizzare un thread che simuli il movimento del nemico ed ad ogni passo si controlla per esempio se la distanza dal tuo omino è minore di 2 allora chiama la funzione attacca()…
    Comunque per realizzare una cosa ci sono vari modi..
    A volte la matrice può risultare superflua perchè le informazioni sulla posizione di un omino le poi salvare in dei campi dell’ oggetto “omino”..
    Non so se mi sono spiegato?!

  5. Salvatore Gentile Says:

    Sì ti sei spiegato perfettamente 😀 grazie ancora una volta!!!!
    e scusa la mia ignoranza….

    ciao

Leave a Reply

*