Forum: PC-Programmierung Bewegungsspiel C


von Jan (Gast)


Angehängte Dateien:

Lesenswert?

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

von B. S. (bestucki)


Lesenswert?

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.

von Matroska (Gast)


Lesenswert?

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?

von Wolfgang S. (ws01)


Lesenswert?

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

von Matroska (Gast)


Lesenswert?

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

von Matroska (Gast)


Lesenswert?

Okay, dann Logo Programmiersprache, aber irgend woher kam es mir bekannt 
vor.

von Wolfgang S. (ws01)


Lesenswert?

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

von Michael Rohs (Gast)


Lesenswert?

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

von B. S. (bestucki)


Lesenswert?

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
Noch kein Account? Hier anmelden.