Hey Leute, Ich muss ein Bewegungsspiel Programmieren und komme jetzt nicht weiter. Den größten Teil der Aufgabe habe ich bereits erledigt. an denn stellen //...? bin ich mir nicht sicher wie die Funktion aussehen soll. Wäre sehr lieb wenn ihr mir paar Tipps geben könntet. Mfg Jan
Ich würde grundsätzlich einen anderen Programmaufbau wählen. Du verwendest globale Variablen, das verunmöglicht dir, mehrere Schildkröten gleichzeitig existieren zu lassen. Ausserdem hast du keine Kontrolle, was du wo, wie und warum an den Werten herumschraubst. Versuche, dein Problem in viele, kleine, einfach zu handhabbare Häppchen zu teilen. Erstelle für deine Schildkröten eine eigene Header und Source Datei, z.B. so:
1 | //turtle.h
|
2 | |
3 | typedef enum {UP, DOWN} pen_state; |
4 | |
5 | typedef struct{ |
6 | int PosX, PosY; |
7 | int Direction; |
8 | pen_state PenState; |
9 | }turtle; |
10 | |
11 | void turtle_move(turtle * Turtle, int Movement); |
1 | // turtle.c
|
2 | |
3 | void turtle_move(turtle * Turtle, int Movement){ |
4 | // Bewege "Turtle" in Abhaengigkeit von "Movement"
|
5 | }
|
Dann sorgst du noch dafür, dass du alles durch entsprechende "turtle_XXX"-Funktionen erledigen kannst, was erledigt werden muss. Im Idealfall wird nur durch diese Funktionen auf Member der Struktur zugegriffen. So muss der Aufrufer auch nicht wissen, was wie in deiner Struktur gespeichert ist. Dies machst du nun auch für all deine anderen Programmteile: Einlesen der Befehle, Parsen der Befehle, Grafikausgabe usw. Und diese Module tun dann auch nur genaus das, mit dem sie angeschrieben sind! Die Funktion "parse_command" wurstelt momentan an globalen Variablen herum, die eine Schildkröte darstellen sollen. Sowas willst du nicht. Du willst, dass die Funktion "parse_command" eine Zeichenkette in einen Befehl umwandelt. Was der Befehl bewirkt und wie das umgesetzt ist, kann und soll der Funktion egal sein. Auch die Funktion "move_turtle" macht nicht nur das, mit dem sie angeschieben ist: Sie ruft die Funktion "draw_line" auf. Ich bin mir sicher, dass sich die Schildkröte bewegen kann, ohne eine Line zu zeichnen. Versuche auch, die Abhängigkeiten zwischen den Modulen möglichst gering zu halten (Gesetz von Demeter) und nur über die Funktionen (Schnittstelle) auf die Strukturen zuzugreifen. Wenn du soweit bist, hast du bereits eine viel bessere Struktur in deim Programm gebracht und dein Problem hat sich bis dahin vielleicht bereits in Luft aufgelöst, dafür sind dann evt. schon wieder andere aufgetaucht. Aufgrund der geringen Abhängigkeiten zwischen den Modulen, kannst du auch ganz einfach Änderungen und Erweiterungen vornehmen (solange sich die Schnittstelle nicht ändert), ohne andere Programmteile ebenfalls ändern zu müssen.
Turtle - war das nicht mal eine Programmiersprache auf C64 oder Atari für Kinder? Die if ... else if Konstrukte würde ich durch switch() case Syntax ersetzen. Ansonsten muß ich leider zugestehen, daß ich nicht mehr ganz fit bin. Handelt es sich um Objective C ? Die Up/Down und Left/Right Abfragen kann man sicher irgendwo im Netz abkupfern. Was fehlt sind auch noch Begrenzungsabfragen der Bildschirmhöhe und -breite und was passieren soll, wenn diese Grenzen erreicht sind. Unklar ist auch die Positionsbestimmung beim Wechsel des Zeichnens (Pen Up / Pen Down), mir jedenfalls. Wie gesagt, ich bin etwas raus aus C und die von Dir selbst kreierten Header Bibs kenne ich leider nicht. Läuft denn schon was nach Compilation?
Matroska schrieb: > Turtle - war das nicht mal eine Programmiersprache auf C64 oder Atari > für Kinder? Nein. https://docs.python.org/2/library/turtle.html beschreibt's kurz und knapp: "Turtle graphics is a popular way for introducing programming to kids. It was part of the original Logo programming language developed by Wally Feurzig and Seymour Papert in 1966."
> Auch die Funktion "move_turtle" macht nicht > nur das, mit dem sie angeschieben ist: Sie ruft die Funktion "draw_line" > auf. Ich bin mir sicher, dass sich die Schildkröte bewegen kann, ohne > eine Line zu zeichnen. Ich glaube die Programmiersprache hieß Pilot und konnte mit Hilfe einfacher Kommandos (Move Turtle, usw.,usw.) irgendwelche Bilder zeichnen?! Also eine Pilot Umsetzung soll es werden?
Jan schrieb: > Hey Leute, > > Ich muss ein Bewegungsspiel Programmieren und komme jetzt nicht weiter. > > Den größten Teil der Aufgabe habe ich bereits erledigt. Wirklich? > an denn stellen //...? bin ich mir nicht sicher wie die Funktion > aussehen soll. Hm. Du weißt also bereits, wie man "FORWARD" implementiert. Was vermutest Du denn bzgl. "BACKWARD"? Nur mal so für den Anfang. :-)
Hallo, ich hoffe, dass Sie kein Teilnehmer meiner Vorlesung "Programmieren I" sind. Bitte nehmen Sie zur Kenntniss, dass Plagiate -- dazu zählt auch das Übernehmen von Lösungen von externen Personen -- zum Ausschluss von der Veranstaltung führen. Die Aufgabenstellung war in der dieswöchigen Übung ausschließlich das sinnvolle Ersetzen der durch // ... ? gekennzeichneten Stellen, daher ist Ihre Rechtfertigung, weshalb Sie hier um Hilfe bitten, eine Täuschung der Personen, die Sie um Hilfe bitten. Mit freundlichen Grüßen M. Rohs
Matroska schrieb: > Ich glaube die Programmiersprache hieß Pilot und konnte mit Hilfe > einfacher Kommandos (Move Turtle, usw.,usw.) irgendwelche Bilder > zeichnen?! Achso! Dann sieht die Sache schon wieder anders aus. Dann heisst das Modul dann halt "pen" oder "draw" (oder sonst irgendwie) und verrichtet seine Arbeit. Programmtechnisch gibt es dann gar keinen Zusammenhang mit einer Schildkröte, da diese nur als Anzeigeelement verwendet wird (könnte genau so gut eine Banane sein). Michael Rohs schrieb: > ich hoffe, dass Sie kein Teilnehmer meiner Vorlesung "Programmieren I" > sind. Mit der Annahme, dass du ein Troll bist: Ich hoffe, dass du nicht der Dozent bist, der dieses Programm in seiner Vorlesung verwendet. Denn dann wäre das Programm eher ein Beispiel, wie man nicht programmieren sollte, als eine sinnvolle Übung.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.