Mouselistener zamiast Scanner

0

Witam serdecznie,

piszę z kolegą w projekcie gre warcaby i na początku zrobiliśmy sobie ruch pionkiem poprzez podanie współrzędnych Scannerem. Teraz gdy zrobiliśmy aplet 2d, dodaliśmy mouselistenera, który zwraca Nam dobre współrzędnie pola chciałbym zrezygnować ze Scannera, lub ew. zmienne z mouselistenera przekazywać do niego. Próbowałem już wielu sposobów i zdecydowałem się napisać tutaj, bo utknąłem w martwym punkcie

public void ruch(int xS,int yS, int xN, int yN, int gracz){
        boolean toLiczba;


        
        do {
            do{
                toLiczba=true;
                if(gracz==3){
                    System.out.print("\r Ruch Bialego (3)");
                } else {
                    System.out.print("\r Ruch Czarnego (2)");
                }
               System.out.println("\r \f podaj wspólrzedne, na których stoi pion (x-kolumna, y-wiersz)");
               System.out.print("x:");
               System.out.print(xmouse);
               wartXStr = wartosc.nextLine();
               System.out.print("y:");
               wartYStr = wartosc.nextLine();
                try{
                   //zmiana string na int
                   zmiennaX = Integer.parseInt(wartXStr); 
                   zmiennaY = Integer.parseInt(wartYStr);

                }
                //czy podana wartosc to liczba
                catch(NumberFormatException e){
                    System.out.println("Mozna podac tylko cyfre");
                    toLiczba=false;
                }
                //jezeli sczytana dana to liczba to flaga jest nie zmieniona i mozna
                //sprawdzic warunek, czy miesci sie w przedziale, tak aby odpowiadala odpowiedniej kolumnie/wierszowi
                if(toLiczba==true){
                    if(zmiennaX>7 || zmiennaY>7 || zmiennaX<0 || zmiennaY<0){
                        System.out.println("Podaj cyfre z zakresu 0-7");
                        toLiczba=false;
                    }
                }
            } while (toLiczba==false);
            
            //sprawdza czy jest zero w tym miejscu czy inny pion
            if(pole[zmiennaX][zmiennaY]==0 || pole[zmiennaX][zmiennaY]==1){
                System.out.println("Tu nie ma zandego piona");
            } else if (pole[zmiennaX][zmiennaY]!=gracz){
                System.out.println("Tylko piony o oznaczeniu: "+ gracz);
            }
        } while ((pole[zmiennaX][zmiennaY]!=gracz) && (xmouse != 0));

Próbowałem wrzucić w miejsce wartXStr = wartosc.nextLine(); zmienną z mouselisnera ze współrzedną, ale też mi to się nie udało.

Proszę o pomoc.

0

MouseListener nie jest raczej dobrym rozwiązaniem.
Jaką macie ideę wykonywania ruchu:

  • użytkownik naciska przycisk myszy na polu wejściowym, przeciąga wskaźnik myszy na pole docelowe i puszcza - wtedy MouseMoveListener
  • użytkownik klika wpierw w pole wejściowe, potem w docelowe - wtedy ActionListener.
0

Klikam na pole, które zwraca mi współrzędne, a potem klikam na inne pole.

public void mouseClicked(MouseEvent ev)
	{

		int xi = ev.getX();
		int yi = ev.getY();
		
                
 
		xmouse = (xi/40);
		ymouse = (yi/40);
                
 

        repaint(); 

Pole ma 40x40, wiec podzielenie przez 40 daje mi współrzędne :)

0

A w czy tkwi problem?

0

Połaczenie tego /mouseClicked ze Scannerem, który wkleiłem wcześniej. Nie udaje mi się to zadnym sposobem. Chyba że ogólnie zrezygnować ze scannera.

0

Zrezygnuj ze Scannera.

0

Właśnie problem w tym , że nie wiem jak podmienić scanner na mouseclick

0

Potrzebujesz flagi (zmiennej logicznej) np. start, która "wie" czy gracz wybiera pole startowe, czy docelowe.

public void mouseClicked(MouseEvent ev)
{
    int xi = ev.getX();
    int yi = ev.getY();
    if(start)
    {
         xmouseStart = (xi/40);
         ymouseStart = (yi/40);
         //sprawdzenie czy pole pola[xmouseStart][ymouseStart] należy do gracza i czy jakikolwiek ruch z tego pola jest możliwy
         if(moveCanStartHere())
         {
             start = false;
        }
    }
    else
    {
         xmouseEnd = (xi/40);
         ymouseEnd = (yi/40);
         if(moveCanEndHere())
         {
             move();
             start = true;
         }
    }
}

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