-
few problems
Attached find a program I like to call the cannonball game. It is a very basic game, my first attempt at something like this, and I have a few questions.
1) How can i prevent the user from moveing the Target (the Box) off of the line?
2) When you hit the target, then hit fire again, it displays the message that you won again... why?
3)How would I draw a line outlinging the arc of the ball's flight?
Thanks for your help, i'm sure there will be more questions later.
-
1 Attachment(s)
oops
-
Answer to #3 use Bezier curves. Basically, you define a start point, end point, and then two sets of middle points to force the line into any kind of shape you want. PolyBezierTo assume you already have started, so you have a current start point.
These apis allow you to draw on any object with an hDC.
Code:
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function PolyBezier Lib "gdi32.dll" (ByVal hdc As Long, lppt As POINTAPI, ByVal cPoints As Long) As Long
Private Declare Function PolyBezierTo Lib "gdi32.dll" (ByVal hdc As Long, lppt As POINTAPI, ByVal cCount As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As Any) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function PolyPolygon Lib "gdi32.dll" (ByVal hdc As Long, lpPoint As POINTAPI, lpPolyCounts As Long, ByVal nCount As Long) As Long
Private Sub Form_Paint()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail: [email protected]
Dim pts(0 To 6) As POINTAPI
Dim numpoints(0 To 1) As Long
'set the coördinates
pts(0).x = 0: pts(0).y = 100
pts(1).x = 125: pts(1).y = 75
pts(2).x = 255: pts(2).y = 148
pts(3).x = 219: pts(3).y = 199
pts(4).x = 315: pts(4).y = 203
pts(5).x = 236: pts(5).y = 16
pts(6).x = 122: pts(6).y = 123
'set the forecolor to green
Me.ForeColor = vbGreen
'draw the bézier
PolyBezier Me.hdc, pts(0), 7
'set the forecolor to red
Me.ForeColor = vbRed
'move the 'active' point
MoveToEx Me.hdc, 200, 25, ByVal 0&
'set the coördinates
pts(0).x = 125: pts(0).y = 50
pts(1).x = 123: pts(1).y = 200
pts(2).x = 102: pts(2).y = 100
pts(3).x = 102: pts(3).y = 100
pts(4).x = 312: pts(4).y = 75
pts(5).x = 289: pts(5).y = 125
'draw the bézier
PolyBezierTo Me.hdc, pts(0), 6
'set the forecolor to blue
Me.ForeColor = vbBlue
'set the points belonging to the rectangle
pts(0).x = 20: pts(0).y = 10
pts(1).x = 200: pts(1).y = 10
pts(2).x = 200: pts(2).y = 190
pts(3).x = 20: pts(3).y = 190
numpoints(0) = 4
'set the points belonging to the triangle
pts(4).x = 100: pts(4).y = 0
pts(5).x = 50: pts(5).y = 100
pts(6).x = 150: pts(6).y = 100
numpoints(1) = 3
'draw the polygons
PolyPolygon Me.hdc, pts(0), numpoints(0), 2
End Sub