Translating web pages job

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

 

WolRon

Betreff: Translating web pages job

BeitragDi, März 11, 2008 7:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hello. I know very little German (although I'm over 50% German heritage Smile ) so please excuse my English.

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 Smile ), so wenden Sie sich bitte entschuldigen Sie meine Englisch.

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

BeitragDi, März 11, 2008 10:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 11, 2008 10:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 11, 2008 13:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 11, 2008 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ä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 &amp; 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>&Uuml;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#)&nbsp;, welche zum Beispiel
zur Spieler Bewegung genutzt werden k&ouml;nnen. Diese Funktion hilft dir, dein Spiel langsam oder
schnell laufen zu lassen (besonders in Jump 'n Run Spielen).</p>



<p>&nbsp;</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&auml;chstes kopiere den folgenden Code in deine Hauptschleife: <small>(hier
werden die Kalkulationen ausgef&uuml;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# &lt;= 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>&nbsp;</p>

<h1><u>Die Pilder Pro Sekunde (FPS) anzeigen</u></h1>

<p>F&uuml;gen Sie einfach den folgenden Code irgendwo in ihre Hauptschleife:</p>


<pre class="code">If Debug
 Text 0, 0, &quot;FPS: &quot; + 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.&nbsp; Welche du brauchst,
h&auml;ngt von dem Spiel ab, das du schreiben m&ouml;chtest.&nbsp; SpeedFactor# enth&auml;lt
die Zeit, die das letzte Bild ben&ouml;tigt hat, um gemalt zu werden.&nbsp;
TimeElapsed# enth&auml;lt die Anzahl der Bilder, die in der letzten Sekunde gemalt wurden.</p>

<p>Wenn dein Spiel Objekte/Gegenst&auml;nde benutzt, die eine bestimmte Distanz in jedem Frame
bewegt werden, solltest du die Variable SpeedFactor# benutzen.</p>

<p>Wenn dein Spiel Objekte/Gegenst&auml;nde benutzt, die jede Sekunde eine bestimmte Distanz
bewegt werden, solltest du die variable TimeElapsed# benutzen.</p>

<p>&nbsp;</p>

<p><u>Das Benutzen der SpeedFactor# Variable:</u></p>

<p>Sagen wir, du schreibst ein seitenbewegendes Plattformspiel.&nbsp; Solange der Spieler
die rechte Pfeiltaste dr&uuml;ckt, bewegt er sich um 4 Pixel in jedem Bild.&nbsp;
Normalerweise w&uuml;rdest du so programmieren:</p>


<pre class="code">If KeyDown(205)
 PlayerX = PlayerX + 4
EndIf</pre>

<p>Um ged&auml;mpftes Bewegen auf allen Computern zu benutzen, w&uuml;rdest du den Code
so ver&auml;ndern:</p>


<pre class="code">If KeyDown(205)
 PlayerX = PlayerX + 4.0 * FL\SpeedFactor#
EndIf</pre>


<p>Dies w&uuml;rde bewirken, dass der Spieler sich 4 Pixel &uuml;ber +/- eine Differenz
des Speedfaktors bewegt.<br>
Wenn, aus irgendeinem Grund, das letzte Bild l&auml;nger als normal ben&ouml;tigte,
um aufgebaut zu werden, wird SpeedFactor# gr&ouml;&szlig;er als 1,0 sein (sagen wir 1,25). &nbsp;
4x1,25=5 also wird sich der Spieler 5 Pixel bewegen, aber da dieses Bild l&auml;nger ben&ouml;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&uuml;ber des Timers zu sehen.</a></p>

<p>&nbsp;</p>


<p><u>Benutzen der TimeElapsed# Variable:</u></p>

<p>Sagen wir, du schreibst einen Autorennen Simulator.&nbsp; Seitdem du m&ouml;chtest,
das das Auto sich wie ein echtes Auto verh&auml;lt, m&ouml;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&uuml;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&auml;ndern, basierend auf der Aktuellen Zeit,
die seit dem letzten Bild vergangen ist.</p>

<p>&nbsp;</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&uuml;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

BeitragDi, März 11, 2008 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 11, 2008 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 11, 2008 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 11, 2008 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 11, 2008 23:18
Antworten mit Zitat
Benutzer-Profile anzeigen
@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
 

WolRon

Betreff: Danke

BeitragMi, März 12, 2008 4:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Thank you guys so far. I appreciate you all trying to help! Smile

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. Wink
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! Smile

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

BeitragMi, März 12, 2008 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 13, 2008 8:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 13, 2008 11:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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.&nbsp; Einige beinhaltete Features:</p>

<p>&nbsp;</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>&nbsp;</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>&nbsp;</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(&quot;bgtiles.png&quot;, 40, 40, 0, 8)
imgPlayer = LoadImage(&quot;jumpman.png&quot;)</pre>

<p>&nbsp;</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>&nbsp;</p>

<p>Leveldaten laden.&nbsp; 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
&nbsp; 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(&quot;Error: Level &quot; + lvl + &quot; existiert nicht!&quot;)
   End Select
   ;Levelbreite und -Höhe auslesen
   Read LevelWidth                  ;Breite des Levels in Tiles
   Read LevelHeight               ;Höhe des Levels in Tiles
   If LevelWidth &gt; 999 Or LevelWidth &lt; 1 Then RuntimeError(&quot;Error: Level &quot; + lvl + &quot;: Daten fehlerhaft!&quot;)
   If LevelHeight &gt; 999 Or LevelHeight &lt; 1 Then RuntimeError(&quot;Error: Level &quot; + lvl + &quot;: Daten fehlerhaft!&quot;)
   Dim Level(LevelWidth-1, LevelHeight-1)         ;Leveldaten-Array dimensionieren
   ;Anfangsposition des Spielers überprüfen
   If startX &gt;= LevelWidth Or startX &lt; 0 Then RuntimeError(&quot;Error: Level &quot; + lvl + &quot;: Daten fehlerhaft!&quot;)
   If startY &gt;= LevelHeight Or startY &lt; 1 Then RuntimeError(&quot;Error: Level &quot; + lvl + &quot;: Daten fehlerhaft!&quot;)
   ;Startposition (des Spielers und des Hintergrundes) in pixel berechnen
   If startX &lt; 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 &gt; 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 &lt; 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 &gt; 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 &gt; 10 Or NumExits &lt; 1 Then RuntimeError(&quot;Error: Level &quot; + lvl + &quot;: Daten fehlerhaft!&quot;)
   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) &gt; maxTile Or Level(xIter, yIter) &lt; 0 Then RuntimeError(&quot;Error: Level &quot; + lvl + &quot;: Daten fehlerhaft!&quot;)
      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>&nbsp;</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>&nbsp;</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>&nbsp;</p>

<p>Benutzereingaben auf Spieler anwenden und daraus die Positionsänderung in diesem Frame berechnen.&nbsp; 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 &gt; 19 Then YVel = 19
   If RightKey                  ;Überprüft die Nach-Rechts-Cursortaste
      If FastKey               ;Wenn Fast-Key (Linke Shift) gedrückt ist,
         If XVel &lt; 7 Then XVel = XVel + .1   ; dann Geschwindigkeit um 7Pixel/Frame erhöhen
      Else
         If XVel &lt; 4 Then XVel = XVel + .1   ; ansonsten Geschwindigkeit um 4Pixel/Frame erhöhen
         If XVel &gt; 4 Then XVel = XVel - .1   ; außerdem Geschwindigkeit wieder verringern, wenn nötig
      EndIf
   Else
      If XVel &gt; 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 &gt; -7 Then XVel = XVel - .1   ; dann Geschwindigkeit um 7Pixel/Frame verringern
      Else
         If XVel &gt; -4 Then XVel = XVel - .1   ; ansonsten Geschwindigkeit um 4Pixel/Frame verringern
         If XVel &lt; -4 Then XVel = XVel + .1   ; außerdem Geschwindigkeit wieder verringern, wenn nötig
      EndIf
   Else
      If XVel &lt; 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 &lt; 19 Then YVel = YVel + .9      ; zusätzliche Gravitation anwenden
      If Not JumpKey And YVel&lt;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&lt;0))/40)   ;Herausfinden, welches Tile links vom Spieler liegt (+/-4 für Bewegung in Y-Richtung)
   TileXR = Floor((ScreenX+PlayerX+18-4*(YVel&lt;0))/40)   ;Herausfinden, welches Tile rechts vom Spieler liegt
   Repeat                     ;Spieler so weit wie möglich in Y-Richtung bewegen
      If YVel &lt; 0               ;Bewegung aufwärts
         TileY = Floor((ScreenY+PlayerY+YVel+5)/40)-2   ; set the tile above as tile to check against
      ElseIf YVel &gt; 0               ;Bewegung abwärts
         If (ScreenY+PlayerY) Mod 40 &lt; 0.5 And (ScreenY+PlayerY) Mod 40 &gt; -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=&gt;LevelHeight Then GameOver=True   ;Wenn der Spieler aus dem Level fällt, ist das Spiel verloren
      If TileY &gt; -1 And TileY &lt; LevelHeight      ;Sichergehen, dass zu prüfendes Tile im Levelbereich liegt
         If Level(TileX,TileY)&lt;4 And ((Level(TileXR,TileY)&lt;4) Or (((ScreenX+PlayerX+20) Mod 40)=0));Check tile below &lt; 4
            PlayerY = PlayerY + YVel   ;Wenn Tile begehbar ist (&lt; 4 in diesem Beispiel) dann Bewegung durchführen
            If YVel &gt; 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 &gt; 0            ;Abwärts bewegen
            YVel = YVel - .5      ; Vertikale Geschwindigkeit verringern (an 0 annähern),
            If YVel &lt; 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 &gt; 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 &gt; 0               ;Bewegung nach rechts
         TileX = Floor((ScreenX+PlayerX+XVel-21)/40)+1; Tile rechts vom Spieler überprüfen
      ElseIf XVel &lt; 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&gt;-1 And TileX&lt;LevelWidth And GameOver=False;Sichergehen, dass TileX und TileY innerhalb der Levelgrenzen liegen
         If Level(TileX,Floor((TileY+35)/40)-2)&lt;4 And Level(TileX,Floor(TileY/40)-1)&lt;4;Überprüft, ob beide Seitentiles des Spielers begehbar sind (&lt;4)
            If ((Level(TileX, Floor(TileY/40)) &lt; 4) Or ((TileY Mod 40 &lt; .4) And (TileY Mod 40 &gt; -.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 &lt; 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 &gt; 0            ;Rechts bewegen
            XVel = XVel - .5      ; Horizontale Geschwindigkeit verringern (an 0 annähern),
            If XVel &lt; 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 &gt; 0 Then XVel = 0   ; allerdings nicht über 0 gehen!
         EndIf
      EndIf
   Until MoveSuccessful               ;Solange probieren, bis Bewegung möglich war</pre>

<p>&nbsp;</p>

<p>Position der Hintergrundtiles anpassen, damit der Spieler am Bildschirm bleibt:</p>

<pre class="code">   ;Position der Hintergrundtiles anpassen
   If PlayerX &gt; 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 &gt; 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 &lt; 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 &lt; 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 &gt; 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 &gt; 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 &lt; 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 &lt; 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>&nbsp;</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 &gt; -1 And xIter &lt; LevelWidth And yIter &gt; -1 And yIter &lt; 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>&nbsp;</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)) &lt; 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>&nbsp;</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, &quot;Gewonnen!&quot;, True, True   ;Siegermeldung anzeigen
      Else
         Text 320, 250, &quot;Leider verloren&quot;, 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>&nbsp;</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 ->
&quot;Ziel speichern unter...&quot;</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 &gt; 19 Then YVel = 19
   If RightKey                  ;Überprüft die Nach-Rechts-Cursortaste
      If FastKey               ;Wenn Fast-Key (Linke Shift) gedrückt ist,
         If XVel &lt; 7 Then XVel = XVel + .1   ; dann Geschwindigkeit um 7Pixel/Frame erhöhen
      Else
         If XVel &lt; 4 Then XVel = XVel + .1   ; ansonsten Geschwindigkeit um 4Pixel/Frame erhöhen
         If XVel &gt; 4 Then XVel = XVel - .1   ; außerdem Geschwindigkeit wieder verringern, wenn nötig
      EndIf
   Else
      If XVel &gt; 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 &gt; -7 Then XVel = XVel - .1   ; dann Geschwindigkeit um 7Pixel/Frame verringern
      Else
         If XVel &gt; -4 Then XVel = XVel - .1   ; ansonsten Geschwindigkeit um 4Pixel/Frame verringern
         If XVel &lt; -4 Then XVel = XVel + .1   ; außerdem Geschwindigkeit wieder verringern, wenn nötig
      EndIf
   Else
      If XVel &lt; 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 &lt; 19 Then YVel = YVel + .9      ; zusätzliche Gravitation anwenden
      If Not JumpKey And YVel&lt;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&lt;0))/40)   ;Herausfinden, welches Tile links vom Spieler liegt (+/-4 für Bewegung in Y-Richtung)
   TileXR = Floor((ScreenX+PlayerX+18-4*(YVel&lt;0))/40)   ;Herausfinden, welches Tile rechts vom Spieler liegt
   Repeat                     ;Spieler so weit wie möglich in Y-Richtung bewegen
      If YVel &lt; 0               ;Bewegung aufwärts
         TileY = Floor((ScreenY+PlayerY+YVel+5)/40)-2   ; set the tile above as tile to check against
      ElseIf YVel &gt; 0               ;Bewegung abwärts
         If (ScreenY+PlayerY) Mod 40 &lt; 0.5 And (ScreenY+PlayerY) Mod 40 &gt; -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=&gt;LevelHeight Then GameOver=True   ;Wenn der Spieler aus dem Level fällt, ist das Spiel verloren
      If TileY &gt; -1 And TileY &lt; LevelHeight      ;Sichergehen, dass zu prüfendes Tile im Levelbereich liegt
         If Level(TileX,TileY)&lt;4 And ((Level(TileXR,TileY)&lt;4) Or (((ScreenX+PlayerX+20) Mod 40)=0));Check tile below &lt; 4
            PlayerY = PlayerY + YVel   ;Wenn Tile begehbar ist (&lt; 4 in diesem Beispiel) dann Bewegung durchführen
            If YVel &gt; 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 &gt; 0            ;Abwärts bewegen
            YVel = YVel - .5      ; Vertikale Geschwindigkeit verringern (an 0 annähern),
            If YVel &lt; 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 &gt; 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 &gt; 0               ;Bewegung nach rechts
         TileX = Floor((ScreenX+PlayerX+XVel-21)/40)+1; Tile rechts vom Spieler überprüfen
      ElseIf XVel &lt; 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&gt;-1 And TileX&lt;LevelWidth And GameOver=False;Sichergehen, dass TileX und TileY innerhalb der Levelgrenzen liegen
         If Level(TileX,Floor((TileY+35)/40)-2)&lt;4 And Level(TileX,Floor(TileY/40)-1)&lt;4;Überprüft, ob beide Seitentiles des Spielers begehbar sind (&lt;4)
            If ((Level(TileX, Floor(TileY/40)) &lt; 4) Or ((TileY Mod 40 &lt; .4) And (TileY Mod 40 &gt; -.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 &lt; 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 &gt; 0            ;Rechts bewegen
            XVel = XVel - .5      ; Horizontale Geschwindigkeit verringern (an 0 annähern),
            If XVel &lt; 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 &gt; 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 &gt; 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 &gt; 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 &lt; 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 &lt; 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 &gt; 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 &gt; 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 &lt; 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 &lt; 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 &gt; -1 And xIter &lt; LevelWidth And yIter &gt; -1 And yIter &lt; 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)) &lt; 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, &quot;Gewonnen!&quot;, True, True   ;Siegermeldung anzeigen
      Else
         Text 320, 250, &quot;Leider verloren&quot;, 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(&quot;Error: Level &quot; + lvl + &quot; existiert nicht!&quot;)
   End Select
   ;Levelbreite und -Höhe auslesen
   Read LevelWidth                  ;Breite des Levels in Tiles
   Read LevelHeight               ;Höhe des Levels in Tiles
   If LevelWidth &gt; 999 Or LevelWidth &lt; 1 Then RuntimeError(&quot;Error: Level &quot; + lvl + &quot;: Daten fehlerhaft!&quot;)
   If LevelHeight &gt; 999 Or LevelHeight &lt; 1 Then RuntimeError(&quot;Error: Level &quot; + lvl + &quot;: Daten fehlerhaft!&quot;)
   Dim Level(LevelWidth-1, LevelHeight-1)         ;Leveldaten-Array dimensionieren
   ;Anfangsposition des Spielers überprüfen
   If startX &gt;= LevelWidth Or startX &lt; 0 Then RuntimeError(&quot;Error: Level &quot; + lvl + &quot;: Daten fehlerhaft!&quot;)
   If startY &gt;= LevelHeight Or startY &lt; 1 Then RuntimeError(&quot;Error: Level &quot; + lvl + &quot;: Daten fehlerhaft!&quot;)
   ;Startposition (des Spielers und des Hintergrundes) in pixel berechnen
   If startX &lt; 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 &gt; 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 &lt; 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 &gt; 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 &gt; 10 Or NumExits &lt; 1 Then RuntimeError(&quot;Error: Level &quot; + lvl + &quot;: Daten fehlerhaft!&quot;)
   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) &gt; maxTile Or Level(xIter, yIter) &lt; 0 Then RuntimeError(&quot;Error: Level &quot; + lvl + &quot;: Daten fehlerhaft!&quot;)
      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>&nbsp;</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

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group