Elastischer Stoß, oder was auch immer

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

David

Betreff: Elastischer Stoß, oder was auch immer

BeitragDo, Nov 11, 2004 23:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

BlitzBasic: [AUSKLAPPEN]

Graphics 800, 600, 32, 2
SetBuffer BackBuffer()

Const BODY1_SPEED = 5
Const BODY2_SPEED = 0

Const BODY1_MASS = 4
Const BODY2_MASS = 7

Type Body_t
Field v#
Field m#

Field x, y
Field img
End Type

Global Body1.Body_t
Global Body2.Body_t

Init()

While Not KeyHit( 1 )
Update()

Flip
Cls
Wend

End

Function Init()
Body1.Body_t = New Body_t
Body2.Body_t = New Body_t

Body1\img = CreateImage( 50, 50 )
Body2\img = CreateImage( 50, 50 )

SetBuffer ( ImageBuffer( Body1\img ) )
Oval( 0, 0, 50, 50, True )
SetBuffer ( ImageBuffer( Body2\img ) )
Oval( 0, 0, 50, 50, True )
SetBuffer ( BackBuffer() )

Body1\v = BODY1_SPEED
Body2\v = BODY2_SPEED
Body1\m = BODY1_MASS
Body2\m = BODY2_MASS

Body1\x = 0
Body1\y = 275
Body2\x = 375
Body2\y = 275
End Function

Function Collide()
v1 = ( ( Body1\m - Body2\m ) / ( Body1\m + Body2\m ) ) * Body1\v
v2 = ( ( 2 * Body1\m ) / ( Body1\m + Body2\m ) ) * Body1\v

Body1\v = v1
Body2\v = v2
End Function

Function Update()
Body1\x = Body1\x + Body1\v
Body2\x = Body2\x + Body2\v

DrawImage( Body1\img, Body1\x, Body1\y )
DrawImage( Body2\img, Body2\x, Body2\y )

If ( ImagesCollide( Body1\img, Body1\x, Body1\y, 0, Body2\img, Body2\x, Body2\y, 0 ) )
Collide()
End If

If ( Body1\x < -50 Or Body1\x > 800 ) And ( Body2\x < -50 Or Body2\x > 800 ) Then
Init()
End If
End Function


grüße
  • Zuletzt bearbeitet von David am Fr, Nov 12, 2004 18:07, insgesamt 2-mal bearbeitet
 

hot-bit

Gast

BeitragFr, Nov 12, 2004 0:16
Antworten mit Zitat
Hoi..

Endlich mal was richtiges zum angucken ... Wink

Titel ist ein wenig irre führend.

Sollte in etwa so heißen:
Ein Rudel schwarzer Katzen schleicht sich Nachts, bei Mondfinsternis, durch das Gestrüpp Smile

Es ist leider überhaupt nichts zu sehen ...
Oder mein Pc spinnt..

Toni
 

David

BeitragFr, Nov 12, 2004 0:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Normalerweise sollten mindestens zwei weise Punkte, von der Größe 50x50 Pixel, zu sehen sein! Also auch für Augengeschädigte noch gut sichtbar... Wink

grüße
http://bl4ckd0g.funpic.de

D2006

Administrator

BeitragFr, Nov 12, 2004 0:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Interessant. Wenn sowas als Code zählt, könnte ich meinen halben Programmier Ordner hier pasten. Nichts für ungut.

Wie es der Zufall so will, war mir am *nachschau* 13. September diesen Jahres auch ein wenig fad.

Bei mir kam folgendes raus:
BlitzBasic: [AUSKLAPPEN]


;STÖßE

Graphics 1024,768,32,3
SetBuffer BackBuffer()
ShowPointer()

Global font_huge = LoadFont(\"Verdana\",50,1)
Global font_big = LoadFont(\"Verdana\",30,1)
Global font_norm = LoadFont(\"Verdana\",20)

SetFont font_huge
Color 255,255,255

Text 512,50,\"Stöße\",1,1

SetFont font_big
Text 512,80,\"Elastisch oder Unelastisch. Vollkommen. Zentral. Gerade.\",1,1


Global m1#= 5 , m2#= 5, v1# = 5, v2# = 5, u#, u1#, u2#, art=1
Dim stoss$(2)
stoss$(1)=\"elastisch\"
stoss$(2)=\"unelastisch\"


Text 10,150,\"Köper 1\"
Text 600,150,\"Körper 2\"

SetFont font_norm

Text 10,180,\"Gewicht:\"
Text 600,180,\"Gewicht:\"
Text 10,200,\"Geschwindigkeit:\"
Text 600,200,\"Geschwindigkeit:\"
Text 400,220,\"Stoßart:\"



Global timer=CreateTimer(30)

While Not KeyHit(1)

Color 0,0,0
Rect 200,180,300,40,1
Rect 800,180,124,40,1
Rect 500,220,100,20,1
Rect 450,300,100,50,1

If mouseon(200,180,m1+\" kg\") Then Color 255,0,0 Else Color 255,255,255
Text 200,180,m1+\" kg\"

If mouseon(800,180,m1+\" kg\") Then Color 255,0,0 Else Color 255,255,255
Text 800,180,m2+\" kg\"

If mouseon(200,200,v1+\" m/s\") Then Color 255,0,0 Else Color 255,255,255
Text 200,200,v1+\" m/s\"

If mouseon(800,200,v2+\" m/s\") Then Color 255,0,0 Else Color 255,255,255
Text 800,200,v2+\" m/s\"

If mouseon(800,200,v2+\" m/s\") Then Color 255,0,0 Else Color 255,255,255
Text 800,200,v2+\" m/s\"

If mouseon(500,220,stoss$(art)) Then Color 255,0,0 Else Color 255,255,255
Text 500,220,stoss$(art)

SetFont font_big
If mouseon(450,300,\"START\") Then Color MilliSecs() Mod 255,0,0 Else Color 255,255,255
Text 450,300,\"START\"
SetFont font_norm

Flip


If MouseHit(1) Then
If mouseon(200,180,m1+\" kg\") Then m1=bbin$(200,180)
If mouseon(800,180,m2+\" kg\") Then m2=bbin$(800,180)
If mouseon(200,200,v1+\" m/s\") Then v1=bbin$(200,200)
If mouseon(800,200,v2+\" m/s\") Then v2=bbin$(800,200)
If mouseon(500,220,stoss$(art)) Then If art=1 Then art=2 Else art=1
If mouseon(450,300,\"START\") Then hit_it()
EndIf

WaitTimer(timer)


Wend





End

;ONMOUSEOVER
Function mouseon(x,y,dat$)
mx=MouseX()
my=MouseY()
If mx>x And mx<x+StringWidth(dat$) And my>y And my<y+FontHeight() Then Return 1 Else Return 0
End Function

;EINGABE
Function bbin$(xdat,ydat)

dat$=\"\"
Repeat

adat=GetKey()
If adat>47 And adat<58 Then dat$=dat$+Chr$(adat)
If adat=46 Then dat$=dat$+Chr$(adat)

g#=MilliSecs()/500

If g/2 - Floor(g/2)=0 Then
Text xdat,ydat,dat$+\" \"
Else
Text xdat,ydat,dat$+\"_ \"
EndIf
Flip
Color 0,0,0
Rect xdat,ydat,StringWidth(dat$)+80,FontHeight()+3,1
Color 255,255,255

If KeyHit(14) And Len(dat$)>0 Then dat$=Left$(dat$,Len(dat$)-1)

If KeyHit(1) Then End
Until KeyHit(28) Or KeyHit(156)

Return dat$

End Function


Function hit_it()
Local x1#,x2#,g1,g2

v2=-v2
If m1 > m2 Then
g1=100
g2=m2/m1*100
If g2<5 Then g2=5
Else
g2=100
g1=m1/m2*100
If g1<5 Then g1=5
EndIf
x1=g1
x2=1024-g2

Local st=0
Viewport 0,300,1024,468

Repeat

Cls
Color 255,255,255
Rect x1-g1/2,600-g1,g1,g1,0
Rect x2-g2/2,600-g2,g2,g2,0
Color 120,120,120
Line 0,600,1024,600
Color 255,255,255
If st=1 Then
x1=x1+v1
x2=x2+v2
EndIf
If st=2 Then
If art=1 Then
x1=x1+u1
x2=x2+u2
Text 10,630,\"neue Geschwindigkeit: \"+Abs(u1)+\" m/s.\"
Text 600,630,\"neue Geschwindigkeit: \"+Abs(u2)+\" m/s.\"
Else
x1=x1+u
x2=x2+u
Text 512,630,\"neue Geschwindigkeit: \"+Abs(u)+\" m/s.\",1
EndIf
EndIf
If MouseHit(1) Then
If st=0 Then st=1
If st=2 Then Exit
EndIf
If st=1 And RectsOverlap(x1-g1/2,600-g1,g1,g1,x2-g2/2,600-g2,g2,g2) Then
If art=1 Then
u1 = ( (m1-m2)*v1 + 2*m2*v2 ) / ( m1+m2 )
u2 = ( (m2-m1)*v2 + 2*m1*v1 ) / ( m1+m2 )
Else
u = ( m1*v1 + m2*v2 ) / ( m1+m2)
EndIf
st=2
EndIf

Flip
WaitTimer(timer)
Until KeyHit(1)
Cls
Flip
Viewport 0,0,1024,768
v2=-v2

End Function


Eigentlich finde ich sowas sinnlos, aber ich hab ja nicht angefangen Smile

MfG
 

David

BeitragFr, Nov 12, 2004 0:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ja, sehr schön!!!
Siehst, mir war eben Eben fade und da ich über diese Formel, im Netz, gestolpert bin wollt ich das ganze mal in Blitz ausprobieren.
Das es Sinnfrei ist ist mir dabei eigendlich recht egal! Und wenns dich stört, wieso schaust du's dir dann an???

grüße
http://bl4ckd0g.funpic.de
 

hot-bit

Gast

BeitragFr, Nov 12, 2004 1:24
Antworten mit Zitat
Hoi

Da ich mich nun näher damit befaßte, also noch ein WaitTimer() dazu gab, konnte ich es mir nun auch ansehen.
Also nix mit Augengeschädigten Smile

Es wäre für etliche vorteilhaft, wenn du das inkludieren würdest.
Ansonsten werden diese das Demo auch nicht sehen.

Denn bis mein Screen registriert hatte, daß da was gezeigt werden sollte, war der Spuk ja schon vorbei.

Toni
 

David

BeitragFr, Nov 12, 2004 8:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ja, ich hab das Ding nur im Debuggmodus (Fenster) laufen gehabt, von daher ist mir das nicht aufgefallen... Smile

grüße
http://bl4ckd0g.funpic.de
 

BlitzBirne

BeitragFr, Nov 12, 2004 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm...

Wenn ich mal meine Meinung äußern darf.
Wenn jemand etwas programmiert so wie David, hat es grundsätzlich mindestens >einen< Sinn.
Der mindeste Sinn besteht darin, mit jedem programm welches man schreibt, mit jedem Programm und jedem auftauchendem Problem
Erfahrungen zu sammeln und daraus zu lernen.
Wenn man an solchen Programmen auch noch ohne Forenhilfe auskommt,
und das Programm dann hier präsentiert finde ich es doch vernichtend, wenn solche Kommentare wie "unsinn" "das ist kein code"
"das ist Sch*****" darauf kommen.
Auch find ich es nicht wirklich fair einem "Novizen" das Programm vernichtend mit einem "besseren" Code zu "überbieten".
Anschauungsmaterial gibts ja in der Codesammlung.
Ich denke mal etwas mehr "respekt" vor den kleinen oder grösseren Fortschritten sollte schon drin sein.

Das heisst jetz insgesamt nicht, das hier jeder seinen Code reinspammen soll, doch finde ich ist es für manche doch wichtig ein paar sachliche Meinungen einzuholen (Etwa das oder dies könnte verbessert werden, oder hinzugefügt werden)

Ich find es echt schade das er seinen Code weil er angeblich "sinnlos" ist, herausgenommen hat.

[/Meinung]

MfG

eXceptION

BeitragFr, Nov 12, 2004 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
David hat Folgendes geschrieben:
BlitzBasic: [AUSKLAPPEN]

Editiert, da Sinn und Zweckfrei! :roll:
diese thread ist jetzt sinn und zweckfrei... keine code = offtopic oder spam...
Norweger...

Spreche aber verdammt gut 8086
 

David

BeitragFr, Nov 12, 2004 14:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ja du Witzbold...
Da stand ja mal Code... Rolling Eyes

Jetzt kann man den Thread allerdings löschen... ja!

grüße
http://bl4ckd0g.funpic.de

D2006

Administrator

BeitragFr, Nov 12, 2004 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
D2006 hat Folgendes geschrieben:
Interessant. Wenn sowas als Code zählt, könnte ich meinen halben Programmier Ordner hier pasten. Nichts für ungut.
...
Eigentlich finde ich sowas sinnlos, aber ich hab ja nicht angefangen Smile


^^ kam anscheinend falsch an. Ich wollte damit ausdrücken, dass er zwar sinnfrei ist, aber man kann ich bei Bedarf trotzdem posten. Sonst hätte ich ja meinen nicht gepastet.

Ich wollte niemanden runtermachen und auch keine Antipathie zum Ausdruck bringen, zu mal ich als letztes eine gegen David hätte.

Sorry wenn ich mich doof ausgedrückt habe.

@David
Du fügst deinen Code sofort wieder ein! Wink
Sonst lösch ich meinen auch und dann gibts Trash.

MfG
D2006
 

hot-bit

Gast

BeitragFr, Nov 12, 2004 19:04
Antworten mit Zitat
Hi..

Nöö, so einfach geht's auch nicht.

habe ja beide Source hier Smile

Toni
 

getlose

BeitragFr, Nov 12, 2004 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
hehe, ich finde es kewl, hatte damals auch mal einen
etwas sinnlosen Code hier her gepostet (Gummiband oder so)
und da kamen nie solche Kritiken, nur "sieht lustig aus" oder,
"was man aus so wenig Code machen kann" usw.

mit der Zeit ändert sich echt alles, blöserweise meistens
zum negativem... :/ (speziell in diesem Forum)

Travis

BeitragFr, Nov 12, 2004 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
@ getlose
Das mit dem Gummiband war echt cool. Ich hatte das ja mal zu einem simplen "Hau den Ball in den Korb Spiel" erweitert Laughing

@ David
Ich habe den Code jetzt nicht gründlich studiert, aber kann man das auch für andere Winkel verwenden?

@ D2006
Du solltest die Kisten auch immer etwas abbremsen. Es wirkt etwas unrealistisch, wenn keine Bewegungsenergie verloren geht. Wink
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group