Handbücher und Technische Dokumentation

 
Handbuch zum...
Spezifikationen:

 Nach oben

Spielhandbuch

Nach dem starten des Spiels werden Sie vom Hauptmneü begrüßt:
JS8 Haupemenü
Wählen sie, was Sie spielen möchten:
Der Rote Pfeil beended das Spiel.
Wenn Sie sich für Spielen entschieden haben, legt das Spiel sofort los. In den anderen Fällen erscheint ein Levelauswählmenü:
Js8 Levelmenü
Klicken Sie auf das Level das Spie spielen wollen. Es erscheint unten eine Info-Box. Wenn Sie auf die Info-Box klicken, wird das gewählte Level gestartet. Mit dem Grünen Pfeil gelangen Sie zurück zum Hauptmenü.

Wenn Sie mitten im Spiel die Menü-Taste drücke, wird das spiel pausiert und das Menü erscheint. Sie können durch nochmaldrücken der Menü-Taste das Spiel fortsetzen.

 Nach oben

Leveneditor-Handbuch

Bevor Sie loslegen sollten Sie sich Die Beschreibung der Engine zu gemüte führen, da der Leveleditor Ihnen nicht assestieren wird.
Der Editor:
Der Editor hat 3 Teile: Das Level, die Tiles und die Levelinformationen. Alle drei Bereiche sind über die Tabs oben zu erreichen.
Der Umgang mit dem Editor wid über ein kurzen Tutorial beschrieben: Starten Sie den Leveleditor. Sie erhalten folgendes Bild:
LE-1
Gehen Sie auf das "Tiles"-Tab:
LE-2
Wählen die danklere Gras-tile aus:
LE-3
Gehen Sie auf das Tab "Level" und mittelklicken Sie den scharzen bereich. Der unterste Layer (-1) wird nun damit gefüllt:
LE-4
Gehen Sie zum "Tiles"-Tab und wählen Sie das Wasser Tile aus.
Gehen Sie wieder zum "Level"-Tab und bauen Sie einen Fluss damit durch das Level. Etwa so:
LE-5
Wenn Sie möchten, könnnen sie den Rand des Flusses verschönern:
LE-6
Jetzt brauchen wir einen Weg über den Fluss her. Dazu bauen wir ein paar Rampen auf beiden Seiten des Flussen (Wichtig: voehr "Bearb. Layer" auf 0 stellen, da sonst in Layer -1 geschrieben wird:
LE-7
Dann brauchen wir noch einen weg zischen den Rampe über den Fluss: Dazu bauen wir die rot-Braunen Brücken Tile (Im Spiel ist dieses rein braun, aber ein Hard-Block) zwischen den Rampen.
LE-8
Jetzt brauchen wir noch platz für Snake. Dau bauen wir das Bunte kreuz (unsichtbarer Brücken-Block) uberall dahin wo snake hin lauen können soll. Vergessen Sie sich auch Layer 1 zu behaneln. Tipp: Mit Rechsklick (de)aktiviern Sie den Pinsel.
LE-9
Das wars auch schon. Jetzt gehen wir auf "Levelinformationen" und geben einen Namen ein. Dann züruck auf "Level" und "Speichern". Jetzt, wo wir alles fertig haben, wird durch klicken auf "Speichern" Das Level gespeichert. Es wird in '~/.jippysnake8/ownLevels/' bzw: 'Eigene Dateien\.jippysnake8\ownLevels\' unter dem Namen: levelname.js8l gelegt, wobei levelname der Name des Levels ist. Sollte bereist ein Level mit dem Namen existieren wird nachgefragt, ob überschrieben werden soll.

 Nach oben

Wie die Engine arbeitet

Zuerst:
Es gibt 6 verschiedene Block-Typen:
Hard-Block: Snake kann nicht durch laufen
Brücken-Block: Snake kann durch laufen
Rampe-Rechts: Eine Rampe, die auf der linken Seite unten und auf der rechten hoch.
Rampe-Runter: Eine Rampe, die auf der oberen Seite unten und auf der unteren hoch.
Rampe-Links: Eine Rampe, die auf der rechten Seite unten und auf der linken hoch.
Rampe-Hoch: Eine Rampe, die auf der unteren Seite unten und auf der oberen hoch.

Die Engine von Jippy Snake 8 hat 6 Ebenen (Im folgenden Layer genannt):
Layer -1: Hintergrund. Snake kann diese nichr betreten
Layer 0: Der unterste Layer in der Snake sich befinden kann
Layer 1: Der Layer direkt über Layer 0.
Layer 2: Der Layer direkt über Layer 1.
Layer 3: Der Layer direkt über Layer 2.
Layer 4: Der Layer direkt über Layer 3.

In jedem Layer kann jeder Block-Typ gesetz werden. Abr ein Rampen-Typ in Layer -1 und 4 macht keinen Sinn.
Jeder Platz, den Snake betreten können soll, muss einen Brücken-Block haben. Über jeder Rampe, die benutz werden können soll, muss ein Brücken-Block sein.

Die folgenden Scetche nutzen folgende Achsen:
X Beliebige Bewegungsrichtung
Y Die Layers

Ein paar Beispiele:
"/" Meint ein Rampen-Block
"#" Meint ein Hard-Block
" " Meint ein Brücken-Block

Richtig:Falsch:
  ^  #######
  |  ###
Y |     /###
  |  #######
  O-------->
      X
        ^  #######
  |  ####
Y |     /###
  |  #######
  O-------->
      X

In den nächsten Scetchen werden die Achsen nicht eingezeichnet

Texturnummern:
Dieser Abschnitt ist nur für die jenigen interessant, die Level manuell editieren wollen, oder eigene Texturen hinzufügen wollen.
Jeder Textur hat eine Nummer. Die Nummer legt fest, welcher Block-Typ die Textur zugeordnet ist:
Sei N die Nummer der Textur:
Wenn N%6 == 0: Die Texturnummer ist ein Hard-Nlock
Wenn N%6 == 1: Die Texturnummer ist ein Brücken-Block
Wenn N%6 == 2: Die Texturnummer ist ein Rampe-Rechts
Wenn N%6 == 3: Die Texturnummer ist ein Rampe-Runter
Wenn N%6 == 4: Die Texturnummer ist ein Rampe-Links
Wenn N%6 == 5: Die Texturnummer ist ein Rampe-Rauf

Wie Snake zwischen den Layern wechselt:
Nach oben:
Wenn Snake in einem Rampen-Typ reinlauft gibt es zwei möglichkeiten:
1. Die Bewegungsrichtung und die richtung der Rampe passen nicht -> Tod.
2. Die Bewegungen passen. Snake wird um eine Ebene angehoben

Scetchshow:
">" Kopf von snake
"[" Ende von snake
"o" Körpe von snake
#######
###
o> /###
#######
      #######
###
oo>/###
#######
      #######
###>
[oo/###
#######
      #######
###o>
 [o/###
#######
      #######
###oo>
  [/###
#######
      #######
###[oo>
/###
#######
      #######
### [oo
   /###
#######

Nach unten:
Die EINZIGE Möglichkeit eine Ebene Tiefer zu kommen ist über die Rampen. Snake kann nciht herunter fallen.
Die folgende Scetchshow zeigt, wie Snake sich nach unten bewegt.

"<" Kopf von snake
"]" Ende von snake
#######
### <oo
   /###
#######
      #######
###<oo]
   /###
#######
      #######
###oo]
  </###
#######
      #######
###o]
 <o/###
#######
      #######
###]
<oo/###
#######
      #######
###
oo]/###
#######
      #######
###
o] /###
#######

Beachte diese Scetchshow, wenn zwei Brücken.Typen übereinander gestapelt sind:
#######
o>     
##   ##
#######
      #######
oo>    
##   ##
#######
      #######
[oo>   
##   ##
#######
      #######
 [oo>  
##   ##
#######
      #######
  [oo> 
##   ##
#######
      #######
   [oo>
##   ##
#######
      #######
    [oo
##   ##
#######
      #######
     [o
##   ##
#######
Das gilt auch für die unsichbare Brücke!!!

Bewegen von einem Block-Typ zum anderen:
Da sich snake grunsätzlich in einem Brüclen-kopf befindet, ist hier die Rede, von dem Block, der direkt unter Snake sitzt.
Snake kann sich zwischen Hard/Brücken-Block <-> beliegen Rampen-Typ bewgen, wenn die richtungen passen; Sonst stirbt Snake
Snake kann sich bewegen:
Rampe-Rechts <-> Rampe-Links
Rampe-Runter <-> Rampe-Rauf
Rampe-X <-> Rampe-X Bei bestimmten Bedingunen(X steht für "Rechts", "Runter", "Links" oder "Rauf")
Andere Kobinationen sind nicht möglich. Bei versuch stirbt Snake.

Siehe diese Scetchshows für die Rampe-X <-> Rampe-X Bedingunen

#######
###    
## /###
o>/####
#######
      #######
###    
##>/###
oo/####
#######
      #######
###>   
##o/###
[o/####
#######
Funktioniert. Auch in der anderen richtung.

#######
##     
o>//###
#######
      #######
##>    
oo//###
#######
      #######
##o>   
[o//###
#######
Snake stirbt. Auch in der anderen Richtung.

Snake kann auch von Rampe-H<->Rampe-H (H steht für "Rechts" oder "Links") bewegen, wenn die
Bewegungsrichtung "Rauf" oder "Runter ist".
Snake kann auch von Rampe-V<->Rampe-V (H steht für "Runter" oder "Rauf") bewegen, wenn die
Bewegungsrichtung "Rechts" oder "Links".

Die Sache mit den neuen Äpfeln:
Zu beginn eines Levels werden 'Äpfel zu beginn' neue Äpfel platziert. (Runde 0)
Sobald man 'Startwert für Äpfel bis neue' gesammelt hat, beginnt die nächste Runde. Dabei wird
zuerst festgestellt
wieviele Äpfel dazu kommen (Mit Hilfe von 'Funktion für neue Äpfel'),
und
Wieviele man jetzt sammeln muss, bis weitere kommen (Mit Hilfe von 'Funktion für Äpfel bis neue').

Dabei werden folgende Vatriablen gesetzt:
prev: Der letzte Wert der entsprechenden funktion (Bei der ersten Berechnung der Funktion ist es 'Äpfel zu beginn' bzw: 'Startwert für Äpfel bis neue')
apples: Die Anzahl der gesammelten Äpfel
rnd: Die aktuelle Runde
Der startwert ist 0
Bevor die Funktionen berechnet wird, wird rnd um 1 erhöht.

ACHTUNG: Bei den Funktionen wird Punkt vor Strich NICHT beachtet!!!

Folgende Operationen können einsetzt werden:
+ (Addition)
- (Substaktion)
* (Multiplikation)
/ (Division)
< (Wenn a kleiner ist als b ergibt a<b 1; sonst 0)
= (Wenn a gleich b ist ergibt a=b 1; sonst 0)
Sollte der Wert einer Funktion Negativ sein, wird als ergebnis 0 angegeben.

Beispiele:
Äpfel zu beginn: 1
Startwert für Äpfel bis neue: 1
Funktion für neue Äpfel: prev
Funktion für Äpfel bis neue: prev
Das ergibt ein klassisches Snake

Äpfel zu beginn: 1
Startwert für Äpfel bis neue: 1
Funktion für neue Äpfel: rnd+1
Funktion für Äpfel bis neue: rnd+1
Jede Runde gibt es einen Apfel mehr zu sammeln

Äpfel zu beginn: 1
Startwert für Äpfel bis neue: 1
Funktion für neue Äpfel: 2
Funktion für Äpfel bis neue: prev
Für jeden Apfel der gesammelt wird, kommen gleich zwei dazu.

Äpfel zu beginn: 64
Startwert für Äpfel bis neue: 2
Funktion für neue Äpfel: 1
Funktion für Äpfel bis neue: 2
Für alle zwei Äpfel, die gesammelt werden kommt 1 dazu. Hier kann man nur endlich viele Äpfel sammeln

Äpfel zu beginn: 10
Startwert für Äpfel bis neue: 10
Funktion für neue Äpfel: ((1<prev)*(prev-1))+((1=prev)*10)
Funktion für Äpfel bis neue: ((1<prev)*(prev-1))+((1=prev)*10)
Hier gibt es erst 10, dann 9, dann 8, ..., dann 1, dann wieder 10, dann 9, ...
Also ein 10-1 Zyklus

Äpfel zu beginn: 15
Startwert für Äpfel bis neue: 15
Funktion für neue Äpfel: ((apples<120)*(prev-1))+(119<prev)
Funktion für Äpfel bis neue: ((apples<120)*(prev-1))+(119<prev)
Hier gibt es erst 15, dann 14, dann 13, ..., dann 1, dann 1, dann 1

Mathematisches:
Sei a_n die Anzahl der Äpfel, die zu Beginn einer Jeden Runde erscheinen
a_0 = 'Äpfel zu beginn'
Sei b_n die Anzahl der Äpfel, die in Jedee Runde gesammelt werden müssen
b_0 = 'Startwert für Äpfel bis neue'

Dann kann man def:
c_n : Die Anzahl der Äpfel die am Ende einer Jeden Runde noch auf dem Spielfeld liegen
Klar ist: c_0 = a_0-b_0
Und c_{n+1} = c_n+a_{n+1}-b_{n+1}

Darauf ergibt sich:
c_n = Sum_{i=0}^{n}(a_i)-Sum_{i=0}^{n}(b_i)

c_n solle konvergent sein und für alle c_n MUSS gelten: c_n >= 0,
da sonst Runde n+1 nie erreicht wird.

Hinweis: in der Paxis, kann es passiern, dass c_n nicht der def entspricht.
Das liegt daran, dass das Spielfeld nur endlich viel platz hat. Aber in der Theorie sollten die Bedingungen schon gelten.

Beispiel:
Äpfel zu beginn: 2
Startwert für Äpfel bis neue: 1
Funktion für neue Äpfel: prev+1
Funktion für Äpfel bis neue: prev+1
Dieses Level wird immer mehr Äpfel enthalten.

Beweis:
a_0 = 2, b_0 = 1, c_0 = 1
a_{n+1} = a_n+1
b_{n+1} = b_n+1
=>
... Spiel ... Leveleditor a_n = n+2
b_n = n+1
=>
c_{n+1} = c_n+a_{n+1}-b_{n+1}
= c_n+((n+1)+2)-((n+1)+1)
= c_n+(n+3)-(n+2) = c_n+n+3-n-2 = c_n+1
=>
c_n = n+1
qed.

In einigen Fällen ist es schwer die a_n bzw b_n zu definieren.
In solchen Fällen kann man auch mit tabellen arbeiten:
Beispiel von oben:

RundeÄpfel die dazkommenÄpfel zu Beginn der RundeZu sammelde ÄpfelÄpfel auf dem Ende am ende der Runde
0221(2-1) = 1
13422
24633
35844
461055
571266
681477

Kompilizierteres Beispiel:
Äpfel zu beginn: 5
Startwert für Äpfel bis neue: 3
Funktion für neue Äpfel: ((1<prev)*(prev-1))+((1=prev)*5)
Funktion für Äpfel bis neue: ((1<prev)*(prev-1))+((1=prev)*5)

RundeÄpfel die dazkommenÄpfel zu Beginn der RundeZu sammelde ÄpfelÄpfel auf dem Ende am ende der Runde
05532
14624
23716
32853
41440
55532
64624
73716
82853
91440