Kann das jemand für mich machen?

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Kann das jemand für mich machen?

Beitrag von Vermilion »

Hallo leute,

ich bin gerade am Programmieren eines kleinen Spiels, ich habe es auch schon fast fertig, aber das letzte was fehlt sind die Gegner!
Und ich habe nicht die geringste Ahnung wie ich das machen soll!

Also, meine bitte ist, dass das jemand von euch für mich macht, es soll folgenderweise aussehen:

eine beliebige Anzahl "Gegner" (maximal 10 oder so) kommen als Sprite(32*32) von außerhalb des Bildes auf den Bildschirm. Diese bewegen sich einfach auf einer zufällig generierten Linie, die festgelegt wird, bevor sie ins Bild treten. Diese "Gegner" verschwinden sobald sie in berührung mit einem anderen Sprite kommen. Dafür soll aber ein neuer "Gegner" von wo anders den verschwundenen ersetzen.
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

1. >> Also, meine bitte ist, dass das jemand von euch für mich macht :lol:

2. die informationen reichen For i=hinten To vorne nicht aus

winscreen?fullscreen?von links?von rechts?von oben?alle auf einmal?alle nacheinander?immer fortwährend?auflösung?
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> Kann das jemand für mich machen?
Bestimmt, aber wird er es tun :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

schau dir doch einfach mal
\Examples\Sources - Advanced\Waponez II
im PB verzeichnis an
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Hm ... als was du da beschrieben hast ließt sich ziemlich einfach. Ich
hätte jetzt eher damit gerechnet, das du eine gigantische KI haben willst
:lol:

Ne Spaß, aber da das hier nicht das Anfängerforum ist gibs nur Tipps.
*gg* Sollte für dich aber locker ausreichen :wink:

Also da die Anzahl der Gegner fest vorgegeben ist nimmst du erst mal ein
Array und Dimensionierst es auf die Anzahl deiner Gegner. Dann
ermittelst du mit Random() die zufälligen Startkoordinaten. Mit einer If-
Abfrage kannst du nun locker schauen, ob dier Spieler mit einem Gegner
kolidiert und bei bedarf führst du das aus, was du möchtest.

Aber das weist du ja vemrutlich, dein Problem denk ich ist die Linie. Aber
diese Linie, ist sie eine Gerade? Oder sind dort abknickungen? Eventuell
sogar Abgerundete richtungswecksel? Sollen die Gegner auch Halb-Kreise
usw. laufen können? Dann wirds natürlich was komplizierter. Was braucht
man dafür, eine Linkedliste mit einer Struktur die jede Wegpunkt
(richtungsänderung) speichert. Der Gegner läuft nun von Punkt zu Punkt
(Listenelement zu Listenelement) und das wars schon.

Kannst du damit was anfangen? :D Wenn nicht, vielleicht solltest du es
dann lieber bei Geraden belassen. Hier brauchst du nur die Koordinaten
des Anfangs und die Koordinaten des endes Speichern und dann lässt du
den Gegner immer hin und her laufen.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

...

Beitrag von Vermilion »

Naja das mit dem Anfänger und Ressourcen Forum... :oops: da es ja hier um Ressourcen etc. geht, habe ich hier rein gepostet, jedenfalls war es schwer für mich zu entscheiden, ob ich das ins Anfänger Forum schreibe oder nicht... wo es steht seht ihr ja :oops:

@TS-Soft:
>> Kann das jemand für mich machen?
Bestimmt, aber wird er es tun
Ich schätze, das sollte eher das heißen:
>> Kann das jemand für mich machen?
Bestimmt, aber wird er es nicht tun
@ #NULL: Naja, Waponez muss ich mir noch mal in Ruhe angucken.
Fullscreen, von allen Seiten, alle auf einmal fortwährend(solange eine bestimme Zeit nicht überschritten wird) bei 640*480-1280*1024

@ PMV: Vor Arrays und Listen habe ich mich immer gedrückt, na super...
ALso, diese Linie ist nur 'gedacht', nicht angezeigt, ganz gerade, bei jedem kommen des Sprites von außerhalb des Bildes neu festgelegt.
Mein Traum war es dann doch schon, dass sich die Gegner durch Zufall über den Screen schlängeln.
Ich werde mir jetzt dann erstmal Lists und Arrays angucken...
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

>> Vor Arrays und Listen habe ich mich immer gedrückt
...und vor einfachen variablen! die sind am schlimmsten!!!!!

sag mal bitte noch'n bisschen mehr:
-von allen seiten heißt also alle vier seiten, richtig?
-und soll die bewegung dann vom jeweiligen randpunkt zur mitte verlaufen, oder senkrecht zum rand?
-sag auch mal was zum spielkonzept, damit man sich was vorstellen kann. ist das eine art scroll-shooter? guckt man von oben?
-sollen die gegner fliegende oder gehende dinger sein?

ich hätte ja nichts dagegen dir sowas zu proggen. ich frag mich nur was DU davon hast. wenn du weder mit arrays noch mit LL's vertraut bist wird der code dir vielleicht nicht viel sagen, und ihn einfach nur einzubauen... wozu dann spiele selberproggen?

ausserdem wäre es günstig, du würdest die 'code-umgebung' gleich ein bisschen beschreiben: z.b. ob du variablen/konstanten für die screenAuflösung hast die man ghleich verwenden könnte, wenn ja welche. wie du das spiel zeitlich kontrollierst (timer für alle objekte einzeln? ein globaler timer? kein timer?)...
my pb stuff..
Bild..jedenfalls war das mal so.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Lieber Namenloser,

alleine bei dem Titel des Thread habe ich mich schon schepp gelacht.

mein erster Gedanke war: ist da einer, ders immer noch nicht kapiert hat?

also mal grundsätzlich:
mit "mach mal einer für mich" kommste nich weit, außer du bietest echt Asche an!


> Ich werde mir jetzt dann erstmal Lists und Arrays angucken...

prima, das ist der erste wichtige schritt. und beachte ebenfalls:
> \Examples\Sources - Advanced\Waponez II

bzw. das verzeichnis kann anders heißen, aber das Waponez II - Beispiel sollte aktuell dabei sein.
auch wenn es für eine völlig veraltete PB-version geschrieben ist,
die benutzung von listen für gegner und schüsse ist dort super ersichtlich.


zusätzliche tips:

du kannst jedem gegner nen counter geben.
immer wenn der counter abgelaufen ist, wechselt er die richtung.
er sollte nicht unbedigt jedes mal direkt zum player hin die richtung wechseln.
je mehr gegner aufm screen sind, desto wichtiger ist es,
dass sie auch mal vom player weg laufen.
nichts ist frustrierender, als gegner, die zwar blöde sind,
aber dich mit schierer masse besiegen.

eine andere möglichkeit sind vorgegebene bewegungsmuster.
sowas gibts bei den meisten weltraum-ballergames:
die gegner fliegen bestimmte muster/schleifen/etc.
das kann man auch mit nem counter angehen,
nur dass eben nicht zufällig die richtung gewechselt wird,
sondern anhand eines vorgegebenen wegmusters.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Ja, das mit dem Mach mal ist halt so! Ich habe keine geringste Ahnung, somit suche ich hilfe, ja ok, ich hätts anders ausdrücken können...

Ich geb einfach den Code, und wer das funktionierende Executable haben will, der klicke hier:

http://www.thenameless.de/embryo.exe

Ich möchte darauf hinweisen, dass eigentlich noch nicht vorgesehen war das ding in irgendeiner weise zu publizieren... z.B. die Grafiken wollte ich später erst verbessern sowie später erst Effekte etc. einbauen

Code: Alles auswählen

Global Gamestate = 0
Global ScreenWidth = 640
Global ScreenHeight = 480
Global Highscore = 0
Global Score = 0
Global PlayerX = ScreenWidth/2-32
Global PlayerY = ScreenHeight/2-32
Global PlayerLook = 5
Global PlayerLookLeft = 5
Global PlayerLookRight = 6
Global EnemyX = Random(ScreenWidth-32)
Global EnemyY = Random(ScreenHeight-32)
Global BlubX = 50
Global BlubY = ScreenHeight
Global BlaseYa = ScreenHeight
Global BlaseYb = ScreenHeight+Random(ScreenHeight)
Global BlaseYc = ScreenHeight+Random(ScreenHeight)
Global BlaseXa = Random(ScreenWidth-18)
Global BlaseXb = Random(ScreenWidth-18)
Global BlaseXc = Random(ScreenWidth-18)

InitSound()
InitKeyboard()
InitSprite()
UsePNGImageDecoder()
OpenScreen(ScreenWidth, ScreenHeight, 32, "Plankton")

CatchSprite(1, ?Include1)
CatchSprite(2, ?Include2)
CatchSprite(3, ?Include3)
CatchSprite(4, ?Include4)
CatchSprite(5, ?Include5)
CatchSprite(6, ?Include6)
CatchSprite(7, ?Include7)
CatchSprite(8, ?Include8)
CatchSprite(9, ?Include9)
CatchSprite(12, ?Include12)
CatchSprite(13, ?Include13)

DataSection
Include1: IncludeBinary "Plankton_LEFT.png"
Include2: IncludeBinary "Plankton_RIGHT.png"
Include3: IncludeBinary "Titel.png"
Include4: IncludeBinary "Ende.png"
Include5: IncludeBinary "YumYum_LEFT.png"
Include6: IncludeBinary "YumYum_RIGHT.png"
Include7: IncludeBinary "BadPlankton_LEFT.png"
Include8: IncludeBinary "BadPlankton_RIGHT.png"
Include9: IncludeBinary "Blub.png"
Include12: IncludeBinary "Alge.png"
Include13: IncludeBinary "Blase.png"
EndDataSection

LoadFont(0, "Comic Sans MS", 8, #PB_Font_HighQuality)
LoadFont(1, "Comic Sans MS", 8, #PB_Font_HighQuality | #PB_Font_Bold)

Repeat
ClearScreen(RGB(90, 150, 255))
ExamineKeyboard()
DisplaySprite(12, ScreenWidth-132, ScreenHeight-514)

Select Gamestate
Case 0
DisplayTransparentSprite(9, 50, BlubY)
DisplayTransparentSprite(3, ScreenWidth/2-128, ScreenHeight/2-64)
StartDrawing(ScreenOutput())
DrawingMode(1) : DrawingFont(FontID(1))
DrawText(ScreenWidth/2-TextWidth("Um zu spielen, drücke 'Return'!")/2, ScreenHeight/2+64, "Um zu spielen, drücke Enter!", RGB(255, 255, 255))
DrawText(ScreenWidth/2-TextWidth("Hilfe:")/2, ScreenHeight/2+90, "Hilfe:", RGB(255, 255, 255))
DrawingFont(FontID(0))
DrawText(ScreenWidth/2-TextWidth("Du steuerst 'YumYum' einfach mit den Pfeiltasten.")/2, ScreenHeight/2+105, "Du steuerst 'YumYum' einfach mit den Pfeiltasten.", RGB(255, 255, 255))
DrawingFont(FontID(1))
DrawText(ScreenWidth/2-TextWidth("Ziel:")/2, ScreenHeight/2+120, "Ziel:", RGB(255, 255, 255))
DrawingFont(FontID(0))
DrawText(ScreenWidth/2-TextWidth("Ist es, so viele 'Leckers' wie möglich zu machen indem man durch berühren die anderen Planktons auffrisst.")/2, ScreenHeight/2+135,"Ist es, so viele 'Leckers' wie möglich zu machen indem man durch berühren die anderen Planktons auffrisst.", RGB(255, 255, 255))
DrawingFont(FontID(1))
DrawText(ScreenWidth/2-TextWidth("Tip:")/2, ScreenHeight/2+150, "Tip:", RGB(255, 255, 255))
DrawingFont(FontID(0))
DrawText(ScreenWidth/2-TextWidth("Halte dich von den schlecht gelaunten Planktons fern, die bekommen dir nicht...")/2, ScreenHeight/2+165, "Halte dich von den schlecht gelaunten Planktons fern, die bekommen dir nicht...", RGB(255, 255, 255))
DrawText(5, ScreenHeight-20, "Plankton Version 1.0.0.0 Copyright 2006 by Peter 'the Nameless' Horn", RGB(200, 200, 200))
StopDrawing()

If KeyboardPushed(#PB_Key_Return)
StartTime = ElapsedMilliseconds()
Gamestate = 1
EndIf

BlubY = BlubY-1
If BlubY = -ScreenHeight/2
BlubY = ScreenHeight
EndIf

Case 1
NewTime = ElapsedMilliseconds()
ElapsedTime = NewTime-StartTime
RemainingTime = 60000-ElapsedTime
If RemainingTime = 0 Or RemainingTime < 0
Gamestate = 2
ElseIf RemainingTime > 10001
RedLevel = 255
ElseIf RemainingTime < 10001
RedLevel = 0
EndIf
If KeyboardPushed(#PB_Key_Left) And PlayerX <> 0
PlayerLook = PlayerLookLeft
PlayerX = PlayerX-2
ElseIf KeyboardPushed(#PB_Key_Right) And PlayerX <> ScreenWidth-64
PlayerLook = PlayerLookRight
PlayerX = PlayerX+2
ElseIf KeyboardPushed(#PB_Key_Up) And PlayerY <> 0
PlayerY = PlayerY-2
ElseIf KeyboardPushed(#PB_Key_Down) And PlayerY <> ScreenHeight-64
PlayerY = PlayerY+2
EndIf

If KeyboardPushed(#PB_Key_Left) And KeyboardPushed(#PB_Key_Up)
PlayerX = PlayerX-1
PlayerY = PlayerY-1
ElseIf KeyboardPushed(#PB_Key_Right) And KeyboardPushed(#PB_Key_Up)
PlayerX = PlayerX+1
PlayerY = PlayerY-1
ElseIf KeyboardPushed(#PB_Key_Right) And KeyboardPushed(#PB_Key_Down)
PlayerX = PlayerX+1
PlayerY = PlayerY+1
ElseIf KeyboardPushed(#PB_Key_Left) And KeyboardPushed(#PB_Key_Down)
PlayerX = PlayerX-1
PlayerY = PlayerY+1
EndIf

DisplayTransparentSprite(13, BlaseXa, BlaseYa)
DisplayTransparentSprite(13, BlaseXb, BlaseYb)
DisplayTransparentSprite(13, BlaseXc, BlaseYc)

DisplayTransparentSprite(PlayerLook, PlayerX, PlayerY)
StartDrawing(ScreenOutput())
DrawingMode(1) : DrawingFont(FontID(1))
DrawText(3, 3, "Leckers: "+Str(Score)+" (Highscore sind "+Str(Highscore)+" Leckers)", RGB(200, 150, 0))
DrawText(2, 2, "Leckers: "+Str(Score)+" (Highscore sind "+Str(Highscore)+" Leckers)", RGB(255, 200, 0))
DrawText(ScreenWidth/2-TextWidth("Verbleibende Zeit: "+Str(RemainingTime)+"ms")/2+1, 2+1, "Verbleibende Zeit: "+Str(RemainingTime)+"ms", RGB(200, 150, 0))
DrawText(ScreenWidth/2-TextWidth("Verbleibende Zeit: "+Str(RemainingTime)+"ms")/2, 2, "Verbleibende Zeit: "+Str(RemainingTime)+"ms", RGB(255, RedLevel, RedLevel))
DrawText(ScreenWidth/2-TextWidth("Um zu Beenden, Esc oder Strg+Alt+Entf drücken")/2, ScreenHeight-20, "Um zu Beenden, Esc oder Strg+Alt+Entf drücken", RGB(200, 200, 200))
StopDrawing()

BlaseYa = BlaseYa-1
BlaseYb = BlaseYb-1
BlaseYc = BlaseYc-1
If BlaseYa = -ScreenHeight/2
BlaseXa = Random(ScreenWidth-18)
BlaseYa = ScreenHeight
ElseIf BlaseYb = -ScreenHeight/2
BlaseXb = Random(ScreenWidth-18)
BlaseYb = ScreenHeight+Random(ScreenHeight)
ElseIf BlaseYc = -ScreenHeight/2
BlaseXc = Random(ScreenWidth-18)
BlaseYc = ScreenHeight+Random(ScreenHeight)
EndIf




Case 2
DisplayTransparentSprite(9, 50, BlubY)
DisplayTransparentSprite(4, ScreenWidth/2-186, ScreenHeight/2-78)
StartDrawing(ScreenOutput())
DrawingMode(1) : DrawingFont(FontID(1))
DrawText(ScreenWidth/2-TextWidth("Deine Leckers: ")/2+1, ScreenHeight/2+101, "Deine Leckers: "+Str(Score), RGB(200, 150, 0))
DrawText(ScreenWidth/2-TextWidth("Deine Leckers: ")/2, ScreenHeight/2+100, "Deine Leckers: "+Str(Score), RGB(255, 200, 0))
If Score > Highscore
DrawText(ScreenWidth/2-TextWidth("NEUER HIGHSCORE!")/2+1, ScreenHeight/2+111, "NEUER HIGHSCORE!", RGB(200, 150, 0))
DrawText(ScreenWidth/2-TextWidth("NEUER HIGHSCORE!")/2, ScreenHeight/2+110, "NEUER HIGHSCORE!", RGB(255, 0, 0))
EndIf
DrawText(ScreenWidth/2-TextWidth("Um noch einmal zu spielen drücke Enter, um aufzuhören Escape")/2+1, ScreenHeight/2+126, "Um noch einmal zu spielen drücke Enter, um aufzuhören Escape", RGB(200, 200, 200))
DrawText(ScreenWidth/2-TextWidth("Um noch einmal zu spielen drücke Enter, um aufzuhören Escape")/2, ScreenHeight/2+125, "Um noch einmal zu spielen drücke Enter, um aufzuhören Escape", RGB(255, 255, 255))
StopDrawing()

If KeyboardReleased(#PB_Key_Return)
Highscore = Score
Score = 0
StartTime = ElapsedMilliseconds()
GameState = 1
EndIf
BlubY = BlubY-1
If BlubY = -ScreenHeight/2
BlubY = ScreenHeight
EndIf
EndSelect

If KeyboardPushed(#PB_Key_LeftAlt) And KeyboardPushed(#PB_Key_LeftControl) And KeyboardPushed(#PB_Key_Delete)
CloseScreen()
End
EndIf

FlipBuffers()
Delay(10)
Until KeyboardPushed(#PB_Key_Escape)
Ich hoffe, dann sind die Umgebungsfragen gelöst

@#NULL: Joa, von allen 4 Bildschirmseiten, die Bahn läuft ganz zufällig bestimmt irgendwo (erstmal) gerade aus übern Bildschirm.
Was für ein Spielkonzept kannste dir ja mithilfe des Executables vorstellen, nur fehlt halt, das Sprites von außen übern Bildschirm fliegen.
Zum fliegend/gehen, ich weiß zwar nicht was du meinst :D aber es sind einfach Sprites.

______________________
Waponez II is doof (Ich verstehs nich)
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also, entschuldige ein paar mal, aber der code ist ja überhaupt nicht formatiert, das ist grottenschlecht.

bevor ich über haupt groß drüberles, mal für alle die formatierte version:

Code: Alles auswählen

;diesekommentarzeilemachtdasforenfensterbreitgenugahwsdgfksdfgkadsgdszfgadsjkfgasdkfgalsdkgfasdkfgasdkfgaskdfgasdfliusdgafsdigfisdugfkadsgdszfgadsjkfgasdkfgalsdkgfasdkfgasdkfgaskdfgasdfliusdgafsdigfisdugfkadsgdszfgadsjkfgasdkfgalsdkgfasdkfgasdkfgaskdfgasdfliusdgafsdigfisdugfaisugdfiasugdfalisudgfaliugsdfiusdgfaulisdgfliasduglsdufg
Global Gamestate = 0 
Global ScreenWidth = 640 
Global ScreenHeight = 480 
Global Highscore = 0 
Global Score = 0 
Global PlayerX = ScreenWidth/2-32 
Global PlayerY = ScreenHeight/2-32 
Global PlayerLook = 5 
Global PlayerLookLeft = 5 
Global PlayerLookRight = 6 
Global EnemyX = Random(ScreenWidth-32) 
Global EnemyY = Random(ScreenHeight-32) 
Global BlubX = 50 
Global BlubY = ScreenHeight 
Global BlaseYa = ScreenHeight 
Global BlaseYb = ScreenHeight+Random(ScreenHeight) 
Global BlaseYc = ScreenHeight+Random(ScreenHeight) 
Global BlaseXa = Random(ScreenWidth-18) 
Global BlaseXb = Random(ScreenWidth-18) 
Global BlaseXc = Random(ScreenWidth-18) 

InitSound() 
InitKeyboard() 
InitSprite() 
UsePNGImageDecoder() 
OpenScreen(ScreenWidth, ScreenHeight, 32, "Plankton") 

CatchSprite(1, ?Include1) 
CatchSprite(2, ?Include2) 
CatchSprite(3, ?Include3) 
CatchSprite(4, ?Include4) 
CatchSprite(5, ?Include5) 
CatchSprite(6, ?Include6) 
CatchSprite(7, ?Include7) 
CatchSprite(8, ?Include8) 
CatchSprite(9, ?Include9) 
CatchSprite(12, ?Include12) 
CatchSprite(13, ?Include13) 

DataSection 
  Include1: IncludeBinary "Plankton_LEFT.png" 
  Include2: IncludeBinary "Plankton_RIGHT.png" 
  Include3: IncludeBinary "Titel.png" 
  Include4: IncludeBinary "Ende.png" 
  Include5: IncludeBinary "YumYum_LEFT.png" 
  Include6: IncludeBinary "YumYum_RIGHT.png" 
  Include7: IncludeBinary "BadPlankton_LEFT.png" 
  Include8: IncludeBinary "BadPlankton_RIGHT.png" 
  Include9: IncludeBinary "Blub.png" 
  Include12: IncludeBinary "Alge.png" 
  Include13: IncludeBinary "Blase.png" 
EndDataSection 

LoadFont(0, "Comic Sans MS", 8, #PB_Font_HighQuality) 
LoadFont(1, "Comic Sans MS", 8, #PB_Font_HighQuality | #PB_Font_Bold) 

Repeat 
  ClearScreen(RGB(90, 150, 255)) 
  ExamineKeyboard() 
  DisplaySprite(12, ScreenWidth-132, ScreenHeight-514) 
  
  Select Gamestate 
    Case 0 
      DisplayTransparentSprite(9, 50, BlubY) 
      DisplayTransparentSprite(3, ScreenWidth/2-128, ScreenHeight/2-64) 
      StartDrawing(ScreenOutput()) 
        DrawingMode(1) : DrawingFont(FontID(1)) 
        DrawText(ScreenWidth/2-TextWidth("Um zu spielen, drücke 'Return'!")/2, ScreenHeight/2+64, "Um zu spielen, drücke Enter!", RGB(255, 255, 255)) 
        DrawText(ScreenWidth/2-TextWidth("Hilfe:")/2, ScreenHeight/2+90, "Hilfe:", RGB(255, 255, 255)) 
        DrawingFont(FontID(0)) 
        DrawText(ScreenWidth/2-TextWidth("Du steuerst 'YumYum' einfach mit den Pfeiltasten.")/2, ScreenHeight/2+105, "Du steuerst 'YumYum' einfach mit den Pfeiltasten.", RGB(255, 255, 255)) 
        DrawingFont(FontID(1)) 
        DrawText(ScreenWidth/2-TextWidth("Ziel:")/2, ScreenHeight/2+120, "Ziel:", RGB(255, 255, 255)) 
        DrawingFont(FontID(0)) 
        DrawText(ScreenWidth/2-TextWidth("Ist es, so viele 'Leckers' wie möglich zu machen indem man durch berühren die anderen Planktons auffrisst.")/2, ScreenHeight/2+135,"Ist es, so viele 'Leckers' wie möglich zu machen indem man durch berühren die anderen Planktons auffrisst.", RGB(255, 255, 255)) 
        DrawingFont(FontID(1)) 
        DrawText(ScreenWidth/2-TextWidth("Tip:")/2, ScreenHeight/2+150, "Tip:", RGB(255, 255, 255)) 
        DrawingFont(FontID(0)) 
        DrawText(ScreenWidth/2-TextWidth("Halte dich von den schlecht gelaunten Planktons fern, die bekommen dir nicht...")/2, ScreenHeight/2+165, "Halte dich von den schlecht gelaunten Planktons fern, die bekommen dir nicht...", RGB(255, 255, 255)) 
        DrawText(5, ScreenHeight-20, "Plankton Version 1.0.0.0 Copyright 2006 by Peter 'the Nameless' Horn", RGB(200, 200, 200)) 
      StopDrawing() 
    
    If KeyboardPushed(#PB_Key_Return) 
      StartTime = ElapsedMilliseconds() 
      Gamestate = 1 
    EndIf 
    
    BlubY = BlubY-1 
    If BlubY = -ScreenHeight/2 
      BlubY = ScreenHeight 
    EndIf 
    
    Case 1 
      NewTime = ElapsedMilliseconds() 
      ElapsedTime = NewTime-StartTime 
      RemainingTime = 60000-ElapsedTime 
      If RemainingTime = 0 Or RemainingTime < 0 
        Gamestate = 2 
      ElseIf RemainingTime > 10001 
        RedLevel = 255 
      ElseIf RemainingTime < 10001 
        RedLevel = 0 
      EndIf 
      If KeyboardPushed(#PB_Key_Left) And PlayerX <> 0 
        PlayerLook = PlayerLookLeft 
        PlayerX = PlayerX-2 
      ElseIf KeyboardPushed(#PB_Key_Right) And PlayerX <> ScreenWidth-64 
        PlayerLook = PlayerLookRight 
        PlayerX = PlayerX+2 
      ElseIf KeyboardPushed(#PB_Key_Up) And PlayerY <> 0 
        PlayerY = PlayerY-2 
      ElseIf KeyboardPushed(#PB_Key_Down) And PlayerY <> ScreenHeight-64 
        PlayerY = PlayerY+2 
      EndIf 
      
      If KeyboardPushed(#PB_Key_Left) And KeyboardPushed(#PB_Key_Up) 
        PlayerX = PlayerX-1 
        PlayerY = PlayerY-1 
      ElseIf KeyboardPushed(#PB_Key_Right) And KeyboardPushed(#PB_Key_Up) 
        PlayerX = PlayerX+1 
        PlayerY = PlayerY-1 
      ElseIf KeyboardPushed(#PB_Key_Right) And KeyboardPushed(#PB_Key_Down) 
        PlayerX = PlayerX+1 
        PlayerY = PlayerY+1 
      ElseIf KeyboardPushed(#PB_Key_Left) And KeyboardPushed(#PB_Key_Down) 
        PlayerX = PlayerX-1 
        PlayerY = PlayerY+1 
      EndIf 
      
      DisplayTransparentSprite(13, BlaseXa, BlaseYa) 
      DisplayTransparentSprite(13, BlaseXb, BlaseYb) 
      DisplayTransparentSprite(13, BlaseXc, BlaseYc) 
      
      DisplayTransparentSprite(PlayerLook, PlayerX, PlayerY) 

      StartDrawing(ScreenOutput()) 
        DrawingMode(1) : DrawingFont(FontID(1)) 
        DrawText(3, 3, "Leckers: "+Str(Score)+" (Highscore sind "+Str(Highscore)+" Leckers)", RGB(200, 150, 0)) 
        DrawText(2, 2, "Leckers: "+Str(Score)+" (Highscore sind "+Str(Highscore)+" Leckers)", RGB(255, 200, 0)) 
        DrawText(ScreenWidth/2-TextWidth("Verbleibende Zeit: "+Str(RemainingTime)+"ms")/2+1, 2+1, "Verbleibende Zeit: "+Str(RemainingTime)+"ms", RGB(200, 150, 0)) 
        DrawText(ScreenWidth/2-TextWidth("Verbleibende Zeit: "+Str(RemainingTime)+"ms")/2, 2, "Verbleibende Zeit: "+Str(RemainingTime)+"ms", RGB(255, RedLevel, RedLevel)) 
        DrawText(ScreenWidth/2-TextWidth("Um zu Beenden, Esc oder Strg+Alt+Entf drücken")/2, ScreenHeight-20, "Um zu Beenden, Esc oder Strg+Alt+Entf drücken", RGB(200, 200, 200)) 
      StopDrawing() 
      
      BlaseYa = BlaseYa-1 
      BlaseYb = BlaseYb-1 
      BlaseYc = BlaseYc-1 
      If BlaseYa = -ScreenHeight/2 
        BlaseXa = Random(ScreenWidth-18) 
        BlaseYa = ScreenHeight 
      ElseIf BlaseYb = -ScreenHeight/2 
        BlaseXb = Random(ScreenWidth-18) 
        BlaseYb = ScreenHeight+Random(ScreenHeight) 
      ElseIf BlaseYc = -ScreenHeight/2 
        BlaseXc = Random(ScreenWidth-18) 
        BlaseYc = ScreenHeight+Random(ScreenHeight) 
      EndIf 
    
    
    
    
    Case 2 
      DisplayTransparentSprite(9, 50, BlubY) 
      DisplayTransparentSprite(4, ScreenWidth/2-186, ScreenHeight/2-78) 

      StartDrawing(ScreenOutput()) 
        DrawingMode(1) : DrawingFont(FontID(1)) 
        DrawText(ScreenWidth/2-TextWidth("Deine Leckers: ")/2+1, ScreenHeight/2+101, "Deine Leckers: "+Str(Score), RGB(200, 150, 0)) 
        DrawText(ScreenWidth/2-TextWidth("Deine Leckers: ")/2, ScreenHeight/2+100, "Deine Leckers: "+Str(Score), RGB(255, 200, 0)) 
        If Score > Highscore 
          DrawText(ScreenWidth/2-TextWidth("NEUER HIGHSCORE!")/2+1, ScreenHeight/2+111, "NEUER HIGHSCORE!", RGB(200, 150, 0)) 
          DrawText(ScreenWidth/2-TextWidth("NEUER HIGHSCORE!")/2, ScreenHeight/2+110, "NEUER HIGHSCORE!", RGB(255, 0, 0)) 
        EndIf 
        DrawText(ScreenWidth/2-TextWidth("Um noch einmal zu spielen drücke Enter, um aufzuhören Escape")/2+1, ScreenHeight/2+126, "Um noch einmal zu spielen drücke Enter, um aufzuhören Escape", RGB(200, 200, 200)) 
        DrawText(ScreenWidth/2-TextWidth("Um noch einmal zu spielen drücke Enter, um aufzuhören Escape")/2, ScreenHeight/2+125, "Um noch einmal zu spielen drücke Enter, um aufzuhören Escape", RGB(255, 255, 255)) 
      StopDrawing() 
      
      If KeyboardReleased(#PB_Key_Return) 
        Highscore = Score 
        Score = 0 
        StartTime = ElapsedMilliseconds() 
        GameState = 1 
      EndIf 
      BlubY = BlubY-1 
      If BlubY = -ScreenHeight/2 
        BlubY = ScreenHeight 
      EndIf 
  EndSelect 
  
  If KeyboardPushed(#PB_Key_LeftAlt) And KeyboardPushed(#PB_Key_LeftControl) And KeyboardPushed(#PB_Key_Delete) 
    CloseScreen() 
    End 
  EndIf 
  
  FlipBuffers() 
  Delay(10) 
Until KeyboardPushed(#PB_Key_Escape)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Gesperrt