Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Eine Projektarbeit (https://www.delphipraxis.net/182706-eine-projektarbeit.html)

Felix Stein 12. Nov 2014 14:10

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

Sir Rufo 12. Nov 2014 14:23

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 :)

Phoenix 12. Nov 2014 15:48

AW: Eine Projektarbeit
 
Hallo Felix, Hallo Toni,

Zitat:

Zitat von Felix Stein (Beitrag 1279473)
ein Programm, sei es Tabellensystem oder Spiel anfertigen.

Ich möchte Euch empfehlen, hier lieber eine andere Anwendung zu bauen, als ein Spiel.

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.

matashen 12. Nov 2014 15:53

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

p80286 12. Nov 2014 16:30

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

creed steiger 12. Nov 2014 18:26

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.

Bjoerk 12. Nov 2014 18:33

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.

Felix Stein 12. Nov 2014 18:37

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)?

Der schöne Günther 12. Nov 2014 18:42

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?

Felix Stein 12. Nov 2014 18:59

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 :)

TForm1 12. Nov 2014 19:48

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.

Namenloser 12. Nov 2014 21:38

AW: Eine Projektarbeit
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1279532)
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.

Kommt drauf an, wie viele Stunden in der Woche es sind. Bei mir bestand der Informatikunterricht nur aus einer Doppelstunde pro Woche, da gingen die Monate vorbei wie im Flug, ohne dass man je zu irgendwas gekommen wäre. Ich war zwar kein Anfänger, aber wäre ich es gewesen, hätte ich so in einem ganzen Halbjahr wahrscheinlich nicht mal Snake hinbekommen (außer man macht alles zuhause).

Felix Stein 13. Nov 2014 05:28

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

Phoenix 13. Nov 2014 08:38

AW: Eine Projektarbeit
 
Die Herangehensweise und Dein Engagement gefällt mir :thumb:
So wird das was :)

BUG 15. Nov 2014 17:23

AW: Eine Projektarbeit
 
Ein minimalistischer Dungeon Crawler wäre auch eine Überlegung wert:
  • rundenbasierend (kaum Performanceprobleme)
  • viel Luft nach oben
    • Items
    • Monster
    • Grafik
    • ordentliches Kampfsystem
    • Dungeon-Generator

OrNEC 16. Nov 2014 12:45

AW: Eine Projektarbeit
 
Ich denke das geht mächtig in die Hose... sucht euch mal eine einfachere Aufgabe aus. :wink:

dGeek 16. Nov 2014 13:53

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.

Felix Stein 17. Nov 2014 09:50

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)

DeddyH 17. Nov 2014 10:01

AW: Eine Projektarbeit
 
Zitat:

Zitat von Felix Stein (Beitrag 1279473)
Bis jetzt haben wir was Delphi angeht nur ein paar Grundlagen erlernt und noch überhaupt nicht mit irgendeiner Form von Grafik gearbeitet.

Wäre es da nicht besser, ein Karten- oder Würfelspiel ins Auge zu fassen, wo nicht ständig irgendetwas in Bewegung sein muss?

Headbucket 17. Nov 2014 10:58

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

TForm1 17. Nov 2014 14:01

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.

p80286 17. Nov 2014 16:45

AW: Eine Projektarbeit
 
Auch wenn Ihr wahrscheinlich schon kurz vor der Fertigstellung steht, wie wäre es mit Sudoku ?
hier findet Ihr eigentlich alles was Ihr so braucht, da muß ja nur noch die Oberfläche zusammen geklickt werden.:wink:


Gruß
K-H

Sherlock 18. Nov 2014 07:33

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

hstreicher 18. Nov 2014 07:54

AW: Eine Projektarbeit
 
in der CT 10/2014 war ein interessanter Artikel zur Spieleprogrammierung

Felix Stein 24. Nov 2014 09:30

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.

Kuehter 24. Nov 2014 10:32

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

Delphi-Laie 24. Nov 2014 21:29

AW: Eine Projektarbeit
 
Game of life?

Felix Stein 10. Dez 2014 14:19

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 :))

Sir Rufo 10. Dez 2014 14:39

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.

TForm1 10. Dez 2014 14:48

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.

Headbucket 10. Dez 2014 15:10

AW: Eine Projektarbeit
 
Zitat:

Zitat von Sir Rufo (Beitrag 1282908)
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.

Exakt dieser Meinung bin ich auch, wie ich bereits in #20 erwähnt habe... .
Wenn ich das nochmal zitieren darf:
Zitat:

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.
Wahrscheinlich war noch der halbe Code von Snake geklaut... .
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

Felix Stein 15. Dez 2014 09:39

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:

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.
Oh da hast du sehr sicher recht aber eine schöne Benutzeroberfläche bringt sehr sicher Pluspunkte ein. Das es schlauer gewesen wäre ein Spiel zu programmieren und dieses zu dokumentieren ist absolut richtig ... aber leider jetzt zu spät ( wir werden es überleben). Was Dokumentation angeht (die ebenfalls eine Note einbringt, also Projektarbeit und Dokumentation so sind wir schon fleißig am abtippen der einzelnen Schritte, zumal wir wunderbar auf dieses Forenthema verweisen können.

Wie ein Tic Tac Toe aussieht weiß ja jeder, dennoch würden wir uns über Vorschläge zum Oben genannten Plan
Zitat:

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) ^^
freuen zumal es vielleicht klug wäre es eben nicht genau wie im Unterricht zu programmieren :?


So Far Felix

Felix Stein 15. Dez 2014 09:45

AW: Eine Projektarbeit
 
Ach ja und
Zitat:

Und falls/sobald du den Grund kennst, dann erläutere ihn bitte hier.
Wir kennen die betroffenen Schüler, dass sie große Teile des Programmes nur sehr schludrig mit den zugehörigen Quellen verbunden haben ist anzunehmen. Allerdings wird auch von uns verlangt sich ohne große Vorkenntnisse ein Programm aus den Fingern zu ziehen, das hierbei viel abgeschrieben wird ist doch klar. Schließlich kann ich mir die Kenntnisse ja nicht aus dem Hut zaubern. (schön wärs)

Headbucket 15. Dez 2014 09:52

AW: Eine Projektarbeit
 
Ein paar Anregungen zu TicTacToe:

- zunächst würde ich Datentyp anlegen, der drei Zustände annehmen kann. Z.B.: "Unbestimmt", "X" und "O"
das ganze kann dann z.B. so aussehen:
Delphi-Quellcode:
type
  TState = (State_none, State_X, State_O);
Das sind alle Zustände, die ein Feld besitzen kann.
- Außerdem solltet ihr stets darauf achten, die "Datenspeicherung" von der Oberfläche zu trennen. Dazu wurde mir selbst mal ein toller Link gegeben: MVC
- 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

Jumpy 15. Dez 2014 10:10

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ß.

Felix Stein 15. Dez 2014 10:21

AW: Eine Projektarbeit
 
Zitat:

Das sind alle Zustände, die ein Feld besitzen kann.
- Außerdem solltet ihr stets darauf achten, die "Datenspeicherung" von der Oberfläche zu trennen. Dazu wurde mir selbst mal ein toller Link gegeben: MVC
- 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
- ...
Danke dafür das scheint mir doch Sinnvoller als X oder O über ein Edit einzugeben (ich lese mir den Artikel heute Nachmittag durch bin gleich auch weg. Toni schaut heute Abend noch mal rein). Was die Skizzen angeht so weiß ich nicht was im Normalfall angegeben wird ich setze mich zeichne ein tic tac toe und das war es dann auch schon. Die Funktionen die ich brauch werden mir erst beim programmieren wirklich bewusst (was halt etwas spät ist).

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

Sir Rufo 15. Dez 2014 14:26

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:
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.
Nun können beide loslegen. Der für die Anzeige baut sich jetzt eine minimale funktionierende Klasse, damit er seine Anzeige auch testen kann
Delphi-Quellcode:
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.
Damit baut er sich die Anzeige, die minimal so aussehen sollte
Delphi-Quellcode:
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.
An Ende könnte das dann so aussehen
Delphi-Quellcode:
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.
Der Kollege mit der Logik ist dann auch soweit und bringt uns seine Unit
Delphi-Quellcode:
FangDenButtonKonkret
mit
Delphi-Quellcode:
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.
Das ist nett, die werden wir doch gleich mal testen. Dazu müssen wir in unsere Anzeige nur ganz wenig ändern:
Delphi-Quellcode:
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;
Und laufen lassen ...

Was sagt die Maus dazu?
Zitat:

Das war Delphi!
und eignet sich daher nicht zum Copy-Paste verwenden mit Lazarus/FreePascal!

Sir Rufo 16. Dez 2014 08:20

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.

Mavarik 16. Dez 2014 10:28

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:

Zitat von Jumpy (Beitrag 1283428)
Dieses trennen der Anzeige von der Logik ist dann bereits ein erstes Qualitätsmerkmal, dass der Lehrer hoffentlich zu würdigen weiß.

Ein frommer Wunsch... Wenn TTT mit Buttons im Unterricht realisiert wird...

Felix Stein 17. Dez 2014 13:55

AW: Eine Projektarbeit
 
Zitat:

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...?

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.

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 04:39 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz