Zasady gry w szachy - interface

0

Witajcie,
mam problem z zaimplementowania programy pt Zasady gry w szachy, czy zechciałby ktoś pomóc amatorowi ?Smile

Poniżej zamieszczam treść zadania:

W interfejsie ZasadyGry prosze utworzyc dwie klasy wewnetrzne Konik oraz Hetman implementujace ten interfejs. Klasy maja weryfikowac poprawnosc proponowanego ruchu zgodnie z zasadami obowiazujacymi w szachach.

interface ZasadyGry {
/** Metoda zwraca true, tylko gdy przejscie z polozenia
    (x_pocz, y_pocz) na (x_konc, y_konc) w jednym ruchu jest zgodne
    z zasadami gry w szachy */
   boolean ruchPoprawny( int x_pocz, int y_pocz, int x_konc, int y_konc );
   
   class Konik implements ZasadyGry {
      public boolean ruchPoprawny( int x_pocz, int y_pocz, int x_konc, int y_konc ) {
         return true;  // tu brak kodu
      }
   }   
   
   class Hetman implements ZasadyGry {
      public boolean ruchPoprawny( int x_pocz, int y_pocz, int x_konc, int y_konc ) {
         return true;  // tu brak kodu
      }
   }
}

Z góry dziękuje za pomoc !Smile Należy uzupełnić podany fragment w miejscu "tu brak kodu"

Pozdrawiam !!Smile

0

W czym masz problem?
Nie znasz Javy, czy szachów?
http://pl.wikipedia.org/wiki/Zasady_gry_w_szachy#Podstawowe_ruchy

0

Problem leży po stronie JAVY, niestety nie wiem od czego zacząć :)

0

Najpierw połóż przed sobą szachownicę i napisz sobie na kartce algorytmy obliczające czy pole docelowe jest prawidłowe dla danej bierki czy nie. To w sumie parę zdań typu "jeżeli x to y" i trochę arytmetyki do przeliczania współrzędnych. A potem przepisz to do Javy.

BTW, treść zadania też jakaś ułomna, koniki to są polne.

0

Metody ruchPoprawny(...) mają działać na pustej szachownicy, czy mają uwzględniać inne stojące na szachownicy figury.

0

Mają działać na pustej szachownicy :)

0

Dla skoczka (zakładam, że współrzędne są od 1 do 8):

class Skoczek implements ZasadyGry 
{
      public boolean ruchPoprawny( int x_pocz, int y_pocz, int x_konc, int y_konc ) 
      {
           //nie wiem czy jest to wymagane - sprawdzam czy skoczek przed ruchem stoi na szachownicy
           if(x_pocz<1 || x_pocz>8 || y_pocz<1 || y_pocz>8)
           {
                return false;
           }
           //sprawdzam czy skoczek po ruchu stoi na szachownicy
           if(x_konc<1 || x_konc>8 || y_konc<1 || y_konc>8)
           {
                return false;
           }
           //podczas ruchu skoczka jedna współrzędna zmienia się o 2, a druga o 1
           if(Math.abs(x_pocz-x_konc)==1 && Math.abs(y_pocz-y_konc)==2)
           {
                return true;
           }
           if(Math.abs(x_pocz-x_konc)==2 && Math.abs(y_pocz-y_konc)==1)
           {
                return true;
           }
           return false;
      }
   }  
0

Bardzo Ci dziękuje za implementację konika, a czy byłbyś w stanie stworzyć jeszcze Hetmana, z góry dziękuje :)

6

Byłbym, ale nie chcę Ci odbierać satysfakcji z samodzielnie zrobionego zadania.

2

Bardzo Ci dziękuje za implementację konika, a czy byłbyś w stanie stworzyć jeszcze Hetmana, z góry dziękuje

Napisz w dziale praca, tam ci chętnie pomogą. Bo widać że to pytanie nie jest prośbą o pomoc a prośbą o odwalenie roboty.

0

Wziąłem sobie wasze rady do serca, postanowiłem sam napisać kod ale coś mi nie działa z klasą Konika napisaną przez bo, czy mógłby ktoś do tego zerknąć:

 interface ZasadyGry {
/** Metoda zwraca true, tylko gdy przejscie z polozenia
    (x_pocz, y_pocz) na (x_konc, y_konc) w jednym ruchu jest zgodne
    z zasadami gry w szachy */
   boolean ruchPoprawny( int x_pocz, int y_pocz, int x_konc, int y_konc );
   
   class Konik implements ZasadyGry {
	   public boolean ruchPoprawny( int x_pocz, int y_pocz, int x_konc, int y_konc ) {
	   if(x_pocz+1 == x_konc){
	   if((y_pocz+2 == y_konc) || (y_pocz-2 == y_konc))
		   return true;
	   }
	   if(x_pocz-1 == x_konc){
	   if((y_pocz+2 == y_konc) || (y_pocz-2 == y_konc)) 
		   return true;
	   }
	   if(x_pocz+2 == x_konc){
	   if((y_pocz+1 == y_konc) || (y_pocz-1 == y_konc))
		   return true;
	   }
	   if(x_pocz-2==x_konc){
	   if((y_pocz+1==y_konc) || (y_pocz-1==y_konc)) 
		   return true;
	   }
	   	return false;
	 }
	} 
   
   
  class Hetman implements ZasadyGry {
	  public boolean ruchPoprawny( int x_pocz, int y_pocz, int x_konc, int y_konc ) {
		  if(x_pocz == x_konc || y_pocz == y_konc) 
		  {		  
			  return true;
		  }
		  if(x_pocz+y_pocz == x_pocz+y_pocz || x_pocz-y_pocz == x_pocz-y_pocz)
		  {
		  return true;
		  }
	  
		return false;  
   }
}
 



class Start {	 
	public static void main(String[] args) {
		Konik mk = new Konik();
		Hetman mh = new Hetman();

		System.out.print("Czy dobry ruch skoczka:");
		if(mk.ruchPoprawny(0, 0, 2, 1)){
		System.out.println("dobry");
		}
		else System.out.println("zły");
		System.out.print("Czy dobry ruch hetmana:");
		if(mh.ruchPoprawny(0, 0, 3, 2)){
		System.out.println("dobry");
		}
		else System.out.println("zły");
	   }
}}


	   
	   

	

Przy moich ruchach pokazuje że w oby przypadkach ruch wykonano poprawnie, niestety przy klasie bo, pokazuje przy Konik bład :(

0

Mój komentarz do mojej klasy:

Dla skoczka (zakładam, że współrzędne są od 1 do 8):

Twój kod:

if(mk.ruchPoprawny(0, 0, 2, 1))

0

racja, mój bład teraz działa świetnie, ale pojawil sie problem z hetmanem dla każdych wartości jest wynik dobry, coś pochrzaniłem z warunkami <myśli>

0

Dla jakich wartości x_pocz oraz y_pocz poniższy warunek nie jest spełniony?

x_pocz+y_pocz == x_pocz+y_pocz || x_pocz-y_pocz == x_pocz-y_pocz

0

Nowy kod, stary bład poprawiony, jednak mam też i tutaj mały problem, przy dodatnich współrzędnych wszystko działa poprawnie, natomiast przy ujemnych bądź przy wyjściu poza planszę kompilator pokazuj mi taką rzecz:

Czy dobry ruch konika (7,8) na (9,9)? (zlamane zasady): dobry
Czy dobry ruch konika (7,8) na (5,7)? (dobry): dobry
Czy dobry ruch hetmana (1,1) na (-2,1)? (zlamane zasady): dobry
Czy dobry ruch hetmana (1,0) na (0,0)? (zlamane zasady): dobry

Jaki warunek trzeba dodać by podczas wyjścia poza planszę pokazało złe ?

interface ZasadyGry {
/** Metoda zwraca true, tylko gdy przejscie z polozenia
    (x_pocz, y_pocz) na (x_konc, y_konc) w jednym ruchu jest zgodne
    z zasadami gry w szachy */
   boolean ruchPoprawny( int x_pocz, int y_pocz, int x_konc, int y_konc );
   
   class Konik implements ZasadyGry {
	   public boolean ruchPoprawny( int x_pocz, int y_pocz, int x_konc, int y_konc ) {
		   if(Math.abs(x_pocz-x_konc)==1 && Math.abs(y_pocz-y_konc)==2)
           {
                return true;
           }
           if(Math.abs(x_pocz-x_konc)==2 && Math.abs(y_pocz-y_konc)==1)
           {
                return true;
           }
           return false;
      }
   }  
   
   
  class Hetman implements ZasadyGry {
	  public boolean ruchPoprawny( int x_pocz, int y_pocz, int x_konc, int y_konc ) {
		  if((x_pocz == x_konc) && (y_pocz == y_konc))
		  {
			  return false;
		  }
		  if(x_pocz == x_konc || y_pocz == y_konc)
		  {		  
			  return true;
		  }
		  if(x_pocz+y_pocz == x_konc+y_konc || x_pocz-y_pocz == x_konc-y_konc)
		  {
		  return true;
		  
		  }
	  
		return false;  
   }
}

  class Start {public static void main(String[] args) {ZasadyGry.Konik mk = new ZasadyGry.Konik();ZasadyGry.Hetman mh = new ZasadyGry.Hetman();System.out.print("Czy dobry ruch konika (1,1) na (-2,1)? (zlamane zasady): ");if(mk.ruchPoprawny(1, 1, -2, 1)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch konika (1,0) na (0,0)? (zlamane zasady): ");if(mk.ruchPoprawny(1, 0, 0, 0)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch konika (1,1) na (3,2)? (dobry): ");if(mk.ruchPoprawny(1, 1, 3, 2)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch konika (1,1) na (3,1)? (zly): ");if(mk.ruchPoprawny(1, 1, 3, 1)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch konika (7,7) na (8,8)? (zly): ");if(mk.ruchPoprawny(7, 7, 8, 8)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch konika (7,8) na (9,9)? (zlamane zasady): ");if(mk.ruchPoprawny(7, 8, 9, 9)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch konika (7,8) na (5,7)? (dobry): ");if(mk.ruchPoprawny(7, 8, 5, 7)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch hetmana (1,1) na (-2,1)? (zlamane zasady): ");if(mh.ruchPoprawny(1, 1, -2, 1)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch hetmana (1,0) na (0,0)? (zlamane zasady): ");if(mh.ruchPoprawny(1, 0, 0, 0)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch hetmana (1,1) na (3,2)? (zły): ");if(mh.ruchPoprawny(1, 1, 3, 2)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch hetmana (1,1) na (3,1)? (dobry): ");if(mh.ruchPoprawny(1, 1, 3, 1)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch hetmana (7,7) na (8,8)? (dobry): ");if(mh.ruchPoprawny(7, 7, 8, 8)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch hetmana (7,8) na (9,9)? (zlamane zasady): ");if(mh.ruchPoprawny(7, 8, 9, 9)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch hetmana (7,8) na (5,7)? (zły): ");if(mh.ruchPoprawny(7, 8, 5, 7)) System.out.println("dobry");else System.out.println("zły");}}
}
1
  1. W szachach nie ma figury o nazwie Konik, jest Skoczek.
  2. "Moja" klasa Skoczek sygnalizowała wyjście poza planszę, usunąłeś tę sygnalizację.
  3. Kodu na końcu Twojego postu nie da się czytać.
2
siwy1991 napisał(a)
class Start {public static void main(String[] args) {ZasadyGry.Konik mk = new ZasadyGry.Konik();ZasadyGry.Hetman mh = new ZasadyGry.Hetman();System.out.print("Czy dobry ruch konika (1,1) na (-2,1)? (zlamane zasady): ");if(mk.ruchPoprawny(1, 1, -2, 1)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch konika (1,0) na (0,0)? (zlamane zasady): ");if(mk.ruchPoprawny(1, 0, 0, 0)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch konika (1,1) na (3,2)? (dobry): ");if(mk.ruchPoprawny(1, 1, 3, 2)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch konika (1,1) na (3,1)? (zly): ");if(mk.ruchPoprawny(1, 1, 3, 1)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch konika (7,7) na (8,8)? (zly): ");if(mk.ruchPoprawny(7, 7, 8, 8)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch konika (7,8) na (9,9)? (zlamane zasady): ");if(mk.ruchPoprawny(7, 8, 9, 9)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch konika (7,8) na (5,7)? (dobry): ");if(mk.ruchPoprawny(7, 8, 5, 7)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch hetmana (1,1) na (-2,1)? (zlamane zasady): ");if(mh.ruchPoprawny(1, 1, -2, 1)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch hetmana (1,0) na (0,0)? (zlamane zasady): ");if(mh.ruchPoprawny(1, 0, 0, 0)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch hetmana (1,1) na (3,2)? (zły): ");if(mh.ruchPoprawny(1, 1, 3, 2)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch hetmana (1,1) na (3,1)? (dobry): ");if(mh.ruchPoprawny(1, 1, 3, 1)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch hetmana (7,7) na (8,8)? (dobry): ");if(mh.ruchPoprawny(7, 7, 8, 8)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch hetmana (7,8) na (9,9)? (zlamane zasady): ");if(mh.ruchPoprawny(7, 8, 9, 9)) System.out.println("dobry");else System.out.println("zły");System.out.print("Czy dobry ruch hetmana (7,8) na (5,7)? (zły): ");if(mh.ruchPoprawny(7, 8, 5, 7)) System.out.println("dobry");else System.out.println("zły");}}
}

stary co to ma być?! Ogarnij się trochę bo to nie jest już kwestia "programuje ktoś / nie programuje" tylko samej estetyki. Mnie nawet na początku swojej przygody z klepaniem kodu nigdy nie przyszłoby na myśl, żeby w ten sposób pisać, a tym bardziej oczekiwać od kogoś aby to przeczytał za mnie i poszukał co nie działa! Uważam, że z twojej strony to jest bezczelność wrzucać taki kod i dziwie się, że jeszcze ktoś ci pomaga.

0

Ogarnąć to powinieneś się raczej Ty :). Czytać chyba przyjacielu nie potrafisz, wyraźnie napisane jest że problem jest z interfejsem nie z klasą testującą Start(tak więc ta klasa to tylko dodatek i nigdzie nie jest napisane że oczekuję pomocy właśnie tej klasy), z tego co widzę tam wszystko jest poprawnie. "Nie bezczelny" człowieku, czytaj dokładniej posty.

0

Alternatywa jest taka.
Albo ten pięknie sformatowany kod jest potrzebny by zrozumieć Twój problem, wtedy umieszczenie go jest bezczelnością. Albo nie jest potrzebny, wtedy umieszczenie go jest skrajną głupotą.

0

A wystarczyłoby użyć pętli i tablicy, żeby nie tworzyć takiego koszmaru.

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