SOGO論壇
  登入   註冊   找回密碼
查看: 1108|回覆: 9
列印 上一主題 下一主題

[心得分享] vb2008對獎程式 小問題.... [複製連結]

Rank: 12Rank: 12Rank: 12

熱心參予論壇活動及用心回覆主題勳章

狀態︰ 離線
跳轉到指定樓層
1
發表於 2012-8-17 14:08:47 |只看該作者 |倒序瀏覽
如題 我可以產生兩組號碼了 可是對獎那邊有問題
請幫我修改 可以的話 加註解 詳細些喔

我有四個按鈕 第一個是產生一組號碼
第二個是產生中獎號碼
第三個是對獎 要可以跳出中幾個號碼
第四個是可以重新產生號碼跟對獎

我的程式如下 請幫我改第三第四個按鈕(用文字方塊對獎喔)
按鈕一跟按鈕二 分別產生6個數字到編號1-12個文字方塊
我共有12個文字方塊 1-6是產生的號碼 7-12是開獎的號碼
以上都ok了

按鈕三
Dim a(6), b(6) As Integer
Dim i, n, temp As Integer
Dim prize
a(1) = Text1.Text
a(2) = Text2.Text
a(3) = Text3.Text
a(4) = Text4.Text
a(5) = Text5.Text
a(6) = Text6.Text

b(1) = Text7.Text
b(2) = Text8.Text
b(3) = Text9.Text
b(4) = Text10.Text
b(5) = Text11.Text
b(6) = Text12.Text
prize = 0
Do While i <= 6 '當i<6的時候要做 因為有六個數字要比較
temp = a(i)
n = b(i) 'n是由陣列b產生的數字 會變動
For i = 1 To 6
If temp = n Then
prize = prize + 1
End If
Next
i += 1
Loop

MsgBox(Val(prize) / 6)
prize = 0

按鈕四
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
Text7.Text = ""
Text8.Text = ""
Text9.Text = ""
Text10.Text = ""
Text11.Text = ""
Text12.Text = ""
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

Rank: 4

狀態︰ 離線
2
發表於 2012-8-17 14:25:53 |只看該作者
私信詳談,我傳類似的給你研究

Rank: 13Rank: 13Rank: 13Rank: 13

原創及親傳圖影片高手勳章 熱心參予論壇活動及用心回覆主題勳章 榮譽會員勳章 數位硬體勳章 小說之星勳章 原創寫手勳章

狀態︰ 離線
3
發表於 2012-8-18 02:29:34 |只看該作者
本帖最後由 又靜 於 2012-8-18 03:42 編輯

您好
針對您的需求我利用四個按鈕、二個文字方塊,重新編寫一個比較簡單昜懂的程式給您參考

按鈕一
  1.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         Dim a As Integer
  3.         Randomize()                                         '為 Rnd 函式的亂數產生器指定新的種子值以進行初始化。
  4.         TextBox1.Text = ""                                  '清除 TextBox1 文字方塊
  5.         For i = 1 To 6                                      '設定六次迴圈取得六位數
  6.             a = Rnd() * 9 + 48                              '產生亂數 0~9 (0~9 的 ASCII 碼是從 48~57 所以要再加48 )
  7.             TextBox1.Text = TextBox1.Text & Chr(a)          '把產生的亂數轉換成字元,再跟文字方數組合成字串
  8.         Next
  9.     End Sub
複製代碼
Randomize()  主要是為 Rnd 函式的亂數產生器進行初始化。如果省略了 Number,則會使用系統計時器的值做為新的種子值。
沒有使用 Randomize(),會造成Rnd 函式第一次所產生的值都相同。

因為我們要用文字方塊對獎,所以把產生0~9的亂數再加48,成為0~9的ASCII 碼,Chr(a)就是把ASCII 轉換成文字碼
利用 & 把六個字元組合成一組六位數的字串,再放到文字方塊1。


按鈕二 (程式碼跟按鈕一類似,所以不加註解了)
  1.     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  2.         Dim b As Integer
  3.         Randomize()
  4.         TextBox2.Text = ""
  5.         For i = 1 To 6
  6.             b = Rnd() * 9 + 48
  7.             TextBox2.Text = TextBox2.Text & Chr(b)
  8.         Next
  9.     End Sub
複製代碼
按鈕三
  1.     Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
  2.         Dim prize
  3.         prize = 0                                           '清除相同號碼次數值
  4.         For i = 1 To 6                                      '設定六次迴圈,做六個數字的比較
  5.             If Mid(TextBox1.Text, i, 1) = Mid(TextBox2.Text, i, 1) Then '利用迴圈 i 的值來指定兩個字串的第幾位數要做比較
  6.                 prize = prize + 1                           '比較相同則對中號碼的次數加一
  7.             End If
  8.         Next
  9.         MsgBox(Val(prize))                                  '將中幾個號碼顯示
  10.     End Sub
複製代碼
Mid主是要從字串中取得一組指定的字串,它的用法Mid(字串,從第幾位開始,取幾個字)
所以我們利用For迴圈從文字方塊中,從第一位數逐一取到第六位,每次取一個字出來比較
如果有相同,prize就加一,最後再把 prize 的值顯示出來


按鈕四
  1.     Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
  2.         Dim a As Integer
  3.         TextBox1.Text = ""
  4.         TextBox2.Text = ""
  5.         Randomize()
  6.         For i = 1 To 6
  7.             a = Rnd() * 9 + 48
  8.             TextBox1.Text = TextBox1.Text & Chr(a)
  9.             a = Rnd() * 9 + 48
  10.             TextBox2.Text = TextBox2.Text & Chr(a)
  11.         Next
  12.     End Sub
  13. End Class
複製代碼
因為不知道您要重新產生號碼跟對獎號碼??? 或是重新產生按鈕1的號碼,然後再對一次獎???

Rank: 12Rank: 12Rank: 12

熱心參予論壇活動及用心回覆主題勳章

狀態︰ 離線
4
發表於 2012-8-18 10:07:24 |只看該作者
又靜 發表於 2012-8-18 02:29  
您好
針對您的需求我利用四個按鈕、二個文字方塊,重新編寫一個比較簡單昜懂的程式給您參考

神人版主大大  根本感恩啊!!
小子研究一下  希望還能再跟你請益!

Rank: 12Rank: 12Rank: 12

熱心參予論壇活動及用心回覆主題勳章

狀態︰ 離線
5
發表於 2012-8-18 10:13:33 |只看該作者
又靜 發表於 2012-8-18 02:29  
您好
針對您的需求我利用四個按鈕、二個文字方塊,重新編寫一個比較簡單昜懂的程式給您參考

其實  我的意思是
六個自己產生的號碼  同時顯示在文字方塊1-6(按鈕一)
開獎號碼產生  同時顯示在文字方塊7-12(按鈕一)
然後按下對獎
會顯示出方塊1-6  有幾個跟方塊7-12一樣


謝謝  感恩  可以幫忙改一下下嗎

Rank: 4

狀態︰ 離線
6
發表於 2012-8-18 11:11:54 |只看該作者
可以利用if來做比較
簡易說明
當a=b時將他們的顏色設為綠色
不等於時進行下一個比對
並將不等於的設為紅色
或者另外在開一個Label1.text來進行顯示

Rank: 12Rank: 12Rank: 12

熱心參予論壇活動及用心回覆主題勳章

狀態︰ 離線
7
發表於 2012-8-18 12:01:21 |只看該作者
又靜 發表於 2012-8-18 02:29  
您好
針對您的需求我利用四個按鈕、二個文字方塊,重新編寫一個比較簡單昜懂的程式給您參考

可以用了  感謝  只是這樣產生的六個數字好像會重複?

Rank: 13Rank: 13Rank: 13Rank: 13

原創及親傳圖影片高手勳章 熱心參予論壇活動及用心回覆主題勳章 榮譽會員勳章 數位硬體勳章 小說之星勳章 原創寫手勳章

狀態︰ 離線
8
發表於 2012-8-18 12:50:07 |只看該作者
劍君13恨 發表於 2012-8-18 12:01  
可以用了  感謝  只是這樣產生的六個數字好像會重複?

我用您按鈕三的程式修改一下,看看是不是您想要的
  1.         Dim a(6), b(6) As Integer
  2.         Dim prize

  3.         a(1) = Text1.Text
  4.         a(2) = Text2.Text
  5.         a(3) = Text3.Text
  6.         a(4) = Text4.Text
  7.         a(5) = Text5.Text
  8.         a(6) = Text6.Text

  9.         b(1) = Text7.Text
  10.         b(2) = Text8.Text
  11.         b(3) = Text9.Text
  12.         b(4) = Text10.Text
  13.         b(5) = Text11.Text
  14.         b(6) = Text12.Text
  15.         prize = 0

  16.         For i = 1 To 6
  17.             If a(i) = b(i) Then
  18.                 prize = prize + 1
  19.             End If
  20.         Next
  21.         MsgBox(prize)
複製代碼

Rank: 13Rank: 13Rank: 13Rank: 13

原創及親傳圖影片高手勳章 熱心參予論壇活動及用心回覆主題勳章 榮譽會員勳章 數位硬體勳章 小說之星勳章 原創寫手勳章

狀態︰ 離線
9
發表於 2012-8-18 13:06:15 |只看該作者
劍君13恨 發表於 2012-8-18 12:01  
可以用了  感謝  只是這樣產生的六個數字好像會重複?

Rnd 函式的亂數產生器它產生的亂數重覆性不高,但是Rnd 函式會以種子值開始,並產生落在有限範圍內的數值,因此瞭解用於產生該值演算法的人員,就可預測出結果。所以不適合用來產生用於密碼編譯的亂數

Rank: 12Rank: 12Rank: 12

熱心參予論壇活動及用心回覆主題勳章

狀態︰ 離線
10
發表於 2012-8-18 22:21:26 |只看該作者
又靜 發表於 2012-8-18 13:06  
Rnd 函式的亂數產生器它產生的亂數重覆性不高,但是Rnd 函式會以種子值開始,並產生落在有限範圍內的數值 ...

謝謝又大....小弟剛好在另一專業論壇得到以下回答  交流一下
據說可以避免重複....  

另外  請問如何向你那樣貼程式碼阿....還有  請教 您真的是  女性嗎?

很少碰到女生  程式很好的  ><'


  Do While i <= 6      '當i<6的時候要做  因為有六個數字要比較
            n = Int(Rnd() * 48) + 1
            b(i) = n         'n是由陣列b產生的數字 會變動
            For c = 1 To i - 1
                If c < i And n = b(c) Then
                    i = i - 1
                End If
            Next
            i += 1
        Loop
        Text1.Text = b(1)
        Text2.Text = b(2)
        Text3.Text = b(3)
        Text4.Text = b(4)
        Text5.Text = b(5)
        Text6.Text = b(6)
請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-6-3 14:18

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部