Physik-Fenster
Verfasst: 08.04.2005 22:51
Ist ein lustige Procedure um ein Fenster physikalisch korrekt springen zu lassen (also fast korrekt)

Code: Alles auswählen
; _________Physik_Fenster___________
; | |
; |Programmierer: Konstantin ***** |
; |Firma: KoMaNi |
; | |
; |--------|Beschreibung|------------|
; |Ist eine lustige Procedure um ein |
; |Fenster springen zu lassen |
; |__________________________________|
Procedure PhysikFenster()
Protected Anziehung ;Gibt die Geschwindigkeit der Anziehung an
Protected Huepfen ;Gibt die Hüpfkraft an
Protected Abweichung ;Gibt die Geschwindigkeit der Abweichung an
Protected Abweichung2 ;Gibt die Seitliche Abweichung nach rechts + | links- an
Protected Anziehung2 ;Gibt die Anziehung nach unten + | oben- an
Protected Geschwindigkeit ;Gibt an wie oft das Fenster verschoben wird
Protected WHoehe ;Bild Hoehe
Protected WBreite ;Bildbreite
Protected Breite ;Breiten koordinaten start punkt
Protected Hoehe ;Gibt die Hoehe des Fensters aus (zB zum Debugen)
Protected oldticks ;Counter von Windows
Protected oldHoehe ;Brechnung der max. Hoehe
Protected AufHoehe ;Auflösung Hoehe
Protected AufBreite ;Auflösung Breite
Protected i ;Zähl Variable
Protected v ;Zähl Variable
Protected c ;Zähl Variable
Protected l ;Zähl Variable
Protected a ;Zähl Variable
Protected x ;Zähl Variable
;______Hier_können_die_einzelnen_Faktoren_geändert_werden___________________________________________
Anziehung =1 ;Je mehr desto schwächer
Huepfen =70 ;Je mehr deto höher
Abweichung =1 ;weniger is mehr
;______Änderungen_hier_können_zu_einem_Ruckeln_führen_______________________________________________
Abweichung2 =5 ;5 ist gut, mehr is mehr
Anziehung2 =3 ;3 ist gut
Geschwindigkeit=30 ;Bild refresh zeit
;______Fenstereinstellungen_________________________________________________________________________
WHoehe =369 ;Hoehe des Bildes
WBreite =548 ;Breite des Bildes
Breite =100 ;Je mehr desto weiter rechts
;___________________________________________________________________________________________________
UseJPEGImageDecoder() ;Um JPGs einbinden zu können
If OpenWindow(1,Breite,0, WBreite , WHoehe , #PB_Window_Invisible|#PB_Window_BorderLess, "Physik") ;Fenster erstellen
SkinWin(WindowID(),CatchImage(0,?SkinPicture)) ;Fenster erstellen
HideWindow(1,0) ;Fenster anzeigen
EndIf
oldticks=GetTickCount_() ;Den Windows Tickcount auslesen
i=1
v=0
oldHoehe=8000 ;NUR zur höhenmessung benötigt
Repeat ;Hauptschleife öffnen
ExamineDesktops() ;Die Auflösung auslesen um das Bild dynamisch zur Auflösung springen zu lassen
AufHoehe=DesktopHeight(0) ;Hoehe ermitteln
AufBreite=DesktopWidth(0) ;Breite ermitteln
If oldticks + Geschwindigkeit < GetTickCount_() ; wollte kein delay beutzen kann aber dadurch ersetzt werden
oldticks=GetTickCount_() ;oldticks dem tickcount gleichstellen
If c=Abweichung And l=0 ;Seitliche Abweichung
Breite=Breite+Abweichung2
c=0
EndIf
If c=Abweichung And l=1
Breite=Breite-Abweichung2
c=0
EndIf
If v<3
c=c+1
EndIf
If Breite>AufBreite-WBreite
l=1
EndIf
If Breite<0
l=0
EndIf
;________________________________________________________________
If x=Anziehung ;Berechnet die Anziehung
a=a+Anziehung2
x=0
EndIf
x=x+1
If v=0 ;lässt den Gegenstand fallen
Hoehe=Hoehe+a
EndIf
If Hoehe=>AufHoehe-30-WHoehe And v=0 ;Wenn es den Boden erreicht...
v=1
a=0
oldHoehe=AufHoehe+800
y=0
EndIf
If v=1 ;Aufspringen
If Huepfen/i> 1.5
Hoehe=Hoehe-Huepfen+a+i*2.5+1
If Hoehe>AufHoehe-30-WHoehe
i=i+1
a=0
oldHoehe=AufHoehe+800
y=0
EndIf
Else
v=2
EndIf
EndIf
If v=2 And Hoehe>AufHoehe-WHoehe-30 ;wenn es auf dem Boden ist...
v=3
Hoehe=AufHoehe+60-WHoehe
MoveWindow(Breite, Hoehe)
Delay(500)
EndIf
If v=3 ;Bild runterziehen ...
s=s+2
Hoehe=Hoehe+s
Delay(25)
If Hoehe > AufHoehe+200
v=4
a=0
EndIf
EndIf
If v=4 ;Bild hochspringen lassen...
Hoehe=Hoehe-50
Delay(10)
EndIf
If v=4 And Hoehe<0 ;Wenn es oben ist die ganze sache nomal wiederholen
i=1
v=0
a=0
EndIf
;_________Höchster Punkt ausrechnen (nicht nötig)_____
;Höchsten Punkt ausrechnen
If Hoehe < oldHoehe
oldHoehe = Hoehe
; If y=1
EndIf
;Höchsten Punkt debugen
If Hoehe > oldhoehe And y=0
Debug(oldHoehe)
y=y+1
EndIf
;________________________________________________________________-
MoveWindow(Breite, Hoehe) ;Fenster an die angegebenen Koordinaten bewegen
EndIf
;___________________________________________________________________________________________
ForEver
EndProcedure
physikfenster() ;Ruft das Programm auf
DataSection
SkinPicture:
IncludeBinary "Bilder\bg1.jpg"
EndDataSection