?
butterbemme schrieb:
Hiho,
ich bastle gerade an einem Kartenspiel. Es handelt sich um Watten. Das Spiel ist eher unbekannt und wird eigentlich nur an der deutsch-schweizerischen-österreichischen Grenze gespielt. Aber egal.
Um herauszufinden welcher der beiden Spieler einen Stich macht, ...
Finde es einen lustigen Zufall, dass wir scheinbar zirka zeitgleich das
selbe Spiel ('Watten') programmieren
Habe jetzt, nach 8 Tagen und ~1800 Zeilen C/WINAPI - Quelltext, mal eine erste,
rudimentäre Version ins Netz gestellt:
http://www.free-space.at/silvercoat320/Watten.zip
scheint weitestgehend so zu funktionieren, wie ich es mir vorgenommen hatte.
Der Quelltext ist leider ein Alptraum (hatte Teile davon schon mal
hier im Forum gepostet), ist auch leider nur in 'purem' C und ohne Klassen
oder überladene Operatoren gebastelt worden, deshalb wurde es für einen Troll
gehalten.
Die Funktion, die in meinem Programm berechnet, welcher Spieler sticht,
sieht also z.B. so aus:
/* Gibt 0 zurueck, falls der Ausspieler sticht, andernfalls 1 */
static unsigned getCapture(struct tagMove* move){
struct Card *first = GodObject->CardSet + GodObject->Player[move->Ausspieler].Cards[move->AusCardIdx],
*second = GodObject->CardSet + GodObject->Player[move->Gegenspieler].Cards[move->GegCardIdx];
if(first->rank != GodObject->valRank){
if(first->color != GodObject->valCol){
if(second->color == GodObject->valCol || second->rank == GodObject->valRank)
return 1u; /* 2. Spieler sticht */
else if(first->color != second->color)
return 0u; /* 1. Spieler sticht */
else
return (first->rank > second->rank) ? 0u : 1u; /* Farbstich */
}
else if(second->color != GodObject->valCol)
return second->rank != GodObject->valRank ? 0u : 1u; /* Trumpf vs. No-Trumpf */
else{ /* Beide spielten Trumpf */
if(second->rank != GodObject->valRank)
return (first->rank > second->rank) ? 0u : 1u; /* Trumpf vs. Trumpf */
else
return 1u; /* 'Die Rechte' sticht immer. */
}
}
if(second->color != GodObject->valCol || second->rank != GodObject->valRank)
return 0u; /* Falls zuerst Schlag gespielt wurde, sticht der 1.Spieler, ausser ...*/
return 1u; /* ... der 2. Spieler spielt 'die Rechte' */
}
Ist nämlich gar nicht so trivial, speziell in Fällen, wo der 2. Ausspieler
die falsche Farbe draufspielt usw.
Sinngemäß so ähnlich wie diese Funktion
(hab mich bemüht, sie gründlich zu kommentieren!) würde man wohl auch in
C++ irgendwelche Operatoren überladen (hab allerdings NULL Ahnung von C++),
die herausfinden sollen, ob die zuerst oder die als zweites gespielte Karte
sticht.
Im Nachhinein betrachtet war's für mich persönlich eine sehr gute Übung,
das Projekt war weder zu klein, noch zu groß, also gerade richtig, um
sich allmählich beim Programmieren zu verbesseren (immer einen Schritt
nach dem anderen machen, und erst wenn ich mal 'sehr' gut in C bin, trau ich
mich auch mal an das viel umfangreichere und kompliziertere C++ ran, bis dahin -> C)
Viel Erfolg auch mit Deinem eigenen WATTEN, vielleicht kannst ja auch mal
einen Link zu einer 'spielbaren' (muss noch nicht fertig sein!)
Version posten
Liebe Grüße