Gefangener Ball soll abtrumpfen.

Anfängerfragen zum Programmieren mit PureBasic.
neuling
Beiträge: 26
Registriert: 18.10.2007 16:25

Gefangener Ball soll abtrumpfen.

Beitrag von neuling »

Hallo,

ich möchte dass ein Punkt/Circle in einem 2D-Raum hin und her fliegt, erreicht dieser eine soll er wieder abtrumpfen etc.

Ich habe mal diesen Code hier geschrieben:

Code: Alles auswählen


InitSprite()
InitMouse()
InitKeyboard()

OpenScreen(1024,768,16,"")

; ### Variablen der größe des BS und Startpunkt ###

breite=30
width=1024
height=768
x=1024/2
y=768/2

; ### Bewegungsrichung ###

bx=-1
by=-1
Repeat
 ExamineKeyboard()
 ExamineMouse()
 StartDrawing(ScreenOutput())
 FrontColor(RGB(255,255,180))
 BackColor(RGB(100,100,100))
 DrawingMode(#PB_2DDrawing_Transparent)
  x=x+bx
  y=y+by
  
  ; ### Zeichne die Wände (30px dick am Bildschrimrand) ###
  
  Box(0,0,w,b)
  Box(0,h-30,w,b)
  Box(0,0,b,h)
  Box(w-30,0,b,h)
  
  ; ### Abfrage ###
  
  
  If y<=30
   by=1
   Else
   by=-1
  EndIf
  
  If y>=768-30
   by=-1
   Else
   by=1
  EndIf
  
  If x<=30
   bx=1
   Else
   bx=-1
  EndIf
  
  If x>=1024-30
   bx=-1
   Else
   bx=1
  EndIf
  
  ; ### Lasse mir die aktuellen x y werte anzeigen
  
  DrawText(0,0,"x y:"+Str(x)+" "+Str(y),RGB(0,0,0))
  
  ; ### Zeichne den Ball
  
 Circle(x,y,10)
 StopDrawing()
 FlipBuffers()
 ClearScreen(0)
Until KeyboardPushed(#PB_Key_Escape)

Aber irgendwie trumpft hier garnichts ab..... mit den Variablen by und bx stelle ich die richtung fest in der geflogen werden soll......
Wo liegt der fehler?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Gefangener Ball soll abtrumpfen.

Beitrag von Kiffi »

bei Berührung mit der Wand musst Du lediglich das Vorzeichen von by und
bx ändern. Das machst Du am einfachsten, wenn Du sie mit -1
multiplizierst.

Code: Alles auswählen

  If y<=30
    by*-1
  EndIf
  
  If y>=768-30
    by*-1
  EndIf
  
  If x<=30
    bx*-1
  EndIf
  
  If x>=1024-30
    bx*-1
  EndIf
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
C4rizz
Beiträge: 223
Registriert: 01.05.2006 12:43
Computerausstattung: Desktop : Amd Athlon X2 3,2 ghz Black Edition. 4GB Corsair XMS DDR2, nVidia 460 gtx Sonic Extreme

Notebook : [Asus] i5 @ 2,9 ghz, 8GB Corsair DDR3, nVidia gt 540m

Internet : DSL - 16 Mbit | HSDPA - 7,2 Mbit
Wohnort: Celle

Beitrag von C4rizz »

Vileicht hilft dir dieses kleine Pong Game noch n bissl weiter :wink:

Code: Alles auswählen

;Compiler : PB 4.xx
;-Initialisieren
InitSprite()
InitKeyboard()

;-Variablen
g = LoadFont(0,"Arial",40,0)
BallX = 400
BallY = Random(300)
BewegX  = - 2
BewegY  = - 1
scorea = 0
scoreb = 0
SchlaegerX = 600 - 10
SchlaegerY = 200 - (30 / 2)

SchlaegerbX = 50 - 10
SchlaegerbY = 200 - (30 / 2)

OpenScreen(640,480,16,"Pong")

;-Hauptschleife
Repeat
ClearScreen(RGB(0,0,0))
ExamineKeyboard() 
   
;- Zeichnen   
   StartDrawing(ScreenOutput())
      FrontColor(RGB(255,255,255))
      DrawingMode(#TRANSPARENT)
      DrawingFont(g)
      Box(SchlaegerX,SchlaegerY,10,20)
      Box(schlaegerbx,schlaegerby,10,20)
      DrawText(430,30,Str(scorea),RGB(255,255,255))
      DrawText(150,30,Str(scoreb),RGB(255,255,255))
      Box(BallX-1,BallY-1,3,3)
      Line(300,0,1,1000,RGB(255,255,255))
   StopDrawing()
   FlipBuffers()

   BallX + BewegX
   BallY + BewegY

;- Tastaturabfragen/Schläger
   If KeyboardPushed(#PB_Key_Up)
      SchlaegerY - 2
   EndIf
   If KeyboardPushed(#PB_Key_Down)
      SchlaegerY + 2
   EndIf
   If KeyboardPushed(#PB_Key_W)
      Schlaegerby - 2
   EndIf
   If KeyboardPushed(#PB_Key_S)
      schlaegerby + 2
   EndIf
   
;- Kollisionen
   If SchlaegerY < 0
      SchlaegerY = 0
   ElseIf SchlaegerY > 490 - 30
      SchlaegerY = 490 - 30
   EndIf
   If SchlaegerbY < 0
      SchlaegerbY = 0
   ElseIf SchlaegerbY > 490 - 30
      SchlaegerbY = 490 - 30
   EndIf
   
   If BallY <  0 
      BewegY = 1
   EndIf
   If BallY > 480
      BewegY = -1
   EndIf

   If BallX > SchlaegerX And BallX < SchlaegerX + 10 And BallY > SchlaegerY And BallY < SchlaegerY + 20
      BewegX = -2
      scorea + 1 
   EndIf
   If BallX > SchlaegerbX And BallX < SchlaegerbX + 10 And BallY > SchlaegerbY And BallY < SchlaegerbY + 20
      BewegX = 2
      scoreb + 1
   EndIf
   
;- Beenden
Until KeyboardPushed(#PB_Key_Escape) Or BallX > 643 Or ballx < -3
End
PB 3.94/4.10
Meine Hompage
Antworten