/// <summary>
        /// 处理接收数据
        /// </summary>
        private void ReceiveData()
        {
            bool exitWhile = false;

            while (exitWhile == false)
            {
                string receiveString = null;
                try
                {
                    receiveString = sr.ReadLine();
                }
                catch
                {
                    service.AddItemToList("接收数据失败");
                }
                if (string.IsNullOrEmpty(receiveString))
                {
                    if (normalExit == false)
                    {
                        MessageBox.Show("与服务器失去联系,游戏无法继续");
                    }
                    if (side != -1)
                    {
                        ExitFormPlaying();
                    }
                    side       = -1;
                    normalExit = true;
                    //结束线程
                    break;
                }
                service.AddItemToList("收到:" + receiveString);
                string[] splitString = receiveString.Split(',');
                string   command     = splitString[0].ToLower();
                switch (command)
                {
                case "sorry":
                    MessageBox.Show("连接成功,但游戏室人数已满,无法进入。");
                    exitWhile = true;
                    break;

                case "tables":
                    //字符串格式:Tables,各桌是否有人的字符串
                    //其中每位表示一个座位,1表示有人,0表示无人
                    string s = splitString[1];
                    //如果maxPlayingTables为0,说明尚未创建checkBoxGameTables
                    if (maxPlayingTables == 0)
                    {
                        //计算所开桌数
                        maxPlayingTables     = s.Length / 2;
                        checkBoxesGameTables = new CheckBox[maxPlayingTables, 2];
                        isReceiveCommand     = true;
                        //将CheckBox对象添加到数组中,以便管理
                        for (int i = 0; i < maxPlayingTables; i++)
                        {
                            AddCheckeBoxToPanel(s, i);
                        }
                        isReceiveCommand = false;
                    }
                    else
                    {
                        isReceiveCommand = true;
                        for (int i = 0; i < maxPlayingTables; i++)
                        {
                            for (int j = 0; j < 2; j++)
                            {
                                if (s[2 * i + j] == '0')
                                {
                                    UpdateCheckBox(checkBoxesGameTables[i, j], false);
                                }
                                else
                                {
                                    UpdateCheckBox(checkBoxesGameTables[i, j], true);
                                }
                            }
                        }
                        isReceiveCommand = false;
                    }
                    break;

                case "sitdown":
                    //格式:SitDown,座位号,用户名
                    formPlaying.SetTableSideText(splitString[1], splitString[2], string.Format("{0}进入", splitString[2]));
                    break;

                case "getup":
                    //格式:GetUp,座位号,用户名
                    //自己或者对方离座
                    if (side == int.Parse(splitString[1]))
                    {
                        //自己离座
                        side = -1;
                    }
                    else
                    {
                        //对方离座
                        formPlaying.SetTableSideText(splitString[1], "", string.Format("{0}退出", splitString[2]));
                        formPlaying.Restart("敌人逃跑了,我放胜利");
                    }
                    break;

                case "lost":
                    //格式:Lost,座位号,用户名
                    //对家与服务器失去联系
                    formPlaying.SetTableSideText(splitString[1], "", string.Format("[{0}]与服务器失去联系", splitString[2]));
                    formPlaying.Restart("对家与服务器失去联系,游戏无法继续");
                    break;

                case "talk":
                    //格式:Talk,说话者,对话内容
                    if (formPlaying != null)
                    {
                        //由于说话内容可能包含都好,所以需要特殊处理
                        formPlaying.ShowTalk(splitString[1], receiveString.Substring(splitString[0].Length + splitString[1].Length + splitString[2].Length + 3));
                    }
                    break;

                case "message":
                    //格式:Message,内容
                    //服务器自动发送的一般信息(比如进入游戏桌入座等)
                    formPlaying.ShowMessage(splitString[1]);
                    break;

                case "level":
                    //设置难度级别
                    //格式:Time,桌号,难度级别
                    formPlaying.SetLevel(splitString[2]);
                    break;

                case "setdot":
                    //产生的棋子位置信息
                    //格式:Setdot,行,列,颜色
                    formPlaying.SetDot(int.Parse(splitString[1]), int.Parse(splitString[2]), (DotColor)int.Parse(splitString[3]));
                    break;

                case "unsetdot":
                    //消去棋子的信息
                    //格式:UnsetDot,行,列,黑方成绩,白方成绩
                    int x = 20 * (int.Parse(splitString[1]) + 1);
                    int y = 20 * (int.Parse(splitString[2]) + 1);
                    formPlaying.UnsetDot(x, y);
                    formPlaying.SetGradeText(splitString[3], splitString[4]);
                    break;

                case "win":
                    //格式:Win,相邻棋子的颜色,黑色成绩,白方成绩
                    string winner = "";
                    if ((DotColor)int.Parse(splitString[1]) == DotColor.Black)
                    {
                        winner = "黑方出现邻带你,白方胜利";
                    }
                    else
                    {
                        winner = "白方出现邻带你,黑方胜利";
                    }
                    formPlaying.ShowMessage(winner);
                    formPlaying.Restart(winner);
                    break;
                }
            }
            //接收线程结束后,游戏进行已经没有意义了,所以直接退出程序
            Application.Exit();
        }
예제 #2
0
        /// <summary>处理接收数据</summary>
        private void ReceiveData()
        {
            bool exitWhile = false;

            while (exitWhile == false)
            {
                string receiveString = null;
                try
                {
                    receiveString = sr.ReadLine();
                }
                catch
                {
                    service.AddItemToListBox("接收数据失败");
                }
                if (receiveString == null)
                {
                    if (normalExit == false)
                    {
                        MessageBox.Show("与服务器失去联系,游戏无法继续!");
                    }
                    if (side != -1)
                    {
                        ExitFormPlaying();
                    }
                    side       = -1;
                    normalExit = true;
                    //结束线程
                    break;
                }
                service.AddItemToListBox("收到:" + receiveString);
                string[] splitString = receiveString.Split(',');
                string   command     = splitString[0].ToLower();
                switch (command)
                {
                case "sorry":
                    MessageBox.Show("连接成功,但游戏室人数已满,无法进入。");
                    exitWhile = true;
                    break;

                case "tables":
                    //字符串格式:Tables,各桌是否有人的字符串
                    //其中每位表示一个座位,1表示有人,0表示无人
                    string s = splitString[1];
                    //如果maxPlayingTables为0,说明尚未创建checkBoxGameTables
                    if (maxPlayingTables == 0)
                    {
                        //计算所开桌数
                        maxPlayingTables   = s.Length / 2;
                        checkBoxGameTables = new CheckBox[maxPlayingTables, 2];
                        isReceiveCommand   = true;
                        //将CheckBox对象添加到数组中,以便管理
                        for (int i = 0; i < maxPlayingTables; i++)
                        {
                            AddCheckBoxToPanel(s, i);
                        }
                        isReceiveCommand = false;
                    }
                    else
                    {
                        isReceiveCommand = true;
                        for (int i = 0; i < maxPlayingTables; i++)
                        {
                            for (int j = 0; j < 2; j++)
                            {
                                if (s[2 * i + j] == '0')
                                {
                                    UpdateCheckBox(checkBoxGameTables[i, j], false);
                                }
                                else
                                {
                                    UpdateCheckBox(checkBoxGameTables[i, j], true);
                                }
                            }
                        }
                        isReceiveCommand = false;
                    }
                    break;

                case "sitdown":
                    //格式:SitDown,座位号,用户名
                    formPlaying.SetTableSideText(splitString[1], splitString[2],
                                                 string.Format("{0}进入", splitString[2]));
                    break;

                case "getup":
                    //格式:GetUp,座位号,用户名
                    //自己或者对方离座
                    if (side == int.Parse(splitString[1]))
                    {
                        //自己离座
                        side = -1;
                    }
                    else
                    {
                        //对方离座
                        formPlaying.SetTableSideText(splitString[1], "",
                                                     string.Format("{0}退出", splitString[2]));
                        formPlaying.Restart("敌人逃跑了,我方胜利了");
                    }
                    break;

                case "lost":
                    //格式:Lost,座位号,用户名
                    //对家与服务器失去联系
                    formPlaying.SetTableSideText(splitString[1], "",
                                                 string.Format("[{0}]与服务器失去联系", splitString[2]));
                    formPlaying.Restart("对家与服务器失去联系,游戏无法继续");
                    break;

                case "talk":
                    //格式:Talk,说话者,对话内容
                    if (formPlaying != null)
                    {
                        //由于说话内容可能包含逗号,所以需要特殊处理
                        formPlaying.ShowTalk(splitString[1],
                                             receiveString.Substring(splitString[0].Length +
                                                                     splitString[1].Length + splitString[2].Length + 3));
                    }
                    break;

                case "message":
                    //格式:Message,内容
                    //服务器自动发送的一般信息(比如进入游戏桌入座等)
                    formPlaying.ShowMessage(splitString[1]);
                    break;

                case "setdot":
                    //产生的棋子位置信息
                    //格式:Setdot,行,列,颜色
                    formPlaying.SetDot(
                        int.Parse(splitString[1]),
                        int.Parse(splitString[2]),
                        (DotColor)int.Parse(splitString[3]));
                    formPlaying.changeHold();
                    break;

                case "tie":
                    if (int.Parse(splitString[1]) == 0)
                    {
                        str = "黑子";
                    }
                    else
                    {
                        str = "白子";
                    }
                    DialogResult dr = MessageBox.Show(str + "发起求和,是否同意?", "提示", MessageBoxButtons.OKCancel);
                    if (dr == DialogResult.OK)
                    {
                        MessageBox.Show("您选择和棋。");

                        formPlaying.sendRestart();
                    }
                    else if (dr == DialogResult.Cancel)
                    {
                        //用户选择取消的操作
                        MessageBox.Show("您选择继续对战。");
                    }
                    break;

                case "restart":
                    formPlaying.ResetGrid();
                    break;

                case "win":
                    //格式:Win,相邻棋子的颜色,黑方成绩,白方成绩
                    string winner = "";
                    if ((DotColor)int.Parse(splitString[1]) == DotColor.Black)
                    {
                        winner = "黑方胜利!";
                    }
                    else
                    {
                        winner = "白方胜利!";
                    }
                    formPlaying.ShowMessage(winner);
                    formPlaying.Restart(winner);
                    break;
                }
            }
            //接收线程结束后,游戏继续进行已经没有意义,所以直接退出程序
            Application.Exit();
        }
예제 #3
0
        private void ReceiveData()
        {
            bool exitWhile = false;

            while (exitWhile == false)
            {
                string receiveString = null;
                try
                {
                    receiveString = sr.ReadLine();
                }
                catch
                {
                    service.AddItemToListBox("接收数据失败");
                }
                if (receiveString == null)
                {
                    if (normalExit == false)
                    {
                        MessageBox.Show("与服务器失去联系,游戏无法继续!");
                    }
                    if (side != -1)
                    {
                        ExitFormPlaying();
                    }
                    side       = -1;
                    normalExit = true;

                    break;
                }
                service.AddItemToListBox("收到:" + receiveString);
                string[] splitString = receiveString.Split(',');
                string   command     = splitString[0].ToLower();
                switch (command)
                {
                case "sorry":
                    MessageBox.Show("连接成功,但游戏室人数已满,无法进入。");
                    exitWhile = true;
                    break;

                case "tables":

                    string s = splitString[1];

                    if (maxPlayingTables == 0)
                    {
                        maxPlayingTables   = s.Length / 2;
                        checkBoxGameTables = new CheckBox[maxPlayingTables, 2];
                        isReceiveCommand   = true;

                        for (int i = 0; i < maxPlayingTables; i++)
                        {
                            AddCheckBoxToPanel(s, i);
                        }
                        isReceiveCommand = false;
                    }
                    else
                    {
                        isReceiveCommand = true;
                        for (int i = 0; i < maxPlayingTables; i++)
                        {
                            for (int j = 0; j < 2; j++)
                            {
                                if (s[2 * i + j] == '0')
                                {
                                    UpdateCheckBox(checkBoxGameTables[i, j], false);
                                }
                                else
                                {
                                    UpdateCheckBox(checkBoxGameTables[i, j], true);
                                }
                            }
                        }
                        isReceiveCommand = false;
                    }
                    break;

                case "sitdown":

                    formPlaying.SetTableSideText(splitString[1], splitString[2], string.Format("{0}进入", splitString[2]));
                    break;

                case "getup":

                    if (side == int.Parse(splitString[1]))
                    {
                        side = -1;
                    }
                    else
                    {
                        formPlaying.SetTableSideText(splitString[1], "",
                                                     string.Format("{0}退出", splitString[2]));
                        formPlaying.Restart("敌人逃跑了,我方胜利了");
                    }
                    break;

                case "lost":

                    formPlaying.SetTableSideText(splitString[1], "",
                                                 string.Format("[{0}]与服务器失去联系", splitString[2]));
                    formPlaying.Restart("对家与服务器失去联系,游戏无法继续");
                    break;

                case "talk":

                    if (formPlaying != null)
                    {
                        formPlaying.ShowTalk(splitString[1],
                                             receiveString.Substring(splitString[0].Length +
                                                                     splitString[1].Length + splitString[2].Length + 3));
                    }
                    break;

                case "message":

                    formPlaying.ShowMessage(splitString[1]);
                    break;

                case "level":

                    formPlaying.SetLevel(splitString[2]);
                    break;

                case "setdot":

                    formPlaying.SetDot(
                        int.Parse(splitString[1]),
                        int.Parse(splitString[2]),
                        (DotColor)int.Parse(splitString[3]));
                    break;

                case "settime":
                    formPlaying.SetTimeText(splitString[1], splitString[2], splitString[3]);
                    break;

                case "win":
                    string winner = "";
                    if ((DotColor)int.Parse(splitString[1]) == DotColor.Black)
                    {
                        winner = "黑方胜利!";
                    }
                    else
                    {
                        winner = "白方胜利!";
                    }
                    formPlaying.ShowMessage(winner);
                    formPlaying.Restart(winner);
                    break;
                }
            }

            Application.Exit();
        }