![]() |
Eine Projektarbeit
ist was ich und ein Mitschüler (der diesen Account mit benutzt) in den nächsten Monaten anfertigen soll. Wir sind in der Oberstufe und sollen auf Delphi Basis mit Lazarus ein Programm, sei es Tabellensystem oder Spiel anfertigen.
Wir hatten an ein 2D Spiel gedacht (im Stile eines alten Mario Games), sind bis jetzt aber nicht wirklich fähig ein solches zu erstellen. Als Basis sollen die Kenntnisse die wir uns im Unterricht angeeignet haben und Wissen das wir durch Recherchen erlangt haben, dienen. Wir sind natürlich für alle Vorschläge offen und müssten zunächst wissen wie umsetzbar unsere Idee ist. Bis jetzt haben wir was Delphi angeht nur ein paar Grundlagen erlernt und noch überhaupt nicht mit irgendeiner Form von Grafik gearbeitet. Des weiteren war ich mir nicht sicher wohin damit und habe mich erst einmal für diesen Forumsbereich entschlossen. Wir haben uns gerade erst registriert und werden vermutlich am Abend wieder rein schauen. Mfg Felix und Toni :-D |
AW: Eine Projektarbeit
Na dann mal Willkommen hier.
Korrekterweise sollt ihr mit Pascal bzw. Object-Pascal, dem FreePascalCompiler (als Compiler) und Lazarus (als IDE) ein Programm anfertigen. Delphi ist ein etwas anderer Pascal-Dialect. ;) Wenn ihr gar nicht wisst, wie ihr anfagen sollt das zu programmieren, dann fangt nicht mit dem Programmieren an, sondern mit dem Konzept! (Das sollte immer zuerst da sein) Also ganz viel Papier, ordentlich Tinte auf den Füller und loslegen. Fangt mit dem groben Ablauf an, also was soll dem Spieler gezeigt werden, wenn er das Spiel startet und welche Auswahl-Möglichkeiten hat er. Was soll dann bei diesen Auswahlmöglichkeiten angezeigt werden. Wie soll die Auswahl getroffen werden (Taste, Mausklick, etc.). Das eigentliche Spiel wird dann auch so skizziert (welche Aktion, was passiert, wann darf nur passieren). Das ist schon mal eine ganze Menge und dazu benötigt man Null Programmierkenntnisse :) |
AW: Eine Projektarbeit
Hallo Felix, Hallo Toni,
Zitat:
Spiele-Entwicklung ist ungeheuer Anspruchsvoll. Ihr müsst Euch mit Grafik auskennen, mit unterschiedlichen Eingabemethoden, müsst optimiert entwickeln, damit das Spiel nicht zu langsam wird, Euch Gedanken zum Spielablauf machen, müsst Euch entweder mit der automatischen Generierung von Spielfeldern/Leveln oder mit einem Dateiformat für Levels beschäftigen etc. pp. Kurzum: Spiele-Entwicklung umfasst nahezu alle Teilbereiche der Informatik und das nicht gerade auf dem einfachsten Level. Oder anders gesagt: Selbst ein so einfaches Spiel wie Flappy Bird stellt selbst einen erfahrenen Entwickler schon vor ordentliche Herausforderungen. Ich persönlich würde sagen, das sind nicht unbedingt die optimalen Vorraussetzungen für eine Projektarbeit. Als Projektarbeit habe ich damals mit meiner Gruppe zum Beispiel eine kleine Bibliotheksverwaltung geschrieben: Suche nach Titel, Kategorie, Autor, Ausleihvorgang, nach Kunde, Rückgabe und eine Auswertung wer gerade welches Buch hat bzw. wer mit welchen Titeln schon über Zeitraum X ist. Das ganze mit ner kleinen Datenbank hintendran, und das haben wir dann grafisch auch noch recht hübsch gemacht (bunte, große Buttons, coole Icons etc.) und das hat uns auch schon ne Weile beschäftigt und auch hier waren die Debugging-Sessions nicht ganz ohne. Also mein Vorschlag: Überlegt Euch das mit dem Spiel lieber nochmal. Das könnt ihr hinterher immer noch bauen wenn ihr Spass daran habt, und lauft nicht Gefahr, Euch bei einem Projekt das in Eure Benotung einfliesst, ggf. zu überheben. |
AW: Eine Projektarbeit
memory ist einfach, auch ein spiel aber das wichtigste es ist "Rundenbasiert" und benötigt nur wenig wissen über Spielfeld, kein Scrolling und keine timings
|
AW: Eine Projektarbeit
Hallo zusammen,
wie Sir Rufo schon sagte, es geht los mit viel Papier. Und wenn man das Konzept hat, manche sagen auch Programmablaufplan, dann programmiert man das "mal eben" herunter. Wenn Ihr Euch hier umseht, dann sind viele Fragen dem "mal eben" zuzurechnen, aber auch ein erklecklicher Anteil basiert auf einem fehlenden Konzept. Darum setzt Euch erst einmal hin und plant was Ihr wollt, das Programmieren kommt noch früh genug. Glaubt Ihr nicht? Dann spielt doch mal die Bibliotheksverwaltung mit einer Datenbank durch. Welche Datenbank darf es sein? Legt Ihr Euch auf eine fest, oder darf eingesetzt werden was verfügbar ist? Davon hängt ab welcher SQL-Dialekt genutzt wird, oder soll es etwas anderes sein? Welche Zeichen werden unterstützt? So ganz ohne Umlaute sollte eigentlich out sein, aber gibt es noch immer. Reicht der deutsche Zeichensatz oder muß auch Türkisch,Ungarisch,Schwedisch und Dänisch berücksichtigt werden? Usw. Usw. Gruß K-H |
AW: Eine Projektarbeit
ein Tipp von mir:
Nicht so sehr auf das visuelle oder "Bling Bling" konzentrieren. Man kommt schnell in die Versuchung sich erstmal mit dem Aussehen zu beschäftigen. Versucht eine einfach, (möglichst) pfiffige Idee umzusetzen und poliert erst am Ende dran rum. Papier und Stift um ein Konzept zu erstellen ist immer ein guter Anfang. Ein Spiel braucht nicht viel Aufwand, die Idee zählt. |
AW: Eine Projektarbeit
Ich denke auch, daß Spiele wie zum Beispiel Snake, X gewinnt ect. so richtig heftig schwer sind als Starter. Wenn Ihr ein Programm Lottotipp o.ä. schreibt ist das m.E. schon völlig Ok.
|
AW: Eine Projektarbeit
Gut, danke erst mal für soviele Rückmeldungen.
Also zwei Optionen: Option Nr 1 Leichteres rundenbasiertes Spiel (hatte ich mir schon mal auf Youtube angeguckt für Tic Tac To glaube ich, damals aber im Texteditor und es war wirklich nur das Spiel und kein Interface ^^), wir müssen immer darauf achten das es Leistungsteschnich im grünen Bereich bleibt. (Kleiner Anhang eine drei Mann Gruppe hat snake Programiert und 6 Punke also eine 4 + bekommen xD würde ich gerne vermeiden) Als kleine Anmerkung im Unterricht war das schwierigste zu programierende Spiel eine Art Duangens and Dragons also weit entfernt von einem Tic Tac To. (wieder ohne Interface oder Hintergrund, einfach nur die Felder die mit Buttons verknüpft waren) Option Nr2 schweres 2D Spiel. Ein Konzept ist also wichtig am Anfang! Wir haben alle Zeit der Welt (mehrere Monate) und deshalb würde ich es gerne wenigstens Probieren :) Also auf ans Zeichenbrett Konzept ausarbeiten 8-), ich werde mir das orginal noch mal ansehen. Dazu eine Frage darf ich die Konzeptzeichnungen wenn sie Fertig sind hier posten (wird wohl so am Wochenende sein)? |
AW: Eine Projektarbeit
Poste alles was geht 8-)
Snake richtig mit Steuerung und allem und dann nur eine 4+? Moment, wenn ihr wirklich "mehrere Monate" :shock: habt dann kann ich das sogar etwas verstehen. Kannst du ein bisschen erzählen was eure bisherigen "Grundlagen" sind? Eine kleine Zusammenfassung was ihr gelernt habt und welche selbstständig zu lösenden Aufgaben ihr bekommen habt? |
AW: Eine Projektarbeit
Klar :) sitz leider am Privat Rechner und nicht in der Schule ( da sind die ganzen Programme gespeichert :P) aber so das komplexeste waren Sotierprogramme. Sprich fertige eine Datenbank mit mehreren Komponenten an und dann sollten die nach verschiedenen Varianten sortiert werden.
Spiele teschnisch haben wir eigentlich nur am Anfang gearbeitet, eben wie schon erwähnt ... ein paar buttons verlinkt mit Memos und alles war gut. Dieses Programm ist quasi unsere einzige Info. Note in der 12/2 ... mit andern Worten brings dir selbst bei oder STIRB :-D aber naja deshalb sind wir ja hier xD Wie sieht es Programm teschnisch aus... ich weiß zum Beispiel wie ich ein Interface machen könnte aber nicht wie ich ein neues Form (gehen wir davon aus das ich mit dem Interface das ganze aufrufen möchte) damit verlinke... aber das ist ja auch erst mal keine Thematik ich werd erst mal das Konzept ausarbeiten^^ was wir alles so hatten kann ich am Montag mal auflisten :) |
AW: Eine Projektarbeit
Ich denke mal, wenn ihr so viele Monate Zeit habt, sollte es kein Problem sein, ein Programm wie Flappy Bird oder Snake zu entwickeln (wir haben mal nebenbei ein Flappy Bird auf Java programmiert (und zwar mit Methoden, bei dem jedem Programmierer, der wenigstens halbwegs etwas von seinem Fach versteht, ein Schauer über den Rücken läuft :lol:), aber vom Kern her ist es gar nicht so kompliziert zumal ihr ja die Hilfe vom Forum bekommt, d.h. wenn's irgendwo klemmt - einfach mal fragen. :wink:
Also erst mal Konzept ausarbeiten - danach Datenstrukturen Programmieren und zum Schluss das GUI. |
AW: Eine Projektarbeit
Zitat:
|
AW: Eine Projektarbeit
Wir haben 3 Informatik Stunden :P ich werd aber auch von zuhause aus ein bissel was machen ich bin nämlich Anfänger und brauche trotzdem eine gute Note :D
|
AW: Eine Projektarbeit
Die Herangehensweise und Dein Engagement gefällt mir :thumb:
So wird das was :) |
AW: Eine Projektarbeit
Ein minimalistischer Dungeon Crawler wäre auch eine Überlegung wert:
|
AW: Eine Projektarbeit
Ich denke das geht mächtig in die Hose... sucht euch mal eine einfachere Aufgabe aus. :wink:
|
AW: Eine Projektarbeit
Von allem was 3D angeht solltest du dringend die Finger lassen.
Bleib lieber bei 2D. Eine meiner Projektarbeiten war ein in Java programmiertes Pong-Spiel. In Delphi sollte das ja wohl auch möglich sein und schwierig zu realisieren ist es auch nicht. Ein paar kleine Berechnungen und Kollisionsabfragen.. im Prinzip. |
AW: Eine Projektarbeit
Liste der Anhänge anzeigen (Anzahl: 1)
Gut die angehangene png Datei ist unser "Konzept", ich war mir dann doch nicht sicher wie das ganze nun eigentlich aussehen soll. Leider habe ich es geschafft meinen Laptop (beim Lüfter reinigen zu himmeln, war eh Uralt ...) daher jetzt vom Info Unterricht mit Paint xD der erste Teil des Konzepts.
Zur Legende. Nr 1 ist unsere Spielfigur. Im Moment sind alle Elemente als geometrische Formen dargestellt, alle sollen im fertigen Spiel durch eine Grafik (wie auch immer ich diese Erstelle bzw Einfüge) ersetzt werden. Die grünen Pfeile zeigen grob die Eigenschaften der Figur an. Angedacht sind eine Sprung- und Lauffunktion. Zu beachten ist das durch das Springen auf andere Gegner, also Konzeptfigur 3, später hoffentlich auch etwas schöner, eben jene verschwinden (besiegt sind, einen qualvollen Tod sterben, wie auch immer :P). Nr 2 ist ein Hindernis (hier soll also die Sprungfunktion angewendet werden) und erfüllt sonst nur noch eine Funktion: Sie ist die Grenze des Einflussraums von Konzeptfigur 3. Gleichzeitig soll an diesem Punkt Konzeptfigur 3 wieder umdrehen (eine Art Patrouille ausführen). Nr 3 ist ein Gegner wobei mir das Programmieren der KI so schlicht sie sein mag, wahrlich einen Schauer über den Rücken jagt. Die KI muss nur in 2 Richtungen Laufen können und am Hindernis Nr2 drehen. Wenn Nr1 also der Spieler die Ki berührt ohne auf sie zu springen (also wenn der Spieler in Nr3 hinein rennt) soll er am Anfang des Lvls wieder anfangen müssen. Nr4 Ist naja der Boden. Vielleich eine Graß Landschaft wie auch immer der Boden zum Schluss aussieht er hat keine Funktion außer das Nr 1 sich auf ihm bewegt^^. Nr 5 soll schlicht eine Hintergrund Grafik sein und hat keine Relevanz außer der Optik :) Alles in allem war Vorgesehen 10 solcher Abschnitte zu einem Lvl zu machen für 3 sind auch schon ein Konzept da. Dabei wird sich die Spielmechanik wiederholen was allerdings kein Weltuntergang ist. Wie genau die Grafik die zum Schluss verwendet wir aussieht wissen wir indes noch nicht. So far Felix (neben bei, nur so am Rande von einem 3 D Spiel war nie die Rede ich bin motiviert, dass heißt nicht das ich suicidäre Neigungen verspüre xD) |
AW: Eine Projektarbeit
Zitat:
|
AW: Eine Projektarbeit
Ich würde euch ehrlich gesagt auch davon abraten sowas wie "Mario" zu programmieren.
Programmiert lieber, wie schon oft hier erwähnt, ein Kartenspiel oder z.B. Schiffe versenken. Schiffe versenken solltet ihr hinbekommen. Hier wäre dann sicher auch noch Erweiterungspotential da, falls ihr wirklich schon zu zeitig damit fertig werden solltet. Da müsst ihr dann einfach etwas kreativ werden ;-). Eine Idee für eine Zweispielermodus an einem PC: - Spieler 1 schaut auf den Bildschirm und Spieler 2 guckt weg - Spielfeld von Spieler 1 ist sichtbar - Spieler 1 macht alle Züge - Spielfeld von Spieler 1 wird verdeckt und es zählt ein Zähler von 10 nach unten (in der Zeit drehen sich beide Spieler um) - Spielfeld von Spieler 2 ist sichtbar - usw. vllt habt ihr da aber auch noch eine bessere Idee. Wenn ihr ganz viel Zeit habt machts übers Netzwerk lauffähig ;-). Ich kann mir vorstellen, dass die komplette Dokumentation (Konzepterstellung, usw.) mindestens genauso wichtig ist, wie das eigentliche Programm. Deshalb kann auch ein normalerweise anspruchsvolles Spiel (Snake) in die Hose gehen. Macht lieber etwas simples und dann aber solide von Anfang bis Ende. Grüße Headbucket |
AW: Eine Projektarbeit
Ich denke die Frage ist, ob ihr nur in den Informatikstunden an eurem Projekt arbeiten wollt, oder ob ihr auch zu Hause daran weiterarbeiten könnt.
Aus eigener Erfahrung weiß ich, dass die 3 Stunden pro Woche meist nicht ausreichen um etwas vernünftiges auf die Beine zu stellen. Man verbraucht einfach zu viel Zeit damit, sich erst einmal wieder neu einzulesen und sich daran zu erinnern, was man denn letzte Woche gemacht hat usw. Zudem dauert eine Partnerarbeit zusätzlich länger, da entsprechend jeder Vorgang erst einmal diskutiert werden muss und evt. verschiedene Ideen besprochen werden müssen usw. Wenn ihr aber auch den Ehrgeiz habt, zu Hause daran weiterzuarbeiten, ist es denke ich durchaus möglich so ein Spiel zu programmieren, wie ihr es vorhattet. Dann muss allerdings das nötige Engagement dabei sein, damit man ein solches Projekt durchziehen kann. Dann würde sozusagen jeder seinen Teil der Programmierarbeit zu Hause übernehmen und die Stunden hättet ihr frei, diese Teile dann zusammenzutragen. Das setzt allerdings eine gute Planung vorraus, d.h. jeder muss wissen welche Klassen oder Programmabschnitte er programmieren muss und wie diese auszusehen haben. Dazu müsst ihr natürlich erst wissen, wie überhaupt das Programm auszusehen hat und dafür müsst ihr zusammen arbeiten um überhaupt das Konzept ausarbeiten zu können. Um das machen zu können, müsst ihr aber erst die programmiertechnischen Grundlagen kennen, welche ihr vom Lehrer gelehrt oder hier aus dem Internet bekommt. Also es ist eine lange Reihe von Vorbereitung damit verbunden. Damit möchte ich euch aber auch nicht davon abraten, diese Spielidee umzusetzen (oft ist man deutlich mehr motiviert, wenn man ein etwas zu anspruchsvolles Projekt in Angriff nimmt als wenn man etwas macht, was vielleicht einfacher ist, aber was man selber nicht mag), aber es fordert auf jeden Fall höchstes Engagement d.h. wirkliches "Arbeiten". Zu eurem Projekt: Ich weiß nicht inwiefern ihr bereits objektorientierte Programmierung durchgenommen habt, aber ich würde als erstes mal die Klassen und deren Beziehungen zueinander festlegen bevor ihr euch in Kleinigkeiten wie "wie soll meine Spielerfigur aussehen" verfranst. |
AW: Eine Projektarbeit
Auch wenn Ihr wahrscheinlich schon kurz vor der Fertigstellung steht, wie wäre es mit Sudoku ?
![]() Gruß K-H |
AW: Eine Projektarbeit
Sudoku ist bei der ganzen Story hier auch mein erster Gedanke gewesen. Das kann man beliebig in der Komplexität steigern, vom simplen 3x3 Grid mit manuell vorgegebenen Mustern, bis hin um selbst befüllenden und auch lösenden (brute force oder mit eleganten Algorithmen, natürlich mit Zeitvergleich) Rechenbiest mit beliebigen nxn Rastern. Die Optik kann von schlicht bis bombastisch reichen, und man hat dennoch alles schön im Griff.
Kurz: Ein Sudoku kann man mit einer granular steigerbaren Komplexität entwicklen. Sherlock |
AW: Eine Projektarbeit
in der CT 10/2014 war ein interessanter Artikel zur Spieleprogrammierung
|
AW: Eine Projektarbeit
Hi kann im Moment leider immer nur aus dem Info Unterricht antworten, mein Pc ist immer noch nicht da^^ aber wir haben uns überlegt, weil wir eure Bedenken zum Thema Machbarkeit ja doch teilen, dass wir nun eine Art Spieleeditor einrichten wollen. Nur Tic Tac Toe oder Snake wäre zu wenig also werden wir ein Interface mit mindestens zwei Minispielen einrichten aus denen man dann wählen kann. Wir fangen mit Tic Tac Toe an, dazu gibt es glaube ich sogar ein paar Videos auf Youtube ist halt die Frage ob diese nun auch auf Lazarus greifen würden.
|
AW: Eine Projektarbeit
Also was ich als Spiel empfehlen kann ist Bomberman
es ist Grafisch leicht ansprechend man kann es je nach Anspruch anders Programmieren also mit Vererbungen und Objekte und wenn man denkt das ist zu leicht kann man Kollisionsbehandlungen mit einbringen die Bombenfelder erweitern |
AW: Eine Projektarbeit
Game of life?
|
AW: Eine Projektarbeit
So nach langer langer Zeit :) mal eine Rückmeldung (unser erstes Halbjahr neigt sich dem Ende zu wir hatten etwas stress und die Pa startet ja eh erst nächstes Halbjahr^^) aber wir haben jetzt die zu unserem "Thema" passende Aufgabenstellung erhalten:
Thema der Arbeit: Computerspielesammlung Schwerpunkte: -mehrere klassische Spiele (Beispiel tic tac toe oder Bingo) -2D Basis Ja also wir haben unser kleines Problem nun also gelöst in dem wir quantitativ etwas mehr aufstellen (wenn Snake eben 6 Punkte gibt dann machen wir halt einen Spieleeditor und nicht nur ein Spiel). Wir haben also angefangen und direkt ein paar Fragen (Der Grund dafür ist einfach wir dürfen zwar alles verwenden, müssen aber ähnlich wie bei einer Seminarfacharbeit aufpassen das wir alles mit Quellen angeben, dabei darf der eigen Anteil natürlich nicht zu knapp sein). Fragen wären: -Benutzen wir für jedes neue Spiel ein neues Format? Oder wird alles in ein Format geschrieben unsere Idee war es nämlich ein Format für das Menü von dem aus man zu den Spielen weitergeleitet wird und dann eben immer ein Format für jedes Spiel. -Kennt ihr Tutorials die uns eventuell weiterhelfen? wir haben festgestellt das auf Youtube viel Delphi ist aber wenig freepascal :( (Kann auch ein alter Foreneintrag von hier sein :D) -Habt ihr einen Link für eine Beispiel Konzeptzeichnung (wie am Anfang erwähnt) oder war die damals hochgeladene Konzeptzeichnung so richtig? Wir haben über Google gesucht aber leider nichts wirklich eindeutiges gefunden. So far Felix (wenn sich das mit dem Konzeptzeichnungen klärt lade ich diese am Wochenende oder so hoch :)) |
AW: Eine Projektarbeit
Bevor ihr versucht durch Quantität eine bessere Note als dieses Snake Projekt zu bekommen solltet ihr euch informieren, warum es da nur 6 Punkte gegeben hat.
Ich wette, dass es nicht daran liegt, dass es nur ein Spiel ist sondern an der gesamten Umsetzung (einfach so dahingerotzt, keine Dokumentation, kein Projektplan, ...). Und falls/sobald du den Grund kennst, dann erläutere ihn bitte hier. |
AW: Eine Projektarbeit
Zu Frage 1: Mit Format meinst Du wohl Form, oder? Ja, wäre sinnvoll, vielleicht bietet es sich sogar an, die Datenstruktur getrennt von der Oberfläche aufzubauen, d.h. noch mal eine oder mehrere Controllerklassen für jedes Spiel. Das wäre die eleganteste, aber auch nicht unbedingt einfachste Lösung.
Zu Frage 2: Die Delphitutorials könnt ihr genauso gut verwenden, bis auf ein paar Unterschiede gleichen sich Delphi und Freepascal. Ansonsten auf jeden fall mal {$ mode delphi} oben reinschreiben. Zu Frage 3: Was Du uns gezeigt hattest, war ja in erster Linie nur eine Skizzierung der Idee. Mach mal zuerst eine etwas detailliertere Skizze und geht den Programmablauf stück für stück durch. In welcher Form das geschieht, ist erst einmal egal. Wichtig ist nur, dass ihr versteht, was ihr macht. Danach könntet ihr noch mehr ins Detail gehen und z.B. UML- Klassendiagramme zeichnen oder Struktogramme, wenn ihr die schon im Unterricht durchgenommen habt. |
AW: Eine Projektarbeit
Zitat:
Wenn ich das nochmal zitieren darf: Zitat:
Man merkt anhand der Fragen, die ihr stellt, dass ihr (nicht krumm nehmen) bisher kaum Ahnung von der Thematik habt. Deshalb solltet ihr, wie hier bereits SEHR oft empfohlen, erstmal etwas einfaches probieren. Das aber wirklich gut dokumentieren usw. Wenn ihr merkt, dass ihr noch freie Valenzen habt, dann könnte ihr das Projekt noch erweitern und komplexer gestalten. Ich denke die meisten hier wissen, wie Lehrer ticken, da sie das Schulsystem bereits einmal komplett durchlaufen haben. Ich wette es kommt am wenigsten darauf an, ob möglichst viel auf dem Bildschirm blinkt und sich was bewegt. Es ist aber auf jeden Fall gut, dass ihr etwas zur Besinnung gekommen seid. Programmiert erstmal eines der simplen Spiele. Hier werdet ihr schon merken, ob euch das ganze leicht von der Hand geht oder eben nicht. Vllt seid ihr auch Naturtalente - wer weiß. Das dann aber erstmal ordentlich dokumentieren usw. Danach geht's weiter :-) Grüße Headbucket |
AW: Eine Projektarbeit
QQ hätten wir über das mit der Snake Geschichte vorher noch mal nachgedacht :/ naja das was ich beim letzten mal hier gepostet habe war aber leider schon der finale Aufgabenentwurf ... Was ja Snake nicht ausschließt aber uns zumindest dazu verpflichtet mehr als ein Programm zu erstellen. Womit wir nun also zum Kritikpunkt Quantität kommen ein Tic Tac Toe ist schnell gemacht, wir hatten an ein Form 2 (Form 1 ist Startbildschirm) mit 9 Feldern (wir wollten dazu 9 Buttons verwenden, die entweder ein X oder ein O angeben und durch Editfenster eingegeben werden) ^^ so etwas ähnliches haben wir schon mal im Unterricht gemacht und der Arbeitsaufwand hält sich doch in Grenzen.
Wir werden uns also steigernd von Tic tac toe zu Snake und dann gucken wie viel vom Halbjahr übrig ist. Zitat:
Wie ein Tic Tac Toe aussieht weiß ja jeder, dennoch würden wir uns über Vorschläge zum Oben genannten Plan Zitat:
So Far Felix |
AW: Eine Projektarbeit
Ach ja und
Zitat:
|
AW: Eine Projektarbeit
Ein paar Anregungen zu TicTacToe:
- zunächst würde ich ![]() das ganze kann dann z.B. so aussehen:
Delphi-Quellcode:
Das sind alle Zustände, die ein Feld besitzen kann.
type
TState = (State_none, State_X, State_O); - Außerdem solltet ihr stets darauf achten, die "Datenspeicherung" von der Oberfläche zu trennen. Dazu wurde mir selbst mal ein toller Link gegeben: ![]() - Am Anfang besitzen alle Buttons den Zustand "State_none" - Natürlich müsst ihr irgendwo eine Variable mitlaufen haben, die angibt, ob der nächste Klick ein X oder ein O erzeugt. - Wird ein Button angeklickt, welcher den Zustand "State_none" besitzt, dann wird der jeweilige Zustand vergeben - Danach werden alle Buttons aktualisiert - ... Um mal ein paar kleine Anregungen zu geben. Grüße Headbucket |
AW: Eine Projektarbeit
Ich weiß ja nicht, zu wie vielen ihr eure Gruppenarbeit umsetzt. Euer Ansatz bietet ja dabei die Möglichkeit, das jeder ein eigenes Spiel entwickelt (der eine macht TicTacTo, der andere Snake, ...). Auf diese Art sollte man doch dann mehr Substanz zusammen bekommen. Das nachher in ein Programm zusammen zu bekommen, ist doch dann schnell gemacht.
Wenn ihr pro Spiel ein eigenes Form benutzt (wie ihr ja vor zu haben scheint) hat das auf jeden Fall den Vorteil, dass ihr mehrere Spiele parallel schreiben und nachher alles zusammenwürfeln könntet. Als Tip zur weiteren Vorgehensweise bei den einzelnen Spielen solltet ihr beherzigen, was hier in Forum oft genannt wird: Plant das erstmal "auf Papier": Wie sehen die Abläufe aus, was habe ich wo für Daten, was muss wann geprüft werden (z.B. wann ist die Siegbedingung erfüllt o.ä.). Versucht die dabei entstehende "Logik" so abzubilden, dass für die Datenhaltung nicht die GUI-Elemente Missbraucht werden (nicht: if Checkbox11.Checked and Checkbox12.Checked and Checkbos13.Checked then SIEG) sondern Klassen oder Werte in Arrays oder Listen. Dieses trennen der Anzeige von der Logik ist dann bereits ein erstes Qualitätsmerkmal, dass der Lehrer hoffentlich zu würdigen weiß. |
AW: Eine Projektarbeit
Zitat:
Ach ja wir sind zwei Ich (Felix) und Toni aber es ist vielleicht trotzdem sinnvoll an zwei Programmen Parallel zu arbeiten :) Auf jeden fall Danke für den Tic Tac Toe Ansatz Felix |
AW: Eine Projektarbeit
Hier mal ein kleines Beispiel, wie man so etwas aufbauen und vor allem die Arbeit aufteilen kann:
Wir haben das Spiel Fang-Den-Button (ja, sehr sinnvoll) Auf dem Spielfeld soll ein Button erscheinen und nach einer bestimmten Zeit die Position wechseln. Ziel ist es den Button zu treffen und nicht das Spielfeld. Für jeden getroffenen Button erhält man 10 Punkte. Trifft man mehr als 10 mal daneben, dann ist das Spiel vorbei. Gemeinerweise verändert sich bei jedem Positionswechsel auch die Größe des Buttons und nach jedem Treffer wechselt der Button immer schneller seine Position. Die Arbeit soll aufgeteilt werden, so dass einer sich um die Oberfläche und der Andere sich um die Logik kümmern kann. Dazu vereinbart man, was man wie und wo erwartet und skizziert sich folgende abstrakte Klasse (die kann quasi nix, gibt aber den Rahmen vor):
Delphi-Quellcode:
Nun können beide loslegen. Der für die Anzeige baut sich jetzt eine minimale funktionierende Klasse, damit er seine Anzeige auch testen kann
unit FangDenButton;
interface uses System.Types, System.Classes; type TFangDenButton = class abstract private FOnChange: TNotifyEvent; { System.Classes.TNotifyEvent } FPlaygroundSize: TPoint; { System.Types.TPoint } procedure SetOnChange( const Value: TNotifyEvent ); procedure SetPlaygroundSize( const Value: TPoint ); protected // Wird etwas geändert, dann diese Methode aufrufen, // damit die Anzeige darauf reagieren kann procedure NotifyChange( ); protected // Konkrete Ableitungen müssen diese Methoden mit Leben füllen procedure DoButtonCatched; virtual; abstract; procedure DoButtonMissed; virtual; abstract; procedure DoStart; virtual; abstract; procedure DoSetPlaygroundSize( const Value: TPoint ); virtual; function GetPunkte: Integer; virtual; abstract; function GetPosition: TPoint; virtual; abstract; function GetButtonSize: TPoint; virtual; abstract; function GetSpielAktiv: Boolean; virtual; abstract; public // Button getroffen procedure ButtonCatched; // Button nicht getroffen procedure ButtonMissed; // Startet das Spiel procedure Start; // Ereignis bei einer Änderung property OnChange: TNotifyEvent read FOnChange write SetOnChange; // ANzahl der Punkte property Punkte: Integer read GetPunkte; // Position des Buttons property Position: TPoint read GetPosition; // Größe des buttons property ButtonSize: TPoint read GetButtonSize; // Größe des Spielfelds (wird von der Anzeige geliefert) property PlaygroundSize: TPoint read FPlaygroundSize write SetPlaygroundSize; // Ist das Spiel am laufen? property SpielAktiv: Boolean read GetSpielAktiv; end; implementation { TFangDenButton } procedure TFangDenButton.ButtonCatched; begin DoButtonCatched; end; procedure TFangDenButton.ButtonMissed; begin DoButtonMissed; end; procedure TFangDenButton.DoSetPlaygroundSize( const Value: TPoint ); begin end; procedure TFangDenButton.NotifyChange; begin if Assigned( FOnChange ) then FOnChange( Self ); end; procedure TFangDenButton.SetOnChange( const Value: TNotifyEvent ); begin FOnChange := Value; if Assigned( FOnChange ) then FOnChange( Self ); end; procedure TFangDenButton.SetPlaygroundSize( const Value: TPoint ); begin if FPlaygroundSize <> Value then begin FPlaygroundSize := Value; // Wir benachrichtigen mal nach innen, wer weiß ob das benötigt wird DoSetPlaygroundSize( Value ); // Vorsichtshalber informieren wir mal die Anzeige, man kann nie wissen :o) NotifyChange; end; end; procedure TFangDenButton.Start; begin DoStart; end; end.
Delphi-Quellcode:
Damit baut er sich die Anzeige, die minimal so aussehen sollte
unit FangDenButtonTest;
interface uses System.Types, FangDenButton; type TFangDenButtonTest = class( TFangDenButton ) private // Punkte FPunkte: Integer; // Spielstatus FSpielAktiv: Boolean; protected procedure DoButtonCatched; override; procedure DoButtonMissed; override; procedure DoSetPlaygroundSize( const Value: TPoint ); override; procedure DoStart; override; function GetButtonSize: TPoint; override; function GetPosition: TPoint; override; function GetPunkte: Integer; override; function GetSpielAktiv: Boolean; override; end; implementation { TFangDenButtonTest } procedure TFangDenButtonTest.DoButtonCatched; begin inherited; // Punkte hochzählen Inc( FPunkte ); // Anzeige benachrichtigen NotifyChange; end; procedure TFangDenButtonTest.DoButtonMissed; begin inherited; // Punkte herunterzählen Dec( FPunkte ); // Anzeige benachrichtigen NotifyChange; end; procedure TFangDenButtonTest.DoSetPlaygroundSize( const Value: TPoint ); begin inherited; // Anzeige benachrichtigen NotifyChange; end; procedure TFangDenButtonTest.DoStart; begin inherited; // Punkte zurücksetzen, wenn das Spiel aktiv war if not FSpielAktiv then FPunkte := 0; // Einfaches umschalten zwischen an und aus FSpielAktiv := not FSpielAktiv; // Anzeige benachrichtigen NotifyChange; end; function TFangDenButtonTest.GetButtonSize: TPoint; begin // Der Button bekommt die halbe Breite und Höhe des Spielfelds Result := TPoint.Create( PlaygroundSize.X div 2, PlaygroundSize.Y div 2 ); end; function TFangDenButtonTest.GetPosition: TPoint; begin // Der Button kommt in die Mitte des Spielfelds // eigentlich ( ( Spielfeld.Breite - Button-Breite ) / 2 ) // aber da der halb so groß ist wie das Spielfeld (s.o.) // können wir auch vereinfacht ( Spielfeld.Breite / 4 ) nehmen Result := TPoint.Create( PlaygroundSize.X div 4, PlaygroundSize.Y div 4 ); end; function TFangDenButtonTest.GetPunkte: Integer; begin // Punkte zurückliefern Result := FPunkte; end; function TFangDenButtonTest.GetSpielAktiv: Boolean; begin // Spielstatus zurückliefern Result := FSpielAktiv; end; end.
Delphi-Quellcode:
An Ende könnte das dann so aussehen
unit Form.Main;
interface uses FangDenButton, Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Buttons; type TForm1 = class( TForm ) private // Die Spiel-Instanz FGame: TFangDenButton; // Benachrichtigungs-Methode wenn sich am Spiel etwas ändert procedure GameOnChange( Sender: TObject ); public procedure AfterConstruction; override; procedure BeforeDestruction; override; end; var Form1: TForm1; implementation {$R *.dfm} uses FangDenButtonTest; { TForm1 } procedure TForm1.AfterConstruction; begin inherited; // Spiel-Instanz erzeugen (ist erstmal die Test-Klasse) FGame := TFangDenButtonTest.Create; // Mit dem OnChange-Event verbinden FGame.OnChange := GameOnChange; end; procedure TForm1.BeforeDestruction; begin // Spiel-Instanz wieder aufräumen FGame.Free; inherited; end; procedure TForm1.GameOnChange( Sender: TObject ); begin // Wird aufgerufen, wenn sich am Spiel etwas geändert hat end; end.
Delphi-Quellcode:
Der Kollege mit der Logik ist dann auch soweit und bringt uns seine Unit
unit Form.Main;
interface uses FangDenButton, Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Buttons; type TForm1 = class( TForm ) PunkteLabel: TLabel; PlayGroundPanel: TPanel; { OI: OnClick => PlaygroundPanelClick } { OI: OnDblClick => PlaygroundPanelClick } { OI: OnResize => PlaygroundPanelResize } HeaderPanel: TPanel; StartButton: TButton; { OI: OnClick => StartButtonClick } FangButton: TSpeedButton; { OI: OnClick => FangButtonClick } procedure FangButtonClick( Sender: TObject ); procedure PlayGroundPanelClick( Sender: TObject ); procedure StartButtonClick( Sender: TObject ); procedure PlayGroundPanelResize( Sender: TObject ); private FGame: TFangDenButton; procedure GameOnChange( Sender: TObject ); procedure NotifyPlaygroundSize; public procedure AfterConstruction; override; procedure BeforeDestruction; override; end; var Form1: TForm1; implementation {$R *.dfm} uses FangDenButtonTest; { TForm1 } procedure TForm1.AfterConstruction; begin inherited; FGame := TFangDenButtonTest.Create; FGame.OnChange := GameOnChange; NotifyPlaygroundSize; end; procedure TForm1.BeforeDestruction; begin FGame.Free; inherited; end; procedure TForm1.FangButtonClick( Sender: TObject ); begin FGame.ButtonCatched; end; procedure TForm1.GameOnChange( Sender: TObject ); begin PunkteLabel.Caption := IntToStr( FGame.Punkte ); FangButton.Visible := FGame.SpielAktiv; FangButton.Left := FGame.Position.X; FangButton.Top := FGame.Position.Y; FangButton.Width := FGame.ButtonSize.X; FangButton.Height := FGame.ButtonSize.Y; end; procedure TForm1.NotifyPlaygroundSize; begin FGame.PlaygroundSize := TPoint.Create( PlayGroundPanel.Width, PlayGroundPanel.Height ); end; procedure TForm1.PlayGroundPanelClick( Sender: TObject ); begin FGame.ButtonMissed; end; procedure TForm1.PlayGroundPanelResize( Sender: TObject ); begin NotifyPlaygroundSize; end; procedure TForm1.StartButtonClick( Sender: TObject ); begin FGame.Start; end; end.
Delphi-Quellcode:
mit
FangDenButtonKonkret
Delphi-Quellcode:
Das ist nett, die werden wir doch gleich mal testen. Dazu müssen wir in unsere Anzeige nur ganz wenig ändern:
unit FangDenButtonKonkret;
interface uses System.Types, Vcl.ExtCtrls, FangDenButton; type TFangDenButtonKonkret = class( TFangDenButton ) private FTimer: TTimer; { Vcl.ExtCtrls.TTimer } FSpielAktiv: Boolean; FPunkte: Integer; FDaneben: Integer; FButtonSize: TPoint; FPosition: TPoint; procedure TimerCalled( Sender: TObject ); procedure NewPosition; procedure SetButtonSize( ASize: Integer ); protected procedure DoButtonCatched; override; procedure DoButtonMissed; override; procedure DoSetPlaygroundSize( const Value: TPoint ); override; procedure DoStart; override; function GetButtonSize: TPoint; override; function GetPosition: TPoint; override; function GetPunkte: Integer; override; function GetSpielAktiv: Boolean; override; public procedure AfterConstruction; override; procedure BeforeDestruction; override; end; implementation uses System.Math; { TFangDenButtonKonkret } procedure TFangDenButtonKonkret.AfterConstruction; begin inherited; FTimer := TTimer.Create( nil ); FTimer.Enabled := False; FTimer.OnTimer := TimerCalled; end; procedure TFangDenButtonKonkret.BeforeDestruction; begin FTimer.Free; inherited; end; procedure TFangDenButtonKonkret.DoButtonCatched; begin inherited; if FSpielAktiv then begin FTimer.Enabled := False; FPunkte := FPunkte + 10; FTimer.Interval := Max( 150, FTimer.Interval - 50 ); NewPosition; NotifyChange; FTimer.Enabled := True; end; end; procedure TFangDenButtonKonkret.DoButtonMissed; begin inherited; if FSpielAktiv then begin Inc( FDaneben ); if FDaneben = 10 then begin FSpielAktiv := False; end; NotifyChange; end; end; procedure TFangDenButtonKonkret.DoSetPlaygroundSize( const Value: TPoint ); begin inherited; NewPosition; end; procedure TFangDenButtonKonkret.DoStart; begin inherited; if not FSpielAktiv then begin FSpielAktiv := True; FPunkte := 0; FDaneben := 0; SetButtonSize( 100 ); NewPosition; FTimer.Interval := 1000; FTimer.Enabled := True; NotifyChange; end; end; function TFangDenButtonKonkret.GetButtonSize: TPoint; begin Result := FButtonSize; end; function TFangDenButtonKonkret.GetPosition: TPoint; begin Result := FPosition; end; function TFangDenButtonKonkret.GetPunkte: Integer; begin Result := FPunkte; end; function TFangDenButtonKonkret.GetSpielAktiv: Boolean; begin Result := FSpielAktiv; end; procedure TFangDenButtonKonkret.NewPosition; begin SetButtonSize( Random( 100 ) + 50 ); FPosition.X := Random( PlaygroundSize.X - FButtonSize.X ); FPosition.Y := Random( PlaygroundSize.Y - FButtonSize.Y ); NotifyChange; end; procedure TFangDenButtonKonkret.SetButtonSize( ASize: Integer ); begin FButtonSize.X := ASize; FButtonSize.Y := ASize; NotifyChange; end; procedure TFangDenButtonKonkret.TimerCalled( Sender: TObject ); begin NewPosition; end; end.
Delphi-Quellcode:
Und laufen lassen ...
implementation
{$R *.dfm} uses FangDenButtonTest, { Unit einbinden } FangDenButtonKonkret; { TForm1 } procedure TForm1.AfterConstruction; begin inherited; // FGame := TFangDenButtonTest.Create; // Statt der Test-Klasse, die Konkrete-Klasse FGame := TFangDenButtonKonkret.Create; FGame.OnChange := GameOnChange; NotifyPlaygroundSize; end; Was sagt die Maus dazu? Zitat:
|
AW: Eine Projektarbeit
Liste der Anhänge anzeigen (Anzahl: 2)
Da habe ich doch gerade meine Animation Unit wiedergefunden und damit den FangButton animiert.
Anhang 42319 Das kompilierte Ergebnis ist im Anhang zu finden. Man wird feststellen, dass die Zeitabstände ein wenig zu hart verringert wird, denn bei ca. 13-15 Treffern (130-150 Punkten) ist irgendwie Schluss. Aber es ist ja nur ein Beispiel. |
AW: Eine Projektarbeit
Soll TTT den von zwei Spieler gespielt werden oder gegen den Computer?
Soll Joshua auch Spieler Anzahl 0 können damit er lernt das der beste Spielzug - nicht zu spielen ist...? :cyclops: Oder von 2 Spielern übers Netzwerk? Soll einfach ein X oder O erscheinen oder soll das "malen" davon animiert werden? Vielleicht eine Münze die sich dreht und dann den Wert zeigt? Toll finde ich, dass Ihr schon festgelegt habt, dass ihr 2 TForms braucht... Cooles Konzept. Überlegt Euch doch erst mal was es den werden soll. Zitat:
|
AW: Eine Projektarbeit
Zitat:
Ich habe an ein ähnliches Prinzip wie wir es im Unterricht bereits verwendet haben gedacht 2 Spieler an einem Gerät. An ein Netzwerk ist vorerst nicht zu denken, ich kenne mich was das angeht nicht aus hätte aber gemutmaßt das das jeden Rahmen sprengt was Zeit und Skills angeht. Wir müssen uns ja alles Anlesen ^^ machen wir es also nicht komplizierter als unbedingt nötig. Eine KI wird auf diese Art und Weise auch nicht benötigt wobei diese vielleicht gar keine schlechte Idee wäre (auch hier stellt sich wieder die Frage ob Aufwand und Ergebnis das ganze Wert sind- eine funktionierende KI, unterumständen auch in zwei Varianten eine die das mittlere Feld frei lässt und eine die es benutzt (Schwer und leicht),wäre natürlich toll aber wir müssen auch noch ein anderes Spiel zum laufen bekommen). Nun ja ich bekomme langsam eine Idee davon wie viel komplizierter, als neun Felder mit zwei Wahloptionen, das Ganze wohl wird. Felix |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:42 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