Προς το περιεχόμενο

vb (timer, rand)


dimitris_pa

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα, πως γίνεται να κάνω την rand να βγάζει από το 1 μέχρι το 4 κάθε 2 δευτερόλεπτα (με timer) στην visual basic ? δηλαδή κάθε 2 δευτερόλεπτα (η αν βάλω διαφορετικό χρόνο) να πετάει έναν αριθμό από το 1 μέχρι το 4 και φυσικά χωρίς το 0. Κανένα παράδειγμα αν γίνεται παρακαλώ :)

Ευχαριστώ εκ των πρότερων.

 

Υ.Γ. όχι δεν είναι εργασία :)

Υ.Γ. το κάνω για να θυμηθώ την vb και προετοιμάζομαι για την java, σύντομα πιστεύω θα ξανά χρειαστώ τα φωτά σας στην ίδια ερωτήσει.

Δημοσ.

Προσθεσε εναν timer και ενα listbox σε μια VB form... Ο παρακατω κωδικας εξηγει τo initialization του timer και την προσθεση των random αριθμων στο listbox...

 

>Public Class Form1
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Randomize()
       _timer.Interval = 2000
       _timer.Start()
   End Sub

   Private Sub _timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _timer.Tick
       _listBox.Items.Add(String.Format("{0}", Int((4 * Rnd()) + 1)))
   End Sub
End Class

Δημοσ.

Αν μιλάς για vb.net (και όχι vb6) δες αυτό το άρθρο http://stackoverflow.com/questions/18676/random-int-in-vb-net. Απαντάει ακριβώς αυτό που θέλεις.

ναι δεν μιλάω για vb6.....

δηλαδη με αυτο κανω ενα μερος της δουλειας μου ?

 

>Public Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Integer
   Dim Generator As System.Random = New System.Random()
   Return Generator.Next(1, 4)
End Function

 

Προσθεσε εναν timer και ενα listbox σε μια VB form... Ο παρακατω κωδικας εξηγει τo initialization του timer και την προσθεση των random αριθμων στο listbox...

 

>Public Class Form1
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Randomize()
       _timer.Interval = 2000
       _timer.Start()
   End Sub

   Private Sub _timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _timer.Tick
       _listBox.Items.Add(String.Format("{0}", Int((4 * Rnd()) + 1)))
   End Sub
End Class

 

ευχαριστω αλλα μηπως μπορεις να μου το κανεις χωρις listbox και με σχολια ? δεν το πολυ καταλαβα ετσι και δεν νομιζω να καταφερω να το κολλησω σε αυτο που κανω.....

Δημοσ.

Ναι, μπορείς να κάνεις τη δουλειά σου, αλλά κάθε φορά που θα τρέχεις το πρόγραμμα θα σου δίνει την ίδια ακολουθία αριθμών. Αν όντως το κάνει αυτό, μπορείς να το κάνεις έτσι:

 

>
Public Function RandomNumber(ByVal n As Integer) As Integer
    'initialize random number generator
    Dim r As New Random(System.DateTime.Now.Millisecond)
    Return r.Next(1, n)
End Function

 

 

Δημοσ.

Η χρηση του timer προυποθετει την χρηση Windows Forms. Θα πρεπει πρωτα - πρωτα να προσθεσεις ενα component τυπου Timer στην φορμα σου (μπορεις ευκολα να το κανεις με drag'n drop απο το toolbox).

Κατοπιν θα προσθεσεις τις παρακατω γραμμες κωδικα στην OnLoad της φορμας σου

 

>Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Randomize()
       _timer.Interval = 2000
       _timer.Start()
   End Sub

 

Η γραμμη _timer.Interval = 2000 καθοριζει την συχνοτητα του timer σε millisecods ενω η γραμμη _timer.Start() τον ξεκιναει.

 

Η εντολη Randomize() κανει initialize το random number generator.

 

 

 

Το επομενο βημα ειναι να κανεις implement το Tick event του Timer, με αλλα λογια τον κωδικα που θα εκτελεστει καθε φορα που ο timer θα κανει fire... Αυτο γινεται εδω:

 

>
Private Sub _timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _timer.Tick
       Dim i
       i = Int((4 * Rnd())) +1
   End Sub

 

 

Η γραμμη i = Int((4 * Rnd())) +1 καλει την Rnd και νορμαλοποιει το αποτελεσμα της μεταξυ 1 - 4....

Δημοσ.

τον timer για άλλη δουλειά κατάλαβα πως να τον χρησιμοποιήσω. Μήπως μπορείτε και έχετε τον χρόνο να μου κάνετε το εξής παράδειγμα ? να έχει 4 picturebox's (picturebox.visible=false) και καθε 2 δευτερολεπτα να γινεται ενα τυχαιο picturebox (π.χ. picturebox2.visible=true). Ευχαριστώ πάρα πολύ για τον χρόνο σας.

Δημοσ.

>
Public Function RandomNumber(ByVal n As Integer) As Integer
	Dim r As New Random(System.DateTime.Now.Millisecond)
     Return r.Next(1, n)
End Function

 

Έστω λοιπόν ότι χρησιμοποιείς την πάνω Function τότε στο Tick του timer βάζεις τον παρακάτω κώδικα:

 

> 
PictureBox1.Visible = True
PictureBox2.Visible = True 
PictureBox3.Visible = True 
PictureBox4.Visible = True 

Select Case  RandomNumber(4)
   Case 1
       PictureBox1.Visible = False
   Case 2
       PictureBox2.Visible = False 
  Case 3
       PictureBox3.Visible = False  
  Case 4
       PictureBox4.Visible = False   

 

Ή αν θέλεις κάτι πιο compact...

 

> 
Dim r As Integer = RandomNumber(4)

PictureBox1.Visible = (r=1)
PictureBox2.Visible = (r=2) 
PictureBox3.Visible = (r=3)  
PictureBox4.Visible = (r=4)  

Δημοσ.

 

>
Public Function RandomNumber(ByVal n As Integer) As Integer
	Dim r As New Random(System.DateTime.Now.Millisecond)
     Return r.Next(1, n)
End Function

 

Έστω λοιπόν ότι χρησιμοποιείς την πάνω Function τότε στο Tick του timer βάζεις τον παρακάτω κώδικα:

 

> 
PictureBox1.Visible = True
PictureBox2.Visible = True 
PictureBox3.Visible = True 
PictureBox4.Visible = True 

Select Case  RandomNumber(4)
   Case 1
       PictureBox1.Visible = False
   Case 2
       PictureBox2.Visible = False 
  Case 3
       PictureBox3.Visible = False  
  Case 4
       PictureBox4.Visible = False   

 

Ή αν θέλεις κάτι πιο compact...

 

> 
Dim r As Integer = RandomNumber(4)

PictureBox1.Visible = (r=1)
PictureBox2.Visible = (r=2) 
PictureBox3.Visible = (r=3)  
PictureBox4.Visible = (r=4)  

 

σε ευχαριστω παρα πολυ!!! δουλευει!!!

 

 

>Public Function RandomNumber(ByVal n As Integer) As Integer
       Dim r As New Random(System.DateTime.Now.Millisecond)
     Return r.Next(1, 5) //δεν ξερω γιατι αλλα οταν το ειχα με 4 δεν δουλευε....
End Function

 

>
PictureBox1.Visible = False
PictureBox2.Visible = False
PictureBox3.Visible = False
PictureBox4.Visible = False

Select Case  RandomNumber(4)
   Case 1
       PictureBox1.Visible = True
   Case 2
       PictureBox2.Visible = True
  Case 3
       PictureBox3.Visible = True
  Case 4
       PictureBox4.Visible = True  //εκανα και εδω μια αλλαγη και ειναι οκ. 

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...