Permalänk
Medlem

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