Ping Pong (prallt nicht richtig ab :( )
Übersicht

![]() |
ToeBBetreff: Ping Pong (prallt nicht richtig ab :( ) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Graphics 800,600,16,2:SetBuffer BackBuffer():AppTitle "Ping Pong Classik" Dim Schlager(2) Schlager(1) = LoadImage("GFX\SK.png") Schlager(2) = LoadImage("GFX\SG.png") Ball = LoadImage("GFX\Ball.png") MaskImage Ball,255,0,255 For x = 1 To 2:MaskImage Schlager(x),255,0,255:Next Global speedx#=0 Global speedy#=1 Global Ball_x# Global Ball_y# Repeat If KeyDown(200) Then sy = sy - 5 If KeyDown(208) Then sy = sy + 5 If Ball_x > 760 Then Ball_x = 760:speedx = speedx *-1 If Ball_y > 560 Then Ball_y = 560:speedy = speedy *-1 speedx = speedx + 1:If speedx > 20 Then speedx = 20 speedy = speedy + 1:If speedy > 20 Then speedy = 20 Ball_x = Ball_x + speedx Ball_y = Ball_y + speedy DrawImage Schlager(1),1,sy DrawImage Ball,Ball_x,Ball_y Flip Cls Until KeyHit(1) End Also der Prallt zwar ab, aber nicht richtig, der geht immer so im kreis... Könnte mia jemand helfen (büdde ) ? Danke und mfg |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] AppTitle "Ping Pong Classik"
Graphics 800,600,16,2 SetBuffer BackBuffer() ClsColor 255,255,255 Dim Schlager(2) Schlager(1) = CreateImage(20,100);LoadImage("GFX\SK.png") Schlager(2) = CreateImage(20,100);LoadImage("GFX\SG.png") Ball = CreateImage(10,10);LoadImage("GFX\Ball.png") MaskImage Ball,255,0,255 For x = 1 To 2:MaskImage Schlager(x),255,0,255:Next Global speedx#=0 Global speedy#=1 Global Ball_x# Global Ball_y# speedx=5 speedy=5 Repeat If KeyDown(200) Then sy = sy - 5 If KeyDown(208) Then sy = sy + 5 If Ball_x < 0 Then Ball_x = 0:speedx = -speedx; *-1 If Ball_y < 0 Then Ball_y = 0:speedy = -speedy; *-1 If Ball_x > 760 Then Ball_x = 760:speedx = -speedx; *-1 If Ball_y > 560 Then Ball_y = 560:speedy = -speedy; *-1 ;speedx = speedx + 1:If speedx > 20 Then speedx = 20 ;speedy = speedy + 1:If speedy > 20 Then speedy = 20 Ball_x = Ball_x + speedx Ball_y = Ball_y + speedy DrawImage Schlager(1),1,sy DrawImage Ball,Ball_x,Ball_y Flip Cls Until KeyHit(1) End |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Danke ! aber wie krig ich das hin das der nicht imma den gleichen weg nimmt? (der geht nämlich eine strecke, und danach geht der die wieda zurück und so weiter ... ![]() |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
zB dass man mit dem Schläger den Abbprallwinkel beeinflussen kann. Oder man baut noch eine art Drall in den Ball mit ein. Dann würde er auch immer ein anderen Abprallwinkel haben... | ||
max |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
bei den ecken kann man n kreis machen und dann den abprall winkel mit atan2 berechnen
aber wie man die schlägergeschwindigkeit mit einbeziehen kann? Code: [AUSKLAPPEN] Include "utils/keys.bb" Type ball Field x#,y# ;Koordinaten des Balls Field w,h Field v ;geschwindigkeit des balls Field dx#,dy# End Type Type spieler Field x#,y# ;koordinaten Field w,h ;breite,höhe ; Field r,g,b ;Farbe Field v#,maxv ;geschwindigkeit Field punkte ; Field dy ;für das Berechen wenn der ball auftrifft Field a# ;beschleunigung End Type Global cx_screen = 500 ;Bildschirmbreite cx = count x = anzahl der xpixel Global cy_screen = 400 ;Bildschirmhöhe Graphics cx_screen,cy_screen,16,2 Global ball.ball = New ball Global spieler1.spieler = New spieler Global spieler2.spieler = New spieler Global gameisrunning = True Global ende = False Global fontnorm = LoadFont("arial",16) Global fontgross = LoadFont("arial",26,1,0,1) ;-----bilder---; Global sp1img,sp2img,ballimg ;-----timer----; Global timer = CreateTimer(60) SetBuffer BackBuffer() SeedRnd(MilliSecs()) Repeat resetgame() While gameisrunning = True WaitTimer(timer) Cls updategame() Flip Wend Until ende = True Function initpict() If sp1img Then FreeImage sp1img EndIf sp1img = CreateImage(spieler1\w,spieler1\h) SetBuffer ImageBuffer(sp1img) Color 255,255,255 Oval 0,0,spieler1\w,spieler1\w Oval 0,spieler1\h-spieler1\w,spieler1\w,spieler1\w Rect 0,spieler1\w/2,spieler1\w,spieler1\h-spieler1\w ;----Spieler2-----; If sp2img Then FreeImage sp2img EndIf sp2img = CreateImage(spieler2\w,spieler2\h) SetBuffer ImageBuffer(sp2img) Color 255,255,255 Oval 0,0,spieler2\w,spieler2\w Oval 0,spieler2\h-spieler1\w,spieler2\w,spieler2\w Rect 0,spieler2\w/2,spieler2\w,spieler2\h-spieler2\w ;----ball----; If ballimg Then FreeImage ballimg EndIf ballimg = CreateImage(ball\w,ball\h) SetBuffer ImageBuffer(ballimg) Oval 0,0,ball\w,ball\h ;wieder auf den doublebuffer setzen SetBuffer BackBuffer() End Function Function resetgame() ball\w = 10 ball\h = 10 ball\x# = (cx_screen -ball\w)/2 ;mittig positionieren ball\y# = (cy_screen- ball\h)/2 ; winkel = Rnd(-70,70);Rnd(359) ball\v = 7 If Rnd(1) Then ball\dx = Cos(winkel)*ball\v Else ball\dx = -Cos(winkel)*ball\v EndIf ball\dy = -Sin(winkel)*ball\v ;----------------------------------- spieler1\w = 10 spieler1\h = 80 spieler1\y = (cy_screen -spieler1\h)/2 spieler1\x = 10 spieler1\v# = 0 spieler1\maxv= 8 spieler1\a# = .5 spieler1\punkte = 0 ;----------------------------------- spieler2\w = 10 spieler2\h = 80 spieler2\y = (cy_screen -spieler2\h)/2 spieler2\x = cx_screen-30 spieler2\v# = 0 spieler2\maxv= 8 spieler2\a# = .5 spieler2\punkte = 0 initpict() End Function Function updategame() If KeyDown(KEY_UP) Then spieler2\v = -spieler2\maxv ElseIf KeyDown(KEY_DOWN) Then spieler2\v = spieler2\maxv Else spieler2\v = 0 EndIf If spieler2\v > 0 Then spieler2\y = min(spieler2\y + spieler2\v,cy_screen-spieler2\h) ElseIf spieler2\v < 0 Then spieler2\y = max(spieler2\y + spieler2\v,0) EndIf ;--------------------------------- If KeyDown(KEY_W) Then ; spieler1\v = -spieler1\maxv ElseIf KeyDown(KEY_S) Then spieler1\v = spieler1\maxv Else spieler1\v = 0 EndIf If spieler1\v > 0 Then spieler1\y = min(spieler1\y + spieler1\v,cy_screen-spieler1\h) ElseIf spieler1\v < 0 Then spieler1\y = max(spieler1\y + spieler1\v,0) EndIf ;-------------------------------- If KeyHit(1) Then ;gameisrunning = False resetgame() EndIf ;-------------------------------- ball\x# = ball\x# + ball\dx# ball\y# = ball\y# + ball\dy# If ((ball\y# < 0) And (ball\dy# < 0)) Or ((ball\y# + ball\h > cy_screen) And (ball\dy > 0)) Then ball\dy = -ball\dy ElseIf ((ball\x# < 0) And (ball\dx# < 0)) Or ((ball\x# + ball\w > cx_screen) And ((ball\dx#) > 0)) Then ball\dx = -ball\dx EndIf If (ball\x<spieler1\x+spieler1\w) And (ball\dx<>0) Then ;If (spieler1\y < ball\y+ball\h) And (spieler1\y + spieler1\h > ball\y) Then If ImagesCollide(sp1img,spieler1\x,spieler1\y,0,ballimg,ball\x,ball\y,0) If spieler1\y+spieler1\w/2 > ball\y+ball\h Then winkel = ATan2(ball\y-spieler1\y,ball\x-spieler1\x) ball\dx = Cos#(winkel)*ball\v ball\dy = Sin#(winkel)*ball\v ElseIf spieler1\y + (spieler1\h-spieler1\w/2)<ball\y Then winkel = ATan2(ball\y-spieler1\y+spieler1\h-spieler1\w,ball\x-spieler1\x) ball\dx = Cos#(winkel)*ball\v ball\dy = Sin#(winkel)*ball\v Else ball\dx = -ball\dx EndIf ball\dy = ball\dy + spieler1\v*0.1 ;genau hier liegt mein Problem EndIf EndIf ;----spieler2-----; If (ball\x>cx_screen-spieler2\x) And (ball\dx<>0) Then ;If (spieler1\y < ball\y+ball\h) And (spieler1\y + spieler1\h > ball\y) Then If ImagesCollide(sp2img,spieler2\x,spieler2\y,0,ballimg,ball\x,ball\y,0) If spieler2\y+spieler2\w/2 > ball\y+ball\h Then winkel = ATan2(ball\y-spieler2\y,ball\x-spieler2\x) ball\dx = Cos#(winkel)*ball\v ball\dy = Sin#(winkel)*ball\v ElseIf spieler2\y + (spieler2\h-spieler2\w/2)<ball\y Then winkel = ATan2(ball\y-spieler2\y+spieler2\h-spieler2\w,ball\x-spieler2\x) ball\dx = Cos#(winkel)*ball\v ball\dy = Sin#(winkel)*ball\v Else ball\dx = -ball\dx EndIf ball\dy = ball\dy + spieler2\v*0.1 ;und genau hier liegt mein Problem EndIf EndIf Color 255,255,255 DrawImage ballimg,ball\x,ball\y DrawImage sp1img,spieler1\x,spieler1\y DrawImage sp2img,spieler2\x,spieler2\y Rect 1,1,cx_screen-1,cy_screen-1,0 End Function Function max(z1#,z2#) If(z1>z2) Return z1 Return z2 End Function Function min(z1#,z2#) If(z1<z2) Return z1 Return z2 End Function |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
hey dankee ! Aber die Steuerund klappt nich ![]() |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
max |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hier ist keys.bb hab ich ausversehen vergessen
Code: [AUSKLAPPEN] ;Datei: "keys.bb" ;diese datei enthält die scancodes der tastatur: ;------------------------------------------------------------------------- ;------Zahlen----------- Const KEY_1 = 2 Const KEY_2 = 3 Const KEY_3 = 4 Const KEY_4 = 5 Const KEY_5 = 6 Const KEY_6 = 7 Const KEY_7 = 8 Const KEY_8 = 9 Const KEY_9 = 10 Const KEY_0 = 11 ;------Buchstaben-------- Const KEY_A = 30 Const KEY_B = 48 Const KEY_C = 46 Const KEY_D = 32 Const KEY_E = 18 Const KEY_F = 33 Const KEY_G = 34 Const KEY_H = 35 Const KEY_I = 23 Const KEY_J = 36 Const KEY_K = 37 Const KEY_L = 38 Const KEY_M = 50 Const KEY_N = 49 Const KEY_O = 24 Const KEY_P = 25 Const KEY_Q = 16 Const KEY_R = 19 Const KEY_S = 31 Const KEY_T = 20 Const KEY_U = 22 Const KEY_V = 47 Const KEY_W = 17 Const KEY_X = 45 Const KEY_Y = 44 Const KEY_Z = 21 Const KEY_AE = 40 Const KEY_OE = 39 Const KEY_UE = 26 Const KEY_SZ = 12 ;------Funktion-Tasten---- Const KEY_F1 = 59 Const KEY_F2 = 60 Const KEY_F3 = 61 Const KEY_F4 = 62 Const KEY_F5 = 63 Const KEY_F6 = 64 Const KEY_F7 = 65 Const KEY_F8 = 66 Const KEY_F9 = 67 Const KEY_F10 = 68 Const KEY_F11 = 87 Const KEY_F12 = 88 ;----------Nummern-Block----- Const KEY_NUM0 = 82 Const KEY_NUM1 = 79 Const KEY_NUM2 = 80 Const KEY_NUM3 = 81 Const KEY_NUM4 = 75 Const KEY_NUM5 = 76 Const KEY_NUM6 = 77 Const KEY_NUM7 = 71 Const KEY_NUM8 = 72 Const KEY_NUM9 = 73 Const KEY_NUMSL = 181 Const KEY_NUMAST = 55 Const KEY_NUMMIN = 74 Const KEY_NUMPLUS = 78 Const KEY_NUMKOM = 83 Const KEY_NUMRETURN = 156 Const KEY_NUMLOCK = 69 ;---------Curser-Tasten-------- Const KEY_UP = 200 Const KEY_DOWN = 208 Const KEY_LEFT = 203 Const KEY_RIGHT = 205 ;---------6er-Block------------ Const KEY_EINFG = 210 Const KEY_ENTF = 211 Const KEY_POS1 = 199 Const KEY_ENDE = 207 Const KEY_BILDUP = 201 Const KEY_BILDDOWN = 209 ;---------Steuer-Tasten--------- Const KEY_RETURN = 28 Const KEY_SPACE = 57 Const KEY_BKSPACE = 14 Const KEY_TAB = 15 Const KEY_ROLL = 70 Const KEY_LSHFT = 42 Const KEY_LSTRG = 29 Const KEY_LALT = 56 Const KEY_RSHFT = 54 Const KEY_RSTRG = 157 Const KEY_RALT = 184 Const KEY_FESTSTELL = 58 Const KEY_PRINT = 183 Const KEY_PAUSE = 197 Const KEY_ESC = 1 ;--------Sonderzeichen----------- Const KEY_VERGLEICH = 86 Const KEY_KOMMA = 51 Const KEY_PUNKT = 52 Const KEY_MINUS = 53 Const KEY_SHARP = 43 Const KEY_POTENZ = 41 Const KEY_PLUS = 27 ;---------Windows-Tasten----- Const KEY_LWIN = 219 Const KEY_RWIN = 220 Const KEY_RECHNER = 161 Const KEY_MENU = 221 Const KEY_COMPUTER = 235 |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Dankee !!!! | ||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hast du auch kapiert, wie der Code funzt ? ![]() |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bin dabei, is 'n langer code und deshalb brachts halt ne weile ![]() |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
max |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich glaub der code hat n bug ersetz einfach das mit den atan2 bei den spielern mit dem hier:
Code: [AUSKLAPPEN] If (ball\x<spieler1\x+spieler1\w) And (ball\dx<>0) Then ;If (spieler1\y < ball\y+ball\h) And (spieler1\y + spieler1\h > ball\y) Then If ImagesCollide(sp1img,spieler1\x,spieler1\y,0,ballimg,ball\x,ball\y,0) If spieler1\y+spieler1\w/2 > ball\y+ball\h Then winkel = ATan2(ball\y+(ball\h/2)-spieler1\y+(spieler1\w/2),ball\x+(ball\w/2)-(spieler1\x+(spieler1\w/2))) ball\dx = Cos#(winkel)*ball\v ball\dy = -Sin#(winkel)*ball\v ElseIf spieler1\y + (spieler1\h-spieler1\w/2)<ball\y Then winkel = ATan2((ball\y+ball\h/2)-spieler1\y+spieler1\h+(spieler1\w/2),ball\x+(ball\w/2)-spieler1\x+(spieler1\w/2)) ball\dx = Cos#(winkel)*ball\v ball\dy = Sin#(winkel)*ball\v Else ball\dx = -ball\dx EndIf ball\dy = ball\dy + spieler1\v*0.1 EndIf EndIf ;----spieler2-----; If (ball\x>cx_screen-spieler2\x) And (ball\dx<>0) Then ;If (spieler1\y < ball\y+ball\h) And (spieler1\y + spieler1\h > ball\y) Then If ImagesCollide(sp2img,spieler2\x,spieler2\y,0,ballimg,ball\x,ball\y,0) If spieler2\y+spieler2\w/2 > ball\y+ball\h Then winkel = ATan2(ball\y+(ball\h/2)-spieler2\y+(spieler2\w/2),ball\x+(ball\w/2)-(spieler2\x+(spieler2\w/2))) ball\dx = Cos#(winkel)*ball\v ball\dy = -Sin#(winkel)*ball\v ElseIf spieler2\y + (spieler2\h-spieler2\w/2)<ball\y Then winkel = ATan2((ball\y+ball\h/2)-spieler2\y+spieler2\h+(spieler2\w/2),ball\x+(ball\w/2)-spieler2\x+(spieler2\w/2)) ball\dx = -Cos#(winkel)*ball\v ball\dy = Sin#(winkel)*ball\v Else ball\dx = -ball\dx EndIf ball\dy = ball\dy + spieler2\v*0.1 EndIf EndIf 1 bin ich nicht bei der atan2 berechnung vom mittelpunkt der kreise ausgegangen, was bei gleicher größe aber egal ist 2. änderte ich das mit "sin" in "-sin" und dann nochma mit "cos". weiß nich warum aba es haut hin ![]() ps: atan2 berechnet den winkel von einem punkt zum nullpunkt (jedenfalls glaub ichs, ich habs selbst erarbeitet(http://blitzbase.de/quellcode/ballsimulation.bb) und habs erst in 2 jahren in mathe wenn überhaupt) |
||
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei mir sah der Algo so aus:
Code: [AUSKLAPPEN] Graphics 800,600,32,2
SetBuffer BackBuffer() ysiz=90 xsiz=20 bxsiz=20 bysiz=20 bx#=GraphicsWidth()/2 by#=GraphicsHeight()/2 s#=Rnd(5,8) w#=Rnd(360) bxs#=Sin(w#)*s# bys#=Cos(w#)*s# p1#=GraphicsHeight()/2-ysiz/2 p2#=GraphicsHeight()/2-ysiz/2 font=LoadFont("Comic Sans MS",72,1) SetFont font While Not KeyHit(1) Cls obx#=bx# oby#=by# bx#=bx#+bxs# by#=by#+bys# If bx#+bxsize#>GraphicsWidth() Then bxs#=-bxs#:pl=pl+1 If by#+bysize#>GraphicsHeight() Then bys#=-bys# If bx#<bxsize# Then bxs#=-bxs#:pr=pr+1 If by#<bysize# Then bys#=-bys# bs#=Sqr(bxs#*bxs#+bys#*bys#) bw#=ATan2(bxs#,bys#) If Sqr((obx#-bx#)^2+(oby#-by#)^2)<3 Then bx#=GraphicsWidth()/2:by#=GraphicsHeight()/2 m1#=KeyDown(31)-KeyDown(17) m2#=KeyDown(208)-KeyDown(200) p1s#=(p1s#)*.98+(m1#)*.1 p2s#=(p2s#)*.98+(m2#)*.1 p1#=p1#+p1s# p2#=p2#+p2s# If RectsOverlap(bx#-bxsiz/2,by#-bysiz/2,bxsiz,bysiz,0,p1#,xsiz,ysiz) nw#=180+ATan2((xsiz/2)-(bx#),(p1#+ysiz/2)-(by#)) bxs#=Sin(nw#)*bs# bys#=Cos(nw#)*bs# EndIf If RectsOverlap(bx#-bxsiz/2,by#-bysiz/2,bxsiz,bysiz,GraphicsWidth()-xsiz,p2#,xsiz,ysiz) nw#=180+ATan2((GraphicsWidth())-(bx#),(p2#+ysiz/2)-(by#)) bxs#=Sin(nw#)*bs# bys#=Cos(nw#)*bs# EndIf If (p1#+ysiz)>GraphicsHeight() Then p1#=GraphicsHeight()-ysiz:p1s#=-p1s#*.9 If (p2#+ysiz)>GraphicsHeight() Then p2#=GraphicsHeight()-ysiz:p2s#=-p2s#*.9 If p1#<0 Then p1#=0:p1s#=-p1s#*.9 If p2#<0 Then p2#=0:p2s#=-p2s#*.9 Color 255,255,255 Text GraphicsWidth()/2,GraphicsHeight()/2,pl+":"+pr,1,1 Color 255,0,0 Rect 0,p1#,xsiz,ysiz Color 0,255,0 Rect GraphicsWidth()-xsiz,p2#,xsiz,ysiz Color 200,200,200 bxp=bx#-bxsiz/2 byp=by#-bysiz/2 Oval bxp,byp,bxsiz,bysiz Flip Wend End Übrigens wieder mit Sin und Cos Berechnungen ![]() Achso: "Classik" wird eigentlich "Classic" geschrieben. |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group