hallo ich möchte ein schachspiel programmieren, und ich habe jetzt schon alle Figuren außer dem könig programmiert und es funktiert alles. Allerdings bin ich beim König auf Schwierigkeiten gestoßen und bevor ich jetzt versuche wieder einen schlechten ansatz zu programmieren wollte ich euch mal fragen wie ihr das so machen würdet. Hiermal die methoden die schon zur verfügung stehen
legalmove enthält alle figuren außer dem König bis jetzt allerdings weiß ich nicht wie ich schachüberprüfen soll oder wenn z.b. die dame auf eine rochaden feld zeigt dann kann man ja nicht mehr rochieren. meine frage ist jetzt wie würdet ihr implementieren das der könig auf bestimmte felder nicht gehen kann weil er sonst dort geschmießen werden könnte mein ansatz bis jetzt ist
ich lass die figurliste durchlaufen für weiß nur die - wert und umgekehrt um dann irgentwie zu überprüfen ob eine figur auf dieses Feld könnte (allerdings ist das glaube ich mit legalmove nicht möglich den dann braucht man ja auch den jetztx, jetzty, wo geguckt wird ob das auch die klassenvariable ist)
ich freue mich auf feedback und wenn ihr sonstige verbesserungsvorschläge habt schreibt sie bitte rein, da ich noch recht neu im Programmiern bin gibts bestimmt auch einfachere Lösungen
Java:
public class Schachbrett{
private int [][]schachbrett=new int [8][8];// alle Variablen in den methoden sind int außer es steht was anderes da
private int [][][]spielverlauf=new int[300][8][8];
//getter setter konstruktur führe ich mal nicht auf sind aber vorhanden
public void schachbrettausgeben();//drucke schachbrett in konsole
public int [][] spielbeginn();//setze die anfangsaufstellung
public int [][] figurbewegen(a[][], jetztx, jetzty, dannx, danny)// bewege figur
public int [][][] spielverlaufaktualisieren(moveanzahl);// setze schachbrett auf moveanzahl in spielverlauf
public void spielverlaufausgeben(moveanzahl);// gebe spielbrett in move x aus
}public class Figur{
private int gaphik;
private int x;
private int y;
private int movezähler=0;
//Konstanten setzung (bsp static int TURMW=5)für alle Figuren (schwarz ist negativ weiß positiv)
public static boolean istfreiturm(a[][], jetztx,jetzty,dannx,danny,graphik)// schaue ob die felder frei sind für turm
public static boolean istfreiläufer(a[][],jetztx,jetzty,dannx,danny,graphik)// selbe für läufer
public static boolean bauermovement(a[][], jetztx,jetzty,dannx,danny,graphik,movezähler,b[][][], moveanzahl)//prüfe auf anpasarschlagen 2 vormoven
public boolean legalmove(a[][], jetztx,jetzty,dannx,danny,b[][][], moveanzahl)// nutze die drei obigen methoden um zurück zugeben ob der move erlaubt ist oder nicht
}public class Spiel{
//erstelle figur array mit allen Figuren
// methoden um nutzerinput für jetztx,jetzty,dannx,danny zu bekommen
Schachbrett schachbrett1.new Schachbrett();
schachhbrett1.spielbeginn;
int moveanzahl=0;
while(spielnichtzuende){
moveanzahl++;
schachbrett1.spielverlaufaktualisieren(moveanzahl);
schachbrett1.schachbrettausgeben();
//methoden für nutzerinput
for(Figur a:figurliste){
if(a.legalmove(schachbrett1.getschachbrett(),jetztx,jetzty,dannx,danny,schachbrett1.getSpielverlauf(),moveanzahl){
}
}
}
}
ich lass die figurliste durchlaufen für weiß nur die - wert und umgekehrt um dann irgentwie zu überprüfen ob eine figur auf dieses Feld könnte (allerdings ist das glaube ich mit legalmove nicht möglich den dann braucht man ja auch den jetztx, jetzty, wo geguckt wird ob das auch die klassenvariable ist)
ich freue mich auf feedback und wenn ihr sonstige verbesserungsvorschläge habt schreibt sie bitte rein, da ich noch recht neu im Programmiern bin gibts bestimmt auch einfachere Lösungen