樸克版的小遊戲「黑桃二」…

張貼日期: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

不知道有沒有人看的懂?

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