2008/06/28

黑桃二(大老二)程式碼終於被偶寫出來了…

很久之前就想把這個程式寫出來


但是,那時環境沒辦法寫出程式…


只能用巨集寫…(有人說…天丫,如果寫的出來真是太神奇了)


分析圖也畫,邏輯判斷也大致出來了…


就是在把邏輯寫成程式時,發現真的太難了…


對我來說,真的很難克服…


後來,與部隊之前的文書(程設師)msn聊,就聊到了怎麼撰寫一個黑桃二的程式…


因為黑桃二的「判斷」真的太多了…


連我的老同學(龜)都說超難寫的…


於是,我先改了一下舊的九九遊戲(真是太久遠以前設計的)


讓他感覺真的有像玩樸克牌遊戲的樣子…


http://www.badongo.com/file/10103189




(點上面連結,下載後自動解壓,點執行檔即可玩囉!)


更新連結:點此下載

在改完九九之後,我便著手開始寫黑桃二的程式碼…


於是就從97/06/23下午開始…


 


再之前,曾查過有人做「黑桃二」的遊戲,除錯加上設計…


約莫三個月左右的時間…


現在在家,有小毛頭要搞…三不五時出難題給偶破解…


有時還要出去買個東西,所以感覺當學生真的很不錯…


至少只要管自已就好了,可以更專心寫程式(算了,說這麼多也沒用)!


我在三天後(即26日)寫完ai(電腦)可以自已玩牌…


27日晚上終於完成整個遊戲,之後再改進ai囉…


以下是我製作遊戲的截圖…



http://www.badongo.com/file/10104718


(點上面連結,下載後自動解壓,點執行檔即可玩囉!)


更新連結:點此下載


歡迎大家測試…


我是以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


不知道有沒有人看的懂?


如果看不懂,還是建議下載來玩玩吧!


20 則留言:

  1. 我對這程式有興趣
    不過我用的是JAVA跟C++
    不知可否提供更詳細的寫法?

    回覆刪除
  2. JAVA哦?我只會他一點點…至於c++我也沒常在碰…
    最近我是想把他改成vb.net2008版…

    沒想到裡面一堆函數寫的亂七八糟,有些宣告方式有問題…
    急就章,去年花了五天寫的…所以內容沒啥規劃…

    回覆刪除
  3. 可以提供完整程式碼嗎?
    因為專題要做線上大老二 , 學期也快結束了 想參考一下
    可以的話就寄到我的信箱 wekokia@yahoo.com.tw
    麻煩你了 謝謝 .

    回覆刪除
  4. 檔案寄出去了哦,不知道會不會跑到垃圾信件裡面。
    不過程式內碼許多的宣告有些是「不合法的」,我不知道為什麼VB可以跑?
    如果做成了,記得也通知一下我哦!:)

    回覆刪除
  5. 好像都沒收到垃圾信箱也沒看到
    還是寄到我的 wekokia@gmail.com
    還有我讀的是電子科 要做專題時才開始學VB6 學不到1個星期吧 ...
    所以我覺得我應該寫不出來 專題會被當了..
    但還是要拼一下

    回覆刪除
  6. 這位大大   小弟我正在寫德州撲克的程式
    看到您寫的這篇極為感興趣
    請問能不能請你割愛給我一份這大老二的程式碼做為參考
    拜託了

    回覆刪除
  7. 點我下載
    參考看看,程式內均有註解,不過在vb6下的語法當時我寫時有些不完整,但確是可以執行,所以會有點怪,而我也懶的修正了…

    回覆刪除
  8. 謝謝您的提供
    VB6以下版本寫的話,看來麻煩了
    我以前都用VB6,現在突然改用2008說真的,語法用法改很多
    而且2008只能往下開到2005而己

    回覆刪除
  9. 對你應該沒差吧…有程式基礎應該都沒啥問題…
    之前也有想過把他改成2008版本的,但是看到一堆有些遺忘的內容,就有點頭大…
    所以在去年(2009)我就用2008寫了另一個小遊戲,叫「抽鬼牌」的…
    在協作平台上…,有興趣的話,再給你參考參考!

    回覆刪除
  10. 哈~其實是沒什麼差啦
    原先我是很懶得去處理
    昨天收到你提供的範本之後,我就把版本問題解決了
    不然我寫德州撲克的問題點是沒法解決的
    抽鬼牌這程式應該值得參考!!
    老實說,我現在程式問題卡在 手牌該如何去跟公牌做判斷
    例如:手牌拿K J 而公牌為6 9 10(德州撲克玩法說明)
    該怎麼去判斷6 9 10 J K  這五隻牌可能配9 10 J Q K  (K順牌面) 或是 10 J Q K A (A順) 或是7 8 9 10 J (J順)
    進而判斷出二張手牌+三張公牌時 還缺少了一張Q or A or 8 or 7 會出現的機率

    回覆刪除
  11. 嗯…看來我今年有功課可做了…
    就是來寫個德州撲克牌遊戲,不知道寫的成寫不成呢…


    回覆刪除
  12. 哈~看來你對德州撲克的玩法也很感興趣嘛
    期待您能寫的出來囉!!
    如果你寫出來了,那我所要寫的德州撲克牌組機率分析器肯定是沒問題了

    回覆刪除
  13. 你的工作是程式設計師嗎?
    還是興趣而已丫?
    真是厲害!

    回覆刪除
  14. 我不是程式設計師耶(但這也是我所想要從事的行業) ,我目前只是一名進業部資管系的四技生而己
    但我從高中時期就開時學習與接觸程式語言了,從接觸VB到現今已經有十年以上了
    但這之間因為畢業 ->工作-> 當兵->工作 的關係也中斷了很久
    寫程式主要是興趣吧!
    畢竟有興趣才有可能去寫

    回覆刪除
  15. 那你真的不錯,像我現在想要去讀書(唸資管)都沒時間和金錢。
    也礙於家中還有二個年幼的小孩要養。

    我也是高一(82)年開始接解電腦basic,也開始寫程式,第一個程式是樸克牌九九也不是電腦寫的,還是用工程計算機寫的…
    後來,因為都是讀軍校的關係(高中預校,大學政戰學校),又是文組(政治系),一路自修電腦,學校也沒什麼資源可得…
    更接著畢業下部隊待了八年,雖然都有接觸電腦,但又限於非相關科系的關係,不得跨科系攻讀晉升(什麼爛規定)
    期間幾乎都沒啥多餘的時間可進修,直至97年元月負氣卸下戰袍,進入社會…
    也好佳在遇到了一些不錯的文書,及資管科系的弟兄得以交教學相長…

    原本是想說在今年報讀在職專班的資訊科系,但現在在家計(工作)和學歷上拉扯,可能等一陣子再作考量吧…

    我也是興趣在電腦,但都學都不精,一下碰網頁asp、又php,一下又玩vb等等的…
    不過還好,目前工作是教學(現在休息中,三月份才有課程),輔導(桃園療養院)學生考技術士證照,
    也算是興趣配合到工作上吧!(也弄了協作平台作為教學用)


    有興趣的話再和你研究研究,我的email、msn均是necos.tw@yahoo.com.tw

    加油!

    回覆刪除
  16. 其實我覺得你可以考慮再進修,像現在我們班上也是有幾位已經結婚生子的同學在進修中
    平時也是有自已的事業(這與我不同的是,我放棄了工作而全心進修)
    我曾經是早上工作,晚上讀書...但說真的,這樣子太累反而學不到什麼東西(就像去混個文品的)
    所以才放棄工作
    呵~我的第一個程式是用HTML寫出小瑪莉遊戲
    我英文能力很差,而那時候學校老師提供給我的資源只有原文書
    當時為了寫出那個小瑪莉,我可是英文字典+原文書 一字一字翻譯才慢慢寫出來的
    之後就接觸到網頁設計與C++ 學了這三樣反而一點也不精通
    我已經有加你的即時通了
    我的即時通和即時通都是:wipyking@yahoo.com.tw   但MSN現在不知道是什麼原因,登入不到三秒就自動登出了
    所以現在MSN無法上線,但是即時通可以和MSN互通的

    回覆刪除
  17. 請問九九遊戲是用java寫的嗎??

    回覆刪除
  18. 不是哦,是用vb寫的…

    回覆刪除
  19. 請問一下可以提共 程式碼做參考嗎??? 信箱是733house@gmail.com

    回覆刪除
  20. 請問一下可以提共VB程式碼做參考嗎??? 信箱是plus_86@hotmail.com

    回覆刪除