Jumat, 11 Januari 2013

Game PingPong Visual Basic

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


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

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

d. frmLeft
Option Explicit
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






Tidak ada komentar:

Posting Komentar

Entri Menarik Lainnya :)