30/05/10 19:41
Berto
Questo è il primo algoritmo che metto su questo sito quindi vi prego di perdonare eventuali errori e di non arrabbiarvi troppo, sappiate che accetterò le vostre critiche purchè siano costruttive...
Io ho creato un programma in vb6 molto simile a Frogger(un vecchio gioco per pc) che funziona in questo modo:
Il programma funziona ma non è molto elegante...
Ho provato a migliorarlo con l'utilizzo di variabili e sottoprogrammi e questo è il risultato:
Le differenze tra i due codici sono il movimento di shape1(che in realtà è una line) tramite command button e l'assenza del controllo sulla posizione di shape1...
Il problema è che le variabili così dichiarate non funzionano!
In più quando uso l'eseguibile e faccio riferimento a unload form1 non viene bloccata l'esecuzione del programma ma viene solo chiuso il form...
Qualcuno mi può aiutare?
Vi ringrazio in anticipo e vi chiedo ancora scusa per eventuali errori...
Io ho creato un programma in vb6 molto simile a Frogger(un vecchio gioco per pc) che funziona in questo modo:
Option Explicit Dim a As Byte Dim v As Variant Private Sub haiperso() MsgBox "HAHA" MsgBox "Hai perso..." Unload Form1 End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyRight Then shape1.X1 = shape1.X1 + 50 shape1.X2 = shape1.X2 + 50 If shape1.X1 >= 7920 Then shape1.X1 = shape1.X1 - 100 shape1.X2 = shape1.X2 - 100 End If End If If KeyCode = vbKeyDown Then shape1.Y1 = shape1.Y1 + 50 shape1.Y2 = shape1.Y2 + 50 If shape1.Y1 >= 3360 Then shape1.Y1 = shape1.Y1 - 100 shape1.Y2 = shape1.Y2 - 100 End If End If If KeyCode = vbKeyLeft Then shape1.X1 = shape1.X1 - 50 shape1.X2 = shape1.X2 - 50 If shape1.X1 <= 600 Then MsgBox "Hai vinto!" Unload Form1 End If End If If KeyCode = vbKeyUp Then shape1.Y1 = shape1.Y1 - 50 shape1.Y2 = shape1.Y2 - 50 If shape1.Y1 <= 300 Then shape1.Y1 = shape1.Y1 + 100 shape1.Y2 = shape1.Y2 + 100 End If End If End Sub Private Sub Form_Load() MsgBox "Buon divertimento!" End Sub Private Sub Timer3_Timer() Dim s As Byte Randomize s = Val(Int(Rnd * 4)) Select Case s Case Is = 0 Line10.Y1 = Line10.Y1 + 170 Line10.Y2 = Line10.Y2 + 170 Case Is = 1 Line10.Y1 = Line10.Y1 - 170 Line10.Y2 = Line10.Y2 - 170 Case Is = 2 Line10.X1 = Line10.X1 + 170 Line10.X2 = Line10.X2 + 170 Case Is = 3 Line10.X1 = Line10.X1 - 170 Line10.X2 = Line10.X2 - 170 End Select If Line10.Y1 <= 500 Then Line10.Y1 = Line10.Y1 + 200 Line10.Y2 = Line10.Y2 + 200 End If If Line10.Y1 >= 3360 Then Line10.Y1 = Line10.Y1 - 200 Line10.Y2 = Line10.Y2 - 200 End If If Line10.X1 <= 2040 Then Line10.X1 = Line10.X1 + 200 Line10.X2 = Line10.X2 + 200 End If If Line10.X1 >= 3480 Then Line10.X1 = Line10.X1 - 200 Line10.X2 = Line10.X2 - 200 End If s = Val(Int(Rnd * 4)) Select Case s Case Is = 0 Line9.Y1 = Line9.Y1 + 150 Line9.Y2 = Line9.Y2 + 150 Case Is = 1 Line9.Y1 = Line9.Y1 - 150 Line9.Y2 = Line9.Y2 - 150 Case Is = 2 Line9.X1 = Line9.X1 + 150 Line9.X2 = Line9.X2 + 150 Case Is = 3 Line9.X1 = Line9.X1 - 150 Line9.X2 = Line9.X2 - 150 End Select If Line9.Y1 <= 500 Then Line9.Y1 = Line9.Y1 + 300 Line9.Y2 = Line9.Y2 + 300 End If If Line9.Y1 >= 3360 Then Line9.Y1 = Line9.Y1 - 300 Line9.Y2 = Line9.Y2 - 300 End If If Line9.X1 <= 2040 Then Line9.X1 = Line9.X1 + 300 Line9.X2 = Line9.X2 + 300 End If If Line9.X1 >= 3480 Then Line9.X1 = Line9.X1 - 300 Line9.X2 = Line9.X2 - 300 End If End Sub Private Sub Timer1_Timer() If a = 1 Then Line6.Y1 = Line6.Y1 + 10 Line6.Y2 = Line6.Y2 + 10 Line7.Y1 = Line7.Y1 + 10 Line7.Y2 = Line7.Y2 + 10 Line8.Y1 = Line8.Y1 + 10 Line8.Y2 = Line8.Y2 + 10 Line16.Y1 = Line16.Y1 + 10 Line16.Y2 = Line16.Y2 + 10 Line17.Y1 = Line17.Y1 + 10 Line17.Y2 = Line17.Y2 + 10 If Line6.Y2 >= 2880 Then a = 2 End If Else If a = 2 Then Line6.Y1 = Line6.Y1 - 10 Line6.Y2 = Line6.Y2 - 10 Line7.Y2 = Line7.Y2 - 10 Line7.Y1 = Line7.Y1 - 10 Line8.Y1 = Line8.Y1 - 10 Line8.Y2 = Line8.Y2 - 10 Line16.Y1 = Line16.Y1 - 10 Line16.Y2 = Line16.Y2 - 10 Line17.Y1 = Line17.Y1 - 10 Line17.Y2 = Line17.Y2 - 10 If Line6.Y2 <= 960 Then a = 1 End If Else Line6.Y1 = Line6.Y1 + 10 Line6.Y2 = Line6.Y2 + 10 Line7.Y1 = Line7.Y1 + 10 Line7.Y2 = Line7.Y2 + 10 Line8.Y1 = Line8.Y1 + 10 Line8.Y2 = Line8.Y2 + 10 Line16.Y1 = Line16.Y1 + 10 Line16.Y2 = Line16.Y2 + 10 Line17.Y1 = Line17.Y1 + 10 Line17.Y2 = Line17.Y2 + 10 a = 2 End If End If End Sub Private Sub Timer2_Timer() If Line6.X1 > shape1.X2 And Line6.X1 < shape1.X1 Then If shape1.Y1 > Line6.Y2 And shape1.Y1 < Line6.Y1 Then haiperso End If End If If Line8.X1 > shape1.X2 And Line8.X1 < shape1.X1 Then If shape1.Y1 > Line8.Y2 And shape1.Y1 < Line8.Y1 Then haiperso End If End If If Line7.X1 > shape1.X2 And Line7.X1 < shape1.X1 Then If shape1.Y1 > Line7.Y2 And shape1.Y1 < Line7.Y1 Then haiperso End If End If If Line9.X1 > shape1.X2 And Line9.X1 < shape1.X1 Then If shape1.Y1 > Line9.Y2 And shape1.Y1 < Line9.Y1 Then haiperso End If End If If Line10.X1 > shape1.X2 And Line10.X1 < shape1.X1 Then If shape1.Y1 > Line10.Y2 And shape1.Y1 < Line10.Y1 Then haiperso End If End If If Line11.X1 > shape1.X2 And Line11.X1 < shape1.X1 Then If shape1.Y1 > Line11.Y2 And shape1.Y1 < Line11.Y1 Then haiperso End If End If If Line12.X1 > shape1.X2 And Line12.X1 < shape1.X1 Then If shape1.Y1 > Line12.Y2 And shape1.Y1 < Line12.Y1 Then haiperso End If End If If Line13.X1 > shape1.X2 And Line13.X1 < shape1.X1 Then If shape1.Y1 > Line13.Y2 And shape1.Y1 < Line13.Y1 Then haiperso End If End If If Line14.X1 > shape1.X2 And Line14.X1 < shape1.X1 Then If shape1.Y1 > Line14.Y2 And shape1.Y1 < Line14.Y1 Then haiperso End If End If If Line15.X1 > shape1.X2 And Line15.X1 < shape1.X1 Then If shape1.Y1 > Line15.Y2 And shape1.Y1 < Line15.Y1 Then haiperso End If End If If Line16.X1 > shape1.X2 And Line16.X1 < shape1.X1 Then If shape1.Y1 > Line16.Y2 And shape1.Y1 < Line16.Y1 Then haiperso End If End If If Line17.X1 > shape1.X2 And Line17.X1 < shape1.X1 Then If shape1.Y1 > Line17.Y2 And shape1.Y1 < Line17.Y1 Then haiperso End If End If End Sub Private Sub Timer4_Timer() Dim s As Byte Randomize s = Val(Int(Rnd * 4)) Select Case s Case Is = 0 Line11.Y1 = Line11.Y1 + 50 Line11.Y2 = Line11.Y2 + 50 Case Is = 1 Line11.Y1 = Line11.Y1 - 50 Line11.Y2 = Line11.Y2 - 50 Case Is = 2 Line11.X1 = Line11.X1 + 50 Line11.X2 = Line11.X2 + 50 Case Is = 3 Line11.X1 = Line11.X1 - 50 Line11.X2 = Line11.X2 - 50 End Select If Line11.Y1 <= 240 Then Line11.Y1 = Line11.Y1 + 100 Line11.Y2 = Line11.Y2 + 100 End If If Line11.Y2 >= 3200 Then Line11.Y1 = Line11.Y1 - 100 Line11.Y2 = Line11.Y2 - 100 End If If Line11.X1 <= 600 Then Line11.X1 = Line11.X1 + 100 Line11.X2 = Line11.X2 + 100 End If If Line11.X2 >= 1920 Then Line11.X1 = Line11.X1 - 100 Line11.X2 = Line11.X2 - 100 End If s = Val(Int(Rnd * 4)) Select Case s Case Is = 0 Line12.Y1 = Line12.Y1 + 50 Line12.Y2 = Line12.Y2 + 50 Case Is = 1 Line12.Y1 = Line12.Y1 - 50 Line12.Y2 = Line12.Y2 - 50 Case Is = 2 Line12.X1 = Line12.X1 + 50 Line12.X2 = Line12.X2 + 50 Case Is = 3 Line12.X1 = Line12.X1 - 50 Line12.X2 = Line12.X2 - 50 End Select If Line12.Y1 <= 240 Then Line12.Y1 = Line12.Y1 + 100 Line12.Y2 = Line12.Y2 + 100 End If If Line12.Y2 >= 3200 Then Line12.Y1 = Line12.Y1 - 100 Line12.Y2 = Line12.Y2 - 100 End If If Line12.X1 <= 600 Then Line12.X1 = Line12.X1 + 100 Line12.X2 = Line12.X2 + 100 End If If Line12.X2 >= 1920 Then Line12.X1 = Line12.X1 - 100 Line12.X2 = Line12.X2 - 100 End If s = Val(Int(Rnd * 4)) Select Case s Case Is = 0 Line13.Y1 = Line13.Y1 + 50 Line13.Y2 = Line13.Y2 + 50 Case Is = 1 Line13.Y1 = Line13.Y1 - 50 Line13.Y2 = Line13.Y2 - 50 Case Is = 2 Line13.X1 = Line13.X1 + 50 Line13.X2 = Line13.X2 + 50 Case Is = 3 Line13.X1 = Line13.X1 - 50 Line13.X2 = Line13.X2 - 50 End Select If Line13.Y1 <= 240 Then Line13.Y1 = Line13.Y1 + 100 Line13.Y2 = Line13.Y2 + 100 End If If Line13.Y2 >= 3200 Then Line13.Y1 = Line13.Y1 - 100 Line13.Y2 = Line13.Y2 - 100 End If If Line13.X1 <= 600 Then Line13.X1 = Line13.X1 + 100 Line13.X2 = Line13.X2 + 100 End If If Line13.X2 >= 1920 Then Line13.X1 = Line13.X1 - 100 Line13.X2 = Line13.X2 - 100 End If s = Val(Int(Rnd * 4)) Select Case s Case Is = 0 Line14.Y1 = Line14.Y1 + 50 Line14.Y2 = Line14.Y2 + 50 Case Is = 1 Line14.Y1 = Line14.Y1 - 50 Line14.Y2 = Line14.Y2 - 50 Case Is = 2 Line14.X1 = Line14.X1 + 50 Line14.X2 = Line14.X2 + 50 Case Is = 3 Line14.X1 = Line14.X1 - 50 Line14.X2 = Line14.X2 - 50 End Select If Line14.Y1 <= 240 Then Line14.Y1 = Line14.Y1 + 100 Line14.Y2 = Line14.Y2 + 100 End If If Line14.Y2 >= 3200 Then Line14.Y1 = Line14.Y1 - 100 Line14.Y2 = Line14.Y2 - 100 End If If Line14.X1 <= 600 Then Line14.X1 = Line14.X1 + 100 Line14.X2 = Line14.X2 + 100 End If If Line14.X2 >= 1920 Then Line14.X1 = Line14.X1 - 100 Line14.X2 = Line14.X2 - 100 End If s = Val(Int(Rnd * 4)) Select Case s Case Is = 0 Line15.Y1 = Line15.Y1 + 50 Line15.Y2 = Line15.Y2 + 50 Case Is = 1 Line15.Y1 = Line15.Y1 - 50 Line15.Y2 = Line15.Y2 - 50 Case Is = 2 Line15.X1 = Line15.X1 + 50 Line15.X2 = Line15.X2 + 50 Case Is = 3 Line15.X1 = Line15.X1 - 50 Line15.X2 = Line15.X2 - 50 End Select If Line15.Y1 <= 240 Then Line15.Y1 = Line15.Y1 + 100 Line15.Y2 = Line15.Y2 + 100 End If If Line15.Y2 >= 3200 Then Line15.Y1 = Line15.Y1 - 100 Line15.Y2 = Line15.Y2 - 100 End If If Line15.X1 <= 600 Then Line15.X1 = Line15.X1 + 100 Line15.X2 = Line15.X2 + 100 End If If Line15.X2 >= 1920 Then Line15.X1 = Line15.X1 - 100 Line15.X2 = Line15.X2 - 100 End If End Sub
Il programma funziona ma non è molto elegante...
Ho provato a migliorarlo con l'utilizzo di variabili e sottoprogrammi e questo è il risultato:
Option Explicit Dim sn As String Dim lima As Integer Dim limb As Integer Dim lims As Integer Dim limd As Integer Dim a As Byte Dim v As Variant Dim tn As Variant Private Sub haiperso() MsgBox "HAHA" MsgBox "Hai perso..." Unload Form1 End Sub Private Sub Command1_Click() shape1.X1 = shape1.X1 + 50 shape1.X2 = shape1.X2 + 50 End Sub Private Sub Command2_Click() shape1.Y1 = shape1.Y1 + 50 shape1.Y2 = shape1.Y2 + 50 End Sub Private Sub Command3_Click() shape1.X1 = shape1.X1 - 50 shape1.X2 = shape1.X2 - 50 End Sub Private Sub Command4_Click() shape1.Y1 = shape1.Y1 - 50 shape1.Y2 = shape1.Y2 - 50 End Sub Private Sub Timer1_Timer() If a = 1 Then Line6.Y1 = Line6.Y1 + 10 Line6.Y2 = Line6.Y2 + 10 Line7.Y1 = Line7.Y1 + 10 Line7.Y2 = Line7.Y2 + 10 Line8.Y1 = Line8.Y1 + 10 Line8.Y2 = Line8.Y2 + 10 If Line6.Y2 >= 2880 Then a = 2 End If Else If a = 2 Then Line6.Y1 = Line6.Y1 - 10 Line6.Y2 = Line6.Y2 - 10 Line7.Y2 = Line7.Y2 - 10 Line7.Y1 = Line7.Y1 - 10 Line8.Y1 = Line8.Y1 - 10 Line8.Y2 = Line8.Y2 - 10 If Line6.Y2 <= 960 Then a = 1 End If Else Line6.Y1 = Line6.Y1 + 10 Line6.Y2 = Line6.Y2 + 10 Line7.Y1 = Line7.Y1 + 10 Line7.Y2 = Line7.Y2 + 10 Line8.Y1 = Line8.Y1 + 10 Line8.Y2 = Line8.Y2 + 10 a = 2 End If End If End Sub Private Sub controllo() If tn.X1 > shape1.X2 And tn.X1 < shape1.X1 Then If shape1.Y1 > tn & ".Y2" And shape1.Y1 < tn & ".Y1" Then haiperso End If End If End Sub Private Sub Timer2_Timer() Dim f As Byte For f = 6 To 15 tn = "Line" & f controllo Next End Sub Private Sub Timer3_Timer() lima = 240 limb = 3200 lims = 2100 limd = 3400 sn = Line9 shapemov sn = Line10 shapemov End Sub Private Sub Timer4_Timer() Dim f As Byte lima = 240 limb = 3200 lims = 240 limd = 1920 For f = 11 To 15 sn = "Line" & f shapemov Next End Sub Private Sub shapemov() Dim s As Byte Randomize s = Val(Int(Rnd * 4)) Select Case s Case Is = 0 sn.Y1 = sn.Y1 + 50 sn.Y2 = sn.Y2 + 50 Case Is = 1 sn.Y1 = sn.Y1 - 50 sn.Y2 = sn.Y2 - 50 Case Is = 2 sn.X1 = sn.X1 + 50 sn.X2 = sn.X2 + 50 Case Is = 3 sn.X1 = sn.X1 - 50 sn.X2 = sn.X2 - 50 End Select If sn.Y1 <= lima Then sn.Y1 = sn.Y1 + 100 sn.Y2 = sn.Y2 + 100 End If If sn.Y1 >= limb Then sn.Y1 = sn.Y1 - 100 sn.Y2 = sn.Y2 - 100 End If If sn.X1 <= lims Then sn.X1 = sn.X1 + 100 sn.X2 = sn.X2 + 100 End If If sn.X1 >= limd Then sn.X1 = sn.X1 - 100 sn.X2 = sn.X2 - 100 End If End Sub
Le differenze tra i due codici sono il movimento di shape1(che in realtà è una line) tramite command button e l'assenza del controllo sulla posizione di shape1...
Il problema è che le variabili così dichiarate non funzionano!
In più quando uso l'eseguibile e faccio riferimento a unload form1 non viene bloccata l'esecuzione del programma ma viene solo chiuso il form...
Qualcuno mi può aiutare?
Vi ringrazio in anticipo e vi chiedo ancora scusa per eventuali errori...
aaa