Bug in meinen schach spiel(C++)?

mjutu  15.12.2020, 14:22

Was genau siehst du? Was bedeutet "ist bei "Variable [0][0] nicht mehr" ?

amlis 
Beitragsersteller
 15.12.2020, 14:38

ist jetzt ganz oben

3 Antworten

Hilf mir mal: Wo initialisierst du a, b, c, d, e, f?

Alles, was ich sehe, ist, dass du nach Ausgabe des Spielfelds und Dateneingabe in e, f, a und b im Falle von Zug Weiß fröhlich auf figur[c][d] zugreifst -

wo aber wurden c und d initialisiert?

Es wäre auch deutlich einfacher, wenn du nicht einfach a,b,c,d,e,f oder gleich x1,x2,x3,x4,x5,x6 sondern stattdessen vernünftige Variablennamen verwenden würdest.

Noch übersichtlicher wäre es, wenn du mit Funktionen arbeiten würdest z.B. showTabletop() oder switchFigure(int fromX, int fromY, int toX, int toY).


amlis 
Beitragsersteller
 15.12.2020, 14:37

es sind zwischen speicher wo ich die koordinaten zwischen speichere

e/f ist welche figur bewgt werden soll

a/b wohin es gehen soll

c/d ist ein zwischen speicher um das zu speichern was überschrieben wird.

x/y wird nur bei den print des schachbretts verwendet

CSANecromancer  15.12.2020, 14:40
@amlis

Also ich als Compiler würde dir gewaltig einen husten, denn du verwendest figur[c][d], ohne dass c oder d irgendeinen sinnvollen Wert haben. Zumindest kann ich nirgendwo sehen, dass du c oder d einen Wert zugewiesen hättest.

amlis 
Beitragsersteller
 15.12.2020, 14:49
@CSANecromancer

danke für die gewollte hilfe. habe es gerade repariert habe statt figur cd ine neue char variable genommen und nun funktioniert es

mjutu  15.12.2020, 14:51
@CSANecromancer

Stimmt. Wenn man Glück hat is c,d zufällig auf 0 gesetzt und so wird genau das erzeugt, was du beobachtest: figure[0][0] wird überschtrieben. Du brauchst aber gar keinen Zwischenspeicher denn es gibt gar nichts zwischen zu speichern.

Hier noch ein paar Verbesserungsvorschläge, falls dir mal langweilig wird:

  • Verlagere das Zeichnen des Spielfeldes in eine eigene Funktion, die du einfach nur aufrufst.
  • Erweitere das Spielfeld um eine Anzeige, wo und mit welchen Zahlen sich deine X- und Y-Koordinaten befinden. Pro Tip: In der Informatik geht normalerweise X von links nach rechts und Y von oben nach unten - und nicht so wie in deinem Programm. ;)
  • Verlagere das Bewegen der Figur (Tauschen des Werts in deinem feld-Arrays) in eine eigene Funktion, die du mit Start- und Zielkoordinaten als Parameter aufrufst.
  • Erweitere die Eingabe so, dass die Koordinatenwerte durch Komma getrennt in einer Zeile eingegeben werden können.
  • Baue einen Zugzähler mit ein.

Wozu soll dies dienen:

   figur[c][d]=figur[a][b];
   figur[a][b]=figur[e][f];
   figur[e][f]=figur[a][b];
   figur[e][f]=figur[c][d];

In den beiden letzten Zeilen wird figur[e][f] zwei mal beschrieben. Das ist nicht nützlich. Eigentlich musst du doch nur ein Feld ändern und das andere auf ' ' setzen:

   figur[a][b] = figur[e][f];
   figur[e][f] = ' ';