Ten program to gra tetris napisana w visual basicu. Wczesniej program zamykal sie normalnie. Dołączam kod do głównej formatki, przy ktorej powstaje ten problem.
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 32 And Timer1.Enabled = True Then ' wlaczenie/ wyłączenie pauzy - SPACJA
Timer1.Enabled = False
Label2.Visible = True
Else
Timer1.Enabled = True
Label2.Visible = False
End If
If KeyCode = 38 And Fig > 1 Then Rotera 'klawisz strzałka w gore
If KeyCode = 37 Then 'klawisz strzałka w dól
ok = 1
For i = 1 To 4: For i2 = 1 To 4
If s(i, i2) = True And X + i - 1 - 1 > 0 Then
If n(X + i - 1 - 1, Y - i2 + 1) = True Then ok = 0
End If
If s(i, i2) = True And X + i - 1 - 1 < 1 Then ok = 0
Next i2: Next i
If ok = 1 Then
X = X - 1
For i = 1 To 4: For i2 = 1 To 4
If s(i, i2) = True Then
If s(i + 1, i2) = False Then Shape1(coor(X + i, Y - i2 + 1)).FillColor = RGB(255, 255, 255)
End If
If s(i, i2) = True Then Shape1(coor(X + i - 1, Y - i2 + 1)).FillColor = Färg
Next i2: Next i
End If
End If
If KeyCode = 39 Then
ok = 1
For i = 1 To 4: For i2 = 1 To 4
If s(i, i2) = True And X + i - 1 + 1 < 11 Then
If n(X + i - 1 + 1, Y - i2 + 1) = True Then ok = 0
End If
If s(i, i2) = True And X + i - 1 + 1 > 10 Then ok = 0
Next i2: Next i
If ok = 1 Then
X = X + 1
For i = 1 To 4: For i2 = 1 To 4
If s(i, i2) = True Then
If s(i - 1, i2) = False Then Shape1(coor(X + i - 2, Y - i2 + 1)).FillColor = RGB(255, 255, 255)
End If
If s(i, i2) = True Then Shape1(coor(X + i - 1, Y - i2 + 1)).FillColor = Färg
Next i2: Next i
End If
End If
If KeyCode = 40 And Fig > 0 Then
For i = 1 To 4: For i2 = 1 To 4
If s(i, i2) = True Then Shape1(coor(X + i - 1, Y - i2 + 1)).FillColor = RGB(255, 255, 255)
Next i2: Next i
Do
Y = Y - 1
For i = 1 To 4: For i2 = 1 To 4
If s(i, i2) = True And Y - i2 + 1 = 1 Then Fig = 0
If Y - i2 > 0 And X + i - 1 > 0 And X + i - 1 < 11 Then
If s(i, i2) = True And n(X + i - 1, Y - i2) = True Then Fig = 0
End If
Next i2: Next i
Loop Until Fig = 0
For i = 1 To 4: For i2 = 1 To 4
If s(i, i2) = True Then Shape1(coor(X + i - 1, Y - i2 + 1)).FillColor = Färg
If s(i, i2) = True Then n(X + i - 1, Y - i2 + 1) = True
Next i2: Next i
End If
End Sub
Private Sub Form_Load()
For i = 1 To 4: For i2 = 1 To 4: s2(i, i2) = False: Next i2: Next i
For i = 1 To 10: For i2 = 1 To 25: n(i, i2) = False: Next i2: Next i
Score = -10
Timer1.Interval = Hast
'zmiany kolorów
For i = 0 To 11
Shape3(i).BorderColor = &HE0E0E0
Shape3(i).FillStyle = 0
Shape3(i).FillColor = &HE0E0E0
Next i
For i = 0 To 249
Shape1(i).BorderColor = RGB(255, 255, 255)
Shape1(i).FillStyle = 0
Shape1(i).FillColor = RGB(255, 255, 255)
Next i
Fig2 = 0
Nyfig
End Sub
Function coor(xx, yy)
coor = (yy - 1) * 10 + xx - 1 '
End Function
Private Sub Timer1_Timer()
For i = 1 To 4: For i2 = 1 To 4
If s(i, i2) = True And Y - i2 + 1 = 1 Then Fig = 0
If Y - i2 > 0 And X + i - 1 > 0 And X + i - 1 < 11 Then
If s(i, i2) = True And n(X + i - 1, Y - i2) = True Then Fig = 0
End If
Next i2: Next i
If Fig = 0 Then
For i = 1 To 4: For i2 = 1 To 4
If s(i, i2) = True Then n(X + i - 1, Y - i2 + 1) = True
Next i2: Next i
Ner
Nyfig
Else
For i = 1 To 4: For i2 = 1 To 4
If s(i, i2) = True And s(i, i2 - 1) = False Then Shape1(coor(X + i - 1, Y - i2 + 1)).FillColor = RGB(255, 255, 255)
Next i2: Next i
End If
Y = Y - 1
For i = 1 To 4: For i2 = 1 To 4
If s(i, i2) = True Then
If Shape1(coor(X + i - 1, Y - i2 + 1)).FillColor <> RGB(255, 255, 255) And Shape1(coor(X + i - 1, Y - i2 + 1)).FillColor <> Färg Then Gameover: Exit Sub
End If
If s(i, i2) = True Then Shape1(coor(X + i - 1, Y - i2 + 1)).FillColor = Färg
Next i2: Next i
End Sub
Public Sub Nyfig()
Timer1.Interval = Hast
Fig = Fig2
Färg = Färg2
Fig2 = Int(Rnd * 7) + 1
X = 4
Y = 26
Rot = 1
For i = 1 To 4: For i2 = 1 To 4: s(i, i2) = s2(i, i2): s2(i, i2) = 0: Next i2: Next i
Select Case Fig2
Case 1
s2(2, 2) = True
s2(3, 2) = True
s2(2, 3) = True
s2(3, 3) = True
Färg2 = RGB(255, 0, 0)
Case 2
s2(1, 2) = True
s2(2, 2) = True
s2(3, 2) = True
s2(4, 2) = True
Färg2 = RGB(0, 180, 0)
Case 3
s2(2, 1) = True
s2(3, 1) = True
s2(3, 2) = True
s2(3, 3) = True
Färg2 = RGB(255, 150, 0)
Case 4
s2(3, 1) = True
s2(2, 1) = True
s2(2, 2) = True
s2(2, 3) = True
Färg2 = RGB(100, 100, 100)
Case 5
s2(3, 1) = True
s2(3, 2) = True
s2(3, 3) = True
s2(2, 2) = True
Färg2 = RGB(200, 0, 200)
Case 6
s2(2, 1) = True
s2(2, 2) = True
s2(3, 2) = True
s2(3, 3) = True
Färg2 = RGB(100, 100, 255)
Case 7
s2(3, 1) = True
s2(3, 2) = True
s2(2, 2) = True
s2(2, 3) = True
Färg2 = RGB(0, 200, 200)
End Select
For i = 1 To 4: For i2 = 1 To 3
Shape3((i2 - 1) * 4 + i - 1).FillColor = &HE0E0E0
If s2(i, i2) = True Then Shape3((i2 - 1) * 4 + i - 1).FillColor = Färg2
Next i2: Next i
End Sub
Public Sub Rotera()
Rot2 = Rot + 1
If Rot2 = 5 Then Rot2 = 1
If (Fig = 2 Or Fig > 5) And Rot2 = 3 Then Rot2 = 1
For i = 1 To 4: For i2 = 1 To 4: s3(i, i2) = 0: Next i2: Next i
Select Case Fig
Case 2
Select Case Rot2
Case 1
s3(1, 2) = True
s3(2, 2) = True
s3(3, 2) = True
s3(4, 2) = True
Case 2
s3(2, 1) = True
s3(2, 2) = True
s3(2, 3) = True
s3(2, 4) = True
End Select
Case 3
Select Case Rot2
Case 1
s3(2, 1) = True
s3(3, 1) = True
s3(3, 2) = True
s3(3, 3) = True
Case 2
s3(4, 1) = True
s3(4, 2) = True
s3(3, 2) = True
s3(2, 2) = True
Case 3
s3(3, 3) = True
s3(2, 3) = True
s3(2, 2) = True
s3(2, 1) = True
Case 4
s3(2, 2) = True
s3(2, 1) = True
s3(3, 1) = True
s3(4, 1) = True
End Select
Case 4
Select Case Rot2
Case 1
s3(3, 1) = True
s3(2, 1) = True
s3(2, 2) = True
s3(2, 3) = True
Case 2
s3(2, 1) = True
s3(3, 1) = True
s3(4, 1) = True
s3(4, 2) = True
Case 3
s3(3, 1) = True
s3(3, 2) = True
s3(3, 3) = True
s3(2, 3) = True
Case 4
s3(2, 1) = True
s3(2, 2) = True
s3(3, 2) = True
s3(4, 2) = True
End Select
Case 5
Select Case Rot2
Case 1
s3(3, 1) = True
s3(3, 2) = True
s3(3, 3) = True
s3(2, 2) = True
Case 2
s3(3, 1) = True
s3(2, 2) = True
s3(3, 2) = True
s3(4, 2) = True
Case 3
s3(2, 1) = True
s3(2, 2) = True
s3(2, 3) = True
s3(3, 2) = True
Case 4
s3(2, 1) = True
s3(3, 1) = True
s3(4, 1) = True
s3(3, 2) = True
End Select
Case 6
Select Case Rot2
Case 1
s3(2, 1) = True
s3(2, 2) = True
s3(3, 2) = True
s3(3, 3) = True
Case 2
s3(2, 2) = True
s3(3, 2) = True
s3(3, 1) = True
s3(4, 1) = True
End Select
Case 7
Select Case Rot2
Case 1
s3(3, 1) = True
s3(3, 2) = True
s3(2, 2) = True
s3(2, 3) = True
Case 2
s3(2, 1) = True
s3(3, 1) = True
s3(3, 2) = True
s3(4, 2) = True
End Select
End Select
ok = 1
For i = 1 To 4: For i2 = 1 To 4
If s3(i, i2) = True Then
If X + i - 1 < 1 Or X + i - 1 > 10 Or Y - i2 + 1 < 1 Then ok = 0
If ok = 1 Then
If n(X + i - 1, Y - i2 + 1) = True Then ok = 0
End If
End If
Next i2: Next i
If ok = 0 Then Exit Sub
Rot = Rot2
For i = 1 To 4: For i2 = 1 To 4
If s3(i, i2) = True And s(i, i2) = False Then Shape1(coor(X + i - 1, Y - i2 + 1)).FillColor = Färg
If s3(i, i2) = False And s(i, i2) = True Then Shape1(coor(X + i - 1, Y - i2 + 1)).FillColor = RGB(255, 255, 255)
s(i, i2) = s3(i, i2)
Next i2: Next i
End Sub
Public Sub Ner()
Score = Score + 10
Label3.Caption = Score
For i2 = 25 To 1 Step -1
ok = 1
For i = 1 To 10
If n(i, i2) = False Then ok = 0
Next i
If ok = 1 Then
Tetris.SetFocus
Score = Score + 150
Label3.Caption = Score
For i = 1 To 10
For i3 = i2 To 24
n(i, i3) = n(i, i3 + 1)
Shape1(coor(i, i3)).FillColor = Shape1(coor(i, i3 + 1)).FillColor
Next i3
Next i
End If
Next i2
End Sub
'koniec gry
Public Sub Gameover()
SoundForVB1.Stop 'wyłączenie muzyki po zamknięciu programu
SoundForVB2.Play "koniec.wav" 'odtworzenie pliku "koniec.wav"
MsgBox "Liczba punktów: " & Score 'pokazanie w msgbox końcowego wyniku gry
Unload Me
Tetris2.Show
End Sub
'włączenie pauzy
Private Sub Wstrzymaj_Click()
Timer1.Enabled = False
End Sub
'wyłączenie pauzy
Private Sub Wznów_Click()
Timer1.Enabled = True
End Sub
'zamknięcie programu
Private Sub zakoncz_Click()
SoundForVB1.Stop 'wyłączenie muzyki po zamknięciu programu
End
End Sub
'zmiana koloru tła na zielony
Private Sub zielony_Click()
Tetris.BackColor = &HC0FFC0
Label1.BackColor = &HC0FFC0
Label2.BackColor = &HC0FFC0
Shape2.FillColor = &HC0FFC0
End Sub
'zmiana koloru tła na żółty
Private Sub zolty_Click()
Tetris.BackColor = &HC0FFFF
Label1.BackColor = &HC0FFFF
Label2.BackColor = &HC0FFFF
Shape2.FillColor = &HC0FFFF
End Sub
'zmiana koloru tła na pomarańczowy
Private Sub pomaranczowy_Click()
Tetris.BackColor = &HC0E0FF
Label1.BackColor = &HC0E0FF
Label2.BackColor = &HC0E0FF
Shape2.FillColor = &HC0E0FF
End Sub
'zmiana koloru tła na różowy
Private Sub rozowy_Click()
Tetris.BackColor = &HC0C0FF
Label1.BackColor = &HC0C0FF
Label2.BackColor = &HC0C0FF
Shape2.FillColor = &HC0C0FF
End Sub
'zmiana koloru tła na szary
Private Sub szary_Click()
Tetris.BackColor = &HE0E0E0
Label1.BackColor = &HE0E0E0
Label2.BackColor = &HE0E0E0
Shape2.FillColor = &HE0E0E0
End Sub
'zmiana koloru tła na błękitny
Private Sub blekitny_Click()
Tetris.BackColor = 16777152
Label1.BackColor = 16777152
Label2.BackColor = 16777152
Shape2.FillColor = 16777152
End Sub
Private Sub Pomoc_Click()
Pomoc1.Visible = True
Timer1.Enabled = False ' zatrzymanie gry
Label2.Visible = True
End Sub
Private Sub About_Click()
About2.Visible = True
Timer1.Enabled = False ' zatrzymanie gry
Label2.Visible = True
End Sub
'odtwarzanie muzyki
Private Sub Play_Click()
SoundForVB1.Play "kkk.wav"
End Sub
'zatrzymywanie odtwarzania
Private Sub Stop_Click()
SoundForVB1.Stop
End Sub
'kontakt wosik(_at_)op.pl
Private Sub autor_Click()
pkLink1.Start "mailto:wosik@op.pl"
Timer1.Enabled = False ' zatrzymanie gry
Label2.Visible = True
End Sub
'strona www.pcz.pl
Private Sub politechnika_Click()
pkLink2.Start "www.pcz.pl"
Timer1.Enabled = False ' zatrzymanie gry
Label2.Visible = True
End Sub
'regulacja głośności w menu Muzyka
Private Sub glosnosc_Click()
G = Shell("sndvol32", vbNormalFocus)
Timer1.Enabled = False 'wstrzymanie gry
Label2.Visible = True
End Sub
'regulacja głośności w menu Ustawienia
Private Sub głosnosc_Click()
G = Shell("sndvol32", vbNormalFocus)
Timer1.Enabled = False 'wstrzymanie gry
Label2.Visible = True
End Sub