4 Gewinnt Gewinnabfrage in C#?

2 Antworten

Ist gar nicht so ohne...Du musst eine Methode schreiben die nach jedem klick auf ein Feld aufgerufen wird.

Diese Methode muss zuerst alle Spalten vertikal prüfen, ob 4 Felder in gleicher Farbe vorhanden sind. Wenn nicht musst du alle Zeilen horizontal prüfen, sollte da auch noch kein Gewinner fest stehen wird es richtig lustig.

Beispiel:
A1 | A2 | A3 ...

B1 | B2 | ....

C1....

Jetzt musst du diagonal prüfen, das könnte so ablaufen: Du suchst ein farbiges Feld, von links nach rechts, Zeile für Zeile. Findest du ein farbiges Feld (z.B. B3) musst du dir dieses in einer separaten Variable merken (damit du später an dieser Stelle weiter suchen kannst). Da du von oben nach unten prüfst kann die Diagonale Linie ja nur nach unten gehen, somit musst du nun eine Zeile tiefer gehen (Zeile C1-C6), hier musst du dann jeweils prüfen ob ein Feld links (C2) oder ein Feld rechts (C4) von B3 in der selben Farbe eingefärbt ist. Findest du ein weiteres farbiges Feld, merkst du dir ob es nach links oder rechts ging, und in der nächsten Zeile suchst du in die Richtung weiter.

Knifflig wird es nur wenn du links und rechts unter B3 ein farbig passendes Feld findest...

Findest du keine Viererkette dann muss deine Variable wieder bei B3 mit der Suche fortdahren.

Dir könnte eine Rekursive Methode wohl sehr helfen.

vielen dank

Kann ich das irgendwie in eine For schleife packen? z.b. Prüfe A1 bis A6 und danach den buchstaben von A zu B ändern und B1 - B6 prüfen? Ich wüsste jetzt nur wie ich die Zahl ändere (variable++)

0
@6c6f6c

Oha, steckst ja noch in den Kinderschuhen der Programmierung. (Ist nicht negativ gemeint) :-D

Ja, du brauchst wahrscheinlich nicht nur 1 Schleife. Das mit dem horizontalen prüfen, bzw. vertikalen prüfen ist recht simpel. Diagonal wird aber ein richtiger Spass.

Eigentlich solltest du dein Spielfeld in einem Zweidimensionalen Array darstellen, das hier wäre die Initialisierung eines solchen Arrays

TextBox[][] spielfeld = new TextBox[7][6];

Wenn du so etwas hast, dann kannst du mit Schlefen und dem .lenght() Inikator deine Spalten und Zeilen durchgehen ohne das du unter 0 oder über 7 bzw 6 hinaus kommst.

Machst du eine Rekursive Methode, bedeutet das dass sich die Methode bei bestimmten Fällen wieder selbst aufruft, damit kann man tolle Funktionen schreiben.

1
@prototype0815

Danke!

Ich werds bei Zeit mal versuchen :) und ja ich habe vor etwas über 1 Monat mit C# angefangen.

0

Prototype's Antwort ist technisch gesehen richtig und würde so funktionieren. Bei Vier Gewinnt ist Performance-Optimierung auch noch nicht so wichtig. Aber wenn du später komplexere Spiele programmieren möchtest, solltest du vermeiden, nach jedem Spielzug die komplette Matrix zu durchlaufen.

Fakt ist: Ein Gewinn kann nur an der Stelle entstehen, an der du den letzten Stein gesetzt hast. Somit musst du lediglich von der Position des letzten Steines aus (spielfeld[steinPosX][steinPosY]) in jede mögliche Richtung drei Felder weit prüfen. Senkrecht nach oben musst du z.B. auch nicht prüfen, weil der letzte Stein logischerweise nicht unter einem anderen Stein liegen kann.

das ist natürlich die optimierte Version, ganz klar !

0

Frage zum McDonald's Monopoly Sammelgewinn

hallo Leute ich habe mal eine Frage dazu was oben steht. Also, ich habe da paar Felder fast voll, das Xbox one Feld habe ist fast voll da fehlt mir noch eins, das Samsung curved uhd tv fast voll da fehlt mir noch 1 Feld und das Mini Roadster fast voll da fehlt mir noch ein Feld. Wenn ich jetzt etwas voll habe muss ich es dann an der Kasse abgeben oder muss ich das abschicken oder was ? Und was wird dann gemacht, wird es verlost oder wird es abgeschickt zum Gewinner oder was wird gemacht ?

...zur Frage

VBA 4 Gewinnt

Hallo zusammen,

Ich bin dabei ein 4 Gewinnt du programmieren. Es spielen 2 Menschen gegeneinander. Das Feld wird in Excel dann jeweils Gelb oder Rot gefärbt. Das funktioniert alles, aber etwas bereitet mir noch Kopfzerbrechen. Und zwar die abfrage, wer gewonnen hat, wenn 4 in einer Reihe sind. Wenn ich das mit einer If-Abfrage mache und jede Möglichkeit überprüfe, gibt es alleine horizontal 48 Möglichkeiten....

Hat jemand eine Idee wie ich das besser machen könnte?

MfG Duma

...zur Frage

Bahnticket "Vor Reiseantritt ausfüllen"?

Hi, ich habe mir ein Bahnticket gekauft, welches noch personenbezogen mit vor- und nachname beschriftet werden muss. Vor und hinter diesem Feld sind aber noch 2 andere Felder welche mit einem Kalender und einer Uhr gekennzeichnet sind. Muss ich dort auch auch etwas vor der Fahrt eintragen oder ist das die Stelle wo sie dann im Zug entwertet wird? Ich fahr leider nicht so oft Zug, darum danke im vorraus :)

...zur Frage

Wie kann ich aus Nummern wieder die gewohnten Buchstaben in den Spalten bei Excel 2010 herbekommen?

Ich arbeite seit neuestem mit Office 2010. Somit auch Excel 2010 im Paket. Nun wollte ich eine Formel eingeben wie ich es gewohnt bin z.B. (+A1*A3). Jetzt fällt mir aber auf, dass die Spalten bei der Version 2010 -wie die Zeilen- mit Nummern beschriftet sind und meine gewohnte Formel nicht greift. Kann mir jemand sagen, wie ich die Spalten wieder auf Buchstaben ändern kann. Danke!

...zur Frage

Alle Felder bei der Umsatzsteuervoranmeldung ausfüllen?

Können Felder bei der Umsatzsteuervoranmeldung leer bleiben oder soll ich Felder die nicht in Frage kommen mit 0€ bzw 0,00€ füllen?

...zur Frage

EXCEL: Wenn alle Zellen im Dokument gefüllt, dann Text anzeigen, sonst anderen Text anzeigen

Mein Anliegen:

Ich hätte gerne eine Funktion, in der ein bestimmter Text (Auswahl aus einem Feld) angezeigt werden soll, wenn ALLE Felder aus einer Auswahl einen beliebigen Text enthalten.

Wenn nicht, Soll ein anderer bestimmter Text (Auswahl aus einem anderen Feld) angezeigt werden.

Dienst der Vollständigkeitsprüfung eines Formulars. Beispiel: Wenn Felder A1, A2, A3 Text enthalten, dann Text aus A10 in A4 anzeigen. Wenn nicht, dann Text aus A11 in A4 anzeigen.

Ich hoffe das leuchtet so ein :)

Danke und Gruß, Zweigster

...zur Frage

Was möchtest Du wissen?