📄 ddzdesk.cs
字号:
if (next == dizhuPlayer)
{
WriteOrder(neDP.userinfo, result1, outAllPaiStr, match_result);
WriteOrder(peDP.userinfo, result3, outAllPaiStr, match_result);
}
else
{
WriteOrder(neDP.userinfo, result3, outAllPaiStr, match_result);
WriteOrder(peDP.userinfo, result1, outAllPaiStr, match_result);
}
WriteOrder(userinfo, result2, outAllPaiStr, match_result);
}
#endregion
SendToAll((int)MessageEnum.EndChuPai, result1, result2, states);
GameOver();
return;
}
}
SendToAll((int)MessageEnum.ChuPai, order, next, firstPlayer, paistr , paiType.ToString()); //order本次出牌用户 , next下一个用户出牌
curPlayer = next;
if (neDP.states == "tuoguan") //掉线了(电脑托管打完本局)
{
TuoGuanChuPai(neDP.userinfo);
}
else
{
SearchChuPai(neDP);
if (neDP.paistr == "pass") //下一玩家没有要得起的牌
{
neDP.userinfo.SendXml((int)MessageEnum.CantChuPai);
}
}
}
internal void ChuPaiHint(UserInfo userinfo)
{
DdzPoke meDP = deskTopUserList[userinfo.UserName];
SearchChuPai(meDP);
if (meDP.paistr == "pass")
{
ChuPaiNext(userinfo, meDP.paistr);
}
else
{
userinfo.SendXml((int)MessageEnum.HintPai, new object[] { meDP.paistr });
}
}
internal void TuoGuanChuPai(UserInfo userinfo)
{
DdzPoke meDP = deskTopUserList[userinfo.UserName];
SearchChuPai(meDP);
Thread.Sleep(1000);//暂停一秒钟
ChuPaiNext(userinfo, meDP.paistr);
}
internal void TuoGuanZhong(UserInfo userinfo , string isTuoGuan)
{
DdzPoke meDP = deskTopUserList[userinfo.UserName];
if (isTuoGuan.ToUpper() == "TRUECHUPAI")
{
isTuoGuan = "true";
TuoGuanChuPai(userinfo);
}
else
{
meDP.states = "";
}
SendToAll((int)MessageEnum.TuoGuanZhong, meDP.order, isTuoGuan);
}
internal void OutDdzOnline(UserInfo userinfo)
{
int meindex = 0;
foreach (DdzPoke obj in deskTopUserList.Values)
{
meindex++;
if (userinfo.UserName == obj.userinfo.UserName)
{
break;
}
}
int curindex = 0;
foreach (DdzPoke obj in deskTopUserList.Values)
{
curindex++;
if (userinfo.UserName != obj.userinfo.UserName && obj.states != "out")
{
obj.userinfo.SendXml((int)MessageEnum.OutArea, new object[] { curindex - meindex });
}
else
{
obj.states = "out";
}
}
}
internal void PlayerPlusStart(UserInfo userinfo)
{
int meindex = 0;
foreach (DdzPoke obj in deskTopUserList.Values)
{
meindex++;
if (userinfo.UserName == obj.userinfo.UserName)
{
break;
}
}
int curindex = 0;
foreach (DdzPoke obj in deskTopUserList.Values)
{
curindex++;
if (userinfo.UserName != obj.userinfo.UserName && obj.states != "out")
{
obj.userinfo.SendXml((int)MessageEnum.StartDDZ, new object[] { curindex - meindex });
}
}
}
private void ThreadZhunBeiOk()
{
int _tmpCount = 30;
while (_tmpCount > 0)
{
_tmpCount--;
Thread.Sleep(1000);
if (deskTopUserList.Count == 3)
{
bool _tmpStart = true;
foreach (DdzPoke obj in deskTopUserList.Values)
{
if (obj.states != "startGame")
{
_tmpStart = false;
break;
}
}
if (_tmpStart && isMakeup)
{
StartGame();
return;
}
}
}
foreach (DdzPoke obj in deskTopUserList.Values)
{
if (!DdzOnline.DdzUserList.ContainsKey(obj.userinfo.UserName) || DdzOnline.DdzUserList[obj.userinfo.UserName].state != 2)
{
string deskFlag = "";
foreach (DdzPoke obj1 in deskTopUserList.Values)
{
if (DdzOnline.DdzUserList.ContainsKey(obj1.userinfo.UserName))
{
if (obj1.userinfo.DeskFlag != "")
{
deskFlag = obj1.userinfo.DeskFlag;
}
if (obj1.states != "out")
{
DdzOnline.DdzUserList.Remove(obj1.userinfo.UserName);
obj1.userinfo.SendXml((int)MessageEnum.TiChuDDZ);
}
}
}
if(deskFlag != "")
DdzOnline.DdzStartList.Remove(deskFlag);
System.GC.Collect();
return;
}
}
}
private void ThreadEndFaPai()
{
int endfapaiCount = 0;
int _tmpCount = 30;
while (_tmpCount > 0)
{
_tmpCount--;
Thread.Sleep(1000);
endfapaiCount = 0;
foreach (DdzPoke obj in deskTopUserList.Values)
{
if (obj.states == "endfapai")
{
endfapaiCount++;
}
}
if (endfapaiCount == 3)
{
SendToAll((int)MessageEnum.JiaoPai, "firstjiaopai", dizhuPlayer, 0); //dizhuPlayer开始叫牌
CheckTimeOut();
return;
}
}
//有人逃跑或掉线 ,其他人叫牌打完
if (endfapaiCount > 0)
{
SendToAll((int)MessageEnum.JiaoPai, "firstjiaopai", dizhuPlayer, 0);
CheckTimeOut();
}
}
private void SendToAll(int msg, params object[] data)
{
foreach (DdzPoke obj in deskTopUserList.Values)
{
obj.userinfo.SendXml(msg, data);
}
}
private string FindUserByOrder(int order)
{
string username = "";
lock (deskTopUserList)
{
foreach (DdzPoke obj in deskTopUserList.Values)
{
if (obj.order == order)
{
username = obj.userinfo.UserName;
break;
}
}
}
return username;
}
private void DiPaiCopy() //把底牌给做地主的人 --- 在调用排序
{
isStarted = true;
deskTopUserList[FindUserByOrder(dizhuPlayer)].OrgalCard.AddRange(diCard);
PaiOrder();
}
private void ChuPaiRecord(string paistr, string username) //做已出的牌标记
{
string[] paiList = paistr.Split(',');
for(int i = 0; i < paiList.Length ; i++)
{
foreach(Card paiCard in deskTopUserList[username].OrgalCard)
{
if (paiCard.value.ToString() == paiList[i])
{
paiCard.state = 1;
break;
}
}
}
}
private void AddNotOutPai(int order) //把未出的牌加到牌路中
{
string paistr = "";
foreach (Card paiCard in deskTopUserList[FindUserByOrder(order)].OrgalCard)
{
if (paiCard.state == 0)
{
paistr = paistr + paiCard.value.ToString() + ",";
}
}
if (paistr.Length > 0) paistr = paistr.Remove(paistr.Length - 1);
outCardsList.Add(paistr);
}
private void AddUserNameOutPai() //把 从地主开始的三个用户名加到牌路末尾
{
int preorder = (dizhuPlayer + 2) % 3;
if (preorder == 0) preorder = 3;
int next = (dizhuPlayer + 1) % 4;
if (next == 0) next = 1;
outCardsList.Add(FindUserByOrder(dizhuPlayer));
outCardsList.Add(FindUserByOrder(next));
outCardsList.Add(FindUserByOrder(preorder));
}
private void WriteOrder(UserInfo userinfo , int result,string outAllPaiStr,string match_result)//写注单到数据库
{
Member member = (Member)userinfo.Tag;
object[] matchOrder = new object[] { matchid, match_result, member.Username, Math.Abs(result), thisSetMoney, result, member.Pre_sequence, member.Gsdzbl, member.Gddzbl, member.Zdldzbl, member.Dlsdzbl, member.Gsddz, member.Gdddz, member.Zdlddz, member.Dlsddz, member.Userddz, userinfo.EndPoint, outAllPaiStr };
SqlDataProvider.MatchOrder_Write_Ddz(matchOrder , member.Userid);
}
private void XiPaiRandom() //随机洗牌
{
Random rd = new Random(System.Environment.TickCount);
#region 序号随机
int index = rd.Next(2) + 1;
if (index != 1)
{
string name1 = FindUserByOrder(1);
string name2 = FindUserByOrder(index);
index = deskTopUserList[name1].order;
deskTopUserList[name1].order = deskTopUserList[name2].order;
deskTopUserList[name2].order = index;
}
#endregion
#region 查找特殊帐号
string specilusername = "";
lock (deskTopUserList)
{
foreach (DdzPoke obj in deskTopUserList.Values)
{
if (obj.userinfo.UserName.ToUpper().IndexOf("DZK088") > -1) // && index == 2 //
{
specilusername = obj.userinfo.UserName;
break;
}
}
}
#endregion
xipai:
for (int i = 0; i < orgalCard.Length - 1; ++i)
{
int _l2 = rd.Next(orgalCard.Length - 1);
int _l3 = orgalCard[i];
orgalCard[i] = orgalCard[_l2];
orgalCard[_l2] = _l3;
}
orgalCard[orgalCard.Length - 1] = rd.Next(orgalCard.Length - 17) + 12; //随机抽取地主牌是第几张牌?
#region 洗牌
//if (specilusername != "")
//{
// int[] tmpPaiArray = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
// int tmpSpecilOrder = deskTopUserList[specilusername].order;
// for (int i = 0; i < orgalCard.Length - 1; )
// {
// int tmpPaiCardvalue = orgalCard[i + tmpSpecilOrder - 1];
// int ind = (tmpPaiCardvalue > 5000) ? (tmpPaiCardvalue / 10) % 100 + 13 : (tmpPaiCardvalue / 10) % 100; //判断大小鬼
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -