Hab meinen code auf 5 statt 3 Karten ausgelegt.
[code lang=php]abstract class motherofallcards
{
protected $arCheck = null;
public function check( motherofallcards $objCheck )
{
return $this->arCheck[ get_class($objCheck) ];
}
}//--- Ableiten und benutzen
class stein extends motherofallcards
{
public function __construct()
{
$this->arCheck = array(
"stein" => 0, //--- Unentschieden
"papier" => 1, //--- Stärker
"echse" => 1, //--- Stärker (weiß nicht ob das stimmt)
"schere" => -1, //--- Schwächer
"spock" => -1 //--- Schwächer
);
}
}
Das ist schon besser, allerdings auch immernoch etwas ungünstig. Will man z.B. eine neue Karte hinzufügen, so muss man _jede_ andere Karte ändern. Man stelle sich das mal bei einem Kartenspiel mit 500 Karten vor...
Zudem hat man Redundanz: in jeder Klasse steht ein Vergleichsarray für jede andere Karte. Dabei braucht man lediglich die Hälfte der Einträge, um eindeutig bestimmen zu können, welche Karte welche andere Karte schlägt.