![]() |
4 Gewinnt: Siegerermittlung
Also, ich muss für die Schule ein 4 gewinnt-spiel programmieren:
Gib es einen besonderen Trick, um 4 gleiche Feldelemente in waagrechter, senkrechter und diagonalen richtung zu finden, oder muss ich dass alles mit if-abfragen durchforsten? |
Re: 4 Gewinnt: Siegerermittlung
Wie groß ist dein gesamtes Spielfeld (5 * 5 Spielfelder) ?
Ich hatte alle Spielsteine, die gesetzt wurden, in ein Array gespeichert und diesen dann (bei der Ermittlung der waagrechten und senkrechten Spielsteine) mit einer for - Schleife überprüft; bei den Diagonalen geht das auch, da hab ichs aber mit einzelnen if-Abfragen gemacht. Ich such mal die for-Schleifen raus ... devnull |
Re: 4 Gewinnt: Siegerermittlung
moin
habe ich jetzt zwar nicht weiter ausprobeirt, aber versuche doch das nach devnull mit einem Array. Dann gibst du jedem farbstein bestimmte werte, so daß du dann nur noch die reihen waagerecht, senkrecht und diagonal auf bestimmte summen überprüfen mußt und so weißt ob jemand gewonnen hat! :gruebel: ist glaube ich einfacher als wenn der gleich rot und der gleich rot und der gleich rot und der gleich rot dann gewonnen. du solltest dann natürlich berücksichtigen das die auch nebeneinander liegen! p.s. ist nur so eine Idee! |
Re: 4 Gewinnt: Siegerermittlung
Ja, das hab ich schon so gemacht
Ich habe für einen Spielstein des Spieler 1 den wert 1 in das 2dimensionale Array geschreiben(Spieler2 wert2 und kein Spielstein hat den Wert 0); Ich wollte nur wissen ob es einen trick gibt, um im array(7*7) herauszufinden, ob 4 gleiche spielsteine hintereinander lingen. |
Re: 4 Gewinnt: Siegerermittlung
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Geisi,
ja es gibt einen sehr einfachen Trick. Gehe von dem zuletzt gesetzten Stein in alle möglichen Richtungen und zähle die gleichfarbigen. Bist Du bei vier ist das Spiel gewonnen. Das wäre die Routine
Delphi-Quellcode:
In das Anlage habe ich den Source kommentiert und ein kleines Beispiel zu gebastelt.
function TForm1.Win2(Stone : TStone) : Boolean;
var iCnt : Integer; aStone : TStone; StoneCount : Integer; begin For iCnt:=0 to 7 do // iteriere über die relativen Koordinaten begin aStone:=Stone; // Startpunkt merken StoneCount:=0; While aStone<>Nil do begin If aStone.Color=Stone.Color then // hat der Stein die gesuchte Farbe ? Inc(StoneCount) else Break; // neue Richtung einschlagen If StoneCount=4 then begin Result:=True; Exit; end; // If StoneCount=4 then aStone:=FStones[aStone.X+FRelCoords[iCnt].X,aStone.Y+FRelCoords[iCnt].Y]; end; // While Stone<>Nil do end; // For iCnt:=0 to 7 do end; Nur für's Verständnis |
Re: 4 Gewinnt: Siegerermittlung
Zitat:
|
Re: 4 Gewinnt: Siegerermittlung
Zitat:
Du hast vorgeschlagen mit For-Schleifen das Spielfeld senkrecht und waagerecht zu durchlaufen. Das macht mein Vorschlag definitiv nicht. Da jeder Stein seine Koordinaten kennt, kann sich der Algorithmus innerhalb des Array's von einem Stein zum nächsten Stein bewegen. Das wird durch die Addition der relativen Koordinaten aus TRelCoords erreicht. Dabei wird mitgezählt wieviel gleichartige Steine besucht wurden. Bei 4 besuchten gleichartigen Steinen ist das Spiel gewonnen. Ausgangspunkt für die Suche ist immer der zuletzt gesetzte Stein. |
Re: 4 Gewinnt: Siegerermittlung
@Jens Schumann
mein letzer beitrag war nicht auf dich bezogen! da ich geisi zitiert habe, dachte ich das es eindeutig ist das ich mich mit meiner nächsten Äußerung auch auf ihn beziehe! Ich wollte dir deinen gedanken keinesfalls streitig machen. Es tut mir leid wenn das so rüber gekommen ist. |
Re: 4 Gewinnt: Siegerermittlung
Zitat:
|
DP-Maintenance
Dieses Thema wurde von "sakura" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz