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
typedefenum{UP,DOWN}pen_state;
4
5
typedefstruct{
6
intPosX,PosY;
7
intDirection;
8
pen_statePenState;
9
}turtle;
10
11
voidturtle_move(turtle*Turtle,intMovement);
1
// turtle.c
2
3
voidturtle_move(turtle*Turtle,intMovement){
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.