Ruch piona

0

Nie rozumiem dlaczego ten kod nie chce mi działać... Podkreślam że nie pisze całych szachów tylko chcę zmienić pozycję piona. Poproszę was o jakieś sugestie dzięki z góry.

public class WiezaDemo {
    public static void main(String[] args) {

        Pion pion = new Pion();
        pion.rzad = 2;
        pion.kolumna= 2;
        pion.pokazPiona();
        pion.ruchPiona(3,3);
        pion.pokazPiona();
    }
}
class Pion {
    int rzad;
    int kolumna;

    public void pokazPiona() {
        for (int x = 0; x < 10; x++) {
            for (int y = 0; y < 10; y++) {
                if (kolumna == x && rzad == y) {
                    System.out.print("$ ");
                } else {
                    System.out.print("* ");
                }
            }
            System.out.println();
        }
        System.out.println();
    }

    public void ruchPiona(int kolumna, int rzad) {
        if ( this.kolumna == kolumna + 1 && this.rzad == rzad ) {
            this.kolumna = kolumna;
            this.rzad = rzad;
        } else if (this.rzad == rzad + 1 || this.rzad == rzad - 1 && this.kolumna == kolumna + 1 ) {
            this.kolumna = kolumna;
            this.rzad = rzad;
        } else{
            System.out.println("Zły ruch");
        }
    }
}
0

Bo zaprogramowałeś coś takiego,

  if ( this.kolumna == kolumna + 1 && this.rzad == rzad ) {

jeżeli 2 jest równe (3 + 1) oraz 2 równa sę 3

else if (this.rzad == rzad + 1 || this.rzad == rzad - 1 && this.kolumna == kolumna + 1 ) {

jeżeli 2 jest równe (3 + 1) lub 2 == (3 - 1) oraz 2 jest równe 4

0

@Emdzej93:
if ( this.kolumna == kolumna + 1 && this.rzad == rzad ) {
Ja to rozumiem tak: jeżeli kolumna zwiększy się o 1 i rzad się nie zmieni to wykona się ta instrukcja.

else if (this.rzad == rzad + 1 || this.rzad == rzad - 1 && this.kolumna == kolumna + 1 ) {
jezeli zmienie pozycje w rzedzie o +1 lub -1 i kolumna ziwększy się o jedn to wykona się ta instrukcja

W jaki sposób sformatować ten pierwszy warunek żebym mógł ruszyć się tylko w kolumnie o jeden a pozostając w tym samym rzędzie?
Próbowałem na wiele sposób i mi nie wychodzi ;/

1

this.kolumna == kolumna + 1 - w tym miejscu bierzesz faktyczną pozycję (kolumne) piona i sprawdzasz czy jest ona równa nowej pozycji która przekazujesz w parametrze zwiększonej o 1. Dlatego napisałem to liczbami jakie używasz, czyli sprawdzasz czy 2 równa się 4.

Chodziło Ci chyba o sprawdzenie czy this.kolumna + 1 == kolumna, czyli czy faktyczna pozycja piona zwiększona o 1, będzie się równać nowej wartości jaką przekazujesz.

Poczytaj co to jest this i o zasięgu zmiennych.
I upewnij się, że rozumiesz zasady szachów bo ruch piona z (2,2) na (3,3) to nie jest zwykły ruch tylko atak.

0

if ( this.kolumna == kolumna + 1 && this.rzad == rzad )

Oznacza, ze ruch jest legalny jesli nowa kolumna jest o 1 w lewo wzgledem obecnej kolumny oraz rzad sie nie zmienia.

else if (this.rzad == rzad + 1 || this.rzad == rzad - 1 && this.kolumna == kolumna + 1 )

To oznacza, ze ruch jest legalny jesli nowy rzad jest o 1 w gore lub w dol wzgledem obecnego oraz nowa kolumna jest o jeden w lewo wzgledem obecnej.


Moglem cos pomieszac w jezyku (pseudo) naturalnym.


W jaki sposób sformatować ten pierwszy warunek żebym mógł ruszyć się tylko w kolumnie o jeden a pozostając w tym samym rzędzie?

Problem jest taki, ze legalnosc ruchu w gore/dol zalezy od koloru piona

Czeeeekaj. Jak tak to teraz czytam - czy Ty wlasciwie wiesz czym jest rzad a czym kolumna? Czy w szachach jest to po prostu odwrocone??
Bo rzedy (wiersze) powinny byc poziome a kolumny pionowe.

0

@Emdzej93:
Dzięki, właśnie o to mi chodziło.
Pierwszy warunek miał mi pozwolić wykonać ruch do przodu o jedno pole.
Drugi warunek daje możliwość zbicia zarówno w prawą jak i lewą stronę.
A jeżeli próbowałbym wykonać niezgodny ruch to ma mi wywalić elsa "Zły ruch"
To było tylko ćwiczenie.

0

Drugi warunek daje możliwość zbicia zarówno w prawą jak i lewą stronę.

A gdzie sprawdzasz czy mozesz bic?

0

@stivens:
To tylko ćwiczenie, podkreśliłem na początku że nie piszę gry.
Moim celem było się dowiedzieć dlaczego mi nie czyta warunku :)
Dzięki panowie za pomoc.

0

To ze nie piszesz calej gry nie znaczy jeszcze, ze nie chcesz zeby ten maly fragment byl poprawny ;)

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