Kiedy losujemy liczbę i liczba może się powtórzyć wtedy taka inicjacja jest prosta do przedstawienia:
Dim LiczbaLosowana As new Random Dim ZmiennaLosowa As Integer ZmiennaLosowa = LiczbaLosowana .Next(1,100)
Taki zapis pozwoli nam pod zmienną „ZmiennaLosowa” podstawić losową liczbę z przedziału od 1 do 100. Niestety po pewnym czasie korzystania z tego zapisu zauważycie, że jeśli potrzebowaliśmy losowania kilku liczb z jakiegoś małego przedziału, jest duże prawdopodobieństwo, że nasze liczby się powtórzą. Zrobimy dzisiaj program który pokaże wam jak wylosować 6 liczb z 49 czyli tak jak w lotku. Może się to komuś przyda do opracowywania strategi gry w tę grę. Zaczynamy od nowego projektu i rozkładamy 7x textbox, 1x button, 1x listbox, 6x label, tak jak na obrazku:
Program nasz będzie losował 6 liczb z 49. Sami będziemy mogli określić jak duża puli liczb ma być i ile tych liczb ma być typowane. Aby liczby nie powtarzały się stworzymy sobie tablice typu „boolean” i wypełnimy ją sobie od 0 do 49 i wypełnimy ją sobie „false”. Co to nam daje. Otóż gdy padnie liczba na określonym numerze tablicy np:3 a jego wartość będzie wynosiła „true” wtedy nie będzie ona dodawana do puli wylosowanych liczb i program będzie liczył dotąd aż wylosuje niepowtarzające się liczby.
Jeśli przyjmiemy, że nasza losowana liczba to będzie „i” nasza tablica będzie wyglądała następująco
tablica(1)=false
tablica(2)=false
tablica(3)=false
(…)
tablica(49)=false
Teraz podczas inicjowania naszego programu losujemy liczbę z przedziału od 1-49 i wylosowaliśmy liczbę „2”. Cyfrę tą wrzucamy do puli liczb wylosowanych a nasza tablica przyjmuje wartości:
tablica(1)=false
tablica(2)=true
tablica(3)=false
(…)
tablica(49)=false
Teraz gdy nasze „i” przyjmie ponownie wartość „2”. Cyfra ta nie zostanie ponownie przyjęta do puli ponieważ w tablicy będzie oznaczona jako „true” i zostanie pominięta.
Program robiony był prze zemnie w Sharpie. Najpierw inicjujemy komponenty:
Public Partial Class MainForm Dim max As Integer =49 'okresla ilosc cyfr w losowaniu Dim randomNum As new Random Dim LiczbaKontrolna As Integer Dim losowania As Integer = 6 ' okresla ilosc losowanych liczb (...)
Teraz tworzymy uchwyt dla naszego przycisku. Program trafione liczby będzie zaznaczał poprzez zmianę koloru textboxa na czerwono dla tego najpierw wyczyścimy sobie kolor naszych textboxów kodem:
Sub Button2Click(sender As Object, e As EventArgs) 'dodatkowo textBox2.BackColor = Nothing textBox3.BackColor = Nothing textBox4.BackColor = Nothing textBox5.BackColor = Nothing textBox6.BackColor = Nothing textBox7.BackColor = Nothing (...)
Teraz zainicjujemy sobie tablice. Jedną do przechowywania trafionych liczb drugą do przechowywania naszych liczb i trzecią typu „boolean” kontrolną przechowującą „true” i „false”
(...) Dim wylosowaneLiczby As New List(Of Integer) Dim mojeLiczby As new List(Of Integer) Dim wylosowane As new List(Of Boolean) (...)
Teraz wypełniamy sobie naszą tablicę „wylosowane” zmienną „false” od 0 do „max” i zerujemy nasz textbox który wyświetlać nam będzie wylosowane liczby (podczas ponownego losowania aby liczby z poprzedniego losowania nie były dodawane.) i zerujemy listbox który będzie pokazywał nam które liczby dostały wartość „true”
(...) For i As Integer = 0 To max wylosowane.Add(False) Next 'czyści listboxa listBox1.Items.Clear() 'zeruje losowanie textBox1.Text = "" (...)
Teraz przechodzimy do głównej pętli która będzie losowała nasze liczby, wygląda on tak:
(...) 'rozpoczyna losowanie Dim start As Integer = 0 Do While start <= losowania-1 LiczbaKontrolna = randomNum.Next(1,max) If wylosowane(LiczbaKontrolna)=False Then wylosowane(LiczbaKontrolna)=true textBox1.Text += LiczbaKontrolna.tostring + "," 'dodatkowo wylosowaneLiczby.Add(LiczbaKontrolna) start+=1 End If Loop (...)
Warto sobie tą pętle przeanalizować. Teraz musimy dodać tylko:
'pętla wypełni listbox trafieniami For Each element In wylosowane listBox1.Items.Add(element) Next 'pętla koloruje trafione liczby na czerwono For each elements In wylosowaneLiczby If textBox2.Text = elements.ToString Then textBox2.BackColor=Color.Red Else If textBox3.Text = elements.ToString Then textBox3.BackColor=Color.Red Else If textBox4.Text = elements.ToString Then textBox4.BackColor=Color.Red Else If textBox5.Text = elements.ToString Then textBox5.BackColor=Color.Red Else If textBox6.Text = elements.ToString Then textBox6.BackColor=Color.Red Else If textBox7.Text = elements.ToString Then textBox7.BackColor=Color.Red End If next
Jeśli wszystko zrobiliście dobrze powinno to wyglądać jak na filmie:
pełen kod można pobrać tutaj: loser_lotto