/// <summary> /// 游戏逻辑 /// </summary> /// <param name="map">地图数据</param> /// <param name="currentPlayer">本轮玩家</param> /// <param name="anotherPlayer">另一位玩家</param> /// <param name="num">骰子数</param> public static string PlayGame(Map map,Player currentPlayer, Player anotherPlayer,int num) { Game.PlayerMove(currentPlayer, num); var result = string.Empty; if (currentPlayer.PlayerPo == 99) { MessageBox.Show(currentPlayer.PlayerName + "赢了");//赢了 return currentPlayer.PlayerName + "赢了。"; } if (currentPlayer.PlayerPo == anotherPlayer.PlayerPo&& currentPlayer.PlayerPo!=0) { Game.PlayerMove(anotherPlayer, -6); //PlayGame(map, anotherPlayer, currentPlayer, 0); result+=(anotherPlayer.PlayerName+"被"+currentPlayer.PlayerName+"踩了,后退6格!"); } switch (map.Maps[currentPlayer.PlayerPo]) { case 1: result += Luckyturn(currentPlayer, anotherPlayer); break; case 2: result += LandMine(currentPlayer); //PlayGame(map, currentPlayer, anotherPlayer, 0); break; case 3: result += Pause(currentPlayer); break; case 4: result += TimeTunnel(currentPlayer); //PlayGame(map, currentPlayer, anotherPlayer, 0); break; default: result += "踩到方块。"; break; } if (currentPlayer.PlayerPo == 99) { MessageBox.Show(currentPlayer.PlayerName + "赢了");//赢了 return result+ currentPlayer.PlayerName + "赢了。"; } return result; }
private void btnStart_Click(object sender, RoutedEventArgs e) { try { if (txtIP.Visibility == Visibility.Visible) { txtIP.Visibility = txtPort.Visibility = btnListen.Visibility = tbMsg.Visibility = btnSend.Visibility = btnLink.Visibility = Visibility.Collapsed; } if (btnStart.Content.ToString() == "开始游戏") { #region 判空 if (String.IsNullOrEmpty(pi1.txtPlayerName.Text) || String.IsNullOrWhiteSpace(pi1.txtPlayerName.Text) ) { MessageBox.Show("昵称不能为空,请重新输入。"); return; } #endregion #region 更改按钮状态 btnStart.Content = "结束游戏"; btnStart.Background = new SolidColorBrush() { Color = Color.FromArgb(255, 255, 100, 50) }; #endregion #region 初始化 //初始化地图 _Map = new Map() { landMine = new int[] { 5, 13, 17, 33, 38, 50, 64, 80, 94 }, luckyturn = new int[] { 6, 23, 40, 55, 69, 83 }, pause = new int[] { 9, 27, 60, 93 }, timeTunnel = new int[] { 20, 25, 45, 63, 72, 88, 90 } }; _Map.InitailMap(); if (flagMap != true) { Map.DrawMap(_Map.Maps, gdMap); flagMap = true; } else { foreach (var o in gdMap.Children) { if (o is TextBox) { (o as TextBox).Visibility = Visibility.Visible; } } } //初始化玩家 pi1.txtPlayerName.IsEnabled = false; pi2.txtPlayerName.IsEnabled = false; if(flagMode==false) { pi1.ellAvatar.Fill = new SolidColorBrush() { Color = Color.FromArgb(255, 255, 0, 0) }; pi2.ellAvatar.Fill = new SolidColorBrush() { Color = Color.FromArgb(255, 0, 0, 255) }; } btnPlay.IsEnabled = true; _Player1 = new Player() { PlayerName = pi1.txtPlayerName.Text, PlayerPo = 0, Flag = 0, PlayerUI = ellPlayer1 }; _Player2 = new Player() { PlayerName = pi2.txtPlayerName.Text, PlayerPo = 0, Flag = 1, PlayerUI = ellPlayer2 }; ellPlayer1.Visibility = Visibility.Visible; ellPlayer2.Visibility = Visibility.Visible; Grid.SetZIndex(ellPlayer1, 2); Grid.SetZIndex(ellPlayer2, 2); #endregion #region 主机客机不同的操作 if (flagMode == true && flagEnd==true) //主机 { //发送开局信息 var list = new List<byte>(); list.Add(11); list.AddRange(Encoding.UTF8.GetBytes("游戏开始")); socketSend.Send(list.ToArray()); } else if (flagMode == true && flagEnd == false) //客机 { btnPlay.IsEnabled = false; _Player1 = new Player() { PlayerName = pi2.txtPlayerName.Text.Trim(), PlayerPo = 0, Flag = 0, PlayerUI = ellPlayer1 }; _Player2 = new Player() { PlayerName = pi1.txtPlayerName.Text.Trim(), PlayerPo = 0, Flag = 1, PlayerUI = ellPlayer2 }; } #endregion output("游戏开始"); } else { #region 切换按钮状态 btnStart.Content = "开始游戏"; btnStart.Background = new SolidColorBrush() { Color = Color.FromArgb(255, 100, 255, 50) }; #endregion if (txtIP.Visibility==Visibility.Collapsed) { txtIP.Visibility = txtPort.Visibility = btnListen.Visibility = tbMsg.Visibility = btnSend.Visibility = btnLink.Visibility = Visibility.Visible; } pi1.txtPo.Text = pi2.txtPo.Text = "0"; #region 隐藏地图,角色归位,清空变量 foreach (var o in gdMap.Children) { if (o is TextBox) { (o as TextBox).Visibility = Visibility.Hidden; } } pi1.txtPlayerName.IsEnabled = true; btnPlay.IsEnabled = false; Grid.SetColumn(ellPlayer1, 0); Grid.SetRow(ellPlayer1, 0); Grid.SetColumn(ellPlayer2, 0); Grid.SetRow(ellPlayer2, 0); ellPlayer1.Visibility = Visibility.Hidden; ellPlayer2.Visibility = Visibility.Hidden; _Map = null; _Player1 = null; _Player2 = null; if (flagMode == false) pi2.txtPlayerName.IsEnabled = true; #endregion #region 主机客机不同的操作 if (flagMode == true && flagEnd == true) { //发送结束信息 byte[] buffer = Encoding.UTF8.GetBytes("游戏结束"); List<byte> list = new List<byte>(); list.Add(11); list.AddRange(buffer); socketSend.Send(list.ToArray()); } else if (flagMode == true&&flagEnd == false) { pi2.txtPlayerName.IsEnabled = false; } #endregion output("游戏结束"); } } catch (Exception ex) { if (!File.Exists("errorlogs.txt")) { File.CreateText("errorlogs.txt").Close(); } var fs = new FileStream("errorlogs.txt", FileMode.Append); var sw = new StreamWriter(fs, Encoding.Default); sw.Write(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + ":" + ex.ToString() + "\r\n"); sw.Close(); fs.Close(); } }