Translating web pages job
Übersicht

WolRonBetreff: Translating web pages job |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hello. I know very little German (although I'm over 50% German heritage ![]() I'm posting here to see if anyone might be interested in translating specific web pages of my programming tutorial website to German. I don't have a lot of cash, but I'm willing to pay a little via PayPal to anyone interested in doing the work. If you're feeling generous, you can do it for free as well.... Specifically, I'd like to start with translating this page: http://home.cmit.net/rwolbeck/...imiter.htm And possibly this page (including all of the comments): http://home.cmit.net/rwolbeck/...former.htm I want to keep the formatting of the pages the same as I currently have it. I just want it translated as best as possible. If you're interested, please contact me via email: wolron at hot mail dot com. I'm probably not willing to pay more than U.S. $5 / Frame Limiter page and U.S. $10 / 2D Platformer page. WolRon -------------------------------- Google Translation: Hallo. Ich weiß sehr wenig Deutsch (obwohl ich bin über 50% deutsche Erbe ![]() Ich bin Entsendung hier um zu sehen, ob jemand interessiert sein könnten für die Umsetzung von spezifischen Web-Seiten meiner Website-Programmierung Tutorial Deutsch. Ich habe nicht viel Geld, aber ich bin bereit, ein wenig zu zahlen via PayPal an alle Interessierten in die Arbeit. Wenn Sie etwas großzügig, können Sie es kostenlos als gut .... Insbesondere möchte ich beginnen mit der Übersetzung dieser Seite: Http://home.cmit.net/rwolbeck/...imiter.htm Und vielleicht dieser Seite (Einschließlich aller von den Kommentaren): Http://home.cmit.net/rwolbeck/...former.htm Ich möchte, dass die Formatierung der Seiten, die gleiche Zeit wie ich es haben. Ich will einfach, dass es übersetzt so gut wie möglich zu gestalten. Wenn Sie interessiert sind, wenden Sie sich bitte an mich per E-Mail: wolron at hot mail dot com. Ich bin wahrscheinlich nicht bereit, mehr zu zahlen als US $ 5 / Limiter Frame-Seite und US $ 10 / 2D Platformer Seite. WolRon |
||
Phlox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, im translating the framelimiter.html.
I don't want money for this. Ok, ich übersetze die framelimiter.html. Ich möchte kein Geld dafür bekommen. |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
I sent you a mail but I forgot to mention: I would do it for free. Maybe we can discuss linking to my homepage?
EDIT: OK, I try the other tutorial if phlox do the first one. Best wishes, Christoph. -------------- Ich hab dir eine Mail geschickt, in der ich vergessen habe zu erwähnen: Ich würde es gratis übersetzen. Eentuell können wir noch über einen Link zu miner Homepage reden? EDIT: OK, dann versuche ich mal das andere Tutorial, wenn phlox das Erste macht. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Elvis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich fände es gut, würdet ihr zwei, die ihr euch freiwillig gemeldet habt, Übersetzter zu spielen, eure Übersetzungen hier posten, damit sich noch ein
paar weitere Leute daran beteiligen. Von der 100% korrekten Übersetzung schwieriger Vokabeln aus dem Kontext, bis hin zur Ausformulierung im Deutschen. Ich denke, ihr wisst, was ich meine. [I asked Eingeproggt and Phlox to post their translations here, that we can improve or correct something.] Grüße, Elvis |
||
Phlox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Äh...ja, gut, ein paar Sachen, die ich nicht so
verstanden habe, habe ich so übersetzt: Auf eigene Verantwortung! Code: [AUSKLAPPEN] <html>
<head> <link rel="styleSheet" href="../style.css" type="text/css"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Bilder pro Sekunde begrenzen/Bilder pro Sekunde errechnen</title> </head> <body> <table border="0" cellpadding="0" cellspacing="1" width="100%"> <tr> <td width="15%"></td> <th width="70%"><p align="center"><br> <big>Bilder pro Sekunde begrenzen & Bilder pro Sekunde errechnen</big><br> <p>Translated by <a href="http://www.blitzforum.de/forum/profile.php?mode=viewprofile&u=3327">Phlox</a> from the german <a href="http://www.blitzforum.de/">Blitzforum</a>.<br>Übersetzt von <a href="http://www.blitzforum.de/forum/profile.php?mode=viewprofile&u=3327">Phlox</a> aus dem deutschen <a href="http://www.blitzforum.de/">Blitzforum</a>.</p> </th> <td valign="top" align="right" width="15%"><a target="_top" href="http://home.cmit.net/rwolbeck/programmingtutorial/index.htm"><small>Zeige die Hauptseite</small></a></td> </tr> </table> <p>Dieser Codeteil erfllt Zwei Funktionen.</p> <p>Erste Funktion: Er errechnet die Bilder pro Sekunde (im folgenden FPS genannt (=Frames per second)) ihres Programmes aus der Durchschnittszeit, der letzten 5 Bilder.</p> <p>Zweite Funktion: Er hilft dir, die Geschwindigkeit des Programmes auf allen Computern konstant zu halten. Dies tut er mit zwei Variablen (SpeedFactor# oder TimeElapsed#) , welche zum Beispiel zur Spieler Bewegung genutzt werden können. Diese Funktion hilft dir, dein Spiel langsam oder schnell laufen zu lassen (besonders in Jump 'n Run Spielen).</p> <p> </p> <h1>Um diese Funktionen zu benutzen, kopiere folgenden Programmcode an den Anfang ihres Programmes:</h1> <pre class="code">Global Debug = True Type FrameRate Field TargetFPS# Field SpeedFactor# Field TimeElapsed# Field FPS# Field FPS2# Field FPS3# Field FPS4# Field FPS5# Field CurrentTicks Field FrameDelay End Type Global FL.FrameRate = New FrameRate ;initialize frame limiter FL\TargetFPS# = 60 ;set this to whatever FPS your code is based on FL\FrameDelay = MilliSecs()</pre> <p>Als nächstes kopiere den folgenden Code in deine Hauptschleife: <small>(hier werden die Kalkulationen ausgeführt)</small></p> <pre class="code">;Set Speed Factor FL\CurrentTicks = MilliSecs() FL\SpeedFactor# = (FL\CurrentTicks - FL\FrameDelay) / (1000.0 / FL\TargetFPS#) If FL\SpeedFactor# <= 0 Then FL\SpeedFactor# = 0.00000000001 FL\TimeElapsed# = (FL\CurrentTicks - FL\FrameDelay) / 1000.0 If Debug FL\FPS# = (FL\FPS2# + FL\FPS3# + FL\FPS4# + FL\FPS5# + FL\TargetFPS# / FL\SpeedFactor#) / 5 FL\FPS5# = FL\FPS4# : FL\FPS4# = FL\FPS3# : FL\FPS3# = FL\FPS2# : FL\FPS2# = FL\FPS# EndIf FL\FrameDelay = FL\CurrentTicks</pre> <p>Als letztes benutzt du die folgenden Methoden um den Code zu nutzen.</p> <p> </p> <h1><u>Die Pilder Pro Sekunde (FPS) anzeigen</u></h1> <p>Fügen Sie einfach den folgenden Code irgendwo in ihre Hauptschleife:</p> <pre class="code">If Debug Text 0, 0, "FPS: " + Int(FL\FPS#) EndIf</pre> <p align="center"><script type="text/javascript"><!-- google_ad_client = "pub-7074115215171132"; //728x90, Footer Ad for Prog Tut google_ad_slot = "3425667659"; google_ad_width = 728; google_ad_height = 90; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script></p> <h1><u>Alle Objekte gleichschnell auf allen Computern laufen lassen</u></h1> <p>Um die Bilder pro Sekunde (FPS) auf eine Bestimmte Zahl zu begrenzen, musst du die Variable SpeedFactor# oder die Variable TimeElapsed# benutzen. Welche du brauchst, hängt von dem Spiel ab, das du schreiben möchtest. SpeedFactor# enthält die Zeit, die das letzte Bild benötigt hat, um gemalt zu werden. TimeElapsed# enthält die Anzahl der Bilder, die in der letzten Sekunde gemalt wurden.</p> <p>Wenn dein Spiel Objekte/Gegenstände benutzt, die eine bestimmte Distanz in jedem Frame bewegt werden, solltest du die Variable SpeedFactor# benutzen.</p> <p>Wenn dein Spiel Objekte/Gegenstände benutzt, die jede Sekunde eine bestimmte Distanz bewegt werden, solltest du die variable TimeElapsed# benutzen.</p> <p> </p> <p><u>Das Benutzen der SpeedFactor# Variable:</u></p> <p>Sagen wir, du schreibst ein seitenbewegendes Plattformspiel. Solange der Spieler die rechte Pfeiltaste drückt, bewegt er sich um 4 Pixel in jedem Bild. Normalerweise würdest du so programmieren:</p> <pre class="code">If KeyDown(205) PlayerX = PlayerX + 4 EndIf</pre> <p>Um gedämpftes Bewegen auf allen Computern zu benutzen, würdest du den Code so verändern:</p> <pre class="code">If KeyDown(205) PlayerX = PlayerX + 4.0 * FL\SpeedFactor# EndIf</pre> <p>Dies würde bewirken, dass der Spieler sich 4 Pixel über +/- eine Differenz des Speedfaktors bewegt.<br> Wenn, aus irgendeinem Grund, das letzte Bild länger als normal benötigte, um aufgebaut zu werden, wird SpeedFactor# größer als 1,0 sein (sagen wir 1,25). 4x1,25=5 also wird sich der Spieler 5 Pixel bewegen, aber da dieses Bild länger benötigte, holt er das auf und es gibt einen Durchschnitt von 4.</p> <p><a href="framelimiter%20example.htm">Klick hier um ein Beispiel des Vorteils vom Delte-timing gegenüber des Timers zu sehen.</a></p> <p> </p> <p><u>Benutzen der TimeElapsed# Variable:</u></p> <p>Sagen wir, du schreibst einen Autorennen Simulator. Seitdem du möchtest, das das Auto sich wie ein echtes Auto verhält, möchtest du die Variable TimeElapsed# benutzen.</p> <p>Um in deinem Spiel die Geschwindigkeit zu errechen, benutzt du die folgende Formel:</p> <p>Neuegeschwindigkeit = Altegeschwindigkeit + (Zeit * Beschleunigung)</p> <p><small>Geschwindigkeit ist in Metern pro Sekunde angegeben (m/s)<br> Zeit ist in Sekunden angegeben (s)<br> Beschleunigung ist in Meter pro Sekunde pro Sekunde angegeben (m/s^2)</small></p> <p>Immer noch einfach, alles was wir tun müssen ist die Zeit durch die TimeElapsed# zu ersetzen.</p> <pre class="code">newvel# = oldvel# + (FL\TimeElapsed# * accel#)</pre> <p>Nun wird das Auto seine Geschwindigkeit verändern, basierend auf der Aktuellen Zeit, die seit dem letzten Bild vergangen ist.</p> <p> </p> <table border="0" cellspacing="0" width="100%"> <tr> <td width="30%"></td> <td width="70%" align="right"><small>Wenn Sie auf diese Seite kommen und auf der linken Seite ist kein Index, <a target="_top" href="http://home.cmit.net/rwolbeck/programmingtutorial/index.htm">klicken Sie hier, um auf die Indexseite geführt zu werden.</a></small></td> </tr> <tr> <td colspan="2" height="20"></td> </tr> <tr> <td colspan="2" align="center"><script type="text/javascript"><!-- google_ad_client = "pub-7074115215171132"; //728x90, Footer Ad for Prog Tut google_ad_slot = "3425667659"; google_ad_width = 728; google_ad_height = 90; //--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </td> </tr> </table> <!-- Start of StatCounter Code --> <script type="text/javascript"> var sc_project=3228375; var sc_invisible=1; var sc_partition=35; var sc_security="8889ea98"; </script> <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> <noscript> <div class="statcounter"><a class="statcounter" href="http://www.statcounter.com/"> <dd><img class="statcounter" src="http://c36.statcounter.com/3228375/0/8889ea98/0/" alt="blog counter" /></a></dd> </div></noscript> <!-- End of StatCounter Code --> </body> </html> Das ist der übersetzte HTML Code. Klartext: Vorher:http://home.cmit.net/rwolbeck/...imiter.htm Code: [AUSKLAPPEN] Bilder pro Sekunde begrenzen & Bilder pro Sekunde errechnen Translated by Phlox from the german Blitzforum. Übersetzt von Phlox aus dem deutschen Blitzforum. Zeige die Hauptseite Dieser Codeteil erfllt Zwei Funktionen. Erste Funktion: Er errechnet die Bilder pro Sekunde (im folgenden FPS genannt (=Frames per second)) ihres Programmes aus der Durchschnittszeit, der letzten 5 Bilder. Zweite Funktion: Er hilft dir, die Geschwindigkeit des Programmes auf allen Computern konstant zu halten. Dies tut er mit zwei Variablen (SpeedFactor# oder TimeElapsed#) , welche zum Beispiel zur Spieler Bewegung genutzt werden können. Diese Funktion hilft dir, dein Spiel langsam oder schnell laufen zu lassen (besonders in Jump 'n Run Spielen). Um diese Funktionen zu benutzen, kopiere folgenden Programmcode an den Anfang ihres Programmes: Global Debug = True Type FrameRate Field TargetFPS# Field SpeedFactor# Field TimeElapsed# Field FPS# Field FPS2# Field FPS3# Field FPS4# Field FPS5# Field CurrentTicks Field FrameDelay End Type Global FL.FrameRate = New FrameRate ;initialize frame limiter FL\TargetFPS# = 60 ;set this to whatever FPS your code is based on FL\FrameDelay = MilliSecs() Als nächstes kopiere den folgenden Code in deine Hauptschleife: (hier werden die Kalkulationen ausgeführt) ;Set Speed Factor FL\CurrentTicks = MilliSecs() FL\SpeedFactor# = (FL\CurrentTicks - FL\FrameDelay) / (1000.0 / FL\TargetFPS#) If FL\SpeedFactor# <= 0 Then FL\SpeedFactor# = 0.00000000001 FL\TimeElapsed# = (FL\CurrentTicks - FL\FrameDelay) / 1000.0 If Debug FL\FPS# = (FL\FPS2# + FL\FPS3# + FL\FPS4# + FL\FPS5# + FL\TargetFPS# / FL\SpeedFactor#) / 5 FL\FPS5# = FL\FPS4# : FL\FPS4# = FL\FPS3# : FL\FPS3# = FL\FPS2# : FL\FPS2# = FL\FPS# EndIf FL\FrameDelay = FL\CurrentTicks Als letztes benutzt du die folgenden Methoden um den Code zu nutzen. Die Pilder Pro Sekunde (FPS) anzeigen Fügen Sie einfach den folgenden Code irgendwo in ihre Hauptschleife: If Debug Text 0, 0, "FPS: " + Int(FL\FPS#) EndIf Alle Objekte gleichschnell auf allen Computern laufen lassen Um die Bilder pro Sekunde (FPS) auf eine Bestimmte Zahl zu begrenzen, musst du die Variable SpeedFactor# oder die Variable TimeElapsed# benutzen. Welche du brauchst, hängt von dem Spiel ab, das du schreiben möchtest. SpeedFactor# enthält die Zeit, die das letzte Bild benötigt hat, um gemalt zu werden. TimeElapsed# enthält die Anzahl der Bilder, die in der letzten Sekunde gemalt wurden. Wenn dein Spiel Objekte/Gegenstände benutzt, die eine bestimmte Distanz in jedem Frame bewegt werden, solltest du die Variable SpeedFactor# benutzen. Wenn dein Spiel Objekte/Gegenstände benutzt, die jede Sekunde eine bestimmte Distanz bewegt werden, solltest du die variable TimeElapsed# benutzen. Das Benutzen der SpeedFactor# Variable: Sagen wir, du schreibst ein seitenbewegendes Plattformspiel. Solange der Spieler die rechte Pfeiltaste drückt, bewegt er sich um 4 Pixel in jedem Bild. Normalerweise würdest du so programmieren: If KeyDown(205) PlayerX = PlayerX + 4 EndIf Um gedämpftes Bewegen auf allen Computern zu benutzen, würdest du den Code so verändern: If KeyDown(205) PlayerX = PlayerX + 4.0 * FL\SpeedFactor# EndIf Dies würde bewirken, dass der Spieler sich 4 Pixel über +/- eine Differenz des Speedfaktors bewegt. Wenn, aus irgendeinem Grund, das letzte Bild länger als normal benötigte, um aufgebaut zu werden, wird SpeedFactor# größer als 1,0 sein (sagen wir 1,25). 4x1,25=5 also wird sich der Spieler 5 Pixel bewegen, aber da dieses Bild länger benötigte, holt er das auf und es gibt einen Durchschnitt von 4. Klick hier um ein Beispiel des Vorteils vom Delte-timing gegenüber des Timers zu sehen. Benutzen der TimeElapsed# Variable: Sagen wir, du schreibst einen Autorennen Simulator. Seitdem du möchtest, das das Auto sich wie ein echtes Auto verhält, möchtest du die Variable TimeElapsed# benutzen. Um in deinem Spiel die Geschwindigkeit zu errechen, benutzt du die folgende Formel: Neuegeschwindigkeit = Altegeschwindigkeit + (Zeit * Beschleunigung) Geschwindigkeit ist in Metern pro Sekunde angegeben (m/s) Zeit ist in Sekunden angegeben (s) Beschleunigung ist in Meter pro Sekunde pro Sekunde angegeben (m/s^2) Immer noch einfach, alles was wir tun müssen ist die Zeit durch die TimeElapsed# zu ersetzen. newvel# = oldvel# + (FL\TimeElapsed# * accel#) Nun wird das Auto seine Geschwindigkeit verändern, basierend auf der Aktuellen Zeit, die seit dem letzten Bild vergangen ist. Wenn Sie auf diese Seite kommen und auf der linken Seite ist kein Index, klicken Sie hier, um auf die Indexseite geführt zu werden. |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bin leider noch nicht fertig. Ist doch etwas umfangreicher als ich dachte. Aber ich werd heut noch eine erste Übersetzung liefern.
I'm not finished at the moment but I will show you a first result today. Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Elvis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe mir erlaubt, ein paar Sachen zu ändern. Wenn du etwas dagegen hast, schreib es bitte inkl. Begründung.
[I felt free, to change some important things.] Code: [AUSKLAPPEN] Bilder pro Sekunde begrenzen & errechnen Zum Index Dieser Codeteil erfüllt zwei Funktionen. 1. Errechnung der Bilder pro Sekunde (im folgenden FPS genannt (=engl. Frames per second)) eines Programms aus der Durchschnittszeit, der letzten 5 Bilder. 2. Ermöglichung einer konstanten Programmablaufgeschwindigkeit auf allen Rechnern, die stark genug sind. Gleichzeitig kann die Geschwindigkeit eines Spieles mit zwei Variablen sehr komfortabel geregelt werden (GeschwFaktor# oder VergZeit#). Um diese Funktionen zu benutzen, kopiere folgenden Programmcode an den Anfang deines Programms: Global Debug = True Type FrameRate Field ZielFPS# Field GeschwFaktor# Field VergZeit# Field FPS# Field FPS2# Field FPS3# Field FPS4# Field FPS5# Field AktuelleTicks Field Bildlaufzeit End Type Global FL.FrameRate = New FrameRate ;Initialisierung des FPS-Regulator FL\ZIelFPS# = 60 ;dieser Wert kann durch einen beliebigen anderen ersetzt werden FL\Bildlaufzeit = MilliSek() Als nächstes kopiere den folgenden Code in deine Hauptschleife (hier werden die Berechnungen ausgeführt): ;Festlegung des Geschwindigkeitsfaktors FL\AktuelleTicks = MilliSeks() FL\GeschwFaktorr# = (FL\AktuelleTicks - FL\Bildlaufzeit) / (1000.0 / FL\ZielFPS#) If FL\GeschwFaktor# <= 0 Then FL\GeschwFaktor# = 0.00000000001 FL\VergZeit# = (FL\AktuelleTicks - FL\Bildlaufzeit) / 1000.0 If Debug FL\FPS# = (FL\FPS2# + FL\FPS3# + FL\FPS4# + FL\FPS5# + FL\ZielFPS# / FL\GeschFaktor#) / 5 FL\FPS5# = FL\FPS4# : FL\FPS4# = FL\FPS3# : FL\FPS3# = FL\FPS2# : FL\FPS2# = FL\FPS# EndIf FL\Bildlaufzeit = FL\AktuelleTicks Um den Code einsetzen zu können, solltest du dich an folgende Anleitunge halten: FPS anzeigen: Füge einfach den folgenden Code irgendwo in deine Hauptschleife ein...: If Debug Text 0, 0, "FPS: " + Int(FL\FPS#) EndIf ...um das Programm auf allen Computern, die gewisse Mindestanforderungen erfüllen, gleich schnell laufen zu lassen. Um die FPS auf eine Bestimmte Zahl zu begrenzen, musst du die Variable GeschwFaktor# oder die Variable VergZeit# benutzen. Welche du brauchst, hängt von dem Programm ab, das du schreiben möchtest. GeschwFaktor# enthält die Zeit, die das letzte Bild benötigt hat, um angezeigt zu werden. VergZeit# enthält die Anzahl der Bilder, die in der letzten Sekunde angezeigt wurden. Wenn dein Spiel Objekte benutzt, die in jedem Einzelbild (Frame) um eine bestimmte Distanz bewegt werden, solltest du die Variable GeschwFaktor# benutzen. Wenn dein Spiel Objekte benutzt, die jede Sekunde um eine bestimmte Distanz bewegt werden, solltest du die variable VergZeit# benutzen. Beispiel für die Benutzung der GeschwFaktor# Variable: Nehmen wir an, du schreibst ein seitenbewegendes Plattformspiel. Solange der Spieler die rechte Pfeiltaste drückt, bewegt er sich in jedem Bild um 4 Pixel. Normalerweise würdest du so programmieren: If KeyDown(205) SpielerX = SpielerX + 4 EndIf Um gedämpftes Bewegen auf allen Computern zu benutzen, würdest du den Code so verändern: If KeyDown(205) SpielerX = SpielerX + 4.0 * FL\GeschwFaktor# EndIf Dies würde bewirken, dass der Spieler sich 4 Pixel über +/- eine Differenz des Geschwindigkeitsfaktors bewegt. Wenn aus irgendeinem Grund das letzte Bild länger als normal benötigte, um aufgebaut zu werden, würde GeschwFaktor# größer als 1,0 sein (z.B. 1,25). 4 x 1,25 = 5. Der Spieler würde sich also um 5 Pixel bewegen. Aber da dieses Bild länger benötigte, würde er das aufholen, was einen Durchschnitt von 4 ergäbe. Vorteile des Delta-Timings gegenüber normalem Timer Beispiel für die Benutzung der VergZeit#-Variable: Nehmen wir an, du schreibst einen Autorennensimulator. Seit du möchtest, dass das Auto sich wie ein echtes Auto verhält, willst du die Variable VergZeit# benutzen. Um in deinem Spiel die Geschwindigkeit zu errechen, benutzt du folgende Formel: NeueGeschw = AlteGeschw + (Zeit * Beschlng) Die Geschwindigkeit wird in Metern pro Sekunde angegeben (m/s). Die Zeit wird in Sekunden angegeben (s). Die Beschleunigung wird in Metern pro Sekunde pro Sekunde angegeben (m/s^2). Das ist immer noch einfach, denn alles, was wir tun müssen, ist die Zeit durch die VergZeit#-Variable zu ersetzen. NeueGeschw# = AlteGeschw# + (FL\VergZeit# * Beschlng#) Nun wird das Auto basierend auf der Aktuellen Zeit, die seit dem letzten Bild vergangen ist, seine Geschwindigkeit verändern. Zum Index (mit Navigationsleiste). Ich glaube mich daran erinnern zu können, dass er schrieb, der Code soll auch übersetzt werden. EDIT: Korrekturen gemacht (nach Hinweisen von The_Nici). Grüße, Elvis |
||
- Zuletzt bearbeitet von Elvis am Di, März 11, 2008 23:06, insgesamt einmal bearbeitet
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde ja "Zeige die Hauptseite" durch "Zum Index" erstezen, ansonsten klingts wie Google-Übersetzung. xD
Elvis: "Zwei" als Zahl klein schreiben, würd ich mal sagen. "...durch einen beliebigen anderen" wäre glaub ich gross, "Anderen" ist hier stellvertretend für "anderen Wert". "Wenn Sie auf diese Seite kommen und auf der linken Seite ist kein Index, klicken Sie hier, um auf die Indexseite geführt zu werden. " würd ich einfach durch einen "Index"-Link ersetzen. |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, Ich bin auch fertig geworden. Hab es zur kontrolle nur überflogen, also wäre es gut, wenn sich noch jemand mein Werk anschauen würde.
Ich hab es als Archiv hochgeladen, in dem Die original- und die deutsche Version zu finden ist, genauso wie die Bilder für das Jump'n'Run https://www.blitzforum.de/upload/file.php?id=2765 @Elvis: Ich glaube, wir sollten nur die kommentare übersetzen. Von den Variablennamen war keine Rede so wie ich das verstand. I finished the translation of your second tutorial. In the archive above there is your site, the full translation and your images concerning the site and the game. Am I right when I think, you wanted us to translate the Homepage and the code-comments, but not the variable-names? Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Elvis |
![]() Antworten mit Zitat ![]() |
---|---|---|
@The_Nici
Vielen Dank für deine Hinweise, hatte nach der Fertigstellung keine Lust mehr, mir den Text nocheinmal gründlich durchzulesen, wie ich es sonst immer tue. Blos bezüglich "Anderen/anderen" bin ich mir nicht ganz sicher, weshalb ich das ersteinmal stehen lassen habe. Vielleicht ist sich jemand ganz sicher, es genau zu wissen, und kann uns dann korrigieren. @Eingeproggt Es stimmt, dass es nicht explizit drinstand, dass die Variablennamen übersetzt werden sollen, aber ich finde das selbstverständlich. Was will ein Anfänger, der Übersichtlichkeit erwartet, mit englischen Begriffen anfangen, zumal die deutschen nicht irgendwie übermäßig lang oder so sind. Das einzige, was vielleicht dagegen spricht, ist die Tatsache, dass deutsche Begriffe unter Englischen nicht ganz so harmonisch aussehen wie andere, aber das ist ziemlich nebensächlich. Ich bin mir z.B. nicht ganz sicher, was "Ticks" bedeutet (habe ich vergessen dazuzuschreiben, wäre dankbar für Hilfe). Wir sind hier in Deutschland, wo Deutsch gesprochen und geschrieben wird in einem deutschsprachigen Forum. Ich hoffe du kannst jetzt halbwegs nachvollziehen, wieso ich eine gescheite Übersetzung gemacht habe, statt nur Teile übersetzt zu lassen. Grüße, Elvis |
||
WolRonBetreff: Danke |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Thank you guys so far. I appreciate you all trying to help! ![]() I see that some of you (Phlox) are sneaky: ", holt er das auf und es gibt einen Durchschnitt von 4." I did not write that. ![]() I value your judgement on what is the best translation, but please don't change the content. ------------------- Variables: I did not know if I wanted variables translated, but I like Elvis's explanation. So, YES, please translate specific variable names if you think it makes it easier for a beginner to understand. And of course, I want the comments translated. ------------------- Index link: Short link to index on top of page: "Zum Index" Long link to index on bottom of page: "Wenn Sie auf diese Seite kommen und auf der linken Seite ist kein Index, klicken Sie hier, um auf die Indexseite geführt zu werden." or whatever translates to: "If there is no index on the left, click here to show the Index (or Navigationsleiste?)." I do not want just this on the bottom (SORRY): "Zum Index (mit Navigationsleiste)." ------------------ "Ticks" as in CurrentTicks current means "now" or "not old" Ticks is slang for "small unit of time". In Blitz, a 'tick' is usually a 1/1000th second, as in tick of the clock, or tick-tock, tick-tock (sound that a clock makes). ----------------- I haven't read the 2D platformer translation yet, but I will now... WolRon ---------------------------------------------- Ich danke euch so weit. Ich begrüße Sie alle versuchen zu helfen! ![]() Ich sehe, dass einige von Ihnen (Phlox) sind heimtückisch: ", Holt er das auf und es gibt einen Durchschnitt von 4." Ich habe nicht schreiben. ![]() Ich schätze Ihr Urteil darüber, was ist die beste Übersetzung, aber bitte nicht ändern, der Inhalt. ------------------- Variables: Ich wusste nicht, ob ich wollte Variablen übersetzt, aber ich mag Elvis-Erklärung. Also, JA, bitte übersetzen spezifische variable Namen, wenn Sie denken, es macht es einfacher für einen Anfänger zu verstehen. Und natürlich möchte ich die Kommentare übersetzt. ------------------- Index Link: Kurze Link zum Index am Anfang der Seite: "Zum Index" Long Link zum Index am Ende der Seite: "Wenn Sie auf diese Seite kommen und auf der linken Seite ist kein Index, klicken Sie hier, um auf die Indexseite geführt zu werden." Oder was auch immer übersetzt: "Wenn es keinen Index auf der linken Seite, klicken Sie hier, um den Index (oder Navigationsleiste?)." Ich möchte nicht, dass dies nur auf der Unterseite (SORRY): "Zum Index (mit Navigationsleiste)." ------------------ "Ticks" wie in CurrentTicks Aktuelle heißt "jetzt" oder "nicht alt" Zecken ist Slang für "kleine Einheit der Zeit". In Blitz, eine "Zecke" ist in der Regel eine zweite 1/1000th, Ticken als in der Uhr, Oder tick-tock, tick-tock (Ton, dass eine Uhr macht). ----------------- Ich habe nicht gelesen 2D-Plattformspiel Übersetzung noch, aber ich werde jetzt ... WolRon |
||
BASIC Programming Tutorial |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich persönlich arbeite lieber mit englischen Variablen. Als ich angefangen habe zu programmiern war es für mich einfach "professionell", wenn man englische Begriffe verwendet.
In vielen deutschen Codes findet man englische Variablenbezeichnungen, weshalb man sich durchaus bereits in Tutorials mit ihnen auseinander setzen sollte. Habe außerdem die letzte Zeile noch ein wenig überarbeitet. Ich finde Code: [AUSKLAPPEN] Wenn du auf der linken Seite keinen index siehst, klicke hier um zum Index zu gelangen.
wäre die beste Formulierung. Diese hab ich allerdings nicht im Archiv drinnen. Müsste noch dazu geschrieben werden. -------------------- I prefer using english variables. When I began to program, I thought english variables would be "professional". Today, in many german codes you find english variables. Thats why I think, everyone should get used to them in tutorials. By the why, I thought a little bit about the last sentence. The best formulation I found is Code: [AUSKLAPPEN] Wenn du auf der linken Seite keinen index siehst, klicke hier um zum Index zu gelangen.
But someone have to edit this in the file. I did not upload a newer version. Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
WolRon |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Eingeproggt hat Folgendes geschrieben: Maybe we can discuss linking to my homepage?
Thank you for the translation. Could you (or anyone else here that's willing), please look at the actual page now up and see if you spot any mistakes? http://home.cmit.net/rwolbeck/...former.htm http://home.cmit.net/rwolbeck/...german.htm Eingeproggt, if you'd like a link to your homepage, let me know. WolRon -------------------------- Vielen Dank für die Übersetzung. Könnten Sie (oder jemand anders hier, die bereit), geben Sie bitte einen Blick auf die Seite, und nun sehen Sie, wenn Sie vor Ort Fehler? Http://home.cmit.net/rwolbeck/...former.htm Http://home.cmit.net/rwolbeck/...german.htm Eingeproggt, wenn Sie möchten, dass ein Link auf Ihre Homepage, lassen Sie es mich wissen. WolRon |
||
BASIC Programming Tutorial |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab es nochmal durchgelesen und ein paar Sachen ausgebessert.
I read it again and improved some mistakes. Here you are: Code: [AUSKLAPPEN] <html>
<head> <link rel="styleSheet" href="2D platformer example code_files/style000.css" type="text/css"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="keywords" content="BASIC, program, tutorial, language, Blitz, game, videogame, 2D, platform, platformer, sidescroller, run and jump, scroll, vertical, horizontal, shareware, free, play, Atari, Activision, old school, BlitzBASIC, learn, create, easy, code, snippet, fps, first person shooter, tetris, shootemup, reference, logic, page flipping"> <meta name="keywords" content="BASIC, programm, tutorial, sprache, Blitz, Spiel, videospiel, 2D, plattform, scroller, scrolling, run and jump, jump and run, scroll, vertikal, gratis, kostenlos, spielen, lernen, erstellen, einfach, fps, referenz, logik, logisch"> <title>Plattformbasiertes 2D Jump'n'Run Tutorial</title> </head> <body> <table border="0" cellpadding="0" cellspacing="1" width="100%"> <tr> <td width="15%"></td> <th width="70%"><p align="center"><br> <big>Plattformbasiertes 2D Jump'n'Run Tutorial</big><br> </th> <td valign="top" align="right" width="15%"><a target="_top" href="http://home.cmit.net/rwolbeck/programmingtutorial/index.htm"><small>Zum Index</small></a></td> </tr> </table> <p>Dieses Tutorial demonstriert ein einfaches, plattformbasiertes 2D Jump'n'Run. Einige beinhaltete Features:</p> <p> </p> <div align="left"> <table border="0" cellpadding="5" cellspacing="0" width="100%"> <tr> <td width="440" height="10" valign="top">-Ein Charakter der verschieden schnell läuft und springt<br> -Der Spielcharakter ist durch "Kräfte" beeinflusst und bewegt sich daher flüssig<br> -Ladet und verwendet ein Tileset um den Hintergrund darzustellen<br> -Kamera verfolgt den Spieler automatisch<br> -Sowohl vertikal als auch horizontal scrollbare Level<br> -Verwaltet mehrere Level<br> -Zeigt, wie der Spieler auf den Hintergrund reagieren kann<br> -Debug-Informationen werden angezeigt</td> <td width="407" height="10"><img src="2D platformer example code_files/2D000000.png" alt="2D platfomer style game" width="200" height="150"></td> </tr> </table> </div> <p><a href="#finalresult"><small><small>Hier klicken, um das Endergebnis zu sehen...</small></small></a></p> <p><a href="http://home.cmit.net/rwolbeck/programmingtutorial/code/2D%20platformer%20improved.htm"><small><small>Hier gibt's eine verbesserte Version mit mehr Features...</small></small></a></p> <p><small>Deutsche Übersetzung aus dem Englischen von Christoph Mach ("Eingeproggt"), Member der <a href="http://www.blitzforum.de">deutschen BlitzBasic Community</a></small></p> <p> </p> <p>Wir beginnen mit dem Graphikmodus:</p> <pre class="code">Graphics 640, 480 ;2D Graphik mit einer Auflösung von 640x480 SetBuffer BackBuffer() ;Damit alles auf den Backbuffer gezeichnet wird (Doublebuffering)</pre> <p> </p> <p>Verwendete Bilder laden:</p> <pre class="code">Global tileImages ;Enthält Handle zum Hintergrund-Tileset Global imgPlayer ;Handle für das Spielerbild ;Alle Graphiken, Sounds,... laden ;In diesem Beispiel werden nur Graphiken verwendet! Global maxTile = 6 ;Maximale Anzahl an Tiles tileImages = LoadAnimImage("bgtiles.png", 40, 40, 0, 8) imgPlayer = LoadImage("jumpman.png")</pre> <p> </p> <p>Verwendete Arrays dimensionieren und globle Variablen initialisieren:</p> <pre class="code">Dim Level(0, 0) ;Zur Speicherung der Laveldaten (Wird später festgelegt) Dim LevelExit(0, 0) ;Levelausgänge für Levelwechsel und Spiel gewinnen (Wird ebenfalls später festgelegt) Global LevelWidth ;Aktuelle Breite des Levels in Tiles Global LevelHeight ;Aktuelle Höhe des Levels in Tiles Global NumExits ;Anzahl an Ausgänge aus dem Level Global ScreenX ;X-Position, an dem der Hintergrund gezeichnet wird Global ScreenY ;Y-Position, an dem der Hintergrund gezeichnet wird Global MaxScreenX ;Maximale X-Position, des Hintergrundes Global MaxScreenY ;Maximale Y-Position, des Hintergrundes Global PlayerX# ;Aktuelle X-Position des Spielers Global PlayerY# ;Aktuelle Y-Position des Spielers Global CurLevel = 1 ;Level, der gerade gespielt wird Global GameOver = False ;Spielstatus (0=läuft, 1=verloren, 2=gewonnen) Global XVel# = 0 ;Horizontale Geschwindigkeit des Spielers Global YVel# = 0 ;Vertikale Geschwindigkeit des Spielers</pre> <p> </p> <p>Leveldaten laden. In größeren Spielen würden die Leveldaten aus externen Datein geladen werden, wir begnügen uns hier zur Einfachheit mit dem Blitz-internen Data Befehl. Der Code um einen Level zu laden wird in eine Funktion geschrieben, um ihn immer wieder zu verwenden Die Funktion und alle Data-Felder sollten am Ende des Programmcodes stehen.</p> <pre class="code">LoadLevel(CurLevel, 1, 8) ;Ersten Level laden. Dabei Spielerposition setzen Function LoadLevel(lvl, startX, startY) Select lvl Case 1 Restore Data_Level1 ;Zum Datenfeld, welches Level 1 enthält, springen Case 2 Restore Data_Level2 ;Zum Datenfeld, welches Level 2 enthält, springen Case 3 Restore Data_Level3 ;Zum Datenfeld, welches Level 3 enthält, springen Default RuntimeError("Error: Level " + lvl + " existiert nicht!") End Select ;Levelbreite und -Höhe auslesen Read LevelWidth ;Breite des Levels in Tiles Read LevelHeight ;Höhe des Levels in Tiles If LevelWidth > 999 Or LevelWidth < 1 Then RuntimeError("Error: Level " + lvl + ": Daten fehlerhaft!") If LevelHeight > 999 Or LevelHeight < 1 Then RuntimeError("Error: Level " + lvl + ": Daten fehlerhaft!") Dim Level(LevelWidth-1, LevelHeight-1) ;Leveldaten-Array dimensionieren ;Anfangsposition des Spielers überprüfen If startX >= LevelWidth Or startX < 0 Then RuntimeError("Error: Level " + lvl + ": Daten fehlerhaft!") If startY >= LevelHeight Or startY < 1 Then RuntimeError("Error: Level " + lvl + ": Daten fehlerhaft!") ;Startposition (des Spielers und des Hintergrundes) in pixel berechnen If startX < 5 ;Wenn der Spieler nahe dem linken Rand ist, dann ScreenX = 0 ; Hintergrund ganz nach links setzen PlayerX = startX * 40 + 20 ; Spieler auf Startposition ElseIf startX > LevelWidth - 12 ;Wenn der Spieler nahe dem rechten Rand ist, dann ScreenX = LevelWidth * 40 - 640 ; Hintergrund ganz nach rechts setzen. (Bildschirmbreite muss abgezogen werden!) und PlayerX = startX * 40 - ScreenX + 20 ; Spieler auf X-Startposition minus Hintergrundposition Else ;Wenn der Spieler irgendwo zwischen dem linken und rechten Rand ist, dann ScreenX = startX * 40 - 200 ; Hintergrund auf 5 Tiles links vom Spieler setzen und PlayerX = 220 ; X-Position des Spielers auf 220 (Mitte) EndIf If startY < 4 ;Wenn der Spieler nahe dem oberen Rand ist, dann ScreenY = 0 ; Hintergrund fängt ganz oben an PlayerY = (startY + 1) * 40 ; Spieler auf Startposition ElseIf startY > LevelHeight - 9 ;Wenn der Spieler nahe dem unterem Rand ist, dann ScreenY = LevelHeight * 40 - 480 ; Hintergrund ganz nach unten setzen. (Bildschirmhöhe muss abgezogen werden!) und PlayerY = (startY + 1) * 40 - ScreenY ; Spieler auf Y-Startposition minus Hintergrundposition Else ;Wenn der Spieler irgendwo zwischen dem oberen und unteren Rand ist, dann ScreenY = (startY + 1) * 40 - 160 ; Hintergrund auf 4 Tiles oberhalb vom Spieler setzen und PlayerY = 160 ; Y-Position des Spielers auf 160 (Mitte) EndIf MaxScreenX = 40 * LevelWidth - 640 - 1 ;Errechnet die maximle X-Pposition des Hintergrundes MaxScreenY = 40 * LevelHeight - 480 ;Errechnet die maximle Y-Pposition des Hintergrundes ;Hintergrundfarbe des levels laden (Für ClsColor) Read clscol If clscol = 1 ClsColor 100, 110, 200 ;Himmelsfarben Else ClsColor 0, 0, 0 ;oder schwarz EndIf ;Daten der Levelausgänge laden Read NumExits ;Anzahl der Levelausgänge If NumExits > 10 Or NumExits < 1 Then RuntimeError("Error: Level " + lvl + ": Daten fehlerhaft!") Dim LevelExit(NumExits, 4) ;Levelausgänge-Array dimensionieren For iter = 1 To NumExits ;Alle Ausgänge durchlaufen um Read LevelExit(iter, 0) ;X-Position, Read LevelExit(iter, 1) ;Y-Position, Read LevelExit(iter, 2) ;damit verknüpften Level, Read LevelExit(iter, 3) ;X-Position auf neuem Level, Read LevelExit(iter, 4) ;Y-Position auf neuem Level einzulesen Next ;Eigentliche Leveldaten laden For yIter = 0 To LevelHeight-1 ;Schleife, die von oben nach unten durchläuft For xIter = 0 To LevelWidth-1 ;Schleife, die von links nach rechts durchläuft Read Level(xIter, yIter) ;Aktuelles Tile einlesen (genaue Beschreibung weiter unten) If Level(xIter, yIter) > maxTile Or Level(xIter, yIter) < 0 Then RuntimeError("Error: Level " + lvl + ": Daten fehlerhaft!") Next Next ;Spielvariablen zurücksetzen XVel = 0 ;Spielergeschwindigkeit auf Null setzen, weil er sich YVel = 0 ; sonst weiterbewegen würde End Function ;Tile Beschreibung ;0 Nichts ;Begehbares Tile ;1 Himmel ;Begehbares Tile ;2 Wolke ;Begehbares Tile ;3 Hintergrundobjekt ;Begehbares Tile ;4 Fester Block ;Nicht begehbares Tile ;5 Weicher Block ;Nicht begehbares Tile ;6 Gras ;Nicht begehbares Tile .Data_Level1 ;Beschreibung Level 1 Data 80, 12 ;Levelbreite, -höhe Data 1 ;cls color = Himmelsfarben Data 2 ;Anzahl an Levelausgängen Data 76, 10, 2, 56, 8 ;X-, Y-Position des Ausgangs, vernüpfter Level, neue X- und Y-Startposition Data 36, 9, 3, 1, 2 ;X-, Y-Position des Ausgangs, vernüpfter Level, neue X- und Y-Startposition Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,3,1,1,1,3,1,3,3,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1 Data 1,3,1,1,1,3,1,3,1,3,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1 Data 1,3,1,3,1,3,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,3,3,3,3,3,1,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,3,1,3,1,1,3,1,3,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,1,5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,5,1,1,5,1,1,1,4,1,1,1,1,1,1,1,1,5,2,5,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,1 Data 1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,5,2,5,1,1,1,1,5,4,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,3,3,1,3,3,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,5,5,5,1,1,1,4,5,4,5,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,1,1,1,1,1,1,1,1,1,3,3,1,3,3,1 Data 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 .Data_Level2 ;Beschreibung Level 2 Data 60, 18 ;Levelbreite, -höhe Data 1 ;cls color = Himmelsfarben Data 3 ;Anzahl an Levelausgängen Data 55, 8, 1, 75, 10 ;X-, Y-Position des Ausgangs, vernüpfter Level, neue X- und Y-Startposition Data 27, 7, 0, 0, 0 ;X-, Y-Position des Ausgangs, Spiel gewonnen, neue X- und Y-Startposition irrelevant Data 22, 14, 3, 17, 12 ;X-, Y-Position des Ausgangs, vernüpfter Level, neue X- und Y-Startposition Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,1 Data 4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,3,1,1,1,1,1,3,1 Data 4,5,5,5,5,5,5,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,3,1,1,1,1,1,3,1 Data 4,5,5,5,5,5,5,5,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,3,1,1,4,1,1,1,1,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,3,3,3,3,3,3,3,1 Data 4,5,5,5,5,5,5,5,5,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,3,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,3,3,3,1,3,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,4,1,1,1,1,1,5,1,5,5,5,1,5,1,1,1,4,4,4,4,4,1,1,1,1,1,1,1,1,4,3,2,4,1,4,2,3,4,1,1,1,5,3,3,3,1,3,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,5,4,1,1,1,1,3,1,1,3,1,1,3,1,1,1,3,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,4,1,4,2,1,1,1,1,1,5,3,3,4,4,4,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,5,5,4,1,1,1,3,1,1,3,1,1,3,1,1,1,3,1,1,1,3,1,1,1,1,1,1,1,1,1,1,4,4,1,4,4,1,1,1,1,1,5,3,3,3,3,3,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,4,1,4,6,6,6,6,6,6,6,3,3,3,3,3,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,4,4,1,1,1,3,4,3,4,3,1,1,1,1,1,1,1,1,4,3,1,4,1,4,1,3,4,1,1,1,1,3,3,3,3,3,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,4,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,4,4,4,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,5,1,1,5,1,4,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,1,6,1,6,1,6,1,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 Data 4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,6,6,6 Data 4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,6,6 .Data_Level3 ;Beschreibung Level 3 Data 19, 32 ;Levelbreite, -höhe Data 0 ;cls color = Schwarz Data 1 ;Anzahl an Levelausgängen Data 17, 2, 1, 37, 7 ;X-, Y-Position des Ausgangs, vernüpfter Level, neue X- und Y-Startposition Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4 Data 4,0,0,4,4,4,4,4,0,0,0,0,0,4,5,5,5,5,4 Data 4,0,0,4,5,5,5,5,4,0,0,0,4,5,5,5,5,5,4 Data 4,0,0,4,5,5,5,5,5,4,0,0,0,0,0,0,5,5,4 Data 4,0,0,4,4,5,5,5,5,5,4,0,0,0,0,0,5,5,4 Data 4,0,0,0,0,4,4,4,4,4,4,4,4,4,0,0,4,4,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0 Data 4,3,4,4,4,0,0,4,0,0,0,0,0,0,5,5,5,0,0 Data 4,0,0,4,5,0,0,5,4,0,0,0,4,5,5,5,0,0,4 Data 4,0,0,4,5,5,0,0,5,4,0,4,5,5,5,5,0,0,4 Data 4,0,0,4,5,5,0,0,0,5,4,5,5,0,0,0,0,0,4 Data 4,0,0,4,5,5,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,4,4,5,5,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,4,4,4,4,4,4,4,4,4,0,0,4,4,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4 Data 4,3,4,4,4,4,4,4,4,4,0,0,0,0,4,4,4,4,4 Data 4,0,4,4,4,0,0,0,0,0,0,0,0,0,5,5,5,5,4 Data 4,0,0,4,5,0,0,0,0,0,0,0,4,5,5,5,5,5,4 Data 4,0,0,4,5,5,0,0,0,0,0,0,5,5,5,5,5,5,4 Data 4,0,0,4,0,0,0,0,0,5,4,5,5,0,0,0,0,0,4 Data 4,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,4,4,4 Data 4,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,4 Data 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4</pre> <p> </p> <p>Jetzt brauchen wir eine Hauptschleife, in der alles berechnet und gezeichnet wird. Vorerst wird nur der Hintergrund neu gezeichnet, der Rest wird später an der Markierung eingefügt.</p> <pre class="code">Gametimer = CreateTimer(60) ;Spieltimer erstellen, der das SPiel mit 60FPS laufen lässt ;Start game loop Repeat ;Start der Hauptschleife WaitTimer Gametimer ;Auf Timer warten <font color="#00FFFF">;Hier kommt der restliche Code hinein</font> Until KeyHit(1) ;Hauptschleife wiederholen bis die ESC-Taste gedrückt wird End ;Programm beenden </pre> <p> </p> <p>Benutzereingaben erfassen:</p> <pre class="code"> ;Benutzereingaben erfassen ;UpKey = KeyDown(200) ;Cursor rauf ;Es ist empfehlenswwert, die Tasten nur einmal pro Schleifendurchlauf abzufragen. ;DownKey = KeyDown(208) ;Cursor runter ; Das verhindert Fehler, die auftreten können, wenn der Zustand LeftKey = KeyDown(203) ;Cursor links ; während eines Schleifendurchlaufs wechselt. RightKey = KeyDown(205) ;Cursor rechts JumpKey = KeyDown(57) ;Leertaste FastKey = KeyDown(42) ;Linke Umschalt-Taste</pre> <p> </p> <p>Benutzereingaben auf Spieler anwenden und daraus die Positionsänderung in diesem Frame berechnen. Das ist ein etwas komplexerer Vorgang, der am besten durch die Kommentare im Code erklärt ist.</p> <pre class="code"> ;Eingegebene "Kräfte" auf Spieler anwenden YVel = YVel + .1 ;Gravitation (Beschleunigung) If YVel > 19 Then YVel = 19 If RightKey ;Überprüft die Nach-Rechts-Cursortaste If FastKey ;Wenn Fast-Key (Linke Shift) gedrückt ist, If XVel < 7 Then XVel = XVel + .1 ; dann Geschwindigkeit um 7Pixel/Frame erhöhen Else If XVel < 4 Then XVel = XVel + .1 ; ansonsten Geschwindigkeit um 4Pixel/Frame erhöhen If XVel > 4 Then XVel = XVel - .1 ; außerdem Geschwindigkeit wieder verringern, wenn nötig EndIf Else If XVel > 0 Then XVel = XVel * .8 ;Wenn nicht nach Rechts bewegt wird, dann abbremen EndIf If LeftKey ;Überprüft die Nach-Links-Cursortaste If FastKey ;Wenn Fast-Key (Linke Shift) gedrückt ist, If XVel > -7 Then XVel = XVel - .1 ; dann Geschwindigkeit um 7Pixel/Frame verringern Else If XVel > -4 Then XVel = XVel - .1 ; ansonsten Geschwindigkeit um 4Pixel/Frame verringern If XVel < -4 Then XVel = XVel + .1 ; außerdem Geschwindigkeit wieder verringern, wenn nötig EndIf Else If XVel < 0 Then XVel = XVel * .8 ;Wenn nicht nach Links bewegt wird, dann abbremen EndIf If JumpKey And JumpKeyDown = False ;Sprungtaste überprüfen (Sie muss nach dem letzten Sprung losgelassen worden sein) If AbleToJump = True ;Wenn der Spieler auf einer Plattform steht, dann AbleToJump = False ; Darf der Spieler nicht erneut springen YVel = YVel - 19 ; Vertialgeschwindgkeit auf -19 setzen, was einer Bewegung nach oben entspricht JumpKeyDown = True ; festlegen, dass der Spieler gerade springt EndIf ElseIf (Not JumpKey) And (AbleToJump = True) ;Wenn Sprungtaste nicht gedrückt ist und Spieler auf Plattform steht, dann JumpKeyDown = False ; festlegen, dass der Spieler erneut springen darf EndIf If AbleToJump = False ;Wenn nicht auf Plattform, dann If YVel < 19 Then YVel = YVel + .9 ; zusätzliche Gravitation anwenden If Not JumpKey And YVel<19 Then YVel=YVel+1 ;Wenn der Benutzer die Sprungtaste früher loslässt, dann EndIf ; Geschwindigkeit weiter verringern, damit er nicht so hoch springt ;Spieler um die oben berechnete Werte bewegen ;Bewegen in Y-Richtung MoveSuccessful = False ;"MoveSuccessful" auf Falsch setzen TileX = Floor((ScreenX+PlayerX-18+4*(YVel<0))/40) ;Herausfinden, welches Tile links vom Spieler liegt (+/-4 für Bewegung in Y-Richtung) TileXR = Floor((ScreenX+PlayerX+18-4*(YVel<0))/40) ;Herausfinden, welches Tile rechts vom Spieler liegt Repeat ;Spieler so weit wie möglich in Y-Richtung bewegen If YVel < 0 ;Bewegung aufwärts TileY = Floor((ScreenY+PlayerY+YVel+5)/40)-2 ; set the tile above as tile to check against ElseIf YVel > 0 ;Bewegung abwärts If (ScreenY+PlayerY) Mod 40 < 0.5 And (ScreenY+PlayerY) Mod 40 > -0.5 ;Welches Tile in X-Richtung geprüft werden soll TileY = Floor((ScreenY+PlayerY+YVel)/40) ; Das Tile darunter zum Prüfen heranziehen Else TileY = Floor((ScreenY+PlayerY+YVel-.5)/40) ; Das Tile darunter zum Prüfen heranziehen EndIf Else ;Wenn keine Bewegung in Y-Richtung erfolgt, MoveSuccessful = True ; Schleife verlassen TileY = Floor((ScreenY+PlayerY+YVel)/40);Aktuelles Tile wird trotzdem zugewiesen EndIf If TileY=>LevelHeight Then GameOver=True ;Wenn der Spieler aus dem Level fällt, ist das Spiel verloren If TileY > -1 And TileY < LevelHeight ;Sichergehen, dass zu prüfendes Tile im Levelbereich liegt If Level(TileX,TileY)<4 And ((Level(TileXR,TileY)<4) Or (((ScreenX+PlayerX+20) Mod 40)=0));Check tile below < 4 PlayerY = PlayerY + YVel ;Wenn Tile begehbar ist (< 4 in diesem Beispiel) dann Bewegung durchführen If YVel > 0 Then AbleToJump = False ;Wenn der Spieler fällt, dann darf er nicht springen können MoveSuccessful = True ;Schleife verlassen, denn Spieler wurde erfolgreich bewegt EndIf EndIf If MoveSuccessful = False ;Wenn Bewegung nicht möglich ist, nochmal mit geringerer Geschwindigkeit versuchen If YVel > 0 ;Abwärts bewegen YVel = YVel - .5 ; Vertikale Geschwindigkeit verringern (an 0 annähern), If YVel < 0 Then YVel = 0 ; allerdings nicht unter 0 gehen! AbleToJump = True ;Der Spieler wird ein festes Tile erreichen, deshalb darf er springen PlayerY = Floor(PlayerY) ;Kommastellen streichen, sodass der Spieler exakt auf den Tiles aufliegt Else ;Aufwärts bewegen YVel = YVel + .5 ; Vertikale Geschwindigkeit erhöhen (an 0 annähern), If YVel > 0 Then YVel = 0 ; allerdings nicht über 0 gehen! EndIf EndIf Until MoveSuccessful = True ;Solange probieren, bis Bewegung möglich war ;Attempt to move the player in X MoveSuccessful = False ;MoveSuccessful zurücksetzen (=Falsch) TileY = ScreenY + PlayerY ;TileY den aktuellen Wert zuweisen Repeat ;Bewegung in X-Richtung überprüfen If XVel > 0 ;Bewegung nach rechts TileX = Floor((ScreenX+PlayerX+XVel-21)/40)+1; Tile rechts vom Spieler überprüfen ElseIf XVel < 0 ;Bewegung nach links TileX = Floor((ScreenX+PlayerX+XVel-20)/40) ; Tile links vom Spieler überprüfen Else ;Wenn keine Bewegung in X-Richtung erfolgt MoveSuccessful = True ; Schleife verlassen EndIf If TileX>-1 And TileX<LevelWidth And GameOver=False;Sichergehen, dass TileX und TileY innerhalb der Levelgrenzen liegen If Level(TileX,Floor((TileY+35)/40)-2)<4 And Level(TileX,Floor(TileY/40)-1)<4;Überprüft, ob beide Seitentiles des Spielers begehbar sind (<4) If ((Level(TileX, Floor(TileY/40)) < 4) Or ((TileY Mod 40 < .4) And (TileY Mod 40 > -.4)));Überprüft, ob das Tile darunter ebenfalls begehbar ist PlayerX = PlayerX + XVel ; außer, wenn der Spieler exakt mit der Tileposition übereinstimmt. Dann Spieler bewegen If PlayerX < 0 Then PlayerX = 0 ;Spieler nicht außerhalb des Bildschirms bewegen MoveSuccessful = True ;Schleife verlassen, denn Spieler wurde erfolgreich bewegt EndIf EndIf EndIf If MoveSuccessful = False ;Wenn Bewegung nicht möglich ist, nochmal mit geringerer Geschwindigkeit versuchen If XVel > 0 ;Rechts bewegen XVel = XVel - .5 ; Horizontale Geschwindigkeit verringern (an 0 annähern), If XVel < 0 Then XVel = 0 ; allerdings nicht unter 0 gehen! Else ;Links bewegen XVel = XVel + .5 ; Horizontale Geschwindigkeit erhöhen (an 0 annähern), If XVel > 0 Then XVel = 0 ; allerdings nicht über 0 gehen! EndIf EndIf Until MoveSuccessful ;Solange probieren, bis Bewegung möglich war</pre> <p> </p> <p>Position der Hintergrundtiles anpassen, damit der Spieler am Bildschirm bleibt:</p> <pre class="code"> ;Position der Hintergrundtiles anpassen If PlayerX > 400 ;Wenn Spieler an den rechten Rand kommt, ScreenX = ScreenX + (PlayerX - 400) ; dann Hintergrundbild um denselben Betrag scrollen, wie der Spieler bewegt wurde If ScreenX > MaxScreenX ;Wenn die Hintergrundbildposition jedoch größer als erlaubt ist, dann ScreenX = MaxScreenX ; einfach die X-Position auf den maximalen Wert stellen. Else ;Wenn der Hintergrund gescrollt wurde, PlayerX = 400 ; wird die X-Position des Spielers auf 400Pixel gesetzt EndIf EndIf If PlayerX < 200 ;Wenn Spieler an den linken Rand kommt, ScreenX = ScreenX - (200 - PlayerX) ; dann Hintergrundbild um denselben Betrag scrollen, wie der Spieler bewegt wurde If ScreenX < 0 ;Wenn die Hintergrundbildposition jedoch kleiner als erlaubt ist, dann ScreenX = 0 ; einfach die X-Position auf den minimalen Wert stellen. Else ;Wenn der Hintergrund gescrollt wurde, PlayerX = 200 ; wird die X-Position des Spielers auf 400Pixel gesetzt EndIf EndIf If PlayerY > 400 ;Wenn Spieler an den unteren Rand kommt, ScreenY = ScreenY + (PlayerY - 400) ; dann Hintergrundbild um denselben Betrag scrollen, wie der Spieler bewegt wurde If ScreenY > MaxScreenY ;Wenn die Hintergrundbildposition jedoch größer als erlaubt ist, dann ScreenY = MaxScreenY ; einfach die Y-Position auf den maximalen Wert stellen. Else ;Wenn der Hintergrund gescrollt wurde, PlayerY = 400 ; wird die Y-Position des Spielers auf 160Pixel gesetzt EndIf EndIf If PlayerY < 160 ;Wenn Spieler an den oberen Rand kommt, ScreenY = ScreenY - (160 - PlayerY) ; dann Hintergrundbild um denselben Betrag scrollen, wie der Spieler bewegt wurde If ScreenY < 0 ;Wenn die Hintergrundbildposition jedoch kleiner als erlaubt ist, dann ScreenY = 0 ; einfach die Y-Position auf den minimalen Wert stellen. Else ;Wenn der Hintergrund gescrollt wurde, PlayerY = 160 ; wird die Y-Position des Spielers auf 160Pixel gesetzt EndIf EndIf</pre> <p> </p> <p>Nun zeichnen wir den Level und Flippen den Backbuffer, damit dieser sichtbar wird:</p> <pre class="code"> ;Level zeichnen TileX = ScreenX/40 ;X-Starttile des Hintergrundbildes XOffset = ScreenX Mod 40 ;Verschiebung in X-Richtung bei jedem Tile TileY = ScreenY/40 ;Y-Starttile des Hintergrundbildes YOffset = ScreenY Mod 40 ;Verschiebung in Y-Richtung bei jedem Tile For yIter = TileY To TileY+12 ;Schleife von oben nach unten For xIter = TileX To TileX+16 ; und Schleife von links nach rechts If xIter > -1 And xIter < LevelWidth And yIter > -1 And yIter < LevelHeight Tile = Level(xIter, yIter) ;Tile aus dem Level-Array auslesen DrawImage tileImages, (xIter-TileX)*40-XOffset, (yIter-TileY)*40-YOffset, Tile EndIf Next Next ;Bildschirm flippen Flip ;Backbuffer auf den Frontbuffer flippen Cls ;Backbuffer mit eingestellter Farbe (clsColor) löschen</pre> <p> </p> <p>Überprüfen, ob Spieler auf einem Levelausgang steht. Wenn ja, dann Spieler entsprechend bewegen:</p> <pre class="code"> ;Überprüfen, ob Spieler auf einem Levelausgang steht TileX = PlayerX+ScreenX TileY = PlayerY+ScreenY For iter = 1 To NumExits If Int(TileX/40) = LevelExit(iter, 0) ;Vergleicht die X-Positionen von Spieler und Ausgang If Abs(20-(TileX Mod 40)) < 5 ;Großteil des Ausgangs muss vom Spieler betreten sein (+/-5 Pixel) If Int(TileY/40-1) = LevelExit(iter, 1) ;Vergleicht die Y-Positionen von Spieler und Ausgang CurLevel = LevelExit(iter,2);Wechselt zum neuen Level If CurLevel = 0 ;Spielziel erreicht? GameOver = 2 ; Wenn ja, Spiel beenden Else ; Ansonsten anderen Level laden LoadLevel(CurLevel, LevelExit(iter, 3), LevelExit(iter, 4));level, x, y EndIf Exit ;Wenn ein Ausgang gefunden wurde, braucht man die anderen nicht überprüfen EndIf EndIf EndIf Next</pre> <p> </p> <p>Zu guter Letzt erstellen wir noch eine Anzeige, die erscheint, wenn das Spiel beendet wurde!</p> <pre class="code"> ;Schaut, ob Spiel vorbei ist If GameOver ;Der folgende Graphikcode ist nur ein Beispiel Color 150, 20, 20 Rect 270, 220, 100, 60 ;Rotes Rechteck in der Mitte des Bildshrims Color 250, 250, 250 If GameOver = 2 Text 320, 250, "Gewonnen!", True, True ;Siegermeldung anzeigen Else Text 320, 250, "Leider verloren", True, True ;Verloren-meldung anzeigen EndIf Flip Repeat ;So lange wiederholen, bis der Benutzer Until KeyHit(1) ; die ESC-Taste drückt End ; Programm beenden EndIf</pre> <p> </p> <p><a name="finalresult"></a></p> <p><strong>Hier ist der gesamte Code, den du nur kopieren und anschließend ausprobieren kannst.<br> </strong></p> <table border="0" cellpadding="0" cellspacing="5" width="800"> <tr> <td><table border="5"> <tr> <td nowrap checked="false">Im Spiel verwendete Tasten:</td> </tr> <tr> <td><table border="0"> <tr> <td width="100"><p align="center"><img src="2D platformer example code_files/keyboard.jpg" alt="keys used in this example" WIDTH="100" HEIGHT="76"></td> <td width="10"></td> <td width="125"><pre class="keys">Cursor Links Links bewegen Cursor Rechts Rechts bewegen Leertaste Springen Umschalt links Schneller bewegen ESC Programm beenden</pre> </td> </tr> </table> </td> </tr> </table> </td> <td><table border="5"> <tr> <td nowrap checked="false">Für dieses Beispiel benötigte Dateien:</td> </tr> <tr> <td><table border="0" width="100%"> <tr> <td width="100"><p align="center"><img src="2D platformer example code_files/files000.png" alt="Für dieses Beispiel benötigte Dateien" width="100" height="76"></td> <td width="10"></td> <td width="125"><pre class="keys">Rechtskllick -> "Ziel speichern unter..."</pre> <pre class="keys"><a href="http://home.cmit.net/rwolbeck/programmingtutorial/code/bgtiles.png">bgtiles.png</a> <a href="http://home.cmit.net/rwolbeck/programmingtutorial/code/jumpman.png">jumpman.png</a></pre> </td> </tr> </table> </td> </tr> </table> </td> </tr> </table> <table border="2"> <tr> <td><textarea name="code" style="overflow:auto;background:rgb(0,0,0);color:rgb(0,255,0);" wrap="OFF" cols="95" rows="12">;Plattformbasiertes 2D Jump'n'Run Tutorial ;by WolRon ;Deutsche Übersetzung von Christoph Mach ("Eingeproggt"), Member der deutschen BlitzBasic Community Graphics 640, 480 ;2D Graphik mit einer Auflösung von 640x480 SetBuffer BackBuffer() ;Damit alles auf den Backbuffer gezeichnet wird (Doublebuffering) Global tileImages ;Enthält Handle zum Hintergrund-Tileset Global imgPlayer ;Handle für das Spielerbild ;Alle Graphiken, Sounds,... laden ;In diesem Beispiel werden nur Graphiken verwendet! Global maxTile = 6 ;Maximale Anzahl an Tiles tileImages = LoadAnimImage("bgtiles.png", 40, 40, 0, 8) imgPlayer = LoadImage("jumpman.png") Dim Level(0, 0) ;Zur Speicherung der Laveldaten (Wird später festgelegt) Dim LevelExit(0, 0) ;Levelausgänge für Levelwechsel und Spiel gewinnen (Wird ebenfalls später festgelegt) Global LevelWidth ;Aktuelle Breite des Levels in Tiles Global LevelHeight ;Aktuelle Höhe des Levels in Tiles Global NumExits ;Anzahl an Ausgänge aus dem Level Global ScreenX ;X-Position, an dem der Hintergrund gezeichnet wird Global ScreenY ;Y-Position, an dem der Hintergrund gezeichnet wird Global MaxScreenX ;Maximale X-Position, des Hintergrundes Global MaxScreenY ;Maximale Y-Position, des Hintergrundes Global PlayerX# ;Aktuelle X-Position des Spielers Global PlayerY# ;Aktuelle Y-Position des Spielers Global CurLevel = 1 ;Level, der gerade gespielt wird Global GameOver = False ;Spielstatus (0=läuft, 1=verloren, 2=gewonnen) Global XVel# = 0 ;Horizontale Geschwindigkeit des Spielers Global YVel# = 0 ;Vertikale Geschwindigkeit des Spielers LoadLevel(CurLevel, 1, 8) ;Ersten Level laden. Dabei Spielerposition setzen Gametimer = CreateTimer(60) ;Set and start the game timer (60 fps) Gametimer = CreateTimer(60) ;Spieltimer erstellen, der das SPiel mit 60FPS laufen lässt ;Start game loop Repeat ;Start der Hauptschleife WaitTimer Gametimer ;Auf Timer warten ;Benutzereingaben erfassen ;UpKey = KeyDown(200) ;Cursor rauf ;Es ist empfehlenswwert, die Tasten nur einmal pro Schleifendurchlauf abzufragen. ;DownKey = KeyDown(208) ;Cursor runter ; Das verhindert Fehler, die auftreten können, wenn der Zustand LeftKey = KeyDown(203) ;Cursor links ; während eines Schleifendurchlaufs wechselt. RightKey = KeyDown(205) ;Cursor rechts JumpKey = KeyDown(57) ;Leertaste FastKey = KeyDown(42) ;Linke Umschalt-Taste ;Eingegebene "Kräfte" auf Spieler anwenden YVel = YVel + .1 ;Gravitation (Beschleunigung) If YVel > 19 Then YVel = 19 If RightKey ;Überprüft die Nach-Rechts-Cursortaste If FastKey ;Wenn Fast-Key (Linke Shift) gedrückt ist, If XVel < 7 Then XVel = XVel + .1 ; dann Geschwindigkeit um 7Pixel/Frame erhöhen Else If XVel < 4 Then XVel = XVel + .1 ; ansonsten Geschwindigkeit um 4Pixel/Frame erhöhen If XVel > 4 Then XVel = XVel - .1 ; außerdem Geschwindigkeit wieder verringern, wenn nötig EndIf Else If XVel > 0 Then XVel = XVel * .8 ;Wenn nicht nach Rechts bewegt wird, dann abbremen EndIf If LeftKey ;Überprüft die Nach-Links-Cursortaste If FastKey ;Wenn Fast-Key (Linke Shift) gedrückt ist, If XVel > -7 Then XVel = XVel - .1 ; dann Geschwindigkeit um 7Pixel/Frame verringern Else If XVel > -4 Then XVel = XVel - .1 ; ansonsten Geschwindigkeit um 4Pixel/Frame verringern If XVel < -4 Then XVel = XVel + .1 ; außerdem Geschwindigkeit wieder verringern, wenn nötig EndIf Else If XVel < 0 Then XVel = XVel * .8 ;Wenn nicht nach Links bewegt wird, dann abbremen EndIf If JumpKey And JumpKeyDown = False ;Überprüft die Sprungtaste (Sie muss allerdings nach dem letzten Sprung losgelassen worden sein!) If AbleToJump = True ;Wenn der Spieler auf einer Plattform steht, dann AbleToJump = False ; Darf der Spieler nicht erneut springen YVel = YVel - 19 ; Vertialgeschwindgkeit auf -19 setzen, was einer Bewegung nach oben entspricht JumpKeyDown = True ; festlegen, dass der Spieler gerade springt EndIf ElseIf (Not JumpKey) And (AbleToJump = True) ;Wenn Sprungtaste nicht gedrückt ist und Spieler auf Plattform steht, dann JumpKeyDown = False ; festlegen, dass der Spieler erneut springen darf EndIf If AbleToJump = False ;Wenn nicht auf Plattform, dann If YVel < 19 Then YVel = YVel + .9 ; zusätzliche Gravitation anwenden If Not JumpKey And YVel<19 Then YVel=YVel+1 ;Wenn der Benutzer die Sprungtaste früher loslässt, dann EndIf ; Geschwindigkeit weiter verringern, damit er nicht so hoch springt ;Spieler um die oben berechnete Werte bewegen ;Bewegen in Y-Richtung MoveSuccessful = False ;"MoveSuccessful" auf Falsch setzen TileX = Floor((ScreenX+PlayerX-18+4*(YVel<0))/40) ;Herausfinden, welches Tile links vom Spieler liegt (+/-4 für Bewegung in Y-Richtung) TileXR = Floor((ScreenX+PlayerX+18-4*(YVel<0))/40) ;Herausfinden, welches Tile rechts vom Spieler liegt Repeat ;Spieler so weit wie möglich in Y-Richtung bewegen If YVel < 0 ;Bewegung aufwärts TileY = Floor((ScreenY+PlayerY+YVel+5)/40)-2 ; set the tile above as tile to check against ElseIf YVel > 0 ;Bewegung abwärts If (ScreenY+PlayerY) Mod 40 < 0.5 And (ScreenY+PlayerY) Mod 40 > -0.5 ;Welches Tile in X-Richtung geprüft werden soll TileY = Floor((ScreenY+PlayerY+YVel)/40) ; Das Tile darunter zum Prüfen heranziehen Else TileY = Floor((ScreenY+PlayerY+YVel-.5)/40) ; Das Tile darunter zum Prüfen heranziehen EndIf Else ;Wenn keine Bewegung in Y-Richtung erfolgt, MoveSuccessful = True ; Schleife verlassen TileY = Floor((ScreenY+PlayerY+YVel)/40);Aktuelles Tile wird trotzdem zugewiesen EndIf If TileY=>LevelHeight Then GameOver=True ;Wenn der Spieler aus dem Level fällt, ist das Spiel verloren If TileY > -1 And TileY < LevelHeight ;Sichergehen, dass zu prüfendes Tile im Levelbereich liegt If Level(TileX,TileY)<4 And ((Level(TileXR,TileY)<4) Or (((ScreenX+PlayerX+20) Mod 40)=0));Check tile below < 4 PlayerY = PlayerY + YVel ;Wenn Tile begehbar ist (< 4 in diesem Beispiel) dann Bewegung durchführen If YVel > 0 Then AbleToJump = False ;Wenn der Spieler fällt, dann darf er nicht springen können MoveSuccessful = True ;Schleife verlassen, denn Spieler wurde erfolgreich bewegt EndIf EndIf If MoveSuccessful = False ;Wenn Bewegung nicht möglich ist, nochmal mit geringerer Geschwindigkeit versuchen If YVel > 0 ;Abwärts bewegen YVel = YVel - .5 ; Vertikale Geschwindigkeit verringern (an 0 annähern), If YVel < 0 Then YVel = 0 ; allerdings nicht unter 0 gehen! AbleToJump = True ;Der Spieler wird ein festes Tile erreichen, deshalb darf er springen PlayerY = Floor(PlayerY) ;Kommastellen streichen, sodass der Spieler exakt auf den Tiles aufliegt Else ;Aufwärts bewegen YVel = YVel + .5 ; Vertikale Geschwindigkeit erhöhen (an 0 annähern), If YVel > 0 Then YVel = 0 ; allerdings nicht über 0 gehen! EndIf EndIf Until MoveSuccessful = True ;Solange probieren, bis Bewegung möglich war ;Attempt to move the player in X MoveSuccessful = False ;MoveSuccessful zurücksetzen (=Falsch) TileY = ScreenY + PlayerY ;TileY den aktuellen Wert zuweisen Repeat ;Bewegung in X-Richtung überprüfen If XVel > 0 ;Bewegung nach rechts TileX = Floor((ScreenX+PlayerX+XVel-21)/40)+1; Tile rechts vom Spieler überprüfen ElseIf XVel < 0 ;Bewegung nach links TileX = Floor((ScreenX+PlayerX+XVel-20)/40) ; Tile links vom Spieler überprüfen Else ;Wenn keine Bewegung in X-Richtung erfolgt MoveSuccessful = True ; Schleife verlassen EndIf If TileX>-1 And TileX<LevelWidth And GameOver=False;Sichergehen, dass TileX und TileY innerhalb der Levelgrenzen liegen If Level(TileX,Floor((TileY+35)/40)-2)<4 And Level(TileX,Floor(TileY/40)-1)<4;Überprüft, ob beide Seitentiles des Spielers begehbar sind (<4) If ((Level(TileX, Floor(TileY/40)) < 4) Or ((TileY Mod 40 < .4) And (TileY Mod 40 > -.4)));Überprüft, ob das Tile darunter ebenfalls begehbar ist PlayerX = PlayerX + XVel ; außer, wenn der Spieler exakt mit der Tileposition übereinstimmt. Dann Spieler bewegen If PlayerX < 0 Then PlayerX = 0 ;Spieler nicht außerhalb des Bildschirms bewegen MoveSuccessful = True ;Schleife verlassen, denn Spieler wurde erfolgreich bewegt EndIf EndIf EndIf If MoveSuccessful = False ;Wenn Bewegung nicht möglich ist, nochmal mit geringerer Geschwindigkeit versuchen If XVel > 0 ;Rechts bewegen XVel = XVel - .5 ; Horizontale Geschwindigkeit verringern (an 0 annähern), If XVel < 0 Then XVel = 0 ; allerdings nicht unter 0 gehen! Else ;Links bewegen XVel = XVel + .5 ; Horizontale Geschwindigkeit erhöhen (an 0 annähern), If XVel > 0 Then XVel = 0 ; allerdings nicht über 0 gehen! EndIf EndIf Until MoveSuccessful ;Solange probieren, bis Bewegung möglich war ;Position der Hintergrundtiles anpassen If PlayerX > 400 ;Wenn Spieler an den rechten Rand kommt, ScreenX = ScreenX + (PlayerX - 400) ; dann Hintergrundbild um denselben Betrag scrollen, wie der Spieler bewegt wurde If ScreenX > MaxScreenX ;Wenn die Hintergrundbildposition jedoch größer als erlaubt ist, dann ScreenX = MaxScreenX ; einfach die X-Position auf den maximalen Wert stellen. Else ;Wenn der Hintergrund gescrollt wurde, PlayerX = 400 ; wird die X-Position des Spielers auf 400Pixel gesetzt EndIf EndIf If PlayerX < 200 ;Wenn Spieler an den linken Rand kommt, ScreenX = ScreenX - (200 - PlayerX) ; dann Hintergrundbild um denselben Betrag scrollen, wie der Spieler bewegt wurde If ScreenX < 0 ;Wenn die Hintergrundbildposition jedoch kleiner als erlaubt ist, dann ScreenX = 0 ; einfach die X-Position auf den minimalen Wert stellen. Else ;Wenn der Hintergrund gescrollt wurde, PlayerX = 200 ; wird die X-Position des Spielers auf 400Pixel gesetzt EndIf EndIf If PlayerY > 400 ;Wenn Spieler an den unteren Rand kommt, ScreenY = ScreenY + (PlayerY - 400) ; dann Hintergrundbild um denselben Betrag scrollen, wie der Spieler bewegt wurde If ScreenY > MaxScreenY ;Wenn die Hintergrundbildposition jedoch größer als erlaubt ist, dann ScreenY = MaxScreenY ; einfach die Y-Position auf den maximalen Wert stellen. Else ;Wenn der Hintergrund gescrollt wurde, PlayerY = 400 ; wird die Y-Position des Spielers auf 160Pixel gesetzt EndIf EndIf If PlayerY < 160 ;Wenn Spieler an den oberen Rand kommt, ScreenY = ScreenY - (160 - PlayerY) ; dann Hintergrundbild um denselben Betrag scrollen, wie der Spieler bewegt wurde If ScreenY < 0 ;Wenn die Hintergrundbildposition jedoch kleiner als erlaubt ist, dann ScreenY = 0 ; einfach die Y-Position auf den minimalen Wert stellen. Else ;Wenn der Hintergrund gescrollt wurde, PlayerY = 160 ; wird die Y-Position des Spielers auf 160Pixel gesetzt EndIf EndIf ;Level zeichnen TileX = ScreenX/40 ;X-Starttile des Hintergrundbildes XOffset = ScreenX Mod 40 ;Verschiebung in X-Richtung bei jedem Tile TileY = ScreenY/40 ;Y-Starttile des Hintergrundbildes YOffset = ScreenY Mod 40 ;Verschiebung in Y-Richtung bei jedem Tile For yIter = TileY To TileY+12 ;Schleife von oben nach unten For xIter = TileX To TileX+16 ; und Schleife von links nach rechts If xIter > -1 And xIter < LevelWidth And yIter > -1 And yIter < LevelHeight Tile = Level(xIter, yIter) ;Tile aus dem Level-Array auslesen DrawImage tileImages, (xIter-TileX)*40-XOffset, (yIter-TileY)*40-YOffset, Tile EndIf Next Next ;Spieler zeichnen ;Normalerweise gäbe es hier eine Animation, DrawImage imgPlayer, PlayerX-20, PlayerY-80 ; aber wir halten es einfach ;Debugwerte anzeigen For iter = 0 To 1 Color 50+150*iter, 50+150*iter, 50 Text 1-iter, 1-iter, "PlayerX:" + PlayerX ;Werte der einzelnen Variablen werden nur für den Entwickler Text 1-iter, 10-iter, "PlayerY:" + PlayerY ; angezeigt, damit er die Werte überblicken & überprüfen kann Text 1-iter, 20-iter, "ScreenX:" + ScreenX ;Man könnte hier im echten Spiel eine Punkte- Text 1-iter, 30-iter, "ScreenY:" + ScreenY ; oder Zeitanzeige erstellen Text 1-iter, 40-iter, "TileX:" + Floor((PlayerX + ScreenX)/40) Text 1-iter, 50-iter, "TileY:" + (Ceil((PlayerY + ScreenY)/40)-1) Text 1-iter, 60-iter, "offsetX:" + (((PlayerX + ScreenX) Mod 40)-20) Text 1-iter, 70-iter, "offsetY:" + ((PlayerY + ScreenY) Mod 40) Next ;Bildschirm flippen Flip ;Backbuffer auf den Frontbuffer flippen Cls ;Backbuffer mit eingestellter Farbe (clsColor) löschen ;Überprüfen, ob Spieler auf einem Levelausgang steht TileX = PlayerX+ScreenX TileY = PlayerY+ScreenY For iter = 1 To NumExits If Int(TileX/40) = LevelExit(iter, 0) ;Vergleicht die X-Positionen von Spieler und Ausgang If Abs(20-(TileX Mod 40)) < 5 ;Großteil des Ausgangs muss vom Spieler betreten sein (+/-5 Pixel) If Int(TileY/40-1) = LevelExit(iter, 1) ;Vergleicht die Y-Positionen von Spieler und Ausgang CurLevel = LevelExit(iter,2);Wechselt zum neuen Level If CurLevel = 0 ;Spielziel erreicht? GameOver = 2 ; Wenn ja, Spiel beenden Else ; Ansonsten anderen Level laden LoadLevel(CurLevel, LevelExit(iter, 3), LevelExit(iter, 4));level, x, y EndIf Exit ;Wenn ein Ausgang gefunden wurde, braucht man die anderen nicht überprüfen EndIf EndIf EndIf Next If GameOver ;Der folgende Graphikcode ist nur ein Beispiel Color 150, 20, 20 Rect 270, 220, 100, 60 ;Rotes Rechteck in der Mitte des Bildshrims Color 250, 250, 250 If GameOver = 2 Text 320, 250, "Gewonnen!", True, True ;Siegermeldung anzeigen Else Text 320, 250, "Leider verloren", True, True ;Verloren-meldung anzeigen EndIf Flip Repeat ;So lange wiederholen, bis der Benutzer Until KeyHit(1) ; die ESC-Taste drückt End ; Programm beenden EndIf Until KeyHit(1) ;Hauptschleife wiederholen bis die ESC-Taste gedrückt wird End ;Beendet das Programm ;;;;;;;;;;;;;;;;;;;;;;;;;;; FUNCTIONS ;;;;;;;;;;;;;;;;;;;;;;;;;; Function LoadLevel(lvl, startX, startY) Select lvl Case 1 Restore Data_Level1 ;Zum Datenfeld, welches Level 1 enthält, springen Case 2 Restore Data_Level2 ;Zum Datenfeld, welches Level 2 enthält, springen Case 3 Restore Data_Level3 ;Zum Datenfeld, welches Level 3 enthält, springen Default RuntimeError("Error: Level " + lvl + " existiert nicht!") End Select ;Levelbreite und -Höhe auslesen Read LevelWidth ;Breite des Levels in Tiles Read LevelHeight ;Höhe des Levels in Tiles If LevelWidth > 999 Or LevelWidth < 1 Then RuntimeError("Error: Level " + lvl + ": Daten fehlerhaft!") If LevelHeight > 999 Or LevelHeight < 1 Then RuntimeError("Error: Level " + lvl + ": Daten fehlerhaft!") Dim Level(LevelWidth-1, LevelHeight-1) ;Leveldaten-Array dimensionieren ;Anfangsposition des Spielers überprüfen If startX >= LevelWidth Or startX < 0 Then RuntimeError("Error: Level " + lvl + ": Daten fehlerhaft!") If startY >= LevelHeight Or startY < 1 Then RuntimeError("Error: Level " + lvl + ": Daten fehlerhaft!") ;Startposition (des Spielers und des Hintergrundes) in pixel berechnen If startX < 5 ;Wenn der Spieler nahe dem linken Rand ist, dann ScreenX = 0 ; Hintergrund ganz nach links setzen PlayerX = startX * 40 + 20 ; Spieler auf Startposition ElseIf startX > LevelWidth - 12 ;Wenn der Spieler nahe dem rechten Rand ist, dann ScreenX = LevelWidth * 40 - 640 ; Hintergrund ganz nach rechts setzen. (Bildschirmbreite muss abgezogen werden!) und PlayerX = startX * 40 - ScreenX + 20 ; Spieler auf X-Startposition minus Hintergrundposition Else ;Wenn der Spieler irgendwo zwischen dem linken und rechten Rand ist, dann ScreenX = startX * 40 - 200 ; Hintergrund auf 5 Tiles links vom Spieler setzen und PlayerX = 220 ; X-Position des Spielers auf 220 (Mitte) EndIf If startY < 4 ;Wenn der Spieler nahe dem oberen Rand ist, dann ScreenY = 0 ; Hintergrund fängt ganz oben an PlayerY = (startY + 1) * 40 ; Spieler auf Startposition ElseIf startY > LevelHeight - 9 ;Wenn der Spieler nahe dem unterem Rand ist, dann ScreenY = LevelHeight * 40 - 480 ; Hintergrund ganz nach unten setzen. (Bildschirmhöhe muss abgezogen werden!) und PlayerY = (startY + 1) * 40 - ScreenY ; Spieler auf Y-Startposition minus Hintergrundposition Else ;Wenn der Spieler irgendwo zwischen dem oberen und unteren Rand ist, dann ScreenY = (startY + 1) * 40 - 160 ; Hintergrund auf 4 Tiles oberhalb vom Spieler setzen und PlayerY = 160 ; Y-Position des Spielers auf 160 (Mitte) EndIf MaxScreenX = 40 * LevelWidth - 640 - 1 ;Errechnet die maximale X-Pposition des Hintergrundes MaxScreenY = 40 * LevelHeight - 480 ;Errechnet die maximale Y-Pposition des Hintergrundes ;Hintergrundfarbe des levels laden (Für ClsColor) Read clscol If clscol = 1 ClsColor 100, 110, 200 ;Himmelsfarben Else ClsColor 0, 0, 0 ;oder schwarz EndIf ;Daten der Levelausgänge laden Read NumExits ;Anzahl der Levelausgänge If NumExits > 10 Or NumExits < 1 Then RuntimeError("Error: Level " + lvl + ": Daten fehlerhaft!") Dim LevelExit(NumExits, 4) ;Levelausgänge-Array dimensionieren For iter = 1 To NumExits ;Alle Ausgänge durchlaufen um Read LevelExit(iter, 0) ;X-Position, Read LevelExit(iter, 1) ;Y-Position, Read LevelExit(iter, 2) ;damit verknüpften Level, Read LevelExit(iter, 3) ;X-Position auf neuem Level, Read LevelExit(iter, 4) ;Y-Position auf neuem Level einzulesen Next ;Eigentliche Leveldaten laden For yIter = 0 To LevelHeight-1 ;Schleife, die von oben nach unten durchläuft For xIter = 0 To LevelWidth-1 ;Schleife, die von links nach rechts durchläuft Read Level(xIter, yIter) ;Aktuelles Tile einlesen (genaue Beschreibung weiter unten) If Level(xIter, yIter) > maxTile Or Level(xIter, yIter) < 0 Then RuntimeError("Error: Level " + lvl + ": Daten fehlerhaft!") Next Next ;Spielvariablen zurücksetzen XVel = 0 ;Spielergeschwindigkeit auf Null setzen, weil er sich YVel = 0 ; sonst weiterbewegen würde End Function ;;;;;;;;;;;;;;;;;;;;;;;;;;;; DATA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Tile Beschreibung ;0 Nichts ;Begehbares Tile ;1 Himmel ;Begehbares Tile ;2 Wolke ;Begehbares Tile ;3 Hintergrundobjekt ;Begehbares Tile ;4 Fester Block ;Nicht begehbares Tile ;5 Weicher Block ;Nicht begehbares Tile ;6 Gras ;Nicht begehbares Tile .Data_Level1 ;Beschreibung Level 1 Data 80, 12 ;Levelbreite, -höhe Data 1 ;cls color = Himmelsfarben Data 2 ;Anzahl an Levelausgängen Data 76, 10, 2, 56, 8 ;X-, Y-Position des Ausgangs, vernüpfter Level, neue X- und Y-Startposition Data 36, 9, 3, 1, 2 ;X-, Y-Position des Ausgangs, vernüpfter Level, neue X- und Y-Startposition Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,3,1,1,1,3,1,3,3,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1 Data 1,3,1,1,1,3,1,3,1,3,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1 Data 1,3,1,3,1,3,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,3,3,3,3,3,1,3,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,3,1,3,1,1,3,1,3,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,1,5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,5,1,1,5,1,1,1,4,1,1,1,1,1,1,1,1,5,2,5,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,1 Data 1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,5,2,5,1,1,1,1,5,4,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,3,3,1,3,3,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,5,5,5,1,1,1,4,5,4,5,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,1,1,1,1,1,1,1,1,1,3,3,1,3,3,1 Data 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,1,1,1,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 .Data_Level2 ;Beschreibung Level 2 Data 60, 18 ;Levelbreite, -höhe Data 1 ;cls color = Himmelsfarben Data 3 ;Anzahl an Levelausgängen Data 55, 8, 1, 75, 10 ;X-, Y-Position des Ausgangs, vernüpfter Level, neue X- und Y-Startposition Data 27, 7, 0, 0, 0 ;X-, Y-Position des Ausgangs, Spiel gewonnen, neue X- und Y-Startposition irrelevant Data 22, 14, 3, 17, 12 ;X-, Y-Position des Ausgangs, vernüpfter Level, neue X- und Y-Startposition Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1 Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,1 Data 4,4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,3,1,1,1,1,1,3,1 Data 4,5,5,5,5,5,5,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,3,1,1,1,1,1,3,1 Data 4,5,5,5,5,5,5,5,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,3,1,1,4,1,1,1,1,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,3,3,3,3,3,3,3,1 Data 4,5,5,5,5,5,5,5,5,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,3,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,3,3,3,1,3,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,4,1,1,1,1,1,5,1,5,5,5,1,5,1,1,1,4,4,4,4,4,1,1,1,1,1,1,1,1,4,3,2,4,1,4,2,3,4,1,1,1,5,3,3,3,1,3,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,5,4,1,1,1,1,3,1,1,3,1,1,3,1,1,1,3,1,1,1,3,1,1,1,1,1,1,1,1,1,1,2,4,1,4,2,1,1,1,1,1,5,3,3,4,4,4,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,5,5,4,1,1,1,3,1,1,3,1,1,3,1,1,1,3,1,1,1,3,1,1,1,1,1,1,1,1,1,1,4,4,1,4,4,1,1,1,1,1,5,3,3,3,3,3,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,4,1,4,6,6,6,6,6,6,6,3,3,3,3,3,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,4,4,1,1,1,3,4,3,4,3,1,1,1,1,1,1,1,1,4,3,1,4,1,4,1,3,4,1,1,1,1,3,3,3,3,3,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,4,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,4,4,4,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,5,1,1,5,1,4,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,1 Data 4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,1,6,1,6,1,6,1,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 Data 4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,6,6,6 Data 4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,6,6 .Data_Level3 ;Beschreibung Level 3 Data 19, 32 ;Levelbreite, -höhe Data 0 ;cls color = Schwarz Data 1 ;Anzahl an Levelausgängen Data 17, 2, 1, 37, 7 ;X-, Y-Position des Ausgangs, vernüpfter Level, neue X- und Y-Startposition Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4 Data 4,0,0,4,4,4,4,4,0,0,0,0,0,4,5,5,5,5,4 Data 4,0,0,4,5,5,5,5,4,0,0,0,4,5,5,5,5,5,4 Data 4,0,0,4,5,5,5,5,5,4,0,0,0,0,0,0,5,5,4 Data 4,0,0,4,4,5,5,5,5,5,4,0,0,0,0,0,5,5,4 Data 4,0,0,0,0,4,4,4,4,4,4,4,4,4,0,0,4,4,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0 Data 4,3,4,4,4,0,0,4,0,0,0,0,0,0,5,5,5,0,0 Data 4,0,0,4,5,0,0,5,4,0,0,0,4,5,5,5,0,0,4 Data 4,0,0,4,5,5,0,0,5,4,0,4,5,5,5,5,0,0,4 Data 4,0,0,4,5,5,0,0,0,5,4,5,5,0,0,0,0,0,4 Data 4,0,0,4,5,5,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,4,4,5,5,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,4,4,4,4,4,4,4,4,4,0,0,4,4,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4 Data 4,3,4,4,4,4,4,4,4,4,0,0,0,0,4,4,4,4,4 Data 4,0,4,4,4,0,0,0,0,0,0,0,0,0,5,5,5,5,4 Data 4,0,0,4,5,0,0,0,0,0,0,0,4,5,5,5,5,5,4 Data 4,0,0,4,5,5,0,0,0,0,0,0,5,5,5,5,5,5,4 Data 4,0,0,4,0,0,0,0,0,5,4,5,5,0,0,0,0,0,4 Data 4,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4 Data 4,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,4,4,4 Data 4,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,4 Data 4,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,4 Data 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4 ;Ende der Datei </textarea> </td> </tr> </table> <p> </p> <table border="0" cellspacing="0" width="100%"> <tr> <td width="30%"></td> <td width="70%" align="right"><small>Wenn du linkerhand keinen index siehst, <a target="_top" href="http://home.cmit.net/rwolbeck/programmingtutorial/index.htm">klicke hier um zur Indexseite zu gelangen</a></small></td> </tr> <tr> <td colspan="2" height="20"></td> </tr> <tr> <td colspan="2" align="center"><script type="text/javascript"><!-- google_ad_client = "pub-7074115215171132"; //728x90, Footer Ad for Prog Tut google_ad_slot = "3425667659"; google_ad_width = 728; google_ad_height = 90; //--></script> <script type="text/javascript" src="2D platformer example code_files/show_ads.js"> </script> </td> </tr> </table> <!-- Start of StatCounter Code --> <script type="text/javascript"> var sc_project=3228375; var sc_invisible=1; var sc_partition=35; var sc_security="8889ea98"; </script> <script type="text/javascript" src="2D platformer example code_files/counter_.js"></script> <noscript> <div class="statcounter"><a class="statcounter" href="http://www.statcounter.com/"> <dd><img class="statcounter" src="http://c36.statcounter.com/3228375/0/8889ea98/0/" alt="blog counter" /></a></dd> </div></noscript> <!-- End of StatCounter Code --> </body> </html> Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group