亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ddzdesk.cs

?? flash版斗地主程序
?? CS
?? 第 1 頁 / 共 5 頁
字號:
/*
開發人  :小寶 qq:42353066
開發時間:07.05.09
功能    :出牌檢測、判斷發牌、簡單的智能出牌等
*/
using System;
using System.IO;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using Message;

namespace Services
{
    internal class DdzDesk
    {
        private Dictionary<string, DdzPoke> deskTopUserList = new Dictionary<string, DdzPoke>();
        internal Dictionary<string, DdzPoke> DeskTopUserList
        {
            get { return deskTopUserList; }
        }

        private bool isGameEnd = false;
        internal bool IsGameEnd
        {
            get { return isGameEnd; }
        }

        private int matchid = 0;        //本局ID
        private int game_no = 0;       //局數
        private string cardstr;
        private int[] orgalCard;
        private int dizhuPlayer = 0;    //地主是哪一家
        private ArrayList diCard;       //底牌
        private int setMoney;           //本局最大可叫注額注額
        private int thisSetMoney = 0;   //本局實際叫牌注額 
        private int firstPlayer = 0;    //最鄰近的一個出牌人(除 pass 的人外,就是如果此人 pass 就是在往前一個人,依次類推)
        private List<string> outCardsList = new List<string>(); //已經出過的牌(不出的用“pass”填充)

        private int paiMin = 0;                                  //牌型最小值---------當前
        private PaiType paiType = PaiType.Not;                   //牌型---------------當前
        private int chuPaiCount = 0;                             //牌總張數-----------當前
        private int paiMin1 = 0;                                 //牌型最小值---------上一輪
        private PaiType paiType1 = PaiType.Not;                  //牌型---------------上一輪
        private int chuPaiCount1 = 0;                            //牌總張數-----------上一輪

        private int curPlayer = 0;                               //當前操作的玩家
        private bool isStarted = false;                          //叫牌了(開始遊戲標誌)
        private bool isEnded = false;
        private Thread thread;                                   //準備
        private Thread thread1;                                  //哪家叫牌,和出牌
        private Thread thread2;                                  //結束發牌, 到開始叫牌
        private int thread1Count = 40;
        private bool isMakeup = true;                            //準備好了,可以開始
        //private bool isTest = false;

        internal DdzDesk(ArrayList alist, int _setMoney)
        {
            setMoney = _setMoney;

            deskTopUserList.Add(((UserInfo)alist[0]).UserName, new DdzPoke(1, (UserInfo)alist[0]));
            deskTopUserList.Add(((UserInfo)alist[1]).UserName, new DdzPoke(2, (UserInfo)alist[1]));
            deskTopUserList.Add(((UserInfo)alist[2]).UserName, new DdzPoke(3, (UserInfo)alist[2]));
        }
        internal void InitProc()
        {
            foreach (DdzPoke ddzPoke in deskTopUserList.Values)
            {
                ddzPoke.userinfo.SendXml((int)MessageEnum.StartDDZ);
            }
            thread = new Thread(new ThreadStart(ThreadZhunBeiOk));
            thread.Start();
        }
        internal void StartGame()
        {
            cardstr = "";
            diCard = new ArrayList();
            orgalCard = new int[] { 1011, 1021, 1031, 1041, 1051, 1061, 1071, 1081, 1091, 1101, 1111, 1121, 1131, 1012, 1022, 1032, 1042, 1052, 1062, 1072, 1082, 1092, 1102, 1112, 1122, 1132, 1013, 1023, 1033, 1043, 1053, 1063, 1073, 1083, 1093, 1103, 1113, 1123, 1133, 1014, 1024, 1034, 1044, 1054, 1064, 1074, 1084, 1094, 1104, 1114, 1124, 1134, 5015, 5025, 0 };
           
            XiPaiRandom();            
            //orgalCard[orgalCard.Length - 1] = 12 + order;   //隨機抽取地主牌是第幾張牌?

            for (int i = 0; i < orgalCard.Length; i++)
            {
                cardstr += orgalCard[i].ToString() + ",";
            }
            cardstr = cardstr.Remove(cardstr.Length - 1);

            #region 測試用
            //if (isTest)
            //{
            //    cardstr = "1044,1073,1101,1113,1021,1072,1062,1014,1023,1121,1084,1071,1053,1082,1061,1042,1094,1022,1052,1093,1131,1011,1083,1104,1031,1092,1102,1033,1103,5025,1034,1081,1134,1122,1064,1032,5015,1124,1074,1012,1112,1051,1013,1133,1091,1054,1111,1114,1024,1123,1063,1041,1043,1132,25";
            //    string[] tmpOrgalCard = cardstr.Split(',');
            //    for (int i = 0; i < tmpOrgalCard.Length; i++)
            //    {
            //        orgalCard[i] = int.Parse(tmpOrgalCard[i]);
            //    }
            //}
            //else
            //{
            //    WritePaiToText("地主為:" + dizhuPlayer.ToString() + System.Environment.NewLine + "牌型為:" + cardstr + "|" + System.Environment.NewLine);
            //}
            //
            #endregion

            for (int i = 0; i < orgalCard.Length - 1; )
            {
                if (orgalCard[orgalCard.Length - 1] == i)//誰先叫牌(做地主的優先權)
                {
                    dizhuPlayer = 1;
                }
                else if (orgalCard[orgalCard.Length - 1] == i + 1)
                {
                    dizhuPlayer = 2;
                }
                else if (orgalCard[orgalCard.Length - 1] == i + 2)
                {
                    dizhuPlayer = 3;
                }

                foreach (DdzPoke obj in deskTopUserList.Values)
                {
                    obj.OrgalCard.Add(new Card(orgalCard[i + obj.order - 1]));
                }
                i += 3;

                if (diCard.Count < 3)
                {
                    diCard.Add(new Card(orgalCard[i++]));  //為底牌放
                }
            }
            curPlayer = dizhuPlayer;

            foreach (DdzPoke ddzPoke in deskTopUserList.Values)
            {
                ddzPoke.userinfo.SendXml((int)MessageEnum.InArea, "starting", ddzPoke.order, dizhuPlayer, cardstr); //本人order,地主order,牌型
            }

            game_no = Interlocked.Increment(ref DdzOnline.game_no);
            string housename = "vip_";
            switch(setMoney)
            {
                case 20:{housename +="1";break;}
                case 40:{housename +="2";break;}
                case 100:{housename +="3";break;}
                case 200:{housename +="4";break;}
                case 400:{housename +="5";break;}
                case 600:{housename +="6";break;}
                case 1000:{housename +="7";break;}
                case 2000:{housename +="8";break;}
                case 4000:{housename +="9";break;}
            }
            string sql = string.Format("insert into match (house,start_date,field_no,game_no,gamename) values ('{0}',getdate(),'{1}','{2}','{3}')", housename, "1", game_no, "斗地主");
            SqlDataProvider.ExecuteNonQuery(sql);

            sql = string.Format("select max(matchid) from match where house = '{0}' and gamename='{1}' and game_no = {2}", housename, "斗地主", game_no);
            matchid = (int)SqlDataProvider.ExecuteScalar(sql);

            thread2 = new Thread(new ThreadStart(ThreadEndFaPai));
            thread2.Start();
        }        
        internal void JiaoPaiNext(UserInfo userinfo ,int _jiaofen)
        {            
            CheckTimeOut();
            int order = deskTopUserList[userinfo.UserName].order;
            int next = (order + 1) % 4;
            if (next == 0) next = 1;
            deskTopUserList[userinfo.UserName].jiaoFen = _jiaofen;
            if (_jiaofen > 0) thisSetMoney = _jiaofen;

            if (_jiaofen == setMoney)//叫牌成功(馬上開始出牌)
            {
                DiPaiCopy();
                SendToAll((int)MessageEnum.JiaoPai, "endjiaopai", dizhuPlayer, setMoney);
            }
            else
            {
                if (deskTopUserList[FindUserByOrder(next)].jiaoFen == -1)
                {
                    dizhuPlayer = next;                    
                    SendToAll((int)MessageEnum.JiaoPai, "startjiaopai", dizhuPlayer, thisSetMoney); //繼續由dizhuPlayer開始叫牌

                    DdzPoke neDP = deskTopUserList[FindUserByOrder(next)];
                    if (neDP.states == "tuoguan")
                    {
                        curPlayer = dizhuPlayer;
                        firstPlayer = dizhuPlayer;
                        Thread.Sleep(1000);
                        JiaoPaiNext(neDP.userinfo , 0);
                        return;
                    }
                }
                else
                {
                    string tmpUserName = "";
                    foreach (DdzPoke obj in deskTopUserList.Values)
                    {
                        if (obj.jiaoFen > 0 && obj.jiaoFen == thisSetMoney)
                        {
                            tmpUserName = obj.userinfo.UserName;
                            break;
                        }
                    }
                    if (tmpUserName != "")
                    {                        
                        dizhuPlayer = deskTopUserList[tmpUserName].order;                        
                        DiPaiCopy();
                        SendToAll((int)MessageEnum.JiaoPai, "endjiaopai", dizhuPlayer, thisSetMoney); //tmpUserName 當地主(馬上開始出牌)
                    }
                    else //沒有人叫牌(繼續回到分組中)本局結束
                    {
                        SendToAll((int)MessageEnum.JiaoPai, "overjiaopai", dizhuPlayer, thisSetMoney);
                        GameOver();
                    }
                }
            }
            curPlayer = dizhuPlayer;
            firstPlayer = dizhuPlayer; //因為每一局都是地主先出牌
        }
        internal void ChuPaiNext(UserInfo userinfo, string paistr)
        {
            CheckTimeOut();
            DdzPoke meDP = deskTopUserList[userinfo.UserName];
            int order = meDP.order;

            if (CheckChuPai(paistr) == 0) //不符合規則
            {
                userinfo.SendXml((int)MessageEnum.NotRule);
                return;
            }
            else if (firstPlayer == order && paiType == PaiType.Pass)  //先出牌的人不能 Pass
            {
                userinfo.SendXml((int)MessageEnum.NotRule);
                return;
            }
            else if (firstPlayer != order && paiType != PaiType.Pass)
            {
                if (chuPaiCount1 != chuPaiCount && paiType != PaiType.Bomb && paiType != PaiType.Rocket)
                {
                    userinfo.SendXml((int)MessageEnum.NotRule);
                    return;
                }
                else if (paiMin1 / 10 >= paiMin / 10 && paiType != PaiType.Bomb)
                {
                    userinfo.SendXml((int)MessageEnum.NotRule);
                    return;
                }
                else if (paiType != paiType1 && paiType != PaiType.Bomb && paiType != PaiType.Rocket)
                {
                    userinfo.SendXml((int)MessageEnum.NotRule);
                    return;
                }
                else if ((paiType != paiType1 && paiType == PaiType.Bomb && paiType1 == PaiType.Rocket))
                {
                    userinfo.SendXml((int)MessageEnum.NotRule);
                    return;
                }
            }

            if (paiType == PaiType.Bomb || paiType == PaiType.Rocket) //炸彈
            {
                meDP.zhadan++;
            }

            outCardsList.Add(paistr);//保存我這次出的牌
            meDP.paistr = paistr;
           
            int preorder = (order + 2) % 3;
            if (preorder == 0) preorder = 3;
            int next = (order + 1) % 4;
            if (next == 0) next = 1;
            DdzPoke peDP = deskTopUserList[FindUserByOrder(preorder)];
            DdzPoke neDP = deskTopUserList[FindUserByOrder(next)];

            if (paistr != "pass")
            {
                paiMin1 = paiMin;
                paiType1 = paiType;
                chuPaiCount1 = chuPaiCount;
                firstPlayer = order;
                meDP.outpaicount += (int)(paistr.Length / 5) + 1;
                meDP.outpaicishu++;

                ChuPaiRecord(paistr, userinfo.UserName);  //記錄當前牌已出標記

                if ((order == dizhuPlayer && meDP.outpaicount == 20) || (order != dizhuPlayer && meDP.outpaicount == 17))//出牌結束(發送贏輸結果)
                {
                    SendToAll((int)MessageEnum.ChuPai, order, next, firstPlayer, "end", paiType.ToString());

                    #region 結束結算
	                int result1 = 0, result2 = 0, result3 = 0;
                    string states = ""; //狀態 如春天,反春                                        
                    string match_result = "共 "+(meDP.zhadan + neDP.zhadan + peDP.zhadan).ToString() + " 炸、";             

                    //得到牌路
                    AddNotOutPai(next);
                    AddNotOutPai(preorder);
                    AddUserNameOutPai();
                    string outAllPaiStr = string.Join("|", outCardsList.ToArray());
                    //結算
                    if (order == dizhuPlayer)
                    {                        
                        int cuntian = 0;
                        if (neDP.outpaicishu == 0 && peDP.outpaicishu == 0)
                        {
                            states = "cuntian";
                            cuntian = 1;
                            match_result += "春天!";
                        }
                        int beishu = meDP.zhadan + neDP.zhadan + peDP.zhadan + cuntian;
                        if (beishu > 4) beishu = 4;
                        result1 = 2 * thisSetMoney * (int)System.Math.Pow(2, beishu) * 95 / 100;
                        result2 = result3 = -1 * thisSetMoney * (int)Math.Pow(2, beishu);

                        WriteOrder(userinfo, result1, outAllPaiStr, match_result);
                        WriteOrder(neDP.userinfo, result2, outAllPaiStr, match_result);
                        WriteOrder(peDP.userinfo, result3, outAllPaiStr, match_result);
                    }
                    else
                    {
                        int fancun= 0;
                        if (deskTopUserList[FindUserByOrder(dizhuPlayer)].outpaicishu == 1)
                        {
                            states = "fancun";
                            fancun = 1;
                            match_result += "反春!";
                        }
                        int beishu = meDP.zhadan + neDP.zhadan + peDP.zhadan + fancun;
                        if (beishu > 4) beishu = 4;
                        result1 = -2 * thisSetMoney * (int)System.Math.Pow(2, beishu);
                        result2 = result3 = 1 * thisSetMoney * (int)System.Math.Pow(2, beishu) * 95 / 100;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品在线视频观看| 午夜视频一区在线观看| 亚洲免费av观看| 五月婷婷激情综合| 国产一区二区久久| 不卡av在线免费观看| 欧美日韩在线精品一区二区三区激情| 欧美丰满嫩嫩电影| 久久久99久久精品欧美| 一区二区三区国产精品| 国产在线视频不卡二| 91丨九色丨尤物| 日韩女优制服丝袜电影| 国产精品传媒入口麻豆| 视频一区中文字幕国产| 国产精品乡下勾搭老头1| 色综合久久99| ww久久中文字幕| 亚洲国产日韩一级| 国产永久精品大片wwwapp| 91国产福利在线| 久久九九影视网| 五月激情综合色| www.亚洲精品| 日韩一区二区三区精品视频| 亚洲欧洲无码一区二区三区| 免费在线看一区| 91精彩视频在线| 欧美国产日本韩| 蜜臀av一级做a爰片久久| 色综合色综合色综合色综合色综合| 精品日韩av一区二区| 亚洲一区免费观看| 国产成人精品一区二| 在线综合视频播放| 亚洲综合丝袜美腿| 成人视屏免费看| 欧美变态口味重另类| 无吗不卡中文字幕| 日本韩国一区二区三区| 欧美国产日韩a欧美在线观看| 美女高潮久久久| 欧美日韩成人在线一区| 亚洲婷婷在线视频| 高清成人在线观看| 精品国产乱码久久久久久久久 | 精油按摩中文字幕久久| 欧美综合亚洲图片综合区| 中文字幕欧美区| 国产精品亚洲午夜一区二区三区| 欧美一级高清片在线观看| 亚洲综合免费观看高清完整版| 成人精品国产福利| 久久精品一区二区三区四区| 久久精品噜噜噜成人av农村| 欧美日韩一区二区在线视频| 亚洲免费av网站| 欧美人与z0zoxxxx视频| 亚洲精品国产无天堂网2021| yourporn久久国产精品| 国产色婷婷亚洲99精品小说| 国产剧情一区在线| 久久久亚洲精华液精华液精华液| 美国三级日本三级久久99| 欧美一级艳片视频免费观看| 日产欧产美韩系列久久99| 欧美日韩精品福利| 视频一区欧美日韩| 欧美亚洲动漫精品| 亚洲午夜视频在线| 欧美日韩午夜精品| 视频一区二区国产| 777久久久精品| 蜜臀av一区二区三区| 日韩欧美色综合网站| 国内精品久久久久影院一蜜桃| 精品国产成人系列| 国产高清在线观看免费不卡| 日本一二三不卡| 不卡视频一二三| 专区另类欧美日韩| 色婷婷精品久久二区二区蜜臀av | 色婷婷av久久久久久久| 亚洲九九爱视频| 欧美亚洲综合另类| 天天av天天翘天天综合网| 欧美一区二区三区四区久久| 麻豆精品在线看| 国产亚洲成年网址在线观看| 波多野结衣在线一区| 亚洲乱码中文字幕综合| 欧美亚洲高清一区| 日本91福利区| 欧美精品一区二区三区久久久| 成人在线视频一区| 亚洲人成网站精品片在线观看| 欧美中文字幕一区二区三区| 免费看黄色91| 中文字幕av一区二区三区高| 一本色道亚洲精品aⅴ| 午夜视频在线观看一区二区三区 | 国产成人免费视频网站| 国产精品初高中害羞小美女文| 欧美亚洲国产一区二区三区va| 日韩一区精品字幕| 国产欧美日韩一区二区三区在线观看| 成人av免费在线观看| 亚洲成a人片在线不卡一二三区| 日韩精品在线网站| 9l国产精品久久久久麻豆| 亚洲一区二区三区四区在线| 日韩欧美国产成人一区二区| 不卡一卡二卡三乱码免费网站| 亚洲超碰精品一区二区| 久久久久久久网| 在线观看视频一区二区欧美日韩| 蜜桃久久av一区| 国产精品拍天天在线| 在线不卡免费欧美| 国产成人午夜精品5599| 亚洲成人1区2区| 中文一区二区在线观看| 欧美日韩精品免费| 成人在线视频首页| 秋霞电影一区二区| 亚洲男人都懂的| 欧美成人三级在线| 91蜜桃视频在线| 狠狠色综合色综合网络| 亚洲免费在线视频一区 二区| 日韩亚洲欧美在线| 色拍拍在线精品视频8848| 激情综合色综合久久综合| 一区二区三区精品在线| 国产视频一区在线观看 | 狠狠色丁香婷综合久久| 亚洲免费在线电影| 久久久精品tv| 欧美一区二区三区不卡| 91免费观看国产| 国产剧情一区二区三区| 日韩和欧美的一区| 综合激情成人伊人| 久久亚洲影视婷婷| 91精品国产色综合久久| 91成人免费电影| 成人深夜福利app| 国产一区二区在线免费观看| 午夜欧美视频在线观看| 亚洲精品一卡二卡| 国产精品丝袜黑色高跟| 日韩美女在线视频| 精品视频色一区| 色综合视频一区二区三区高清| 国产1区2区3区精品美女| 日韩福利视频导航| 一区二区三区**美女毛片| 国产精品久久久久四虎| 国产人成亚洲第一网站在线播放 | 国产精品资源在线观看| 日韩av在线播放中文字幕| 亚洲精品v日韩精品| 国产精品黄色在线观看| 国产偷v国产偷v亚洲高清| 欧美精品一区男女天堂| 日韩精品一区在线| 日韩欧美亚洲另类制服综合在线 | 国产精品资源在线看| 久久精品国产久精国产爱| 午夜伦理一区二区| 亚洲3atv精品一区二区三区| 一区二区三区国产精品| 亚洲人成精品久久久久久| 亚洲欧美激情在线| 亚洲欧美一区二区在线观看| 中文字幕在线播放不卡一区| 欧美经典一区二区| 国产精品美女一区二区三区| 欧美国产精品中文字幕| 国产精品萝li| 亚洲欧洲精品天堂一级| 亚洲欧洲成人av每日更新| 亚洲天堂a在线| 亚洲欧美日韩国产另类专区| 亚洲激情综合网| 亚洲最新在线观看| 亚洲国产精品精华液网站| 亚洲国产三级在线| 天堂va蜜桃一区二区三区漫画版| 丝袜美腿高跟呻吟高潮一区| 视频一区二区欧美| 久久精品国产精品亚洲红杏| 国产一区二区在线看| 国产精品系列在线播放| 国产精品系列在线播放| 99久久99久久综合| 在线看日韩精品电影| 欧美精品一卡两卡| 日韩情涩欧美日韩视频| 久久久99精品免费观看|