Piccolo aiuto per programma con timer VB

di il
8 risposte

Piccolo aiuto per programma con timer VB

Salve a tutti!!
vi scrivo per chiedervi un piccolo aiuto per un programmino di VB:
sono al terzo anno di liceo e per il primo anno mi trovo ad affrontare questo genere di programma
e vorrei sapere come posso fare a:
con un solo timer a spostare una pallina per la form con i tasti W E R S D Z X C rispettivamente in diagonale
verso l'alto a dx, su , in diagonale verso l'alto a sx, a dx, a sx, diagonale bassa a sx, giù e infine in diagonale bassa a dx.
l'unica indicazione che ci è stata data dall'insegnante e stata:
Private sub frm_keypress(keyascii as integer)
carattere=chr(keyascii)
end sub

grazie mille per l'aiuto^^
( mi servirebbe entro le sei di stasera se nn è un problema)

8 Risposte

  • Re: Piccolo aiuto per programma con timer VB

    1: pretendi troppo e in troppo poco tempo: il forum è fatto per aiutare e non per fare tutto un intero programmino, perciò comincia a postare tu qualcosa, poi qualcuno te lo correggerà e ti dirà come puoi fare nei passaggi critici che proprio non hai capito, ma prima sei tu che devi postare il codice.
    2: cambia il titolo perchè è troppo generico

    ciao a presto....
  • Re: Piccolo aiuto per programma con timer VB

    Il programmino qui sotto è quello che ho già fatto con 8 timer,
    ora devo ridurlo a un timer e la cosa non mi riesce.
    inoltre la pallina (con questo programma) non si blocca ai bordi come dovrebbe...

    Private Sub Form_KeyPress(KeyAscii As Integer)
    carattere = Chr(KeyAscii)
    If carattere = "d" Then
    Tm1.Enabled = True
    End If
    If carattere = "s" Then
    Tm2.Enabled = True
    End If
    If carattere = "x" Then
    Tm3.Enabled = True
    End If
    If carattere = "" Then
    Tm5.Enabled = True
    End If
    If carattere = "e" Then
    Tm6.Enabled = True
    End If
    If carattere = "w" Then
    Tm7.Enabled = True
    End If
    If carattere = "r" Then
    Tm8.Enabled = True
    End If
    If carattere = "z" Then
    Tm9.Enabled = True
    End If
    If carattere = "c" Then
    Tm4.Enabled = True
    End If

    End Sub


    Private Sub Tm1_Timer()
    ShpPalla.Left = ShpPalla.Left + 25
    If ShpPalla.Left <= frm1.ScaleWidth + ShpPalla.Width Then
    Tm1.Enabled = False

    End If


    End Sub

    Private Sub Tm2_Timer()

    ShpPalla.Left = ShpPalla.Left - 25
    If (ShpPalla.Left <= frm1.ScaleWidth + ShpPalla.Width) Then
    Tm2.Enabled = False

    End If

    End Sub

    Private Sub Tm3_Timer()
    ShpPalla.Top = ShpPalla.Top + 25
    If ShpPalla.Top <= frm1.ScaleHeight + ShpPalla.Height Then
    Tm3.Enabled = False
    End If
    End Sub

    Private Sub Tm4_Timer()
    ShpPalla.Left = ShpPalla.Left + 25
    ShpPalla.Top = ShpPalla.Top + 25
    If (ShpPalla.Left <= frm1.ScaleWidth + ShpPalla.Width) And (ShpPalla.Top <= frm1.ScaleHeight + ShpPalla.Height) Then
    Tm4.Enabled = False
    End If

    End Sub

    Private Sub Tm6_Timer()
    ShpPalla.Top = ShpPalla.Top - 25
    If (ShpPalla.Top < frm1.ScaleHeight + ShpPalla.Height) Then
    Tm6.Enabled = False
    End If

    End Sub

    Private Sub Tm7_Timer()
    ShpPalla.Left = ShpPalla.Left - 25
    ShpPalla.Top = ShpPalla.Top - 25
    If (ShpPalla.Left <= frm1.ScaleWidth + ShpPalla.Width) And (ShpPalla.Top <= frm1.ScaleHeight + ShpPalla.Height) Then
    Tm7.Enabled = False
    End If

    End Sub

    Private Sub Tm8_Timer()
    ShpPalla.Left = ShpPalla.Left + 25
    ShpPalla.Top = ShpPalla.Top - 25
    If (ShpPalla.Left <= frm1.ScaleWidth + ShpPalla.Width) And (ShpPalla.Top <= frm1.ScaleHeight + ShpPalla.Height) Then
    Tm8.Enabled = False
    End If

    End Sub

    Private Sub Tm9_Timer()
    ShpPalla.Left = ShpPalla.Left - 25
    ShpPalla.Top = ShpPalla.Top + 25
    If (ShpPalla.Left <= frm1.ScaleWidth + ShpPalla.Width) And (ShpPalla.Top <= frm1.ScaleHeight + ShpPalla.Height) Then
    Tm9.Enabled = False
    End If

    End Sub



    qualcuno sa aiutarmi?
  • Re: Piccolo aiuto per programma con timer VB

    Il timer deve essere sempre abilitato.
    utilizza una variabile globale di nome carattere.
    nell'evento keypress del form, gli inserisci il codice ascii, oppure il carattere (chr(keyascii)) dopo nel timer(che avrà come intervallo = 1) con un select case (oppure con quella serie di if) sulla variabile carattere vedrai a quale lettera corrisponde e a seconda se si tratta di "a" muovi a sinistra se si tratta di "w" muovi sopra e cosi via, ricordati di svuotare poi il valore della variabile. prima dell'uscita dalla sub timer1_timer() metit carattere = 0.
    Ora provo a scriverti un esempio e te lo posto.
  • Re: Piccolo aiuto per programma con timer VB

    Te ne sarei davvero grata,
    anche perchè nn so fare variabili globali ne nulla di quello che hai scritto xD
    so solo che l'insegnato lo vuole con una serie di if
    se mi posti un esempio per una delle lettere prometto che ti faccio un monumento ^^
  • Re: Piccolo aiuto per programma con timer VB

    Ecco a lei...
    controlla un po i tasti(non me li ricordavo)
    per la pallina ho usato il componente picturebox che ho chiamato ball
    il timer ha intervallo 1(è abilitato da subito)
    ho commentato un po per farti capire meglio


    *********************************************************************
    Dim carattere As String

    Private Sub Form_KeyPress(KeyAscii As Integer)
    carattere = Chr(KeyAscii)
    carattere = LCase(carattere)
    End Sub

    Private Sub Timer1_Timer()
    If carattere = "a" Then
    'vai a sinistra
    ball.Left = ball.Left - 25
    End If

    If carattere = "d" Then
    'vai a destra
    ball.Left = ball.Left + 25
    End If

    If carattere = "e" Then
    'vai in alto
    ball.Top = ball.Top - 25
    End If

    If carattere = "x" Then
    'vai in baso
    ball.Top = ball.Top + 25
    End If

    If carattere = "w" Then
    'vai in diagonale sinistra-alto
    ball.Top = ball.Top - 25 'in alto
    ball.Left = ball.Left - 25 'a sinistra
    End If

    If carattere = "r" Then
    'vai in diagonale destra-alto
    ball.Top = ball.Top - 25 'in alto
    ball.Left = ball.Left + 25 'a destra
    End If

    If carattere = "z" Then
    'vai in diagonale sinistra-basso
    ball.Top = ball.Top + 25 'in basso
    ball.Left = ball.Left - 25 'a sinistra
    End If

    If carattere = "c" Then
    'vai in diagonale destra-basso
    ball.Top = ball.Top + 25 'in basso
    ball.Left = ball.Left + 25 'a destra
    End If

    carattere = ""
    End Sub

    *********************************************************************
    dovrebbe funzionare
  • Re: Piccolo aiuto per programma con timer VB

    Grazie mille ^^
    te ne sono davvero grata!!
  • Re: Piccolo aiuto per programma con timer VB

    Scusa tanto ancora il disturbo ma come faccio a bloccarlo ai bordi?
    io ho usato questo codice:
    If shpball.Left = 0 Or shpball.Top = 0 Then
    tmball.Enabled = False
    End If
    If shpball.Left = ScaleWidth - shpball.Width Or shpball.Top = ScaleHeight - shpball.Height Then
    tmball.Enabled = False
    End If

    cosa c'è di sbagliato? dove lo devo mettere??
    Grazie e scusa
  • Re: Piccolo aiuto per programma con timer VB

    Ecco qua...
    il tuo ragionamento era quasi corretto...
    cosi dovrebbe funzionare, cioè si blocca ai margini del form:

    ************
    Dim carattere As String

    Private Sub Form_KeyPress(KeyAscii As Integer)
    carattere = Chr(KeyAscii)
    carattere = LCase(carattere)
    End Sub

    Private Sub Timer1_Timer()
    If carattere = "a" And (ball.Left - 25) > 0 Then
    'vai a sinistra
    ball.Left = ball.Left - 25
    End If

    If carattere = "d" And (ball.Left + 25 + ball.Width) < Form1.ScaleWidth Then
    'vai a destra
    ball.Left = ball.Left + 25
    End If

    If carattere = "e" And (ball.Top - 25) > 0 Then
    'vai in alto
    ball.Top = ball.Top - 25
    End If

    If carattere = "x" And (ball.Top + 25 + ball.Height) < Form1.ScaleHeight Then
    'vai in baso
    ball.Top = ball.Top + 25
    End If

    If carattere = "w" And (ball.Top - 25) > 0 And (ball.Left - 25) > 0 Then
    'vai in diagonale sinistra-alto
    ball.Top = ball.Top - 25 'in alto
    ball.Left = ball.Left - 25 'a sinistra
    End If

    If carattere = "r" And (ball.Top - 25) > 0 And (ball.Left + 25 + ball.Width) < Form1.ScaleWidth Then
    'vai in diagonale destra-alto
    ball.Top = ball.Top - 25 'in alto
    ball.Left = ball.Left + 25 'a destra
    End If

    If carattere = "z" And (ball.Top + 25 + ball.Height) < Form1.ScaleHeight And (ball.Left - 25) > 0 Then
    'vai in diagonale sinistra-basso
    ball.Top = ball.Top + 25 'in basso
    ball.Left = ball.Left - 25 'a sinistra
    End If

    If carattere = "c" And (ball.Top + 25 + ball.Height) < Form1.ScaleHeight And (ball.Left + 25 + ball.Width) < Form1.ScaleWidth Then
    'vai in diagonale destra-basso
    ball.Top = ball.Top + 25 'in basso
    ball.Left = ball.Left + 25 'a destra
    End If

    carattere = ""
    End Sub
    ****************************

    ... forse è meglio se te lo spiego un po...
    allora quando il controllo arriva sul margine sinistro il valore left è uguale a 0, cosi anche quando arriva sul margine superiore del form il valore di top è 0, quindi io non faccio altro prima di far muovere il pezzo di verificare se con lo spostamento (in alto e a sinistra) il valore di top o di left non è minore di 0, altrimenti vuol dire che esco fuori dal margine.
    Per controllare invece se sono arrivato al margine destro o in basso, verifico che il valore di left+la sua altezza +25(unità di movimento) non superino il margine del form(scaleHeight)per il basso, mentre per la destra, lo stesso discorso solo che devi lavorare con scalewidth.
    Per i movimenti in diagonale interseca le operazioni destra-alto sinistra-basso ecc....
    spero di essere stato chiaro.
Devi accedere o registrarti per scrivere nel forum
8 risposte