Proyek 9 minggu lalu saya diberi tugas membuat games PingPong dengan mengikuti prosedur pada HardCopy. ternyata membuat game pingpong dengan visual basic cukup mudah, bagi yang mau mencobanya tinggal ikuti saja prosedurnya. kira-kira seperti ini lah setelah di debug :
Mulai dengan membuat tampilan :
1. buka aplikasi Visual Basic 6.0
2. kemudian dalam form1 masukkan sebuah komponen Command1. ubah caption nya menjadi Mulai.
3. masukkan tiga buah komponen Label A.
catatan : Pada properti Name pada komponen Label3 ubah menjadi lblScore dan propeti Caption-nya isi dengan "0:0". Posisinya sesuaikan dengan gambar diatas.
4. masukkan duah buah komponen Timer.
Pada properti Name komponen Timer1 ubah menjadi timerBall, Timer2 menjadi timerKbrd , ubah Enabled keduanya menjadi False. Interval Timer1 = 50, Timer2 = 100.
5. Tambahkan 3 Form lagi.
6. Aktifkan form2, Untuk Form2 ubah Properti Name menjadi frmBall.
masukkan komponen Shape, ubah properti BorderWidth-nya menjadi 5 dan gunakan shape 3-Circle.
catatan : Ubah properti BorderWidth-nya menjadi 0-None, Caption-nya dikosongkan, kemudian ControlBox-nya menjadi nilai False.
7. Aktifkan Form3 dan Form4.
Ganti Properti Form3 menjadi frmLeft dan Form4 menjadi frmRight. BorderStyle menjadi 1-Fixed Single, Caption-nya dikosongkan, kemudian ControlBox beri nilai False.
Kemudian Saatnya Meng-Coding ^^
a. Modul
Option Explicit
Public Declare Function GetKeyboardState Lib "user32" (pbkeystate As Byte) As Long
Public Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hrgn As Long, ByVal bRedraw As Boolean) As Long
Public Declare Function GetKeyboardState Lib "user32" (pbkeystate As Byte) As Long
Public Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hrgn As Long, ByVal bRedraw As Boolean) As Long
b. Form1
Option Explicit
Dim arrKBRD(256) As Byte
Dim scoreLEFT As Single
Dim scoreRIGHT As Single
Dim ballStepX As Integer
Dim ballStepY As Integer
Private Sub updateScore(dLEFT As Integer, dRIGHT As Integer)
scoreLEFT = scoreLEFT + dLEFT
scoreRIGHT = scoreRIGHT + dRIGHT
lblscore.Caption = scoreLEFT & " : " & scoreRIGHT
End Sub
Private Sub makeBall()
Dim IngRegion As Long
IngRegion = CreateEllipticRgn(0, 0, frmBall.Width / Screen.TwipsPerPixelX, frmBall.Height / Screen.TwipsPerPixelY)
Call SetWindowRgn(frmBall.hwnd, IngRegion, True)
End Sub
Private Sub showBars()
frmRight.Show
frmRight.Left = Screen.Width - frmRight.Width
frmLeft.Show
frmLeft.Left = 0
End Sub
Private Sub cmdGo_Click()
makeBall
showBars
scoreLEFT = 0
scoreRIGHT = 0
updateScore 0, 0
Randomize
resetBALL
timerBall.Enabled = True
timerKbrd.Enabled = True
End Sub
Private Sub resetBALL()
frmBall.Show
If getRand(0, 1) = 0 Then
ballStepX = 400
Else
ballStepY = -400
End If
ballStepY = getRand(-300, 300)
End Sub
Private Function getRand(LOWERBOUND As Integer, UPPERBOUND As Integer) As Integer
getRand = Int((UPPERBOUND - LOWERBOUND + 1) * Rnd + LOWERBOUND)
End Function
Private Sub Form_Load()
Me.Left = Screen.Width / 2 - Me.Width / 2
Me.Top = 0
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Private Sub timerBall_Timer()
frmBall.Left = frmBall.Left + ballStepX
frmBall.Top = frmBall.Top + ballStepY
checkBALL
End Sub
Private Sub checkBALL()
If frmBall.Top <= 0 Then
ballStepY = makePLUS(ballStepY)
frmBall.Top = 1
End If
If (frmBall.Top + frmBall.Height) >= Screen.Height Then
ballStepY = makeMINUS(ballStepY)
frmBall.Top = Screen.Height - 1 - frmBall.Height
End If
If frmBall.Left <= 0 Then
ballStepX = makePLUS(ballStepX)
frmBall.Left = 1
updateScore 0, 1
End If
If (frmBall.Left + frmBall.Width) >= Screen.Width Then
ballStepX = makeMINUS(ballStepX)
frmBall.Left = Screen.Width - 1 - frmBall.Width
updateScore 1, 0
End If
If ((frmBall.Left + frmBall.Width) >= frmRight.Left) And (frmBall.Top + frmBall.Height) >= frmRight.Top And (frmBall.Top < (frmRight.Top + frmRight.Height)) Then
ballStepX = makeMINUS(ballStepX)
frmBall.Left = frmRight.Left - frmBall.Width - 1
ballStepY = getRand(-200, 200)
End If
If (frmBall.Left <= (frmLeft.Left + frmLeft.Width)) And (frmBall.Top + frmBall.Height) >= frmLeft.Top And (frmBall.Top < (frmLeft.Top + frmLeft.Height)) Then
ballStepX = makePLUS(ballStepX)
frmBall.Left = frmLeft.Left + frmBall.Width + 1
ballStepY = getRand(-200, 200)
End If
End Sub
Private Sub timerKbrd_Timer()
Const MOVE_STEP = 350
GetKeyboardState arrKBRD(0)
If (arrKBRD(222) > 1) Then
frmRight.Top = frmRight.Top - MOVE_STEP
ElseIf (arrKBRD(191) > 1) Then
frmRight.Top = frmRight.Top + MOVE_STEP
End If
If (arrKBRD(65) > 1) Then
frmLeft.Top = frmLeft.Top - MOVE_STEP
ElseIf (arrKBRD(90) > 1) Then
frmLeft.Top = frmLeft.Top + MOVE_STEP
End If
If (arrKBRD(27) > 1) Then End
End Sub
Private Function makeMINUS(i As Integer) As Integer
If i > 0 Then
makeMINUS = -i
Else
makeMINUS = i
End If
End Function
Private Function makePLUS(i As Integer) As Integer
If i > 0 Then
makePLUS = i
Else
makePLUS = -i
End If
End Function
Dim arrKBRD(256) As Byte
Dim scoreLEFT As Single
Dim scoreRIGHT As Single
Dim ballStepX As Integer
Dim ballStepY As Integer
Private Sub updateScore(dLEFT As Integer, dRIGHT As Integer)
scoreLEFT = scoreLEFT + dLEFT
scoreRIGHT = scoreRIGHT + dRIGHT
lblscore.Caption = scoreLEFT & " : " & scoreRIGHT
End Sub
Private Sub makeBall()
Dim IngRegion As Long
IngRegion = CreateEllipticRgn(0, 0, frmBall.Width / Screen.TwipsPerPixelX, frmBall.Height / Screen.TwipsPerPixelY)
Call SetWindowRgn(frmBall.hwnd, IngRegion, True)
End Sub
Private Sub showBars()
frmRight.Show
frmRight.Left = Screen.Width - frmRight.Width
frmLeft.Show
frmLeft.Left = 0
End Sub
Private Sub cmdGo_Click()
makeBall
showBars
scoreLEFT = 0
scoreRIGHT = 0
updateScore 0, 0
Randomize
resetBALL
timerBall.Enabled = True
timerKbrd.Enabled = True
End Sub
Private Sub resetBALL()
frmBall.Show
If getRand(0, 1) = 0 Then
ballStepX = 400
Else
ballStepY = -400
End If
ballStepY = getRand(-300, 300)
End Sub
Private Function getRand(LOWERBOUND As Integer, UPPERBOUND As Integer) As Integer
getRand = Int((UPPERBOUND - LOWERBOUND + 1) * Rnd + LOWERBOUND)
End Function
Private Sub Form_Load()
Me.Left = Screen.Width / 2 - Me.Width / 2
Me.Top = 0
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Private Sub timerBall_Timer()
frmBall.Left = frmBall.Left + ballStepX
frmBall.Top = frmBall.Top + ballStepY
checkBALL
End Sub
Private Sub checkBALL()
If frmBall.Top <= 0 Then
ballStepY = makePLUS(ballStepY)
frmBall.Top = 1
End If
If (frmBall.Top + frmBall.Height) >= Screen.Height Then
ballStepY = makeMINUS(ballStepY)
frmBall.Top = Screen.Height - 1 - frmBall.Height
End If
If frmBall.Left <= 0 Then
ballStepX = makePLUS(ballStepX)
frmBall.Left = 1
updateScore 0, 1
End If
If (frmBall.Left + frmBall.Width) >= Screen.Width Then
ballStepX = makeMINUS(ballStepX)
frmBall.Left = Screen.Width - 1 - frmBall.Width
updateScore 1, 0
End If
If ((frmBall.Left + frmBall.Width) >= frmRight.Left) And (frmBall.Top + frmBall.Height) >= frmRight.Top And (frmBall.Top < (frmRight.Top + frmRight.Height)) Then
ballStepX = makeMINUS(ballStepX)
frmBall.Left = frmRight.Left - frmBall.Width - 1
ballStepY = getRand(-200, 200)
End If
If (frmBall.Left <= (frmLeft.Left + frmLeft.Width)) And (frmBall.Top + frmBall.Height) >= frmLeft.Top And (frmBall.Top < (frmLeft.Top + frmLeft.Height)) Then
ballStepX = makePLUS(ballStepX)
frmBall.Left = frmLeft.Left + frmBall.Width + 1
ballStepY = getRand(-200, 200)
End If
End Sub
Private Sub timerKbrd_Timer()
Const MOVE_STEP = 350
GetKeyboardState arrKBRD(0)
If (arrKBRD(222) > 1) Then
frmRight.Top = frmRight.Top - MOVE_STEP
ElseIf (arrKBRD(191) > 1) Then
frmRight.Top = frmRight.Top + MOVE_STEP
End If
If (arrKBRD(65) > 1) Then
frmLeft.Top = frmLeft.Top - MOVE_STEP
ElseIf (arrKBRD(90) > 1) Then
frmLeft.Top = frmLeft.Top + MOVE_STEP
End If
If (arrKBRD(27) > 1) Then End
End Sub
Private Function makeMINUS(i As Integer) As Integer
If i > 0 Then
makeMINUS = -i
Else
makeMINUS = i
End If
End Function
Private Function makePLUS(i As Integer) As Integer
If i > 0 Then
makePLUS = i
Else
makePLUS = -i
End If
End Function
c. frmBall
Option Explicit
Private Sub Form_Load()
Me.Width = 1000
Me.Height = 1000
Shape1.Left = 0
Shape1.Top = 0
Shape1.Width = Me.Width
Shape1.Height = Me.Height
End Sub
Private Sub Form_Load()
Me.Width = 1000
Me.Height = 1000
Shape1.Left = 0
Shape1.Top = 0
Shape1.Width = Me.Width
Shape1.Height = Me.Height
End Sub
d. frmLeft
Option Explicit
Private Sub Form_Load()
Me.Width = 500
Me.Height = 2000
End Sub
Private Sub Form_Load()
Me.Width = 500
Me.Height = 2000
End Sub
e. frmRight
Option Explicit
Private Sub Form_Load()
Me.Width = 500
Me.Height = 2000
End Sub
Private Sub Form_Load()
Me.Width = 500
Me.Height = 2000
End Sub
Tidak ada komentar:
Posting Komentar