Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Un gioco per misurare i riflessi
venerdì 18 maggio 2007 - 11.04
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
frabas
Profilo
| Newbie
2
messaggi | Data Invio:
ven 18 mag 2007 - 11:04
Vorrei realizzare un gioco per misurare i riflessi:
in un form viene estratto un numero casuale che va a comporre una stringa di 10 cifre da 1 a 10. Il numero sostituisce a una delle 10 cifre, un carattere jolly "|" nella posizione corrispondente al suo valore: es. 0123|56789 se è estratto 4.
La frequenza con cui viene estratto il numero è determinata da un timer con un valore determinato nel codice.
L'utente dovrebbe, mediante la tastiera numerica, avere la rapidità di digitare la cifra corrispondente prima che scada il timer e venga estratto il numero successivo. Se riesce si incrementa il numero delle prove riuscite. Altrimenti si incrementa il numero delle prove fallite.
Primo problema: non riesco a fare eseguire contemporaneamente due eventi: l'evento timer e l'evento keypress.
Secondo problema: posto che si voglia fare eseguire la prova un certo numero di volte (ad es. 3) il contatore delle prove fallite si incrementa di 3 volte anzichè confrontare il numero casuale con il numero digitato volta per volta.
Potete aiutarmi?
Francesco
Il codice scritto finora:
Imports System.Windows.Forms
Public Class Form1
Inherits System.Windows.Forms.Form
Friend WithEvents btnStart As System.Windows.Forms.Button
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents Label2 As System.Windows.Forms.Label
Public Shared myTimer As New System.Windows.Forms.Timer
Dim NumCifra As Integer
Dim Numero As Integer
Dim ProveRiuscite As Integer
Dim ProveFallite As Integer
Friend WithEvents lblAccettaNumero As System.Windows.Forms.Label
Friend WithEvents Label3 As System.Windows.Forms.Label
Friend WithEvents Label4 As System.Windows.Forms.Label
Private Shared exitFlag As Boolean = False
#Region " Codice generato da Progettazione Windows Form "
Public Sub New()
MyBase.New()
'Chiamata richiesta da Progettazione Windows Form.
InitializeComponent()
'Aggiungere le eventuali istruzioni di inizializzazione dopo la chiamata a InitializeComponent()
End Sub
'Form esegue l'override del metodo Dispose per pulire l'elenco dei componenti.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Richiesto da Progettazione Windows Form
Private components As System.ComponentModel.IContainer
'NOTA: la procedura che segue è richiesta da Progettazione Windows Form.
'Può essere modificata in Progettazione Windows Form.
'Non modificarla nell'editor del codice.
Friend WithEvents lblCifre As System.Windows.Forms.Label
Friend WithEvents lblRandom As System.Windows.Forms.Label
Friend WithEvents lblProveRiuscite As System.Windows.Forms.Label
Friend WithEvents lblProveFallite As System.Windows.Forms.Label
Friend WithEvents Timer1 As System.Windows.Forms.Timer
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container
Me.lblCifre = New System.Windows.Forms.Label
Me.lblRandom = New System.Windows.Forms.Label
Me.lblProveRiuscite = New System.Windows.Forms.Label
Me.lblProveFallite = New System.Windows.Forms.Label
Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
Me.btnStart = New System.Windows.Forms.Button
Me.Label1 = New System.Windows.Forms.Label
Me.Label2 = New System.Windows.Forms.Label
Me.lblAccettaNumero = New System.Windows.Forms.Label
Me.Label3 = New System.Windows.Forms.Label
Me.Label4 = New System.Windows.Forms.Label
Me.SuspendLayout()
'
'lblCifre
'
Me.lblCifre.BackColor = System.Drawing.SystemColors.ControlLightLight
Me.lblCifre.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblCifre.Location = New System.Drawing.Point(12, 112)
Me.lblCifre.Name = "lblCifre"
Me.lblCifre.Size = New System.Drawing.Size(136, 24)
Me.lblCifre.TabIndex = 0
'
'lblRandom
'
Me.lblRandom.BackColor = System.Drawing.SystemColors.ControlLightLight
Me.lblRandom.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblRandom.Location = New System.Drawing.Point(14, 60)
Me.lblRandom.Name = "lblRandom"
Me.lblRandom.Size = New System.Drawing.Size(95, 24)
Me.lblRandom.TabIndex = 1
'
'lblProveRiuscite
'
Me.lblProveRiuscite.BackColor = System.Drawing.SystemColors.ControlLightLight
Me.lblProveRiuscite.ForeColor = System.Drawing.SystemColors.GradientActiveCaption
Me.lblProveRiuscite.Location = New System.Drawing.Point(375, 45)
Me.lblProveRiuscite.Name = "lblProveRiuscite"
Me.lblProveRiuscite.Size = New System.Drawing.Size(88, 24)
Me.lblProveRiuscite.TabIndex = 12
'
'lblProveFallite
'
Me.lblProveFallite.BackColor = System.Drawing.SystemColors.ControlLightLight
Me.lblProveFallite.Location = New System.Drawing.Point(375, 100)
Me.lblProveFallite.Name = "lblProveFallite"
Me.lblProveFallite.Size = New System.Drawing.Size(96, 24)
Me.lblProveFallite.TabIndex = 13
'
'Timer1
'
Me.Timer1.Enabled = True
Me.Timer1.Interval = 3000
'
'btnStart
'
Me.btnStart.Location = New System.Drawing.Point(225, 26)
Me.btnStart.Name = "btnStart"
Me.btnStart.Size = New System.Drawing.Size(75, 23)
Me.btnStart.TabIndex = 16
Me.btnStart.Text = "Start"
Me.btnStart.UseVisualStyleBackColor = True
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(375, 85)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(62, 13)
Me.Label1.TabIndex = 17
Me.Label1.Text = "Prove fallite"
'
'Label2
'
Me.Label2.AutoSize = True
Me.Label2.Location = New System.Drawing.Point(378, 29)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(71, 13)
Me.Label2.TabIndex = 18
Me.Label2.Text = "Prove riuscite"
'
'lblAccettaNumero
'
Me.lblAccettaNumero.AutoSize = True
Me.lblAccettaNumero.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblAccettaNumero.Location = New System.Drawing.Point(256, 112)
Me.lblAccettaNumero.Name = "lblAccettaNumero"
Me.lblAccettaNumero.Size = New System.Drawing.Size(17, 17)
Me.lblAccettaNumero.TabIndex = 19
Me.lblAccettaNumero.Text = "0"
'
'Label3
'
Me.Label3.AutoSize = True
Me.Label3.Location = New System.Drawing.Point(225, 83)
Me.Label3.Name = "Label3"
Me.Label3.Size = New System.Drawing.Size(84, 13)
Me.Label3.TabIndex = 20
Me.Label3.Text = "Accetta Numero"
'
'Label4
'
Me.Label4.AutoSize = True
Me.Label4.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Label4.ForeColor = System.Drawing.Color.Red
Me.Label4.Location = New System.Drawing.Point(14, 36)
Me.Label4.Name = "Label4"
Me.Label4.Size = New System.Drawing.Size(95, 13)
Me.Label4.TabIndex = 21
Me.Label4.Text = "NumeroCasuale"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(502, 292)
Me.Controls.Add(Me.Label4)
Me.Controls.Add(Me.Label3)
Me.Controls.Add(Me.lblAccettaNumero)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.btnStart)
Me.Controls.Add(Me.lblProveFallite)
Me.Controls.Add(Me.lblProveRiuscite)
Me.Controls.Add(Me.lblRandom)
Me.Controls.Add(Me.lblCifre)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
#End Region
Protected Overridable Sub TimerOnTick(ByVal obj As Object, ByVal ea As EventArgs) _
Handles Timer1.Tick
OnResize(EventArgs.Empty)
Timer1.Interval = 3000
Dim Prova As Integer
Dim NumCifra As Integer
Dim Numero As Integer
'Cifra è un nuovo oggetto della classe Random
Dim Cifra As Random = New Random
For Prova = 1 To 3
'NumCifra è la variabile alla quale viene assegnato il numero estratto casualmente
NumCifra = Cifra.Next(1, 10)
' la variabile viene visualizzata nella label
lblRandom.Text = NumCifra
' viene costruita la stringa con il carattere random
lblCifre.Text = Mid("0123456789", 1, NumCifra) & "|" & Mid("0123456789", NumCifra + 2, 10)
'viene effettuato il confronto tra la variabile casuale e il valore cliccato, o inserito
'tramite clic sui pulsanti numerici
'NumCifra è il numero casuale
'Numero dovrebbe essere quello inserio dall'utente
Numero = lblAccettaNumero.Text
If Numero = NumCifra Then
ProveRiuscite += 1
lblProveRiuscite.Text = ProveRiuscite
Else : ProveFallite += 1
lblProveFallite.Text = ProveFallite
End If
Next Prova
End Sub 'TimerOnTick
Private Sub Gianni_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles MyBase.KeyPress
lblAccettaNumero.Text = e.KeyChar
End Sub
End Class
1024x742
24Kb
dedalo.nel.labirinto
Profilo
| Newbie
33
messaggi | Data Invio:
sab 19 mag 2007 - 15:53
348_Main.zip
ciao
>Primo problema: non riesco a fare eseguire contemporaneamente
>due eventi: l'evento timer e l'evento keypress.
non penso che il problema sia questo.
il timer genera l'evento tick da solo ad intervalli regolari quello che tu fai è dirgli cosa deve accadere ogni volta.
l'evento keypress così come lo hai scritto tu non viene sollevato.
>Private Sub Gianni_KeyPress(ByVal sender As System.Object, ByVal
>e As System.Windows.Forms.KeyPressEventArgs) _
> Handles MyBase.KeyPress
> lblAccettaNumero.Text = e.KeyChar
> End Sub
potresti inserire una textbox per l'input dell'utente e gestire il suo evento keypress per controllare i valori digitati
>Secondo problema: posto che si voglia fare eseguire la prova
>un certo numero di volte (ad es. 3) il contatore delle prove
>fallite si incrementa di 3 volte anzichè confrontare il numero
>casuale con il numero digitato volta per volta.
per prima cosa nel codice per l'incremento del punteggio in realtà non stai gestendo la possibilità di diversi tentativi
prima di valorizzare l'esito come positivo o negativo.
in realtà stai dicendo al programma di generare un numero casuale per tre volte (il ciclo for), di confrontarne il valore con un altro numero e incrementare la variabile proveriuscite se il numero coincide, provefallite se non coincide, e questo ogni tre secondi.
cmq non penso che inserire tutto il codice nell'evento tick del timer sia la soluzione migliore.
secondo me qui dovresti gestire principalmente la generazione dei numeri random e occuparti del controllo dei valori
nel momento in cui vengono inseriti.
metto in allegato un esempio di come potrebbe essere gestito il gioco, magari può esserti d'aiuto
frabas
Profilo
| Newbie
2
messaggi | Data Invio:
mar 12 giu 2007 - 15:14
Ti ringrazio di cuore! Era parecchio tempo che ci rimuginavo sopra senza riuscirci.
Non mi resta che migliorarlo graficamente!
Ciao
Francesco
>ciao
>
>>Primo problema: non riesco a fare eseguire contemporaneamente
>>due eventi: l'evento timer e l'evento keypress.
>
>non penso che il problema sia questo.
>il timer genera l'evento tick da solo ad intervalli regolari
>quello che tu fai è dirgli cosa deve accadere ogni volta.
>
>l'evento keypress così come lo hai scritto tu non viene sollevato.
>
>>Private Sub Gianni_KeyPress(ByVal sender As System.Object, ByVal
>>e As System.Windows.Forms.KeyPressEventArgs) _
>> Handles MyBase.KeyPress
>> lblAccettaNumero.Text = e.KeyChar
>> End Sub
>
>potresti inserire una textbox per l'input dell'utente e gestire
>il suo evento keypress per controllare i valori digitati
>
>
>>Secondo problema: posto che si voglia fare eseguire la prova
>>un certo numero di volte (ad es. 3) il contatore delle prove
>>fallite si incrementa di 3 volte anzichè confrontare il numero
>>casuale con il numero digitato volta per volta.
>
>per prima cosa nel codice per l'incremento del punteggio in realtà
>non stai gestendo la possibilità di diversi tentativi
>prima di valorizzare l'esito come positivo o negativo.
>
>in realtà stai dicendo al programma di generare un numero casuale
>per tre volte (il ciclo for), di confrontarne il valore con un
>altro numero e incrementare la variabile proveriuscite se il
>numero coincide, provefallite se non coincide, e questo ogni
>tre secondi.
>
>
>
>cmq non penso che inserire tutto il codice nell'evento tick del
>timer sia la soluzione migliore.
>secondo me qui dovresti gestire principalmente la generazione
>dei numeri random e occuparti del controllo dei valori
>nel momento in cui vengono inseriti.
>
>
>metto in allegato un esempio di come potrebbe essere gestito
>il gioco, magari può esserti d'aiuto
>
>
>
dedalo.nel.labirinto
Profilo
| Newbie
33
messaggi | Data Invio:
mar 12 giu 2007 - 20:54
di nulla, è un piacere
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !