Supportnet / Forum / Anwendungen(Java,C++...)
Spieleprogrammierung für Anfänger in strukturierter Programmierung
Frage
Hi,
habt ihr Vorschläge für kleinere Spiele, die Programmieranfänger programmieren können.
Die Anfänger haben folgende Kenntnisse unter Pascal (Delphi)
- Datentypen
- Kontrollstrukturen (if,case,for,repeat,while)
- Felder (1-dimensional)
- Dateizugriff auf Textdateien
- Prozeduren/Funktionen
Es sollen keine Spiele (Programme) in Gruppen (3-4 Personen) programmiert werden, die dann auf verschiedenen Rechnern gegeneinander "antreten".
Kennt jemand ein Spiel, dass sich dafür eignen würde?
Grüße
Peter
[code][sup][i]Admininfo: bitte vermeide Mehrfachanfragen in verschiedenen, bzw. gleichen Gruppen.[/i][/sup][/code]
Antwort 1 von semi
- Mastermind
1) 7 verfügbare Farben (9 wenn's schwieriger sein soll)
2) 5 davon werden zufällig generiert aber nicht angezeigt
3) Man hat 10 Versuche, um die korrekte Farbkombination zu ermitteln.
4) Nach jedem Versuch wird ausgegeben, wieviele Farben korrekt und wieviele auch an der korrekten Stelle sind. Nicht aber welche und wo.
- Schiffeversenken
Schiffe werden in Textdatei positioniert,
z.B. 10 Zeilen, je 10 Spalten
und # als Schifsteil, X als Treffer
1) 7 verfügbare Farben (9 wenn's schwieriger sein soll)
2) 5 davon werden zufällig generiert aber nicht angezeigt
3) Man hat 10 Versuche, um die korrekte Farbkombination zu ermitteln.
4) Nach jedem Versuch wird ausgegeben, wieviele Farben korrekt und wieviele auch an der korrekten Stelle sind. Nicht aber welche und wo.
- Schiffeversenken
Schiffe werden in Textdatei positioniert,
z.B. 10 Zeilen, je 10 Spalten
und # als Schifsteil, X als Treffer
Antwort 2 von PeterLustig
Vielen Dank für die Vorschläge,
vielleicht nochmal zur Verdeutlichung worauf ich hinaus will:
Aufgabe z.B.: Sortiere ein Feld mit z.B. 1000 Feldelementen, egal wie!
Gruppe 1 "überlegt" sich eine Art Bubble-Sort
Gruppe 2 "fällt" eine Art Quick-Sort ein
Gruppe 3 hat was vollkommen anderes ...
Die 3 Gruppen starten ihre Programme nacheinander auf einem Rechner und bei allen vorgegebenen Testfeldern gewinnt immer Gruppe 2 mit klarem zeitlichen Vorsprung vor den anderen Gruppen.
Danach kann man an den Quelltext gehen und jedes Programm genauer beleuchten.
Dieses Prinzip möchte ich mit anderen, "leichter" als Sortieralgorithmen zu programmierenden, Spielen ausprobieren.
Hatte als erste Idee, dass Spiel, bei dem ein Wort vorgegeben wird und das nächste mit dem Endbuchstaben des Vorgängers beginnen muss. Z.B.
Esel -> Lottogewinn -> Nashorn -> ...
Mir fällt aber noch nicht ein, wie ich dass in eine Spiel zwingen kann, bei dem verschiedene Gruppen ihre Programme gegeneinander antreten lassen.
Bin für alle Einfälle dankbar!
Peter
vielleicht nochmal zur Verdeutlichung worauf ich hinaus will:
Aufgabe z.B.: Sortiere ein Feld mit z.B. 1000 Feldelementen, egal wie!
Gruppe 1 "überlegt" sich eine Art Bubble-Sort
Gruppe 2 "fällt" eine Art Quick-Sort ein
Gruppe 3 hat was vollkommen anderes ...
Die 3 Gruppen starten ihre Programme nacheinander auf einem Rechner und bei allen vorgegebenen Testfeldern gewinnt immer Gruppe 2 mit klarem zeitlichen Vorsprung vor den anderen Gruppen.
Danach kann man an den Quelltext gehen und jedes Programm genauer beleuchten.
Dieses Prinzip möchte ich mit anderen, "leichter" als Sortieralgorithmen zu programmierenden, Spielen ausprobieren.
Hatte als erste Idee, dass Spiel, bei dem ein Wort vorgegeben wird und das nächste mit dem Endbuchstaben des Vorgängers beginnen muss. Z.B.
Esel -> Lottogewinn -> Nashorn -> ...
Mir fällt aber noch nicht ein, wie ich dass in eine Spiel zwingen kann, bei dem verschiedene Gruppen ihre Programme gegeneinander antreten lassen.
Bin für alle Einfälle dankbar!
Peter
Antwort 3 von PeterLustig
Sorry, bei meinem Anfangsposting sollte es nicht "keine Spiele", sondern "kleine Spiele" heißen.
Antwort 4 von disco
moin
so wie ich das verstehe, willst du ein spiel haben zu dem verschiedene gruppen die logik programmieren sollen.
d.h. es muss alles andere vorhanden sein. am besten sollten die gruppen einfach eine klasse vorgegeben bekommen, in der eine methode steht, die sie füllen müssen. so dass das spiel die parameter hierhin übergibt und das ergebniss zurückbekommt.
so muss nicht immer der quellcode von gruppe zu gruppe eingebaut werden.
je nach können lässt sich hierfür jedes spiel von memory bis schach verwenden. wenn es mehrspieler spiele sind können die gruppen auch direkt gegeneinander antreten.
g,
disco
so wie ich das verstehe, willst du ein spiel haben zu dem verschiedene gruppen die logik programmieren sollen.
d.h. es muss alles andere vorhanden sein. am besten sollten die gruppen einfach eine klasse vorgegeben bekommen, in der eine methode steht, die sie füllen müssen. so dass das spiel die parameter hierhin übergibt und das ergebniss zurückbekommt.
so muss nicht immer der quellcode von gruppe zu gruppe eingebaut werden.
je nach können lässt sich hierfür jedes spiel von memory bis schach verwenden. wenn es mehrspieler spiele sind können die gruppen auch direkt gegeneinander antreten.
g,
disco
Antwort 5 von TheRealWhistler
zum Beispiel Worte anneinander Reihen.
Sie könnten eine große Datei mit vielen deutschen Vokabeln/Wortgruppen vorgeben. (unsortiert)
Die Schüler müssen diese Datei in ein Array von Zechenketten einlesen, und dannach nach eigenem ermessen Sortieren. (z.B. Alphabetisch)
Der Schüler muss auch einen Algorithmus implementieren, der nach Vorgabe eines Startwortes möglichst schnell ein Folgewort findet, sich dieses "merkt" und bei der Suche eines weiteren Folgewortes alle "gemerkten" Wörter nicht mehr berücksichtigt. Ziel soll es hierbei nicht nur sein dass schnell ein(e) Wort(gruppe) aus der riesigen Liste gefunden wird, sondern auch eine gewisse Zufälligkeit der Wörter/Wortgruppen gewährleistet werden soll.
Das Programm welches am schnellten ein Folgewort findet, gewinnt. (Sollte kein Folgewort gefunden werden, darf es die gemerkten Wörter ein 2. mal verwenden. Muss aber den Zähler (wie oft das Wort benutzt wurde um eins erhöhen, und dies als Hinweis mit auf dem Bildschirm ausgeben.)
Ein schlechter Algorithmus findet nicht (innerhalb einer vorgegeben Zeit) ein neues Folgewort.
.....Wie gesagt, dass ist erstmal nur so ne Idee von mir.
--------------
ein Weiteres Besipiel wäre Tic Tac Toe.
Ziel ist es einen Computergegner zu implementieren.
Ich hatte das damals wie folgt gelößt.
Das Spielfeld habe ich der einfacheit halber in einem 2D Array angelegt, dessen Elemente entweder ein leerzeichen, 'x' oder 'o' sein können.
Der Computer soll nun anhand des aktuellen Spielfeldes seinen nächsten zug berechnen können.
Hierfür nutzte ich ein Hilfsarray mit den geleichen Abmessungen wie das Spielfeld. der Computer soll nun für jedes freie Feld eine Warcsheinlichkeit berechnen wie günstig es wäre an dieser Stelle seinen nächsten Stein zu setzen.
Diese Warcsheinlichkeit trägt er in das Hilfsarray ein. (1.0 = dort auf jedenfall hinsetzten, 0 = auf gar keinen Fall hinsetzen, 0 < w < 1 = möglicherweise dort hinsetzen.) Zu jedem berechneten Wert habe ich je nach Schwierigkeitstufe +-0.1 für Hard, +-0.2 für Normal, +- 0.3 für Easy hinzuadiert, um die Züge der CPU etwas zufällig erscheinen zu lassen.
z.B: (CPU hat x und Spieler hat o, die CPU ist am Zug)
Zusatzlich wird der Mittpunkt am meisten bevorzugt, da er den meisten Einfluss auf das Spielfeld ausübt. Danach kommen Ecksteine und als letztes erst Randsteine. z.B:
So in etwa hatte ich das implementiert. Ein paar Sonderfälle wie z.B. die CPU muss an diese Position setzen oder wird verlieren, müssen auch Berücksichtigt werden.
(sorry für Rechtschreibfehler)
Ciao
Andreas
Sie könnten eine große Datei mit vielen deutschen Vokabeln/Wortgruppen vorgeben. (unsortiert)
Die Schüler müssen diese Datei in ein Array von Zechenketten einlesen, und dannach nach eigenem ermessen Sortieren. (z.B. Alphabetisch)
Der Schüler muss auch einen Algorithmus implementieren, der nach Vorgabe eines Startwortes möglichst schnell ein Folgewort findet, sich dieses "merkt" und bei der Suche eines weiteren Folgewortes alle "gemerkten" Wörter nicht mehr berücksichtigt. Ziel soll es hierbei nicht nur sein dass schnell ein(e) Wort(gruppe) aus der riesigen Liste gefunden wird, sondern auch eine gewisse Zufälligkeit der Wörter/Wortgruppen gewährleistet werden soll.
Das Programm welches am schnellten ein Folgewort findet, gewinnt. (Sollte kein Folgewort gefunden werden, darf es die gemerkten Wörter ein 2. mal verwenden. Muss aber den Zähler (wie oft das Wort benutzt wurde um eins erhöhen, und dies als Hinweis mit auf dem Bildschirm ausgeben.)
Ein schlechter Algorithmus findet nicht (innerhalb einer vorgegeben Zeit) ein neues Folgewort.
.....Wie gesagt, dass ist erstmal nur so ne Idee von mir.
--------------
ein Weiteres Besipiel wäre Tic Tac Toe.
Ziel ist es einen Computergegner zu implementieren.
Ich hatte das damals wie folgt gelößt.
Das Spielfeld habe ich der einfacheit halber in einem 2D Array angelegt, dessen Elemente entweder ein leerzeichen, 'x' oder 'o' sein können.
Der Computer soll nun anhand des aktuellen Spielfeldes seinen nächsten zug berechnen können.
Hierfür nutzte ich ein Hilfsarray mit den geleichen Abmessungen wie das Spielfeld. der Computer soll nun für jedes freie Feld eine Warcsheinlichkeit berechnen wie günstig es wäre an dieser Stelle seinen nächsten Stein zu setzen.
Diese Warcsheinlichkeit trägt er in das Hilfsarray ein. (1.0 = dort auf jedenfall hinsetzten, 0 = auf gar keinen Fall hinsetzen, 0 < w < 1 = möglicherweise dort hinsetzen.) Zu jedem berechneten Wert habe ich je nach Schwierigkeitstufe +-0.1 für Hard, +-0.2 für Normal, +- 0.3 für Easy hinzuadiert, um die Züge der CPU etwas zufällig erscheinen zu lassen.
z.B: (CPU hat x und Spieler hat o, die CPU ist am Zug)
x x . => - ; - ; 1.0
o . . => - ; 0.55; 0.48
. . . => 0.25 ; 0.34; 0.65
Zusatzlich wird der Mittpunkt am meisten bevorzugt, da er den meisten Einfluss auf das Spielfeld ausübt. Danach kommen Ecksteine und als letztes erst Randsteine. z.B:
. . . => 0.0 bis 0.2 ; 0.0 bis 0.1 ; 0.0 bis 0.2
. . . => 0.0 bis 0.1 ; 0.0 bis 0.3 ; 0.0 bis 0.1
. . . => 0.0 bis 0.2 ; 0.0 bis 0.1 ; 0.0 bis 0.2
So in etwa hatte ich das implementiert. Ein paar Sonderfälle wie z.B. die CPU muss an diese Position setzen oder wird verlieren, müssen auch Berücksichtigt werden.
(sorry für Rechtschreibfehler)
Ciao
Andreas
Antwort 6 von PeterLustig
Hallo und herzlichen Dank für die neuen Kommentare/Einfälle!
@disco: Das Prinzip ist bestimmt möglich, allerdings kennt noch kein Anfänger die Elemente der objektorientierten Programmierung. Dann müßte das ganze prozedural gelöst werden.
@TheRealWhistler: Beim "Worte aneinanderreihen" ist es, denke ich, so möglich das Spiel zu implementieren. Bei TicTacToe (hatte ich auch schon in Betracht gezogen) sind allerdings Begriffe wie W'keiten nicht leicht für Programmieranfänger einzusehen. Insgesamt denke ich an noch einfachere Spiel. Bin mir aber im klaren, dass es wahrscheinlich kaum einfachere geben wird, oder ich sie nicht kenne.
Häufig liegt der Reiz einer Programmieraufgabe darin, "seine" Art der Programmierung mit der eines anderen zu vergleichen. Das war der Anlaß für die Idee der Spieleprogrammierung!
Bin für weitere Einfälle/Anregungen offen!
Peter
@disco: Das Prinzip ist bestimmt möglich, allerdings kennt noch kein Anfänger die Elemente der objektorientierten Programmierung. Dann müßte das ganze prozedural gelöst werden.
@TheRealWhistler: Beim "Worte aneinanderreihen" ist es, denke ich, so möglich das Spiel zu implementieren. Bei TicTacToe (hatte ich auch schon in Betracht gezogen) sind allerdings Begriffe wie W'keiten nicht leicht für Programmieranfänger einzusehen. Insgesamt denke ich an noch einfachere Spiel. Bin mir aber im klaren, dass es wahrscheinlich kaum einfachere geben wird, oder ich sie nicht kenne.
Häufig liegt der Reiz einer Programmieraufgabe darin, "seine" Art der Programmierung mit der eines anderen zu vergleichen. Das war der Anlaß für die Idee der Spieleprogrammierung!
Bin für weitere Einfälle/Anregungen offen!
Peter
Antwort 7 von TheRealWhistler
Hi,
Wenn es darum geht in irgend einem Spiel einen Computergegner zu implementieren wirst du wohl kaum darum kommen mit W'keiten zu arbeiten. Die nächste Stufe wäre sogar eine echte künstliche Intelligenz mit neuonalen Netzen zu implementieren, doch dass ist weiss gott nichts für Programmieranfänger (ist aber auf jeden Fall ein sehr interessantes Gebiet - und der CPU-Gegner wird auch sehr stark und schwer von einem Menschen zu schlagen sein)
----
Eine weitere Idee wäre es z.B: ein Mau-Mau-Spiel zu schreiben (doch dabei wird man nicht um Grafikprogrammierung herum kommen, ausser wenn man jede Karte mit Worten beschreibt.)
----
zu guter letzt käme vielleicht noch (in sofern Dateiarbeit mit Binär- oder Textdatein bei den Schülern bekannt ist) das suchen in einem Order (rekursiv mit Unterordnern) nach einem Bestimmten Text oder Zeichenfolge, und Ausgabe aller Dateien mit Datei, Zeile und Spalte aller gefundenen Einträge.
Das Programm welches am schnellsten (auf einer defragmentierten Festplatte) in einem für alle Schüler gleichen Ordner, ein gesuchtes Wort richtig findet, hat gewonnen. (Okay ist zwar kein richtiges Spiel... aber es schult den Umgang mit Dateiarbeit und Suchalgoritmen.)
Ciao
Andreas
Wenn es darum geht in irgend einem Spiel einen Computergegner zu implementieren wirst du wohl kaum darum kommen mit W'keiten zu arbeiten. Die nächste Stufe wäre sogar eine echte künstliche Intelligenz mit neuonalen Netzen zu implementieren, doch dass ist weiss gott nichts für Programmieranfänger (ist aber auf jeden Fall ein sehr interessantes Gebiet - und der CPU-Gegner wird auch sehr stark und schwer von einem Menschen zu schlagen sein)
----
Eine weitere Idee wäre es z.B: ein Mau-Mau-Spiel zu schreiben (doch dabei wird man nicht um Grafikprogrammierung herum kommen, ausser wenn man jede Karte mit Worten beschreibt.)
----
zu guter letzt käme vielleicht noch (in sofern Dateiarbeit mit Binär- oder Textdatein bei den Schülern bekannt ist) das suchen in einem Order (rekursiv mit Unterordnern) nach einem Bestimmten Text oder Zeichenfolge, und Ausgabe aller Dateien mit Datei, Zeile und Spalte aller gefundenen Einträge.
Das Programm welches am schnellsten (auf einer defragmentierten Festplatte) in einem für alle Schüler gleichen Ordner, ein gesuchtes Wort richtig findet, hat gewonnen. (Okay ist zwar kein richtiges Spiel... aber es schult den Umgang mit Dateiarbeit und Suchalgoritmen.)
Ciao
Andreas
Antwort 8 von TheRealWhistler
...noch ergänzend zum Thema Textsuche oder Binärsuche:
Es gibt schnelle (optimale) Suchalgorithmen für Textsuche und Binärsuche.
Als optimale Lösungen könnten Sie folgene Suchalgortihmen präsentieren:
optimale Binäre (Text-) Suche nach Kuth/Morris/Pratt (1977) (ideal für Suche nach binären Mustern in einem sequentiellen Datenstrom, sprich einer gewöhnlichen Datei)
und optimale Text(-muster) suche nach Boyer/Morris (1977) (ideal für Suche nach Zeichenketten in einem sequentiellen Datenstrom, sprich einer gewöhnlichen Textdatei)
Genaue Links zu Beispielen habe ich auf die Schnelle jedoch nicht gefunden.
Ciao
Andreas
Es gibt schnelle (optimale) Suchalgorithmen für Textsuche und Binärsuche.
Als optimale Lösungen könnten Sie folgene Suchalgortihmen präsentieren:
optimale Binäre (Text-) Suche nach Kuth/Morris/Pratt (1977) (ideal für Suche nach binären Mustern in einem sequentiellen Datenstrom, sprich einer gewöhnlichen Datei)
und optimale Text(-muster) suche nach Boyer/Morris (1977) (ideal für Suche nach Zeichenketten in einem sequentiellen Datenstrom, sprich einer gewöhnlichen Textdatei)
Genaue Links zu Beispielen habe ich auf die Schnelle jedoch nicht gefunden.
Ciao
Andreas
Antwort 9 von semi
Oder auch einen Algorithmus, welches das Türme-von-Hanoi Problem löst. Vorgabe wäre
dann die Anzahl der Scheiben und die ToH Regeln.
Ergebnis die Zeit und die Anzahl benötigter Schritte.
Da lernen die Schüler auch Endlosschleifen und
Stackoverflow kennen (z.B. Rekursion ohne Abbruchbedingung) :-)
dann die Anzahl der Scheiben und die ToH Regeln.
Ergebnis die Zeit und die Anzahl benötigter Schritte.
Da lernen die Schüler auch Endlosschleifen und
Stackoverflow kennen (z.B. Rekursion ohne Abbruchbedingung) :-)
Antwort 10 von PeterLustig
Hallo,
vielen Dank für die Einfälle. Vielleicht habt ihr auch noch einfachere Ideen. Rekursionen und Suchalgorithmen werden erst später angesprochen. Ich denke an etwas, wo die theoretische Lösung ruhig sehr schnell offensichtlich sein kann. Niveau wie eben dieses "Wortschlangenspiel". Also intellektuell eher Grundschulniveau 8-).
Grüße
Peter
vielen Dank für die Einfälle. Vielleicht habt ihr auch noch einfachere Ideen. Rekursionen und Suchalgorithmen werden erst später angesprochen. Ich denke an etwas, wo die theoretische Lösung ruhig sehr schnell offensichtlich sein kann. Niveau wie eben dieses "Wortschlangenspiel". Also intellektuell eher Grundschulniveau 8-).
Grüße
Peter

