我有一個程式
是關於取球遊戲的
就是有16顆球
我最多能點4顆球
而電腦也是
然而最後一個點到的玩家就輸了
而我有程式碼了
但是我要把他修改聰明一點
可是我完全找不到方向
......可不可以請各位大大能夠給我一些方向來完成這個作業
要把他改聰明,我想應該是電腦要贏
我的想法是在總球數剩下5顆的時候電腦要取4顆
總球數剩下4顆的時候電腦要取3顆
總球數剩下3顆的時候電腦要取2顆
總球數剩下2顆的時候電腦要取1顆
可是一直想不到方法來處理.....><
這是取球遊戲的程式碼
Dim i, j, n, sel As Integer
Dim ending As Boolean
Option Explicit
Private Sub Command1_Click()
If sel > 0 Then
Randomize
n = Int((Rnd * 4) + 1)
Label1 = n
For j = 1 To n
For i = 0 To 15
If Image1( i ).Visible = True Then
Image1( i ).Visible = False
Call result
If ending = True Then
Label2 = "Computer Lose !"
End If
Exit For
End If
Next i, j
sel = 0
End If
End Sub
Private Sub Form_Load()
For i = 0 To 15
Image1( i ).Picture = LoadPicture(App.Path + "\pinball.jpg")
Next i
End Sub
Private Sub Image1_Click(Index As Integer)
Image1(Index).Visible = False
Call result
If ending = True Then
Label2 = "You Lose !"
End If
sel = sel + 1
If sel = 4 Then
Randomize
n = Int((Rnd * 4) + 1)
Label1 = n
For j = 1 To n
For i = 0 To 15
If Image1( i ).Visible = True Then
Image1( i ).Visible = False
Call result
If ending = True Then
Label2 = "Computer Lose !"
End If
Exit For
End If
Next i, j
sel = 0
End If
End Sub
Public Sub result()
ending = True
For i = 0 To 15
If Image1( i ).Visible = True Then
ending = False
End If
Next i
End Sub
可是我還是不太懂耶><
我有針對 sel = sel + 1
去做了一下修改
可是結果不是我選一顆,電腦就狂選到剩一顆
不然就是我一直選一直選.....也超過4顆了
你說的 Sel - (sel - 1) 是?
我在想可不可以把電分成兩種狀況
一個是在球數大於5的時候用隨機取球
到了5科的時候就電腦就選 sel -1
不過好像會溢位耶.....
真的不知道該怎麼用了....
老師在學校交的非常的模糊
很多東西根本沒說明.....
真的很擔心會學不來><
dc0001 wrote:
電腦取球只要做到:-...(恕刪)
不過取球的規則應該是 1-4 不是 0-4 ,要是可以選0個,遊戲就玩不下去了。
再來回樓主,你應該設一個變數,記錄這次你選了選了多少球,當等於4的時候就不可再選了,然後再多個"選擇完成"按鈕,按下後就換電腦選,電腦想贏,就照我上一篇的方法,
球數 = 球數 - ( 球數 - 1 );
這是不正確的,上面那行程式執行的結果永遠等於1
還有一件事情,剛開始學寫程式,最好不要去改別人的程式,像這樣的小程式應該要自己獨力完成,
還有一定要養成寫註解的習慣,尤其是變數代表的意思,像 sel 我就搞不清楚是代表什麼。
接到一個案子先不要急著寫CODE,要先在紙上作業,通常在開始KEYIN的時候,程式其實已經寫好了。
HeavyWang wrote:
球數 = 球數 - ( 球數 - 1 );
這是不正確的,上面那行程式執行的結果永遠等於1
...(恕刪)
所以啊
我有用if判斷是不是小於5顆球(原文有錯,應該要<=)
如果是小於5顆,才能"球數 = 球數 - ( 球數 - 1 );"
也就是若現在剩4顆球,又是該電腦取球
則電腦會直接取3顆,而剩下一顆,所以玩家輸了
或許是我表達不夠好吧...
還請見諒
------
而至於最多取四顆,那也許就要看初始規格了
看老師是說能否取0顆,若不行,就改一下吧
若可以,那就可以吧(不過樓主原碼是n = Int((Rnd * 4) + 1),那應該是不行吧...)
但畢竟每次電腦random不會那麼麼巧是0吧...所以球數還是會減少的,只是人擺爛...
------
而至於這程式解決方法,其實每個人都有不同見解
因為這類程式還不需用到特殊的資料結構
所以解決方法會是五花八門的
也建議多思考
------
總之還是建議樓主要多思考!
大家再多討論吧!
dc0001 wrote:
所以啊我有用if判斷...(恕刪)
這個遊戲規則是絕對不可以取0顆球的,要是可以取0顆球,那麼電腦是永遠贏不了的。
換個角度想想看,若不跟電腦玩而是兩個真人玩
那麼請問一下遊戲要怎麼進行呢?
球數 = 球數 - ( 球數 - 1 );
這一行代任何數下去結果都是1,那麼怎麼不乾脆寫成
球數 = 1;
就好了
acer790 wrote:
一個是在球數大於5的時候用隨機取球
到了5科的時候就電腦就選 sel -1
不用分成兩種情況,
這裡樓主的亂數是用錯地方了,
電腦想要贏,那麼取完後,剩下的球數一定要是5N+1,
因此取球數是可以算出來的,而不需要用亂數,
亂數 只 是用在要取哪幾顆而已。
假如一開始 人取了3顆球,剩下13顆,
那麼電腦就一定要取 (13-1) mod 5 = 2,
至於是哪兩顆,就用亂數去挑。
以上說的都是針對 人先取球的情形下,至於電腦先取的情形會複雜一點,
如果樓主有興趣可以自己想一下。
內文搜尋
X




























































































