• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[PHP] Code reduzieren

Schachspieler

New member
Hallo zusammen!

Dieser Code für die Ausgabe der Figuren eines Schachspiels funktioniert soweit ganz gut:

PHP:
	if ($Ta1 == $ziel) {unset($Ta1);}
	if ($Sb1 == $ziel) {unset($Sb1);}
	if ($Lc1 == $ziel) {unset($Lc1);} 
	if ($Dd1 == $ziel) {unset($Dd1);}
	if ($Lf1 == $ziel) {unset($Lf1);} 
	if ($Sg1 == $ziel) {unset($Sg1);}
	if ($Th1 == $ziel) {unset($Th1);}
	if ($a2 == $ziel) {unset($a2);}
	if ($b2 == $ziel) {unset($b2);}
	if ($c2 == $ziel) {unset($c2);}
	if ($d2 == $ziel) {unset($d2);}
	if ($e2 == $ziel) {unset($e2);}
	if ($f2 == $ziel) {unset($f2);}
	if ($g2 == $ziel) {unset($g2);}
	if ($h2 == $ziel) {unset($h2);}
	if ($Ta8 == $start) {$Ta8 = $ziel;}
	if ($Sb8 == $start) {$Sb8 = $ziel;}
	if ($Lc8 == $start) {$Lc8 = $ziel;} 
	if ($Dd8 == $start) {$Dd8 = $ziel;}
	if ($Ke8 == $start) {$Ke8 = $ziel;}
	if ($Lf8 == $start) {$Lf8 = $ziel;} 
	if ($Sg8 == $start) {$Sg8 = $ziel;}
	if ($Th8 == $start) {$Th8 = $ziel;}
	if ($a7 == $start) {$a7 = $ziel;}
	if ($b7 == $start) {$b7 = $ziel;}
	if ($c7 == $start) {$c7 = $ziel;}
	if ($d7 == $start) {$d7 = $ziel;}
	if ($e7 == $start) {$e7 = $ziel;}
	if ($f7 == $start) {$f7 = $ziel;}
	if ($g7 == $start) {$g7 = $ziel;}
	if ($h7 == $start) {$h7 = $ziel;}
	if ($zug == "0-0") {$Ke8 = "g8"; $Th8 = "f8";}
	if ($zug == "0-0-0") {$Ke8 = "c8"; $Ta8 = "d8";}

Könnte man ihn aber irgendwie schlanker schreiben? Ich habe schon mit switch experimentiert, aber das Problem ist, dass ich da auch immer alle Fälle auflisten muss.

Liebe Grüße
Alex
 
Du kannst das ganze vereinfachen, indem du Arrays nutzt.
PHP:
$figuren = [
    "Figur A" => "Ziel Figur A",
    "Figur B" => "Ziel Figur B"
    .
    .
    .
];
 
Ich hab' keine Ahnung, was du mit diesem Code wirklich machst, aber PHP bietet die Möglichkeit, Variablen über Strings anzusprechen:
Code:
$names = array("Ta1", "Sb1", "Lc1", "Dd1", "Lf1", "Sg1", "Th1", "a2", "b2", "c2", "d2", "e2", "f2", "g2", "h2");
foreach ($names as $name){
	if ($ziel === ${$name}){
		unset(${$name});
	}
}

Prinzipiell bin ich aber auch der Meinung, dass du deine Figurenpositionen/-zustände in einem Array speichern solltest.
 
Hallo zusammen!

Danke für die Antworten. Ich bin dabei, ein Script zu schreiben, mit dem ich Schachpartien wiedergeben kann.
Der erste Teil in der Form if ($Ta1 == $ziel) {unset($Ta1);} fragt für jede Figur ab: Steht diese Figur auf dem Feld $ziel? Wenn ja, lösche sie. Das sind die Schlagzüge der Schachpartie.
Der zweite Teil if ($Ta8 == $start) {$Ta8 = $ziel;} erledigt die Züge der Figuren.

Bei Arrays habe ich also das Problem, dass sich diese bei jedem Zug ändern und das ist ja nicht so einfach zu lösen oder?

Liebe Grüße
Alex
 
Bei Arrays habe ich also das Problem, dass sich diese bei jedem Zug ändern und das ist ja nicht so einfach zu lösen oder?
Warum? Du hast 32 Figuren - und das ändert sich auch das ganze Spiel durch nicht (wenn eine Figure geschlagen wird, wird sie hald als geschlagen markiert). Und wenn du die geschlagenen "wegschmeißen" willst - auch das ist ja kein Problem...
 
Zurück
Oben