Gumpii-Game

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Falling.down

Betreff: Gumpii-Game

BeitragSa, Okt 04, 2008 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Beschreibung:

Gumpii ist ein kleines Game, bei dem die Aufgabe ist, die farbigen Bällchen mit dem Brett bei der Maus auf die andere Seite abprallen zu lassen (fast wie beim Ping-Pong), sonst fallen sie in die Hölle. Twisted Evil

Mit der Zeit kommen die Bälle immer schneller, aber es kommen auch mehr Powerups.

Um das Executable des Games (game.exe) im Vollbildschirm zu spielen, in ein Batch (.bat) folgendes schreiben und dann ausführen:
Code: [AUSKLAPPEN]
game.exe 1280,1024
oder wie auch immer..

Code:

Code: [AUSKLAPPEN]
Global gwidth,gheight
s1$=CommandLine()

If Instr(s1,",")<>0 Then
   gwidth=Mid(s1,1,Instr(s1,","))
   gheight=Mid(s1,1+Instr(s1,","))
EndIf


If gwidth<>0 And gheight<>0 Then
   Graphics gwidth,gheight,32,1
Else
   HidePointer
   gwidth=1024
   gheight=768
   Graphics 1024,768,32,2
EndIf
 

Global font=LoadFont ("Arial",16)
Global font1=LoadFont ("Arial",20)

SetBuffer BackBuffer()

Global bild1=DrawPowerup(105,134,178,255,255,255,"_",3)
Global bild2=DrawPowerup(170,75,75,0,0,0,"+",7)

background=createbackground()

Global lichtan=0
Global licht_image=createlicht_image()


SeedRnd MilliSecs()

If Not ReadFile("highscore.txt") Then WriteFile ("highscore.txt")

Global Powertime

Type player    ;sollte Kugel heissen... :S
   Field x#
   Field y#
   Field breit#
   Field hoh#
   Field fallspeed#
   Field speed#
   Field r
   Field g
   Field b
End Type

Type PowerUp
   Field bild
   Field x#
   Field y#
   Field typ#
End Type


Global po.PowerUp
Global p.player

CreateKugel()

Global warten#=300
Global count#=0
Global hp=5
Global mWidth#=60,mx#
Global punkte=0

HidePointer

SetBuffer BackBuffer()

timer=CreateTimer(60)
ClsColor 5,5,5
Cls

Repeat
   SetFont font
   Color 255,0,0
   TileBlock background
   
   If lichtan Then DrawImage licht_image,gwidth-200,0
   
   
   mx#=MouseX()
   If mx#>gwidth-200-(mWidth#/2.) Then mx#=gwidth-200-(mWidth#/2.)
   Color 100,100,100
   Rect mx#-(mWidth#/2.),gheight-400,mWidth#,10,1
   MoveMouse mx#,gheight-400
   MouseHit1=MouseHit(1)
   If Powertime>0 Then
      mWidth#=60+Powertime^2/2000.
      Powertime=Powertime-1
      Rect 100,10,Powertime,10
   Else
      mWidth#=60
   EndIf
   
   
   If KeyHit(25) Then pause()

   hp=hp+UpdateKugel()

   If hp=0 Then Exit
   
   UpdatePowerup()
   
   
   Color 255,255,255
   Rect gwidth-200,gheight-400,200,1000
   Text 10,10,"Leben:   "
   For y=1 To hp
      Text 50+(y*15.),10,"+ "
   Next
   Text 10,25,"Punkte:  "+punkte
   Color 255-(warten#-count#)/2,255+(warten#-count#)/2.,0
   Rect 10,40,(warten#-count#)/2.,10
   Flip
   WaitTimer(timer)
   If KeyHit(1) End
   Forever
   
   HighScore(punkte)
   
   
   
   
   
Function CreateKugel()
   
   p.player=New player
   p\x#=10
   p\y#=Rand(10,30)
   p\breit#=Rand(10,50)
   p\hoh#=20
   p\speed#=Rnd(2,4)
   p\r=Rand(30,255)
   p\g=Rand(30,255)
   p\b=Rand(30,255)
   
End Function



Function HighScore(punkte)
   
   Cls
   SetFont font
   Color 255,255,255
   file=ReadFile ("highscore.txt")
   bank=CreateBank(30)
   ReadBytes(bank,file,0,24)
   Text 50,50,"GAME OVER"
   Text 50,65,"Hightscore: "
   
   a=0
   z=0
   
   While z<24
      If punkte>PeekShort(bank,z) Then
         Color 255,0,0
         Text 150,90+15*(z-1),"<- Dein Punktestand! Top Ten!"         
         t=22
         While t>z-2
            PokeShort bank,t+2,PeekShort(bank,t)
            t=t-2
         Wend
         PokeShort bank,z,punkte
         
         Exit
      EndIf
      z=z+2
   Wend
   
   z=0
   While z<22
      Color 255,255,255
      Text 50,100+(15*(z-1)),((z/2.)+1)+"  "+PeekShort(bank,z)
      z=z+2
   Wend
   
   CloseFile file
   file=WriteFile ("highscore.txt")
   WriteBytes (bank,file,0,20)
   Flip
   WaitKey()
   
End Function




Function pause()
   Repeat
      Color 255,255,255
      SetFont font1
      Text gwidth/2.,gheight/2.-50,"Pause",True,True
      
      If KeyHit(25) Then Exit
      Flip
   Forever
End Function


Function UpdateKugel()
   Local HP=0
   If count#>=warten# Then
      
      CreateKugel()
      
      count#=0
   Else   
      count#=count#+1
   EndIf
   
   lichtan=0
   
   For p.player=Each player
      p\x#=p\x#+p\speed#
      p\hoh#=p\breit+p\fallspeed#
      
      Color p\r,p\g,p\b
      Oval p\x#,p\y#,p\breit#,p\hoh#,1
      
      ;p\x#=p\x#+(p\x#-mx#/2)
      
      
      p\y#=p\y#+p\fallspeed#
      
      
      If RectsOverlap(p\x#,p\y#,p\breit#,p\hoh#,mx#-mWidth#/2.,gheight-400,mWidth#,10) Or ( p\y#>(gheight-390) And p\x#>gwidth-200 And p\y#<gheight-400)  Then   
      ;Wenn die Kugel entweder den Spieler oder den "Boden" berührt dann:
      
         If p\fallspeed#>0 Then p\fallspeed#=p\fallspeed#/-1.1:p\y#=gheight-400-p\hoh
         ;'If' ist damit die Kugel nicht am Spieler hängenbleibt
      Else
         p\fallspeed#=p\fallspeed#+0.1      
         ;Geschwindigkeitszunahme beim fallen
         
         z=0
         
      EndIf
      
      If p\x#>gwidth-200+p\breit# And gheight-390 Then p\speed#=-p\speed#  ;Abprallen an der Seite des "Bodens"
      
      If p\x#>gwidth-150 Then         
         If p\y>0 Then
         
         punkte=punkte+500-warten#+(gwidth/2.)-(gheight/5.)
         p\speed=p\speed*0.9
         p\fallspeed=p\fallspeed-0.2
         lichtan=1
         
      Else
         Delete p   
      EndIf
      
      ElseIf p\y#>gheight
         HP=HP-1
         Delete p
      EndIf
   Next
   
   warten#=warten#-0.02
   Return HP
   
End Function

Function UpdatePowerup()
   
   If Rand(1,(100+warten#))=1 Then createpowerup()
   
   For po.PowerUp=Each PowerUp
      po\y#=po\y#+5
      
      DrawImage po\bild,po\x,po\y
      
      
      If RectsOverlap(po\x#-3,po\y#-3,23,23,mx#-mWidth#/2.,gheight-400,mWidth#,10) Then
         Select po\typ#
            Case 1
               If Powertime<500 Then Powertime=Powertime+300
            Case 2
               hp=hp+1      
         End Select
         punkte=punkte+100
         Delete po.PowerUp

      ElseIf po\y#>gheight Then
         
         Delete po.PowerUp

      EndIf
      
      
   Next
End Function


Function createpowerup()
   
   
   
   If Rand(1,4)=1 Then
      po.PowerUp=New PowerUp
      po\x#=Rnd(1,590)
      po\y#=0
      
      po\typ=1
      po\bild=bild1
   ElseIf Rand(1,4)=1 Then
      po.PowerUp=New PowerUp
      po\x#=Rnd(1,590)
      po\y#=0
      
      po\typ#=2
      po\bild=bild2
      
   EndIf
   
End Function

Function DrawPowerup(r,g,b,r1,g1,b1,Text$,y)
   Local bild
   
   bild=CreateImage(30,30)
   SetBuffer ImageBuffer(bild)
   Color r,g,b
   Rect  0, 3,26,20,1
   Rect  3, 0,20,26,1
   Oval  0, 0,6,6,1
   Oval  0, 20,6,6,1
   Oval  20, 20,6,6,1
   Oval  20, 0,6,6,1   
   Color r1,g1,b1
   Text 13,3+y,Text$,True,True
   
   
   
   Return bild
End Function

Function createbackground()

   background=CreateImage(gwidth,gheight)
   SetBuffer ImageBuffer(background)
   ClsColor 1,1,1
   Cls
   For t= 0 To 255
      Color 255-t,0,0
      Rect 1,gheight+100-t,gwidth,1
   Next
   For t= 1 To (254/2.)
      t1=t
      If t1>90 Then t1=90
      Color 90-t1,90-t1,255-(t*2.)
      Rect 1,0+t,gwidth,1
   Next
   SetBuffer BackBuffer()
   
   Return background
End Function

Function Createlicht_image()
   licht_image=CreateImage(200,400)
   SetBuffer ImageBuffer(licht_image)
   ClsColor 255,0,255
   Cls
   
   For t=0 To 400
      s=t/4.+50
      Color 255-t/400.*255,255-t/400.*255,255-t/400.*255
      Rect 100-s/2.,t,s,1
   Next
   SetBuffer BackBuffer()
   
   MaskImage licht_image,255,0,255
   Return licht_image
End Function


Mfg

Falling.down

Edit: Ich wäre froh um Feedbacks...
(Ich weiss, dass das Spielprinzip zimlich einfach ist..)

Xeres

Moderator

BeitragSa, Okt 04, 2008 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicht schlecht für ein Anfänger-Projekt; hat trotzdem nichts im Codearchiv zu suchen...
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

DjDETE

BeitragSa, Okt 04, 2008 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso nicht? Ich finde es genial. Wäre perfekt für die BCC geeignet Wink
MfG DjDETE
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

ozzi789

BeitragSa, Okt 04, 2008 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
DjDETE hat Folgendes geschrieben:
Wieso nicht? Ich finde es genial. Wäre perfekt für die BCC geeignet Wink
MfG DjDETE


Word !


@topic
Tolle sache!
Jedoch wen ich das Bällchen rüber hüpfen lass verschwindet es im weissen block da und hat etwa 3 sekunden bis es wider sichtbar ist und in den "himmel" kommt Smile
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

FireballFlame

BeitragSo, Okt 05, 2008 1:19
Antworten mit Zitat
Benutzer-Profile anzeigen
@ozzi: Das wird "hochgesaugt" ... häng mal an den Rect-Befehl in Zeile 112 ein ",0" dran, dann siehst du, was da abgeht ^^
Lustiges Spiel Smile
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

mabox

BeitragSo, Okt 05, 2008 10:46
Antworten mit Zitat
Benutzer-Profile anzeigen
gute Spielidee!
wenn ich bloß auch so kreativ wär Rolling Eyes
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

ozzi789

BeitragSo, Okt 05, 2008 14:46
Antworten mit Zitat
Benutzer-Profile anzeigen
FireballFlame hat Folgendes geschrieben:
@ozzi: Das wird "hochgesaugt" ... häng mal an den Rect-Befehl in Zeile 112 ein ",0" dran, dann siehst du, was da abgeht ^^
Lustiges Spiel Smile


stimmt (:

Nuja könnt man ändern Wink
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Falling.down

BeitragSo, Okt 05, 2008 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
@ozzi: Eigentlich habe ich etwas eigebaut, dass das verhindern sollte abr es funktioniert nicht wirklich Rolling Eyes

@mabox: Ehrlich gesagt habe ich die Idee aus dem Internet.. Dort hatte es mal ein Game, das ähnlich funktionierte... Very Happy

ozzi789

BeitragSo, Okt 05, 2008 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Welche Zeile, kann mal nachgugen wieso das nid geht ? (bin zu faul alles durch zu gugen;))
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Silver_Knee

BeitragMo, Okt 06, 2008 1:28
Antworten mit Zitat
Benutzer-Profile anzeigen
In der Function UpdateKugel.

Code: [AUSKLAPPEN]
      If RectsOverlap(p\x#,p\y#,p\breit#,p\hoh#,mx#-mWidth#/2.,gheight-400,mWidth#,10) Or RectsOverlap(p\x#,p\y#,p\breit#,p\hoh#,gwidth-200,gheight-400,200,1) Then   
      ;Wenn die Kugel entweder den Spieler oder den "Boden" berührt dann:


So sieht sie danach aus...
Interessant finde ich, dass du vorher in der Zeile Rectsoverlap benutzt allerdings danach das ganze mit x>x2 and x<x3 etc auszupendeln versucht Wink Ich hab einfach die koordinaten des boden-Rects geommen und eingefügt Smile Die höhe hab ich angepasst dass es zu keinen sprüngen kommt...

3 Zeilen drunter versuchst du schon wieder diese AND-OR-Geschichten. Lobenswert jedoch einfacher zu lösen:

Code: [AUSKLAPPEN]
If RectsOverlap(p\x#,p\y#,p\breit#,p\hoh#,gwidth-200,gheight-400,1,400) Then p\speed#=-p\speed#  ;Abprallen an der Seite des "Bodens"


Ach ja dein Spiel deprimiert mich wenn 2 Kugeln so kommen dass es ca unmöglich ist beide zu retten Sad Ansonsten cool =)

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group