/// <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(); }
/// <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(); }
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(); }