樸克版的小遊戲「黑桃二」…
張貼日期:Jul 01, 2009 12:31:18 PM
※去年寫的,後面一直改版;此為最後的改版,最近有空再重新整理裡面的語法吧!因為當時亂宣告一通,沒想到竟然能玩?
※還是有小bug,有問題請至這裡留言吧!或email給我…
※第一次玩的時侯「無法讀取上次紀錄」!需在玩完一局後才能自動進行「紀錄」的動作。
※點此下載
轉載:http://tw.myblog.yahoo.com/necos-world/article?mid=567&sc=1#722
很久之前就想把這個程式寫出來
但是,那時環境沒辦法寫出程式…
只能用巨集寫…(有人說…天丫,如果寫的出來真是太神奇了)
分析圖也畫,邏輯判斷也大致出來了…
就是在把邏輯寫成程式時,發現真的太難了…
對我來說,真的很難克服…
後來,與部隊之前的文書(程設師)msn聊,就聊到了怎麼撰寫一個黑桃二的程式…
因為黑桃二的「判斷」真的太多了…
連我的老同學(龜)都說超難寫的…
於是,我先改了一下舊的九九遊戲(真是太久遠以前設計的)
讓他感覺真的有像玩樸克牌遊戲的樣子…
在改完九九之後,我便著手開始寫黑桃二的程式碼…
於是就從97/06/23下午開始…
再之前,曾查過有人做「黑桃二」的遊戲,除錯加上設計…
約莫三個月左右的時間…
現在在家,有小毛頭要搞…三不五時出難題給偶破解…
有時還要出去買個東西,所以感覺當學生真的很不錯…
至少只要管自已就好了,可以更專心寫程式(算了,說這麼多也沒用)!
我在三天後(即26日)寫完ai(電腦)可以自已玩牌…
27日晚上終於完成整個遊戲,之後再改進ai囉…
以下是我製作遊戲的截圖…
歡迎大家測試…
我是以vb寫的…
我想可能有人會有興趣,我公布一小段程式碼…
Case 503 'full house牌型503
d = CInt(Right(What_Big(2, 5), 2)) '讀出full house三張中最大牌數值
temp1 = Array(0, 0, 0, 0, 0) '定義出牌暫存變數
For a = 3 To 13 '2張的從3開始找,即最大為13(k)
For b = d To 13 '3張的則以最大的開始找,最大不得為13(k)
If a <> b Then '防止3張和2張為相同牌
For c = 1 To player(Who_Play, 1, 2) - 2 '判斷有3張牌一樣,從第一張至最後一張(所以牌數-2防止過頭)
z = Array(CInt(Right(player(Who_Play, c, 1), 2)), CInt(Right(player(Who_Play, c + 1, 1), 2)), CInt(Right(player(Who_Play, c + 2, 1), 2)))
If z(0) = b And z(0) = z(1) And z(0) = z(2) Then
'三張牌相同,而且符合數字者
For e = 2 To 4
temp1(e) = player(Who_Play, c + e - 2, 1)
Next
yn = 1
Exit For
Else
yn = 0
End If
Next
For c = 1 To player(Who_Play, 1, 2) - 1 '判斷有2張牌一樣,從第一張至最後一張(所有牌數-1防止過頭)
z = Array(CInt(Right(player(Who_Play, c, 1), 2)), CInt(Right(player(Who_Play, c + 1, 1), 2)))
If z(0) = a And z(0) = z(1) Then
'二張牌相同,而且符合數字者
For e = 0 To 1 '轉存temp1
temp1(e) = player(Who_Play, c + e, 1)
Next
yn = yn + 1
Exit For
End If
Next
If yn = 2 Then
Exit For
End If
End If
Next
If yn = 2 Then
For b = 0 To 4
What_Big(2, b + 1) = temp1(b) '把所查出之牌導入現最大之牌
Next
Call Opp
clear_paper '出完牌,呼叫清除玩家手中牌
Who_Big = Who_Play '誰出的牌最大,轉存為發牌者
Exit For
End If
Next
Case 301 '3條牌型301
d = CInt(Right(What_Big(2, 3), 2)) '讀出三張中最大牌數值
temp1 = Array(0, 0, 0, 0, 0) '定義出牌暫存變數
For b = d + 1 To 13 '3張的則以最大的開始找,最大不得為13(k)
For c = 1 To player(Who_Play, 1, 2) - 2 '判斷有3張牌一樣,從第一張至最後一張(所以牌數-2防止過頭)
z = Array(CInt(Right(player(Who_Play, c, 1), 2)), CInt(Right(player(Who_Play, c + 1, 1), 2)), CInt(Right(player(Who_Play, c + 2, 1), 2)))
If z(0) = b And z(0) = z(1) And z(0) = z(2) Then
'三張牌相同,而且符合數字者
For e = 0 To 2
temp1(e) = player(Who_Play, c + e, 1)
Next
yn = 1
Exit For
Else
yn = 0
End If
Next
If yn = 1 Then
For a = 0 To 4
What_Big(2, a + 1) = temp1(a) '把所查出之牌導入現最大之牌
Next
Call Opp
clear_paper '出完牌,呼叫清除玩家手中牌
Who_Big = Who_Play '誰出的牌最大,轉存為發牌者
Exit For
End If
Next
不知道有沒有人看的懂?
如果看不懂,還是建議下載來玩玩吧!