伊莉討論區

標題: 剪刀石頭布…卡住了 不會繼續動 [打印本頁]

作者: clown692222    時間: 2012-1-15 05:42 AM     標題: 剪刀石頭布…卡住了 不會繼續動

本帖最後由 darkjack 於 2012-1-15 09:26 AM 編輯
  1. Randomize '產生一個亂數

  2. W = Int(Rnd * 100) + 1 '用W代表出拳的機率 共100%
  3. T = 0 '以T來代表 怎共玩了幾場
  4. L = 0 '以L來代表 怎共輸了幾場
  5. Y = 0 '以Y來代表 怎共贏了幾場
  6. Text1 = T
  7. Text2 = L
  8. Text3 = Y
  9. 'Print W

  10. Select Case Val(Text1)
  11. Case Is <= 33  '這是剪刀的機率
  12.   Option1 = True
  13.     T = T + 1
  14.     Text2 = "平手!不算什麼!再來"
  15.   Option2 = True
  16.     T = T + 1
  17.     Y = Y + 1
  18.     Text2 = "好像很強的樣子?贏一把而已囂張啥?"
  19.   Option3 = True
  20.     T = T + 1
  21.     L = L = 1
  22.     Text2 = "弱掉了…連電腦都玩不贏…"

  23. Case Is >= 34 '這是石頭的機率
  24.   Option1 = True
  25.     T = T + 1
  26.     L = L + 1
  27.     Text2 = "弱掉了…連電腦都玩不贏…"
  28.   Option2 = True
  29.     T = T + 1
  30.     Text2 = "平手!不算什麼!再來"
  31.   Option3 = True
  32.     T = T + 1
  33.     Y = Y + 1
  34.     Text2 = "好像很強的樣子?贏一把而已囂張啥?"

  35.    Case Is >= 66 '這是布的機率
  36.     Option1 = True
  37.      T = T + 1
  38.      Y = Y + 1
  39.      Text2 = "好像很強的樣子?贏一把而已囂張啥?"
  40.    Option2 = True
  41.      T = T + 1
  42.      L = L + 1
  43.      Text2 = "弱掉了…連電腦都玩不贏…"
  44.    Option3 = False
  45.      T = T + 1
  46.      L = L + 1
  47.      Text2 = "平手!不算什麼!再來"
  48.    Case Is > 99 '求公平沒有設定
  49.     MsgBox "變拳!!!!!你能玩到出現這個視窗…很屌了"

  50. End Select
  51. End
複製代碼



按執行的時候 會一直把 OPTION3 打勾
然後一直按 都不會顯示別的 冏""  心血來潮寫的 就卡住了
求大大幫忙QQ


作者: darkjack    時間: 2012-1-15 09:26 AM

如果我猜得沒錯(我沒寫程式)
你應該會卡在
  1. Select Case Val(Text1)
  2. Case Is <= 33  '這是剪刀的機率
  3.   Option1 = True
  4.     T = T + 1
  5.     Text2 = "平手!不算什麼!再來"
  6.   Option2 = True
  7.     T = T + 1
  8.     Y = Y + 1
  9.     Text2 = "好像很強的樣子?贏一把而已囂張啥?"
  10.   Option3 = True
  11.     T = T + 1
  12.     L = L = 1
  13.     Text2 = "弱掉了…連電腦都玩不贏…"
複製代碼
這段 對吧
作者: clown692222    時間: 2012-1-16 05:42 AM

可是不知道哪邊出錯QQ 有執行 但是整個都錯的
作者: darkjack    時間: 2012-1-16 07:12 AM

那請你用 步進 除錯方式 一步一步去追蹤
在你程式的 一開始會執行的那段設下 中斷點
然後用 F11 (內定) 去一步一步追 你就知道為何了
還要看除錯視窗,如果聽不懂我說啥
請 參考
http://www.infobox.idv.tw/SVBR2. ... son.VB.6.Index.html

vb.net 版

http://msdn.microsoft.com/zh-tw/ ... 0%28v=vs.80%29.aspx

vb6版
http://ithelp.ithome.com.tw/question/10052272
請自己除錯吧
作者: arthurliuliu    時間: 2012-1-16 07:44 AM

以一個剪刀石頭布的小程式來說,
目前貼出來的這些程式碼,問題還是太多了,不知道從何講起...
作者: ahway9988    時間: 2012-1-16 10:06 PM

本帖最後由 ahway9988 於 2012-1-16 10:11 PM 編輯

我知道5樓版主的苦衷,因為幾乎要全改掉才能正常執行
以下是改動後,雖然改動了但仍可以分辨得出來
其中
1. Y是VB內建的變數名稱不可私用,所以改成myY
2. Select 迴圈和IF迴圈一樣,它滿足了第一個條件式就不會去判斷第二個條件式,所以剪刀,石頭,布跟變拳的條件式位置要更動
3. Select 的判斷條件應是W,Text的對話也不該是Text2,小的用myText2替換
4. 您想要按別的Option物件有反應要用Option的MouseUp(或MouseDown,不可用Click,因為重覆按同一個Option它會沒反應,原因不知道)去呼叫您所撰寫的Select,小的用myOptionClick()副程式去包覆它們
5. 另外我好奇的是什麼是變拳?,難道就是傳說中的鑽子?
  1. Dim W As Integer
  2. Dim T As Integer '以T來代表 怎(總?)共玩了幾場
  3. Dim L As Integer '以L來代表 怎共輸了幾場
  4. Dim myY As Integer '以myY來代表 怎共贏了幾場
  5. Private Sub myOptionClick()
  6.     Randomize '產生一個亂數
  7.    
  8.     W = Int(Rnd * 100) + 1 '用W代表出拳的機率 共100%
  9.     Text1 = T
  10.     Text2 = L
  11.     Text3 = myY
  12.     Print W
  13.    
  14.     Select Case Val(W)
  15.         Case Is <= 33  '這是剪刀的機率
  16.             If Option1 = True Then
  17.                 T = T + 1
  18.                 myText2 = "平手!不算什麼!再來"
  19.             End If
  20.             If Option2 = True Then
  21.                 T = T + 1
  22.                 myY = myY + 1
  23.                 myText2 = "好像很強的樣子?贏一把而已囂張啥?"
  24.             End If
  25.             If Option3 = True Then
  26.                 T = T + 1
  27.                 L = L = 1
  28.                 myText2 = "弱掉了…連電腦都玩不贏…"
  29.             End If
  30.         Case Is > 99 '求公平沒有設定
  31.                 myText2 = "..."
  32.             MsgBox "變拳!!!!!你能玩到出現這個視窗…很屌了"
  33.         Case Is >= 66 '這是布的機率
  34.             If Option1 = True Then
  35.                 T = T + 1
  36.                 myY = myY + 1
  37.                 myText2 = "好像很強的樣子?贏一把而已囂張啥?"
  38.             End If
  39.             If Option2 = True Then
  40.                 T = T + 1
  41.                 L = L + 1
  42.                 myText2 = "弱掉了…連電腦都玩不贏…"
  43.             End If
  44.             If Option3 = True Then
  45.                 T = T + 1
  46.                 L = L + 1
  47.                 myText2 = "平手!不算什麼!再來"
  48.             End If
  49.         Case Is >= 34 '這是石頭的機率
  50.             If Option1 = True Then
  51.                 T = T + 1
  52.                 L = L + 1
  53.                 myText2 = "弱掉了…連電腦都玩不贏…"
  54.             End If
  55.             If Option2 = True Then
  56.                 T = T + 1
  57.                 myText2 = "平手!不算什麼!再來"
  58.             End If
  59.             If Option3 = True Then
  60.                 T = T + 1
  61.                 myY = myY + 1
  62.                 myText2 = "好像很強的樣子?贏一把而已囂張啥?"
  63.             End If
  64.     End Select
  65. End Sub
  66. Private Sub Option1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  67.     Call myOptionClick
  68. End Sub
  69. Private Sub Option2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  70.     Call myOptionClick
  71. End Sub
  72. Private Sub Option3_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  73.     Call myOptionClick
  74. End Sub
複製代碼


作者: ahway9988    時間: 2012-1-16 11:58 PM

本帖最後由 ahway9988 於 2012-1-17 12:12 AM 編輯

"補充"出現格式問題,而且也不夠長度,直接回貼在此了(此帖當作補充)
終歸一句話,您的程式"順序"是最大的問題,就如Text1=T ~ Print W 應該要放區塊最後面,它才會顯示最新狀
態,我沒變動這個請您注意,只有變動Select迴圈內的條件式位置而已
另外給您參考:
1. 將設W=Int(Rnd*3)+1,這樣Select迴圈條件只設Case =1~3 不管要放哪裡都行
如果"變拳"是效果的話,那可以在Select迴圈之前加入If Int(Rnd*100)+1=100 Then do something 後面加上
Exit Sub ,這也是可行的
2. 另一個方法是將Option設成Option(1~3),這樣有兩個好處,一您可以直接利用Private Sub Option_MouseUp(...)裡的Index去撰寫程式碼而不用再設呼叫任何副程式,二是您還可以利用它的Index去和W做大小比較:
配合第一點的設定:W=Int(Rnd*3)+1,以下
  1. If Index - W =-1 Or Index - W =2 Then
  2.     '... (輸)
  3. ElseIf Index - W =1 Or Index - W =-2 Then
  4.     '... (贏)
  5. Else
  6.     '... (平手)
  7. End If
複製代碼

其中 Index-W =-2~2 是剪刀石頭跟布的輸贏判斷
以上如果做到就可以取代Select迴圈裡的那一大串程式碼了,也就是您的輸贏跟平手敍述只要寫一次就夠了,而且也精簡許多了


作者: johnnyworm    時間: 2012-1-25 04:57 AM

提示: 該帖被管理員或版主屏蔽




歡迎光臨 伊莉討論區 (http://www16.eyny.com/) Powered by Discuz!