Springender Ball

Spiele, Demos, Grafikzeug und anderes unterhaltendes.
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Was ist denn lacken? Ich mein, ich weiss schon wie man Lack her stellt, aber das nennt man nicht lacken....
Sorry, mußte einfach sein jetzt :twisted:
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

CSprengel hat geschrieben:Was ist denn lacken?
eben, das ist sehr unrealistik ;-)
a²+b²=mc²
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Was???

Das mit dem Unreal war gemeint dass es nicht so ist wie in echt.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

@ Ball werfen können: Code ist buggy, wenn man sehr doll wirft, verhält er sich wie die ersten beiden Codes im gesamten Thread, ohne Beachtung einer Gravitation prallt er an den "Innenseiten" des Monitors ab.

@ Code der von Stragate genommen wurde, den der eigentlich von mir hat, der insgesamt realistischer sein soll: Soll nicht böse klingen, aber wo ist der realistischer? Meinst du, dass dirX statt 1 jetzt 0.9999 ist?


Sonst sinds ganz nette Codes, aber seit Stargate meinem Code die Schwerkraft spendiert hat, hat sich nichts sonderliches getan, auch bei meinem Code eigentlich nicht (ich habe aber z. B. LineXY() zum zeichnen der Spur verwendet).
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Ich habe daraus jetzt ein komplettes Spiel gemacht!


Regeln: Stelle die Anzahl der Bälle und die Breite des Schlägers ein. Schläger? Richtig, du musst alle Bälle oben halten. Geht einer flöten, ist das nicht schlimm; das Spiel ist erst zu Ende, wenn alle Bälle verloren sind.

Tipp: Man kann die Bälle auch hochschieben, falls sie zu weit unten sind!

Code: Alles auswählen

#breite=1280
#hoehe=1024

#max_ball=2 ; Maximale Anzahl Bälle
#schlaeger_breite=50 ; Je länger, desto leichter

InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(#breite, #hoehe, 32, "Der springende Ball - AND51")

Structure structSpur
	x.l
	y.l
	color.l
	owner.l
EndStructure
NewList spur.structSpur()
Structure structBall
	x.l
	y.l
	dirX.l
	dirY.f
	grav.f
	owner.l
EndStructure
NewList ball.structBall()

CreateSprite(0, 30, 30)
StartDrawing(SpriteOutput(0))
	Circle(15, 15, 15, #Yellow)
StopDrawing()
CreateSprite(1, #schlaeger_breite, 4)
StartDrawing(SpriteOutput(1))
	FillArea(1, 1, -1, #Green)
StopDrawing()

start=Date()
Repeat
	ClearScreen(0) ; 3.94 und früher: 0,0,0
	ExamineKeyboard()
	ExamineMouse()
	
	DisplaySprite(1, MouseX(), MouseY())
	
	If CountList(ball()) < #max_ball And Date() < start+10 ; Only create ball in first 10 sec of a game
		AddElement(ball())
			ball()\x=Random(#breite-31)+1
			ball()\y=#hoehe/(Random(18)+2)
			ball()\dirX=(Random(2)+2)*(Random(1)*2-1) ; Range: -4 to 4
			ball()\dirY=-(Random(20)+75)/100 ; Range: -0.75 to -0.95
			ball()\grav=(Random(15)+5)/100 ; Range: 0.05 to 0.20
			ball()\owner=ElapsedMilliseconds()
			Delay(50)
	EndIf
	
	StartDrawing(ScreenOutput())
	DrawText(#breite/2, 0, "Game Duration: "+FormatDate("%hh:%ii:%ss", Date()-start), $FFFFFF, 0) ; PB 4.00, 3.94+earlier: Use Locate() !
		ResetList(spur()) ; extra kein ForEach, sondern "3.94 und früher"-freundliche Programmierung =)
		While NextElement(spur())
			spurX=spur()\x
			spurY=spur()\y
			spurOwner=spur()\owner
			spur()\color-2
				*spur=@spur()
				While NextElement(spur())
					If spur()\owner = spurOwner
						LineXY(spurX, spurY, spur()\x, spur()\y, spur()\color)
						Break
					EndIf
				Wend
				ChangeCurrentElement(spur(), *spur)
			If spur()\color <= 0
				DeleteElement(spur())
			EndIf
		Wend
	StopDrawing()
	
	ResetList(ball())
	While NextElement(ball())
		If ball()\x <= 0 Or ball()\x >= #breite-30
			ball()\dirX*-1
			MessageBeep_(#MB_OK)
		EndIf
		If SpritePixelCollision(0, ball()\x, ball()\y, 1, MouseX(), MouseY())
			ball()\y=MouseY()-30
			ball()\dirY*-0.95 ; Je näher an 1, desto LEICHTER wird der Ball und springt höher
			MessageBeep_(#MB_OK)
		EndIf
		ball()\x+ball()\dirX
		ball()\y+ball()\dirY
		ball()\dirY+ball()\grav
		AddElement(spur())
			spur()\x=ball()\x+7
			spur()\y=ball()\y+7
			spur()\color=255
			spur()\owner=ball()\owner
		DisplayTransparentSprite(0, ball()\x, ball()\y)
		If ball()\y >= #hoehe-30
			MessageBeep_(#MB_ICONERROR)
			DeleteElement(ball())
		EndIf
	Wend
	
	If CountList(ball()) = 0
		Break
	EndIf
	
	FlipBuffers()
	Delay(10)
Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()
MessageRequester("Game Over", "You have lost all balls. Game duration: "+FormatDate("%hh:%ii:%ss", Date()-start), #MB_ICONINFORMATION)
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Hab ja auch mal was mit nem Ball gemacht:

Code: Alles auswählen

InitSprite() 
InitMouse() 
InitKeyboard() 
ExamineDesktops() 
Global sw.l, sh.l 
sw = DesktopWidth(0) 
sh = DesktopHeight(0) 

OpenScreen(sw,sh,32,"BloederBall_v1.0") 

Global ballx.f, bally.f, ballxm.f, ballym.f, pw.l, tempx.f, tempy.f, rot.f,rotm.f , pi.f 
pi = 3.141592 
ballx = 640 
bally = 512 
ballxm = 11 
pw = 2000 

CreateSprite(0,sw,sh,0) 
StartDrawing(SpriteOutput(0)) 
    For x = 0 To 9000 
        Box(Random(sw),Random(sh),16,16,RGB(0,Random(50),0)) 
    Next 
    
StopDrawing() 

Repeat 
    DisplaySprite(0,0,0) 
    ExamineKeyboard() 
    ExamineMouse() 

    ;Kraftdivision einstellen 

    If MouseWheel() > 0 
        pw + 100 
        
        If pw = 0 
            pw = 1 
        EndIf 
        
    EndIf 
    
    If MouseWheel() < 0 
        pw - 100 
        If pw = 0 
            pw = -1 
        EndIf 
        
    EndIf 
    
    If bally < -16000 
        bally = -16000 
        ballym = 0 
    EndIf 
    
    
    If MouseButton(1) 
        tempx = (ballx-MouseX())/pw 
        tempy = (bally-MouseY())/pw 
        
        ballym -  tempy 
        ballxm -  tempx 
    
        ping = 1 
    Else 
        ping = 0 
    EndIf 

    If bally <  sh-16 
        ballym = ballym + 0.1 
    EndIf 
    
    bally + ballym 
    
    If bally > sh-16 
        bally = sh-16 
        ballym = -(ballym/2)    

        rotm =  ballxm 
        
    EndIf 
    
    If ballxm > 0 
        ballxm - 0.01 
    EndIf 
    If ballxm < 0 
        ballxm + 0.01 
    EndIf 

    ballx+ballxm 
    
    If ballx > sw-16 
        ballx = sw-16 
        ballxm = -(ballxm/2) 
        rotm = -ballym 
    EndIf 
    If ballx < 16 
        ballx = 16 
        ballxm = -(ballxm/2) 
        rotm = ballym 
    EndIf 

    If rotm > 0 
        rotm - 0.01 
    EndIf 
    
    If rotm < 0 
        rotm + 0.01 
    EndIf 
    
    StartDrawing(ScreenOutput()) 
        olposx = MouseX() 
        olposy = MouseY() 
        If ping = 1 
            For x = 0 To 50 

                If ballx > olposx 
                    newposx = Random(16)-4 
                Else 
                    newposx = Random(64)-32 
                    If ballx < olposx 
                        newposx = 4-Random(16)                    
                    EndIf 
                EndIf 
            
                If bally > olposy 
                    newposy = Random(16)-4 
                Else 
                    newposy = Random(64)-32 
                    If bally < olposy 
                        newposy = 4-Random(16)                    
                    EndIf 
                EndIf 

                If x = 100 
                    newposx = olposx-ballx 
                    newposy = olposy-bally 
                EndIf 
                Line(olposx,olposy,newposx,newposy,RGB(100-x,50-x/2,255-x*2)) 
                olposx = olposx + newposx 
                olposy = olposy + newposy 
            Next 
            
        EndIf 
        Circle(ballx,bally,16,RGB(100,0,0)) 

        rot - rotm 
        For x = 1 To 8 
            rox.f = Sin(2*pi*((rot+(x*45))/360))*15 
            roy.f = Cos(2*pi*((rot+(x*45))/360))*15 
            Line(ballx,bally,rox,roy,RGB(255,0,0)) 
        Next 
        
        Line(MouseX(),MouseY()-16,0,32,RGB(255,255,0)) 
        Line(MouseX()-16,MouseY(),32,0,RGB(255,255,0)) 
    
        
        DrawingMode(1) 
        FrontColor(RGB(255,255,255)) 
        DrawText(0,0,"Power-Division: "+Str(pw)) 
 
        DrawText(0,16,"Ball-X: "+Str(ballx)) 

        DrawText(0,32,"Ball-Y: "+Str(bally)) 
  
        DrawText(0,48,"Ball-Move-X: "+StrF(ballxm,3)) 

        DrawText(0,64,"Ball-Move-Y: "+StrF(ballym,3))        
    StopDrawing() 
    
    FlipBuffers() 
    ClearScreen(RGB(10,10,0)) 
    
Until KeyboardPushed(#PB_Key_Escape) 
CloseScreen() 
End 
I´a dllfreak2001
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Sehr beeindruckend!
Allein der Hintergrund, geil!
Und dann diese Blitz-Funktion! Könnte m. E. 15% stärker sein!

Geil, einfach nur Respekt! :allright:

//Edit: Ich schaffe es, den Ball -15.000 Pixel über den Monitor zu schleudern! Rekord!
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Da hab ich mal auch hier reingepostet unter dem Namen Blöder Ball zum schluss war es ja auch ein kleines Spielchen.
I´a dllfreak2001
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

@And51

Nicht weil 1 zu 0.9999 wird sondern das der Ball stehen bleiben kann. Natürlich ist der Teil mit 0.9999 nicht sehr beintrechtigend aber hast du dir schon mal den Rest angesehen? Oder hast du ihn shon einmal ausprobiert?

Der Ball kommt aber noch immer nach unten wenn man ihn stark wirft!!!

PS. hab ganz vergessen das das dein Code war, sorry.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

mit dem Mausrad kann man die stärke einstellen, auch negativ.
I´a dllfreak2001
Antworten