Pong i VB06 , Programmering A
hej
sitter med en skoluppgift i programmering A och har bestämt mig att göra ett pong.
har kommit en bra bit dock så funkar inte min ide om att en msgbox ska ploppa upp när en spelare har vunnit.
msgbox:en ploppar upp och trycker jag på nej stängs programmet
men trycker jag på ja Reset:as poängen men de går inte starta bollen igen.
Dim upp As Boolean ' varabel med namn upp deklareras med data typen boolean
Dim ner As Boolean ' varabel med namn ner deklareras med data typen boolean
Dim ner2 As Boolean ' varabel med namn ner2 deklareras med data typen boolean
Dim upp2 As Boolean ' varabel med namn upp2 deklareras med data typen boolean
Dim speed As Long ' varabel med namn spped deklareras med data typen long
Dim Xaxel As Integer ' varabel med namn Xaxel deklareras med data typen integer
Dim Yaxel As Integer ' varabel med namn Yaxel deklareras med data typen integer
Dim points1 As Integer ' varabel med namn points1 deklareras med data typen integer
Dim points2 As Integer ' varabel med namn points2 deklareras med data typen integer
Dim svar As Integer ' varabel med namn svar deklareras med data typen integer
Dim svar2 As Integer ' varabel med namn svar deklareras med data typen integer
Private Sub cmdstart_Click()
cmdstart.Visible = False 'när man klickar på Start så blir försvinner knappen
timer2.Enabled = True 'bollens timer sätts enabled så att bollen börjar röra sig
Timer1.Enabled = True 'Skivorna/racketernas timer sätts enabled så att paddlarna går att styra
End Sub
Private Sub Form_Load() ' form load ska
MsgBox prompt:="spelregler:" & Chr(13) & " först till 10 poäng vinner" & Chr(13) & "för att ta poäng ska man få motståndaren att missa bollen med sin skiva" & Chr(13) & "" & Chr(13) & " kontroller spelare1 " & Chr(13) & "Upp - Pilupp" & Chr(13) & "Ner - pil ner" & Chr(13) & "" & Chr(13) & "Kontroller Spelare2" & Chr(13) & "Upp - Q" & Chr(13) & "Ner - A" & Chr(13) & "" & Chr(13) & "Lycka Till!"
'en msg box med regler och kontroller dyka upp
Xaxel = 1 'variabeln Xaxel tilldelas 1
Yaxel = 1 'variabeln Yaxel tilldelas 1
speed = 100 'variabeln speed tilldelas 100
timer2.Enabled = False 'timer2 tilldelas värdet false ( bollens "fysikmotor" är av)
Timer1.Enabled = False ' timer1 tilldelas värdet false ( skivornas "fysikmotor" är av)
End Sub
Private Sub timer2_Timer()
shpBoll.Left = shpBoll.Left + (speed * Xaxel) ' bollens x-värde tilldelas sitt eget värde + variabeln speed * variabeln Xaxel
shpBoll.Top = shpBoll.Top + (speed * Yaxel) ' Bollens Y-värde tilldelas eget värde + variabeln speed * variabeln Yaxel
If (shpBoll.Top + shpBoll.Height) >= boxbottom.Y1 Or shpBoll.Top <= boxtop.Y1 Then
Yaxel = Yaxel * -1
End If ' om bollens top värde + dess höjd ( med andra ord bollens botten) är mindre eller lika stor som boxens botten eller att bollens top är i samma höjd eller mer än boxens topp så kmr variabeln Yaxel byta värde_
'är det negativt blir det positivt då -1*-1=1 och är det positivt så blir det 1*-1 som blir -1
'om shpboll.left är mindre eller lika med shpskiva1's x1 värde och
'shpboll's top värde + shpboll's höjd genom 2 är större eller lika med shpskiva1's y2 värde och
'shpboll's top värde - shpboll's höjd * 1,5 är mindre eller = shpskiva1's y1 så
'tilldelas variabeln Xaxel summan av sig själv * -1 och
'variabeln speed tilldelas summan av sig själv + 2
'med andra ord fall bollen är i samma höjd eller lägre än skivan och dess halva är innanför plattans kanter
' så ökar farten med 2 och börjar gå i annan riktning då variabeln Xaxel byter från positivt till negativt eller tvärtom då
'-1*1=-1 och -1*-1=1
If shpBoll.Left <= shpskiva1.X1 And _
shpBoll.Top + (shpBoll.Height / 2) >= shpskiva1.Y2 And _
shpBoll.Top - (shpBoll.Height / 2) <= shpskiva1.Y1 Then
Xaxel = Xaxel * -1
speed = speed + 2
End If
'samma princip som ovan fast för att få ut ett värde där bollen är på plankan måste man addera bollens bredd
' då left värdet är på bollens vänstra sida
If shpBoll.Left + shpBoll.Width > shpskiva2.X1 And _
shpBoll.Top + (shpBoll.Height / 2) >= shpskiva2.Y2 And _
shpBoll.Top - (shpBoll.Height / 2) <= shpskiva2.Y1 Then
Xaxel = Xaxel * -1
speed = speed + 2
End If
'om bollens Xvärde är mindre eller lka med boxensvänstra sida Dvs om bollen missar skivan så
'timer1 blir inte enabled dvs man kan inte röra skivorna
'timer2 blir inte enabled dvs bollens "fysikmotor" stängs av
'bollens top och leftvärde tilldelas värden så att den placeras i motten
'båda skivornas y1 och y2 värden tilldelas värderna för punkterna där dom är centrerade
'variabeln points2 tilldelas värdet av sig själv + 1 Dvs spelare 2 får ett pöäng
'cmdstart blir synlig
'
If shpBoll.Left <= boxleft.X1 Then
Timer1.Enabled = False
timer2.Enabled = False
cmdstart.Visible = True
shpBoll.Top = 4080
shpBoll.Left = 5640
shpskiva1.Y1 = 5480
shpskiva1.Y2 = 3480
shpskiva2.Y1 = 5480
shpskiva2.Y2 = 3480
points2 = points2 + 1
End If
'samma sak som koden över fast här tilldelas variabeln points1 värdet av sig själv + 1
'för nu är drt spelare1 som gjort poäng
If shpBoll.Left + shpBoll.Width >= boxright.X1 Then
timer2.Enabled = False
Timer1.Enabled = False
cmdstart.Visible = True
shpBoll.Top = 4080
shpBoll.Left = 5640
shpskiva1.Y1 = 5480
shpskiva1.Y2 = 3480
shpskiva2.Y1 = 5480
shpskiva2.Y2 = 3480
points1 = points1 + 1
End If
'detta var en tanke om att ha en msgbox istället för rset knappen men det ville sig inte
'om variabeln points1 har ett värde på 10 eller mer så
'tilldelas variabeln svar vbyes eller vbno från en msgbox
'dvs om spelare1 har nåt 10 poäng så kommer det upp en msgbox
'som frågar om man vill fortsätta spela eller sluta
If points1 >= 10 Then
svar = MsgBox(" spelare1 har vunnit!!! spelare2 vill du ha revansch?? " _
& "?", _
vbYesNo)
End If
'om variabeln points2 har ett värde på 10 eller mer så
'tilldelas variabeln svar vbyes eller vbno från en msgbox
'dvs om spelare2 har nåt 10 poäng så kommer det upp en msgbox
'som frågar om man vill fortsätta spela eller sluta
If points2 >= 10 Then
svar2 = MsgBox(" spelare2 har vunnit!!! spelare1 vill du ha revansch?? " & "?", vbYesNo)
End If
'om variabeln svar är lika med 7 ( vbno) så stängs programmet
If svar = vbNo Then
End
End If
'om variabeln svar är lika med vbYes så ska alla värden reset och matchen starta om
If svar = vbYes Then
timer2.Enabled = False
Timer1.Enabled = False
cmdstart.Visible = True
shpBoll.Top = 4080
shpBoll.Left = 5640
shpskiva1.Y1 = 5480
shpskiva1.Y2 = 3480
shpskiva2.Y1 = 5480
shpskiva2.Y2 = 3480
points1 = 0
points2 = 0
End If
If svar2 = vbYes Then
timer2.Enabled = False
Timer1.Enabled = False
cmdstart.Visible = True
shpBoll.Top = 4080
shpBoll.Left = 5640
shpskiva1.Y1 = 5480
shpskiva1.Y2 = 3480
shpskiva2.Y1 = 5480
shpskiva2.Y2 = 3480
points1 = 0
points2 = 0
End If
lblscore1.Caption = points1
lblscore2.Caption = points2
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyUp Then
upp = True
End If
If KeyCode = vbKeyDown Then
ner = True
End If
If KeyCode = vbKeyQ Then
upp2 = True
End If
If KeyCode = vbKeyA Then
ner2 = True
End If
Call Timer1_Timer
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
'om variabeln keycode är lika med vbkeyup så
'tilldelas variabeln upp false (0)
'med andra ord fall pil upp inte är ner tryckt är variabeln upp
'false och skiva1 kommer då röra sig upåt
If KeyCode = vbKeyUp Then
upp = False
End If
'om variabeln keycode är lika med vbkeydown så
'tilldelas variaben ner false (0)
'med andra ord fall pilner inte är ner tryckt är variabeln ner
'false och skiva1 kommer då röra sig nedåt
If KeyCode = vbKeyDown Then
ner = False
End If
'om variabeln keycode är lika med vbkeyQ så
'tilldelas variabeln upp2 false (0)
'med andra ord ifall tangenten Q inte är nertryckt är variabeln upp2
'false och skiva2 kommer då röra sig uppåt
If KeyCode = vbKeyQ Then
upp2 = False
End If
'om variabeln keycode är lika med vbkeyA så
'tilldelas variabeln ner2 false (0)
'med andra ord ifall tangenten A inte är nertryckt är variabeln ner2
'false och skiva2 kommer då röra sig nedåt
If KeyCode = vbKeyA Then
ner2 = False
End If
End Sub
Private Sub Timer1_Timer()
'om variabeln upp2 har värdet true ( 1) så tilldelas linjen shpskiva2's y2 och y1 punkt
'värdet av sig själva - 150
'med andra ord kommmer shpskiva2 att åka upp då koordinaterna 0,0 ligger uppe i högra hörnet
'vilket gör att om man minskar värdet så kommer den att gå mot 0 som ligger längst upp
If upp2 = True Then
shpskiva2.Y1 = shpskiva2.Y1 - 150
shpskiva2.Y2 = shpskiva2.Y2 - 150
End If
'om variabeln ner2 har värdet true ( 1) så tilldelas linjen shpskiva2's y2 och y1 punkt
'värdet av sig själva + 150
'med andra ord kommmer shpskiva2 att åka ner då origo ligger uppe i högra hörnet
'vilket gör att om man ökar värdet så kommer punkterna att gå från origo som ligger längst upp
If ner2 = True Then
shpskiva2.Y1 = shpskiva2.Y1 + 150
shpskiva2.Y2 = shpskiva2.Y2 + 150
End If
'om variabeln upp har värdet true ( 1) så tilldelas linjen shpskiva1's y2 och y1 punkt
'värdet av sig själva - 150
'med andra ord kommmer shpskiva1 att åka upp då origo ligger uppe i högra hörnet
'vilket gör att om man minksar värdet så kommer punkterna att gå mot origo som ligger längst upp
If upp = True Then
shpskiva1.Y1 = shpskiva1.Y1 - 150
shpskiva1.Y2 = shpskiva1.Y2 - 150
End If
'om variabeln ner har värdet true ( 1) så tilldelas linjen shpskiva1's y2 och y1 punkt
'värdet av sig själva +150
'med andra ord kommmer shpskiva21 att åka ner då origo ligger uppe i högra hörnet
'vilket gör att om man ökar värdet så kommer den att gå från origo som ligger längst upp
If ner = True Then
shpskiva1.Y1 = shpskiva1.Y1 + 150
shpskiva1.Y2 = shpskiva1.Y2 + 150
End If
'skiva1
'1
' om linjen shpskiva1's y1 värde ( underkant) är mindre än linjen boxtop's y1 värde + 2000
' så tilldelas injen shpskiva1's y1 värde summan av boxtop's y1 värde adderat med 2000
'dvs om spelare1's skivas underkant + skivanslängd ( skivans överkant ) går över boxens övre linje
'så går det inte dra den längre upp
If shpskiva1.Y1 < boxtop.Y1 + 2000 Then
shpskiva1.Y1 = boxtop.Y1 + 2000
End If
'2
' om linjen shpskiva1's y1 värde ( underkant) är större än linjen boxbottom's y1 värde
' så tilldelas injen shpskiva1's y1 värde boxbottom's y1 värde
'dvs om spelare1's skivas underkant går under boxens nedre linje
'så går det inte dra den längre ner
If shpskiva1.Y1 > boxbottom.Y1 Then
shpskiva1.Y1 = boxbottom.Y1
End If
'3
' om linjen shpskiva1's y2 värde ( överkant) är mindre än linjen boxbotop's y1 värde
' så tilldelas injen shpskiva1's y2 värde boxtop's y1 värde
'dvs om spelare1's skivas överkant går över boxens övre linje
'så går det inte dra den längre upp
If shpskiva1.Y2 < boxtop.Y1 Then
shpskiva1.Y2 = boxtop.Y1
End If
'4
' om linjen shpskiva1's y2 värde ( överkant) är mer än linjen boxbottom's y1 värde - 2000
' så tilldelas injen shpskiva1's y2 värde summan av boxtop's y1 värde subtraherat med 2000
'dvs om spelare1's skivas underkant + skivanslängd ( skivans överkant ) går över boxens övre linje
'så går det inte dra den längre upp
If shpskiva1.Y2 > boxbottom.Y1 - 2000 Then
shpskiva1.Y2 = boxbottom.Y1 - 2000
End If
'skiva2
' då det här är exakt samma koder som dom ovan fast dessa gäller shpskvia2 ( spelare2:s skiva)
' så har jag valt att sätt nummer över varje rad oxh ett nummer på komentarerna ovan
'1
If shpskiva2.Y1 < boxtop.Y1 + 2000 Then
shpskiva2.Y1 = boxtop.Y1 + 2000
End If
'2
If shpskiva2.Y1 > boxbottom.Y1 Then
shpskiva2.Y1 = boxbottom.Y1
End If
'3
If shpskiva2.Y2 < boxtop.Y1 Then
shpskiva2.Y2 = boxtop.Y1
End If
'4
If shpskiva2.Y2 + 2000 > boxbottom.Y1 Then
shpskiva2.Y2 = boxbottom.Y1 - 2000
End If
End Sub
edit : löste de . tog och tilldela svar 0 när man tryckte ja så "loopa" den inte