Benötige Hilfe bei einem Programm



  • Guten Tag Leute,

    ich muss ein Spiel in C programmieren, was ähnlich wie das Kartenspiel Carcasonne funktioniert. Die Karten zu generieren und in einem Stack zu speichern ist alles soweit kein Problem für mich, jedoch weiss ich gerade nicht, wie ich die Karten vergleichen kann! Die Karten sehen ungefähr so aus:

    Zwei Beispielkarten:

    -------      -------
    |X    |      |X    |
    |  XX |      | X   |
    |   X |      | X+++|
    |   X |      |  X+ |
    |    X|      | X + |
    -------      -------
    

    Die "X" symbolisieren Städte und die "+" Straßen. Je nachdem wie die Karten aneinandergelegt werden, gibt das Feld unterschiedlich viele Punkte. Städte sollen an Städte und Straßen an Straßen gelegt werden. Man soll die Karten bei der Überprüfung auch im Uhrzeigersinn drehen können.

    So sehen die beiden Karten verbunden aus:

    -------------
    |X    |X    |
    |  XX | X   |
    |   X | X+++|
    |   X |  X+ |
    |    X| X + |
    -------------
    

    Könnt ihr mir bitte Hinweise darauf geben, wie ich diese Karten miteinander vergleichen könnte? Momentan hab ich die Karten in String-Form gespeichert, aber ich müsste die glaube ich in nem zweidimensionalen String speichern oder? Vielleicht könntet ihr mir ja ein kurzes Beispiel posten, wo ihr 2 Karten miteinander vergleicht? Bin für jede Hilfe dankbar!



  • Hallo,

    du kannst die Karten in einem einfachen(eindimensionalen) Array speichern
    und vergleichen kannst du sie dann einfach mit memcmp bzw. strcmp (wenn 0 terminiert).



  • Ja, ich weiss zwar, dass ich Strings mit strcmp vergleichen kann, aber mit diesem Befehl kann das Programm ja nicht herausfinden, in welcher Formation die Karten aneinander gelegt werden müssen. Also wie die Karte gedreht werden muss und an welcher Position sie angesetzt werden muss um maximale Punkte zu erzielen. 😞



  • Es ist evtl. besser, nur die Eigenschaften (Wald, Stadt, Weg, Wasser, Wiese) der vier Seiten und den Winkel zu speichern.

    Da kannst du mit Zahlen (1 = Wasser, 2 = ...) oder auch Buchstaben arbeiten.
    Da du nur 4 Zeichen vergleichen musst, sollte das einfacher sein. Auch mit dem verdrehen.



  • Achso, ich dachte du willst die Karten komplett miteinander vergleichen 😃
    Ich kenne das Spiel nicht aber per Koordinaten kannst du das Array so(z.B. als Bottom-Up-Bild) adressieren:

    Eine 3x3 Karte:

    GHI
    DEF
    ABC
    
    char* karte = "ABCDEFGHI";
    

    Ein einzelnes Zeichen an Position (x,y) kannst du mit

    karte[y*width+x]
    

    adressieren.
    Der Koordinaten-Ursprung(0,0) ist die linke untere Ecke, hier also das Zeichen 'A'.

    Ich kenne die Regeln fürs Anlegen nicht. Vllt. reicht es auch, wenn du lediglich die Ränder der Karten speicherst.


Anmelden zum Antworten