a8888j Geschrieben 18. Mai 2002 Geschrieben 18. Mai 2002 Hy, ich und meine Klassenkameradin sind dabei, das SnakeSpiel zu programmieren. Die Schlange bewegt sich auch in die Richtung die wir wollen. Um den Apfel zu generieren hab ich ne Funktion apple() und für die Bewegung je nachdem welche Richtung bewegung_w() ich hab mir gedacht ich schreib ne compare(), die vergleichen soll, ob x und y von apfel und schlange vergleicht, wenn ja mach dies und das, wenn nein mach weiter. Wie kann ich das mit der Übergabe der Werte regeln? Weil die Compare erwartet dann 4 Werte, ich kann aber sowohl von apple als auch von bewegung_w je 2 Werte an compare() geben. Hat jemand ne einfache und kurze Idee? Danke Anna-Maria Zitieren
sheep Geschrieben 18. Mai 2002 Geschrieben 18. Mai 2002 Ich bin zwar kein Programmierer, aber wenn das Spiel fertig ist stell es doch mal zum Download bereit... könnte was nettes für zwischendurch werden. Das Problem bei QBasic Snake ist, dass die modernen Computer zu schnell sind und dadurch die Timings im Spiel nicht mehr stimmen. Das nur so als Info warum QBasic Spiele nicht mehr richtig laufen - jedenfalls die von Microsoft Zitieren
a8888j Geschrieben 18. Mai 2002 Autor Geschrieben 18. Mai 2002 wir programmieren das in C, und nicht in QBasic. Aber wenn das funktioniert, würde ich das locker zum Download bereitstellen, brauch aber erst mal Eure Hilfe um da weiterzukommen. Ausserdem ist mir nochwas aufgefallen Zu Beginn hab ich die Funktion bewegung(), als Standard. Während dieser Schleife, deren Bedingung lautet: bis Snake gegen den Rahmen läuft, wird bei jedem Durchgang geprüft, ob der User ne Taste um die Richtung zu wechseln, gedrückt hat. Falls ja, wird ne andere Funktion aufgerufen ( bewegung_w(), ich fürchte, dass er die bewegung() nicht abbricht, weil wenn ich dann innerhalb der Funktion bewegung_w() auf den Rahmen gestossen bin ( da sollte gameover() sein ), macht er einfach mit der ersten Funktion bewegung() weiter, bis die Bedungung true ist. Ich will aber ne Schleife abbrechen wenn eine andere Funktion aufgerufen wird. WIe kann ich das machen? mit break klappt das irgendwie nicht Zitieren
Jaraz Geschrieben 18. Mai 2002 Geschrieben 18. Mai 2002 Original geschrieben von a8888j Ich will aber ne Schleife abbrechen wenn eine andere Funktion aufgerufen wird. Du überprüfst am besten in der Schleife ne Statusvariable, deren Status du dann mit Hilfe der anderen Methode änderst. Beim Status abbrechen beendest du die Funktion dann entweder mit return oder durch ne Bedingung in der while-Schleife. while(status==false){ status = pruefeAbbruch(); } oder while(true){ if(pruefeAbbruch()==true) return; } Gruß Jaraz Zitieren
a8888j Geschrieben 18. Mai 2002 Autor Geschrieben 18. Mai 2002 das hab ich nicht ganz verstanden was ich mir gedacht hab --> do { bla bla richtung() } while(Koordinate ist größer 1); dann will ich in der richtung() sagen, wenn eine taste während der Do-Schleife gedrückt wurde, gib einen Wert zurück, um die Do-Schleife zu stoppen und mit einer anderen Funktion oder Anweisung zu beginnen. Ich hoffe das geht irgendwie Aber wie? Irgendwie muss ich in der Do-Schleife die richtung() mit irgenwas aufrufen, diese überprüft, und gibt was zurück Kann mir jemand helfen? Anna Zitieren
StarLord Geschrieben 21. Mai 2002 Geschrieben 21. Mai 2002 Original geschrieben von a8888j Ich will aber ne Schleife abbrechen wenn eine andere Funktion aufgerufen wird. WIe kann ich das machen? mit break klappt das irgendwie nicht Normalerweise sollte es mit break klappen. Alternativ (oder besser zusätzlich) könntest du auch die Schleifenbedingung erfüllen. Falls du jetzt fragst: "Wie?", hier ein kleines Beispiel: int counter; for (counter = 0; counter <= 255; counter++) { if (counter == 100) { counter = 256; // Entweder so abbrechen break; // Oder so abbrechen // Oder beide zusammen, aber das break sollte als letzte Anweisung kommen! } } In meinem Beispiel sollte die Schleife auf jeden Fall abbrechen wenn der Wert 100 erreicht wird. Hast du dir eigentlich schon mal Gedanken über ein Ablauf-Diagramm gemacht? Wenn du eines erstellst dürfte das ganze doch gar kein Problem sein. Nur als Tipp: In professionellen Spielen gibt es immer eine Status-Variable. In deinem Fall könnte sie folgende Ereignisse (Events) enthalten: MOVE, KEYDOWN, COLLISION, PAUSE, GAMEOVER, INTRO, STATUS, etc., etc. Gruß, StarLord Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.