4-gewinnt
-
Hallo Antro,
und du solltest deine Variable 'turn' einfach als 'int' übergeben (nicht als Zeiger), denn es ist ja nur eine Wertevergleich, den du durchführst!
Je weniger Zeiger du verwendest, umso weniger Fehler können passieren
Verwendest du denn keine IDE (z.B. das Visual Studio)? Denn der eingebaute Debugger müßte dir dann die Absturzstelle exakt anzeigen...
-
Ein paar Verbesserungsvorschläge:
- Vermeide magische Konstanten (6 und 7 tauchen überall auf). Man kann solchen Konstanten einen Namen geben und den Wert an genau einer Stelle festlegen. Das erhöht die Lesbarkeit und erleichtert in Deinem Fall das nachträgliche Vergrößern/Verkleinern des Feldes.
- Vermeide ** und besonders *** -- siehe auch 3-Sterne-Programmierer. Du kannst Dir Für Dein Feld zB einen eigenen Typ definieren.
- In vielen Deiner Funktionen ist es nicht notwendig, turn als Zeiger zu definieren; denn Dir geht es nicht um die Adresse irgendeiner turn-Variablen sondern um den aktuell gespeicherten Wert.
const int zeilen = 6; const int spalten = 7; struct meinfeld { int elemente[zeilen][spalten]; }; void feld_darstellen(meinfeld f); // oder besser: meinfeld const & f
-
Hallo!
Danke für die Tipps. Das Programm funktioniert jetzt.@Th69: Nein, ich verwende keine IDE und habe bisher auch keine Ahnung wie das geht.

Das mit den Pointern werde ich mir zu Herzen nehmen. Ich habe halt irgendwie gedacht, dass ich mit Pointer weniger Speicherplatz brauche oder das Programm schneller ist (was bei 4-gewinnt eigentlich eh nicht relevant ist).
Das mit den globalen Variablen ist auch eine super Idee, danke.Könnte ich bei so einer Funktion eigentlich auch ein normales array übergeben?
Noch was:
Was wäre eurer Meinung nach als nächstes der beste Schritt für mich?- alles nochmal mit IDE
- eine kleine KI einbauen (ist halt schwierig die so zu gestalten, dass sie nicht zu schnell zu durchschauen ist. Vielleicht irgendwie mit Bäumen oder so?)
- etwas anderes (dann bitte mit Vorschlag)MfG
Antro
-
Antro schrieb:
ich verwende keine IDE und habe bisher auch keine Ahnung wie das geht.
[...]
- alles nochmal mit IDEDas lässt vermuten, dass du nichtmal so ganz weißt was eine IDE ist. (Sonst wüsstest du dass du da nicht "alles nochmal" schreiben müsstest) Welchen Compiler benutzt du denn, und worin schreibst du deine Quellcodes?
Das mit den Pointern werde ich mir zu Herzen nehmen. Ich habe halt irgendwie gedacht, dass ich mit Pointer weniger Speicherplatz brauche oder das Programm schneller ist (was bei 4-gewinnt eigentlich eh nicht relevant ist).
Weder noch. Mit Poitnern brauchst du den gleichen Speicherplatz für die Objekte (nur auf dem Heap und nicht auf dem Stack), PLUS den Platz für die Poitner auf dem Stack. Schneller wirds auch nicht, eher langsamer durch die Speicherallokationen, die teuer sind.
Was lernt man daraus? Beim Programmieren kommts nicht auf denken/schätzen/vermuten an, sondern auf Wissen.Könnte ich bei so einer Funktion eigentlich auch ein normales array übergeben?
Normale Arrays kann man nicht richtig an Funktionen übergeben. Die "zerfallen" zu Pointern (auf das erste Element) und die Längeninformation geht dabei verloren bzw. muss extra mit dazugegeben werden. Container und Referenzen sind da eleganter.
-
Natürlich kann man Arrays übergeben: http://ideone.com/5Vain
-
Antro schrieb:
Hallo!
Danke für die Tipps. Das Programm funktioniert jetzt.@Th69: Nein, ich verwende keine IDE und habe bisher auch keine Ahnung wie das geht.

Das mit den Pointern werde ich mir zu Herzen nehmen. Ich habe halt irgendwie gedacht, dass ich mit Pointer weniger Speicherplatz brauche oder das Programm schneller ist (was bei 4-gewinnt eigentlich eh nicht relevant ist).
Das mit den globalen Variablen ist auch eine super Idee, danke.Könnte ich bei so einer Funktion eigentlich auch ein normales array übergeben?
Noch was:
Was wäre eurer Meinung nach als nächstes der beste Schritt für mich?- alles nochmal mit IDE
- eine kleine KI einbauen (ist halt schwierig die so zu gestalten, dass sie nicht zu schnell zu durchschauen ist. Vielleicht irgendwie mit Bäumen oder so?)
- etwas anderes (dann bitte mit Vorschlag)MfG
AntroIDE heisst nichts anderes als "Integrated Developement environment". Es ist nichts anderes als eine Entwicklungsumgebung.
Hier gibts einige. Ich empfehle jedoch Visual C++ Express 2008 oder 2010, da der Debugger einfach ungeschlagen ist. Und ein Debugger gehört zum Handwerkszeug ganz dringend dazu^^.
-
314159265358979 schrieb:
Natürlich kann man Arrays übergeben
Naja, das kommt drauf an, was genau Du unter "Übergeben eines X" verstehst. In Deinem Beispiel findet eine Kopierinitialisierung einer Referenz auf ein Array statt. Ist das ein "Übergeben eines Arrays"? IMHO Grauzone und Ansichtssache.
-
Danke für die Antworten. Es ist irgendwie schwer bestimmte Dinge in Erfahrung zu bringen. Z.B. wo jetzt was gespeichert wird und wieso dies und das schneller ist. In den meisten Tutorien werden diese Informationen nicht angegeben. Ich hab mich übrigens verschrieben. Ich wollte fragen ob ich jetzt alles mit GUI machen soll. Als IDE habe ich derzeit mal Visual C Express 2010 und DEV-C heruntergeladen. Mit letzterem komme ich bisher gut zurecht. Bei Visual C hingegen weiß ich nicht einmal wie man richtig kompiliert.
Was meint ihr also?
Lieber zuerst eine GUI für das Spiel programmieren, oder eine KI oder überhaupt etwas anderes?MfG
Antro
-
Antro schrieb:
Danke für die Antworten. Es ist irgendwie schwer bestimmte Dinge in Erfahrung zu bringen. Z.B. wo jetzt was gespeichert wird und wieso dies und das schneller ist. In den meisten Tutorien werden diese Informationen nicht angegeben. Ich hab mich übrigens verschrieben. Ich wollte fragen ob ich jetzt alles mit GUI machen soll. Als IDE habe ich derzeit mal Visual C Express 2010 und DEV-C heruntergeladen. Mit letzterem komme ich bisher gut zurecht. Bei Visual C hingegen weiß ich nicht einmal wie man richtig kompiliert.
Was meint ihr also?
Lieber zuerst eine GUI für das Spiel programmieren, oder eine KI oder überhaupt etwas anderes?MfG
AntroHier deine Aufgabenliste:
* Dev-C++ wegwerfen
* Lernen mit Visual C++ Express umzugehen oder Code::Blocks verwenden. Oder, mein favorit für Anfänger: CodeLite (http://www.codelite.org/).
* C++ Buch fertig lesen
* Lernen mit wxWidgets (GUI Toolkit) oder QT umzugehenMein Vorschlag

-
Beides (besonders GUI-Programmierung) sind recht komplexe Themengebiete. Ich würde dir empfehlen eben die Grundlagen zu erlernen. Da gibt es wohl noch einiges zu machen. Wenn die Grundlagen dann sitzen, kannst du mit dem Programmieren z. B. der Winapi weiter machen. Da du aber Lust auf Spiele hast, empfehle ich dir dich dann mit der SDL oder der SFML zu befassen. Diese sind einfach zu verewnden mit großem Umfang. Das mit der KI ergibt sich mehr oder weniger von Alleine. Ganz wichtig sind immer Bücher.
Dev-C++ wurde schon seit Jahren nicht mehr weiterentwickelt und es wird nicht empfohlen ihn zu verwenden. Suche dir am Besten für Visual Studio ein gutes Tutorial oder lies die Hilfe dazu. Imo ist dieser die erste Wahl wenn man unter Windows programmiert. Sehr gute Alternative ist G++ und erste Wahl unter Linux.