Ejemplo n.º 1
0
 /// <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;
 }
Ejemplo n.º 2
0
        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();
            }
        }