Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Visual Basic 2010 - Codice non funziona

    Nel programma che ho realizzato (pallina ke rimbalza e ke bisogna colpire) ho creato tre form : ognuno corrisponde a una difficoltà diversa (facile, medio, difficile). Il form della difficoltà media mi funziona regolarmente (è il form originario, quello che ho creato x primo e dal quale ho sviluppato gli altri), mentre gli altri due nn funzionano. Inserisco il codice del form facile:

    codice:
    Public Class formfacile
        Dim vel, vdir, hdir, i As Double
        Dim risp As Integer
    
        'I commenti del codice principale (quello del Timerfac) son da riferirsi alla palla
    
        Private Sub Timerfac_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timerfac.Tick
            ball.Left = ball.Left + (hdir * vel)
            ball.Top = ball.Top + (vdir * vel)
            'Rimbalza e accelera se colpisci il campo
            If ball.Left + ball.Width >= field.Left + field.Width Then
                hdir = -hdir
                vel = vel + 0.15
            End If
            If ball.Top + ball.Height >= field.Top + field.Height Then
                vdir = -vdir
                vel = vel + 0.15
            End If
    
            If ball.Top <= field.Top Then
                vdir = -vdir
                vel = vel + 0.15
            End If
            'Se passi sopra la racchetta: continua
            If ball.Left <= racchetta.Left + racchetta.Width Then
                If ball.Top + ball.Height <= racchetta.Top Then
                    hdir = hdir
                    vel = vel
                End If
            End If
            'Se centri la racchetta: rimbalza, aggiungi 1pt e rimpicciolisciti
            'Se centri la racchetta
            If ball.Left <= racchetta.Left + racchetta.Width Then
                If ball.Top + ball.Height >= racchetta.Top Then
                    If ball.Top + ball.Height <= racchetta.Top + racchetta.Height Then
                        'Rimbalza
                        hdir = -hdir
                        'Accelera
                        If i < 25 Then
                            vel = vel + 0.5
                        End If
                        If i >= 25 Then
                            vel = vel + 0.3
                        End If
                        'Aggiungi 1pt
                        i = i + 1
                    End If
                End If
            End If
            'Se passi sotto la racchetta: continua
            If ball.Left <= racchetta.Left + racchetta.Width Then
                If ball.Top >= racchetta.Top + racchetta.Height Then
                    hdir = hdir
                    vel = vel
                End If
            End If
            'Se tocchi il bordo sinistro: fermati
            If ball.Left <= field.Left Then
                Timerfac.Enabled = False
            End If
            'Quando ti fermi: appare MsgBox
            If Timerfac.Enabled = False Then
                risp = MsgBox("Il tuo punteggio è " & i & vbCrLf & "Vuoi rigiocare?", 4, "Fine partita")
            End If
            'La racchetta non può uscire dal campo
            If racchetta.Top <= field.Top Then
                racchetta.Top = field.Top
            End If
            If racchetta.Top + racchetta.Height >= field.Top + field.Height Then
                racchetta.Top = field.Top + field.Height - racchetta.Height
            End If
            'Fine codice istruzioni palla
            'Se si isponde "Sì": rigioca [NON FUNZIONA]
            If risp = 6 Then
    
            End If
    
            'Se si risponde "No": esci
            If risp = 7 Then
                End
            End If
            Label7.Text = vel
            Label2.Text = i
        End Sub
    
        Private Sub racchetta_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
            If e.KeyCode = Keys.Q Or Keys.W Or Keys.E Or Keys.R Or Keys.T Or Keys.Y Or Keys.U Or Keys.I Or Keys.O Or Keys.P Or Keys.A Or Keys.S Or Keys.D Or Keys.F Or Keys.G Or Keys.H Or Keys.J Or Keys.K Or Keys.L Or Keys.Z Or Keys.X Or Keys.C Or Keys.V Or Keys.B Or Keys.N Or Keys.M Then
                Timerfac.Enabled = True
                premilettera.Visible = False
            End If
            'Muovi palla con la tastiera
            If e.KeyCode = Keys.A Then
                racchetta.Top = racchetta.Top - 30
            End If
            If e.KeyCode = Keys.Z Then
                racchetta.Top = racchetta.Top + 30
            End If
        End Sub
    
        Private Sub formfacile_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            vel = 9
            vdir = 1
            hdir = 1
            i = 0
            Timerfac.Enabled = False
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            'Se si preme "Esci", il gioco finisce
            End
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            'Se si preme "Ricomincia", la palla viene riposizionata e si riparte
            Timerfac.Enabled = True
            ball.Location = punto.Location
            hdir = -hdir
            vdir = -vdir
            vel = 9
            i = 0
        End Sub
    
    End Class
    E' uguale a quello del form medio (ho fatto copia e incolla), ma non funziona. Ho impostato che quando carico il form, il timer è disattivato e c'è la scritta "Quando sei pronto premi una lettera" (label "premilettera"); quando si preme un tasto il timer si attiva e la scritta sparisce: questio ultimi due passaggi non li fa. Credo ci sia un problema con l'evento KeyDown del form. Mi aiutate? GRAZIE IN ANTICIPO

  2. #2
    codice:
    If e.KeyCode = Keys.Q Or Keys.W Or Keys.E Or Keys.R Or Keys.T Or Keys.Y Or Keys.U Or Keys.I Or Keys.O Or Keys.P Or Keys.A Or Keys.S Or Keys.D Or Keys.F Or Keys.G Or Keys.H Or Keys.J Or Keys.K Or Keys.L Or Keys.Z Or Keys.X Or Keys.C Or Keys.V Or Keys.B Or Keys.N Or Keys.M Then             
    Timerfac.Enabled = True             
    premilettera.Visible = False         
    End If
    per prima cosa penso sia un po eccessivo usare tutti questi or... prova a rivedere questa parte.
    Questo lo esegui quando premi un tasto sulla racchetta. Prova ad inserirlo sul formfacile_keydown

    e se ti va bene qualsiasi tasto ometti l'if e abilita solo il timer e la lettera.
    ChromeOS.eu tutto su Chrome OS!
    HTML5 Answer Il 3D nel browser è arrivato! Sviluppa la tua app 3D per il browser!

  3. #3
    vabbè, quello è un problema secondario..... se nn parte il gioco a ke mi serve cambiare quella parte? tanto nn danno mica fastidio gli "or".

  4. #4
    hai inserito nel formfacile_keydown come ti ho detto il codice?
    o al massimo fai partire la cosa con un bottone se non ci riesci.

    quella serie di or oltre a essere orribile da vedere rallenta di un po l'esecuzione... ogni volta valuta quell'espressione, e se premo velocemente un tasto se ne accorge... e magari sto premendo una freccia e se li scorre tutti
    ChromeOS.eu tutto su Chrome OS!
    HTML5 Answer Il 3D nel browser è arrivato! Sviluppa la tua app 3D per il browser!

  5. #5
    si, lo so ke devo metterlo nel form....... lì sta riferito alla racchetta xk l'avevo cambiato x vedere se funzionava, ma anke così niente...... non riesco proprio a capire xk.. ora cmq non avrò il computer x 2 settimane, quindi si pensa a settembre.... hai anche qualche suggerimento x migliorare l'interfaccia (animazioni o cose del genere)? Io non so niente a riguardo

  6. #6
    dovresti lavorare un po con le proprietà grafiche della label
    ChromeOS.eu tutto su Chrome OS!
    HTML5 Answer Il 3D nel browser è arrivato! Sviluppa la tua app 3D per il browser!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.