Minigame-Ballpunch (Blitz/Blitz3D)

Übersicht Sonstiges Projekte

Neue Antwort erstellen

stfighter01

Betreff: Minigame-Ballpunch (Blitz/Blitz3D)

BeitragSa, Dez 01, 2007 13:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir ist einfach so in den Sinn gekommen das so etwas ganz lustig sein könnte, darum habe ich es auch gleich umgesetzt.

Für die paar zeilen code wollte ich keine 1.2MB uploaden, darum bitte selber kompilieren.

Wie lange haltet ihr durch?
mein Record bisher 22.4 Sekunden Smile

Einfach ausweichen, sollte selbsterklärend sein.
( Rechts oben steht die bisherige Bestzeit )


Code: [AUSKLAPPEN]

Graphics 1024, 768, 16, 1

Global mainrad = 10
Global mainx#
Global mainy#
Global maxx = 1024
Global maxy = 758
Global time$
Global vnorm#
Global besttime =0

Global physikfrequency# = 75;Hz
Global physikupdates#
Global physikstarttime
Global physikacttime



Global startime, actualtime


Type punchball
  Field x#
  Field y#
  Field vx#
  Field vy#
  Field radius#
  Field speeddamping#
  Field speedfactor#
  Field mass#
  Field bcol
  Field bouncefactor#
  Field vectoracceleration#
End Type




SetBuffer BackBuffer()


started = 0
actualtime = 0

physikstarttime = MilliSecs()
While Not KeyHit(1)
   mainx = MouseX()
   mainy = MouseY()

   If mainx < mainrad Then mainx = mainrad
   If mainy < mainrad Then mainy = mainrad
   If mainx > maxx-mainrad Then mainx = maxx-mainrad
   If mainy > maxy-mainrad Then mainy = maxy-mainrad

   physikacttime = MilliSecs()
         
   While physikacttime > ( physikstarttime + ( physikupdates * (1000.0/physikfrequency) ) )
      physikupdates = physikupdates + 1
      ;Physics

      
      If MouseHit(1)
         started = 1
         starttime = MilliSecs()
      EndIf
      
      If started
      
         actualtime = MilliSecs()-starttime
      
         For ball.punchball = Each punchball
            ballacc# = (mainx-ball\x) * ball\speedfactor
            ballacc# = ballacc - ( ball\vx * ball\speeddamping )
            ball\vx = ball\vx + ballacc#
            
            ballacc# = (mainy-ball\y) * ball\speedfactor
            ballacc# = ballacc - ( ball\vy * ball\speeddamping )
            ball\vy = ball\vy + ballacc#
            
      
            For ball2.punchball = Each punchball
               If ball <> ball2
                  distancesqr# = ( ball\x - ball2\x ) * ( ball\x - ball2\x ) + ( ball\y - ball2\y ) * ( ball\y - ball2\y )       
                  If distancesqr# < ( ( ball\radius + ball2\radius ) * ( ball\radius + ball2\radius ) )      
                     calcpunch( ball, ball2 )   
                  EndIf
               EndIf
            
            Next
      
         Next
      
         For ball = Each punchball
         
            If ball\y+ball\vy < ball\radius
              ball\vy = - ball\vy
            EndIf
            If ball\x+ball\vx < ball\radius
              ball\vx = - ball\vx
            EndIf
            If ball\x+ball\vx > maxx-ball\radius
              ball\vx = -ball\vx
            EndIf
            If ball\y+ball\vy > maxy-ball\radius
              ball\vy = -ball\vy
            EndIf
            
            
            If ball\vectoracceleration <> 0 Then
               vnorm = Sqr( ball\vx * ball\vx + ball\vy * ball\vy )            
               ball\vx = ball\vx + ( ball\vx / vnorm ) * ball\vectoracceleration
               ball\vy = ball\vy + ( ball\vy / vnorm ) * ball\vectoracceleration          
            EndIf
                     
            
            ball\y = ball\y + ball\vy
            ball\x = ball\x + ball\vx   
         Next
         
         
         For ball = Each punchball
            distancesqr# = ( ball\x - mainx ) * ( ball\x - mainx ) + ( ball\y - mainy ) * ( ball\y - mainy )       
            If distancesqr# < ( ( ball\radius + mainrad ) * ( ball\radius + mainrad ) )
               started = 0
               If actualtime > besttime Then besttime = actualtime            
            EndIf
                  
         Next
         
      Else
         initballs()
      EndIf


   Wend

   ;Rendering   
   Cls()

   time = parseTime( actualtime )   
   Color 255,255,255
   Text 10,10,time
   
   time = parseTime( besttime )   
   Color 255,255,255
   Text 960,10,time   
   
   For ball = Each punchball
      drawball( ball\x, ball\y, ball\radius, ball\bcol )
   Next
   drawball( mainx, mainy, mainrad, $FFFFFF )
   
      Flip()

Wend

Function parsetime$( parsingtime )
   Local time$
   
   parsingtime = parsingtime / 100
   zehntel = parsingtime Mod 10
   parsingtime = parsingtime / 10
   secs = parsingtime Mod 60
   mins = parsingtime / 60
   
   time = mins + ":" + secs + ":" + zehntel


   Return time
   
End Function


Function drawball( x, y, radius, col )
   Local factor#

   Color 0,0,col
   red = ColorRed()
   green = ColorGreen()
   blue = ColorBlue()
   
   
   lred = ( 255-red ) / 1.5 + red
   lgreen = ( 255-green ) / 1.5 + green
   lblue = ( 255-blue ) / 1.5 + blue

   
      
   Oval x-radius, y-radius, radius*2, radius*2    

   Color lred, lgreen, lblue
   Oval x-radius/1.5, y-radius/1.5, radius/2, radius/2


End Function

Function calcpunch( ball1.punchball, ball2.punchball )
   Local i#,x#
   Local dx#,dy#
   Local v#,w#,m1#,m2#,g#,f1#,f2#,e#

   dx= ball1\x-ball2\x      
   dy= ball1\y-ball2\y

   v= ball2\vx-ball1\vx
   w= ball2\vy-ball1\vy
   g= (dx*v+dy*w)/(dx*dx+dy*dy)   
   
               
   If g > 0 Then
      
      e= 1 ; Bouncingfactor
      m1= ball1\mass
      m2= ball2\mass

      f1= (m2/(m1+m2))*(1+e)
      f2= -(m1/(m1+m2))*(1+e)
            
      ball1\vx=ball1\vx+dx*f1*g
      ball1\vy=ball1\vy+dy*f1*g

      ball2\vx=ball2\vx+dx*f2*g
      ball2\vy=ball2\vy+dy*f2*g
      
   EndIf

End Function


Function initballs( )
   Local rndaxis

   For ball.punchball = Each punchball
      Delete ball.punchball
   Next


   ball.punchball = New punchball
   ball\x = 400
   ball\y = 350
   ball\vx = 0
   ball\vy = 0
   ball\radius = 20
   ball\speedfactor = 0.002
   ball\speeddamping = 0.03
   ball\mass = 1
   ball\bouncefactor = 1
   ball\bcol = $FF0000
   
      
   ball.punchball = New punchball
   ball\x = 600
   ball\y = 350
   ball\vx = 0
   ball\vy = 0
   ball\radius = 25
   ball\speedfactor = 0.003
   ball\speeddamping = 0.03
   ball\mass = 1
   ball\bouncefactor = 1
   ball\bcol = $0000FF
   
   
   ball.punchball = New punchball
   ball\x = 200
   ball\y = 200
   ball\vx = 0
   ball\vy = 0
   ball\radius = 35
   ball\speedfactor = 0
   ball\vx = 7
   ball\vy = 3
   ball\speeddamping = 0
   ball\mass = 10000
    ball\bouncefactor = 1
   ball\bcol = $00FF00
   
   
   ball.punchball = New punchball
   ball\x = 824
   ball\y = 568
   ball\vx = 0
   ball\vy = 0
   ball\radius = 35
   ball\speedfactor = 0
   ball\vx = -7
   ball\vy = -3
   ball\speeddamping = 0
   ball\mass = 10000
   ball\bouncefactor = 1   
   ball\bcol = $00FF00


   If 1 = 2 Then
   ball.punchball = New punchball
   ball\x = 512
   ball\y = 100
   ball\radius = 6
   ball\speedfactor = 0.0002
   ball\vx = 0
   ball\vy = 0
   ball\speeddamping = 0.001
   ball\mass = 4000
   ball\bouncefactor = 1   
   ball\bcol = $FFFF00
   EndIf

   rndaxis = Rnd(0,360)
   
   ball.punchball = New punchball
   ball\x = 512
   ball\y = 612
   ball\radius = 6
   ball\speedfactor = 0               
   ball\vx = Sin(rndaxis)*1
   ball\vy = Cos(rndaxis)*1
   ball\speeddamping = 0
   ball\vectoracceleration = 0.01
   ball\mass = 10000
   ball\bouncefactor = 1   
   ball\bcol = $FF0000   
   
End Function


mfg stf
Denken hilft!
  • Zuletzt bearbeitet von stfighter01 am Sa, Dez 01, 2007 14:16, insgesamt einmal bearbeitet

Noobody

BeitragSa, Dez 01, 2007 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
1 Minute 4 Sekunden... Dann wurde es mir langweilig^^
Ich bin einfach in die untere rechte Ecke gehockt und hab gewartet... Razz
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun
 

Marek

BeitragSa, Dez 01, 2007 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
0:20:1

[Edit]
Mit Ball in der rechten unteren Ecke 6:33:8 Rolling Eyes
[/Edit]
Wer lesen kann ist klar im Vorteil...
  • Zuletzt bearbeitet von Marek am Sa, Dez 01, 2007 13:42, insgesamt einmal bearbeitet

ZaP

BeitragSa, Dez 01, 2007 13:31
Antworten mit Zitat
Benutzer-Profile anzeigen
1:36:06..
Hab mich auch in die rechte untere Ecke gehockt.. (Ohne die Beiträge vorher zu lesen.) Erstaunlich ist, dass sich scheinbar alle nach unten rechts absetzen.
Starfare: Worklog, Website (download)

stfighter01

BeitragSa, Dez 01, 2007 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
oO
Wieder mal blöd getested xD
Hab den code modifiziert ( sh. oben )

Das sollte jetzt nicht mehr funktionieren.
Denken hilft!

scratsch

BeitragSa, Dez 01, 2007 16:39
Antworten mit Zitat
Benutzer-Profile anzeigen
cooles game Wink
User posted image I like to play... with you!
http://weenie-games.6x.to

KddC

BeitragSa, Dez 01, 2007 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
ne...geht nicht mehr...ganz lustig das game...hab 24.7 sekunden geschaft Very Happy
Mfg Kddc

Macbook Pro 13" 2,66Ghz

D2006

Administrator

BeitragSa, Dez 01, 2007 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach noch Dinge rein, die man einsammeln muss und mit der Zeit wird es immer schwieriger (neue Bälle, wendiger und schneller usw.).
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

stfighter01

BeitragSa, Dez 01, 2007 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
@Kddc.l3usch
Reschpekt, da gehts dann schon ganz schön rund.

Kleine erleichterung bietet folgender Hack

5te Zeile von unten
ball\vectoracceleration = 0.01

Auf einen Kleineren Wert setzten z.b.: 0.004


@D2006
Ja, ich weiss es ist karg, aber mir gings nur ums Prinzip der Mausfolgenden Bälle (Rot/Blau)
Eyecandys o.ä. dürfen die Jungen im Forum einbauen Wink

Bin aber froh das es mit wenig aufwand auch ganz lustig geworden ist Smile

Mfg stf
Denken hilft!

Eingeproggt

BeitragSa, Dez 01, 2007 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
17.9

Mit den Mausverfolgenden Bällen würde man ja fertig werden, wenn die anderen nicht wären.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

WEBLink

BeitragMo, Dez 03, 2007 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
was bei 1 min.

Ist relativ einfach wenn man den Mauszeiger im Uhrzeigersinn jeweils zu der nächsten Ecke führt.

Aber dennoch ein netten Game Smile

Silver_Knee

BeitragMo, Dez 03, 2007 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm wenn man mal den abstand raushat in dem man sich um die bälle drehen muss damit beide nahezu still stehen kommt man doch relativ weit

0:19:9

ozzi789

BeitragMo, Dez 03, 2007 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
0:32:2

Ohne Tricks Very Happy

Kanste nicht IF mousedown weglassen mein Zeigefinger tut weh Sad
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

stfighter01

BeitragMo, Dez 03, 2007 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
@WEBLink
1Min oO aber mit dem Hack oder?

@ozzi789
xD mousedown gibts nicht, nur ein klick am anfang zum starten reicht Wink
[edit] aber Respekt über 30 sek ist gewaltig[/edit]
Denken hilft!

Neue Antwort erstellen


Übersicht Sonstiges Projekte

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group