Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Lucky13

Frischling

  • »Lucky13« ist der Autor dieses Themas

Beiträge: 6

Wohnort: NRW

  • Private Nachricht senden

1

01.12.2006, 03:28

problem bei "4 Gewinnt" Spielchen

Hallo community. Habe ne kleine bitte und zwar geht es um folgendes :

Bin am Ende des Kapitels 5 vom Buch und habe mir vorgenommen erst mit dem 6. Kapitel Zeiger und Referenzen weiterzumachen
bis ich das bis dahin gelernte einigermassen beherrsche.

Aus diesem Grund habe ich mal nach vernünftigen Übungen bei google gesucht um das gelernte zu festigen.
Na ja, leider bin ich nicht so wirklich fündig geworden, deshalb habe ich überlegt mir selbst ne Übung zu stellen und ein kleines 4 Gewinnt Spielchen zu schreiben.
Dabei habe ich mich von Riddicks Tic Tac Toe für die Konsole aus der Sektion Tutorials inspirieren lassen.
Das Spielchen habe ich zwar zuende geschrieben jedoch stört mich das meine letzte Funktion unendlich lang ist und aus lauter for Schleifen besteht. Ich bin mir sicher das man diese Funktion viel kürzer schreiben könnte, weiss aber nicht ob mir dafür noch grundlegendes Wissen fehlt, da ich wie gesagt noch am Ende des 5 Kapitels bin.
Die Funktion soll in einem 6x7 Array überprüfen ob der 1 oder 2 Spieler gewonnen hat, wenn in einer Diagonalen im Array ein Spieler 4 gleiche Felder besetzt hat.

Am liebsten würde ich die Funktion fürs bessere Verständis ja mal hier auflisten aber die besteht wie gesagt nur aus for-schleifen und ist unendlich lang, da ich für jede!!! Diagonale im Array prüfen lasse ob sich darin 4 gleiche Felder befinden oder nicht.

Ich hoffe ihr könnt mir nen Tipp geben wie man diese Funktion kürzer schreiben kann...

Anonymous

unregistriert

2

01.12.2006, 06:28

Rein posten.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

3

01.12.2006, 09:25

Du brauchst ja nicht jedesmal alle diagonalen durchlaufen.

Wenn ein Steinschen in das Spielfeld fällt, musst du doch nur prüfen ob das neue Steinchen dazu führt, das Diagonalen entstehen. (Also in alle Richtungen von dem neuen Steinchen aus prüfen). Das sind genau 7 ifs (nach oben ist quark). Dazu musst nur beachten das die Felder die du prüfst auch gültig sind (nicht über Arraygröße hinweg).

Dir restlichen Steinchen wwurden ja bereits in den letzten Schritten überprüft, und dort kann keine Diagonale entstehen.

Zu deiner zweiten Frage, ob man dazu Zeiger braucht.
Jaein. Array sind im Grunde genommen Zeiger ;).

Lucky13

Frischling

  • »Lucky13« ist der Autor dieses Themas

Beiträge: 6

Wohnort: NRW

  • Private Nachricht senden

4

01.12.2006, 20:53

@Abrexxes

Hätte koschka mir nicht diesen Denkanstoss gegeben, hätte ich das wohl letztendlich auch gemacht auch wenn ihr mich dann ausgelacht hättet.

@Koschka

ja stimmt ich brauch nicht jede diagonale durchlaufen zu lassen, ich brauche nur jeweils vom zuletzt gesetzten stein auszugehen und dessen Umgebung in allen richtungen ausser nach oben mit geschachtelten if-abfragen zu prüfen.

Na ja bin einfach nicht drauf gekommen irgendwie... :oops:

Werd das dann mal versuchen umzusetzen und denn mal posten obs geklappt hat jedenfalls danke für den denkanstoss, das ist nämlich die Lösung für das Problem.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

01.12.2006, 21:10

ich habs damals rekursiv gelöst ;)

brauchst nur vom aktuellen stein aus in eine bestimmte richtung gehen und solang weitergehen wie da ein gleichfarbiger stein liegt. wenn du auf 4. rekursionsebene bist, dann hat der entspr. spieler gewonnen.
sonst probierst du die nächste richtung.
is vielleicht eleganter als mit geschachtelten schleifen...

Werbeanzeige