T-Rex: Stein-Schere-Papier-Echse-Spock in OOP

Beitrag lesen

Nach gerechtfertigter Kritik gibts einen neuen Ansatz:

abstract class motherofallcards  
{  
    public function check( motherofallcards $objCheck )  
    {  
        //--- Der stärkere steht immer vorne  
        $arCheck = array(  
            "stein" => "schere",  
            "papier" => "stein",  
            "schere" => "papier"  
        );  
  
        //--- übergebenes Objekt ist stärker  
        if( isset( $arCheck[ get_class($objCheck) ] ) &&  $arCheck[ get_class($objCheck) ] == get_class($this) )  
        {  
            return -1;  
        } else if( isset( $arCheck[ get_class($this) ] ) &&  $arCheck[ get_class($this) ] == get_class($objCheck) )  
        {  
            //--- übergebenes Objekt ist schwächer  
            return 1;  
        }  
  
        //--- Unentschieden  
        if( get_class($this) == get_class($objCheck) )  
        {  
            return 0;  
        }  
  
        //--- Karten nicht im Spiel implementiert  
        throw Exception();  
    }  
}  
  
//--- Ableiten und benutzen  
class stein extends motherofallcards  
{  
    //--- ziemlich leer :(  
}

Der Ansatz würde nicht funktionieren wenn irgendwann mal zwei unterschiedliche Karten zu einem unentschieden führen würden.
Die Basisklasse muss um neue Karten erweitert werden.
Jetzt ist alles in einer Funktion und Encoder hat recht, eine simple Funktion würde es jetzt auch tun *hmpf*.

Neue Idee: Wenn man den Karten eine Wertigkeit geben könnte, dann könnte man mit dieser Wertigkeit vielleicht eine Logikaufbauen und das Array mit den Karten auflösen. Nehmen wir als Beispiel ein Normales Kartenspiel. Und ersetzten wir Bube, Dame, König und Aß durch 11,12,13,14. Dann hätte jede Karte eine Methode getWertigkeit(). Diese gibt die Wertigkeit zurück. Mit dieser kann man einfache Logiken aufbauen. Dann müsste es kein Array check in der Basisklasse geben und man könnte 500 Karten hinzuhängen ohne die Basisklasse anzuführen.

Ganz andere Idee wäre ein Compiler. Diese Lösung ist etwas überdreht aber machbar.
Ausgangssituation wäre wieder meine zweite Lösung mit dem Karten Array im Constructor (oder wo auch immer).

$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  
);

Hat man diese Klasse so erstellt und schmeißt den Compiler an, schneidet dieser das Array aus der Datei aus und baut sie in die Datei der Basisklasse ein. Heraus kommt die Lösung von oben mit dem Unterschied das man manuell nur die Ableitende Klasse anfassen muss. Ist diese einmal erstellt, wirft man den Compiler an. Dieser fügt das Karten Array in obiges Beispiel ein.
Das hat aber nix mit OOP zu tun, sondern würde das "Problem" (falls es überhaupt eins ist), des hinzufügens etwas erleichtern.

So jetzt hab ich keine Lust auf neue Ideen :p.

Gruß
ausgepumpter
T-Rex

0 55

Stein-Schere-Papier-Echse-Spock in OOP

Matthias Apsel
  • programmiertechnik
  1. 0
    Whouzuo
    1. 0
      T-Rex
      1. 0
        Whouzuo
  2. 0
    T-Rex
    1. 0

      Stein-Schere-Papier-Echse-Spock

      Auge
      • menschelei
  3. 0
    M.
  4. 0
    Encoder
    1. 0
      Matthias Apsel
      1. 0
        Encoder
        1. 0
          Matthias Apsel
          1. 0
            Whouzuo
            1. 0
              Matthias Apsel
              1. 0
                Whouzuo
        2. 0
          Matthias Apsel
  5. 0
    T-Rex
    1. 0
      Whouzuo
      1. 0
        Encoder
        1. 0
          Whouzuo
          1. 0
            Encoder
            1. 0
              Whouzuo
              1. 0
                Encoder
                1. 0
                  Matthias Apsel
                2. 0
                  Whouzuo
                  1. 0
                    Matthias Apsel
                    1. 0
                      Whouzuo
                    2. 0
                      Whouzuo
                      1. 0
                        Matthias Apsel
      2. 0
        Matthias Apsel
        1. 0
          Whouzuo
          1. 0
            Matthias Apsel
            1. 0
              Whouzuo
              1. 0
                Matthias Apsel
                1. 0
                  Whouzuo
                  1. 0
                    Matthias Apsel
              2. 0
                dedlfix
                1. 0
                  dedlfix
                2. 0
                  Whouzuo
      3. 0
        T-Rex
    2. 0
      T-Rex
      1. 0
        Matthias Apsel
  6. 3
    Der-Dennis
    1. 3
      Der-Dennis
      1. 0
        Whouzuo
        1. 0
          Der-Dennis
          1. 0
            Whouzuo
            1. 0
              Der-Dennis
          2. 0

            Stein-Schere-Papier-Echse-Spock in OOP (Teil 2)

            Whouzuo
            1. 0
              Der-Dennis
              • menschelei
    2. 0
      Matthias Apsel
      1. 0
        Der-Dennis
        1. 0
          bubble
          1. 0
            Der-Dennis
        2. 0
          Matthias Apsel
        3. 0
          Matthias Apsel