Exemplo n.º 1
0
        public static void GetPoint()
        {
            XmlDocument xd      = new XmlDocument();
            XmlReader   xmlfile = MainActivity.Context.Resources.GetXml(Resource.Xml.database);

            xd.Load(xmlfile);
            XmlNodeList node = xd.SelectNodes("/resources/record");

            if (node == null)
            {
                return;
            }
            foreach (XmlNode data in node)
            {
                if (data.Attributes == null)
                {
                    continue;
                }
                var fu  = Convert.ToInt32(data.SelectSingleNode("Fu")?.InnerText);
                var fan = Convert.ToInt32(data.SelectSingleNode("Fan")?.InnerText);
                var koAgareTotalPoint  = Convert.ToInt32(data.SelectSingleNode("KoAgareTotalPoint")?.InnerText);
                var oyaAgareTotalPoint = Convert.ToInt32(data.SelectSingleNode("OyaAgareTotalPoint")?.InnerText);
                var oyaTsumoTotalPoint = Convert.ToInt32(data.SelectSingleNode("OyaTsumoTotalPoint")?.InnerText);
                var koTsumoTotalPoint  = Convert.ToInt32(data.SelectSingleNode("KoTsumoTotalPoint")?.InnerText);
                var koTsumoLostPoint   = Convert.ToInt32(data.SelectSingleNode("KoTsumoLostPoint")?.InnerText);
                var oyaTsumoLostPoint  = Convert.ToInt32(data.SelectSingleNode("OyaTsumoLostPoint")?.InnerText);

                var point = new FuFanPoint(fu, fan, koAgareTotalPoint, oyaAgareTotalPoint, oyaTsumoTotalPoint, koTsumoTotalPoint, koTsumoLostPoint, oyaTsumoLostPoint);

                Element.FuFanPoints.Add(point);
            }
        }
        public static void Method(int flagUp, int flagDown)
        {
            #region 初始化
            _flagUp       = flagUp;
            _flagDown     = flagDown;
            _upPlayer     = null;
            _downPlayer   = null;
            _downPlayers  = null;
            _targetPoint  = null;
            _upPoint      = null;
            _downOyaPoint = null;
            _downKoPoint  = null;
            _isOyaAgare   = false;
            _isTsumo      = false;
            #endregion

            //对号入座
            _upPlayer    = Element.Players[_flagUp - 1];
            _downPlayer  = Element.Players[_flagDown - 1];
            _downPlayers = Element.Players.Where(p => p.Name != _upPlayer.Name).Select(p => p);
            MainActivity.RunningOtherProgram = true;
            //判断是否亲和牌
            _isOyaAgare = Element.Players[_flagUp - 1].Name == Element.Session.OyaName;
            //判断是否自摸
            _isTsumo = _flagUp == _flagDown;
            //标准化点数
            StandardizePoint();
            if (_targetPoint == null)
            {
                MessageBox.Show("输入点数出错");
                UpdateText.Set(MainActivity.ControlTextView, "谁胡牌?");
            }
            else
            {
                AgareMethod(); //进行点数交换
                if (MainActivity.DoubleRonCheckBox.Checked)
                {
                    DoubleRonPrepare(); //双响准备
                }
                else
                {
                    AfterAgare(); //胡牌后处理
                }
            }
        }
        private static void StandardizePoint()//标准化点数
        {
            var txt        = MainActivity.InpuTextView.Text;
            var txtStrings = txt.Split(new[] { '/' });
            int totalPoint;

            if (txt == "")
            {
                _targetPoint = null; return;
            }

            #region "7900"
            // "7900"                   length==1
            if (txtStrings.Length == 1)
            {
                totalPoint = Convert.ToInt32(txt);

                if (_isOyaAgare && _isTsumo)
                {
                    _targetPoint = Element.FuFanPoints.Where(
                        p =>
                        p.OyaTsumoTotalPoint == totalPoint)
                                   .Select(p => p)
                                   .FirstOrDefault();
                    _upPoint      = _targetPoint?.OyaTsumoTotalPoint;
                    _downOyaPoint = null;
                    _downKoPoint  = _targetPoint?.OyaTsumoLostPoint;
                }
                else if (_isOyaAgare)
                {
                    _targetPoint = Element.FuFanPoints.Where(
                        p =>
                        p.OyaAgareTotalPoint == totalPoint)
                                   .Select(p => p)
                                   .FirstOrDefault();
                    _upPoint      = _targetPoint?.OyaAgareTotalPoint;
                    _downOyaPoint = null;
                    _downKoPoint  = null;
                }
                else if (_isTsumo)
                {
                    _targetPoint = Element.FuFanPoints.Where(
                        p => p.KoTsumoTotalPoint == totalPoint)
                                   .Select(p => p)
                                   .FirstOrDefault();
                    _upPoint      = _targetPoint?.KoTsumoTotalPoint;
                    _downOyaPoint = _targetPoint?.OyaTsumoLostPoint;
                    _downKoPoint  = _targetPoint?.KoTsumoLostPoint;
                }
                else
                {
                    _targetPoint = Element.FuFanPoints.Where(
                        p =>
                        p.KoAgareTotalPoint == totalPoint)
                                   .Select(p => p)
                                   .FirstOrDefault();
                    _upPoint      = _targetPoint?.KoAgareTotalPoint;
                    _downOyaPoint = null;
                    _downKoPoint  = null;
                }
            }
            #endregion

            #region "2000/3900"
            // "2000/3900" 子自摸only   length==2
            else if (txtStrings.Length == 2 && txtStrings[0] != "" && txtStrings[1] != "")
            {
                var lowPoint  = Convert.ToInt32(txtStrings[0]) < Convert.ToInt32(txtStrings[1]) ? txtStrings[0] : txtStrings[1];
                var highPoint = lowPoint == txtStrings[0] ? txtStrings[1] : txtStrings[0];
                _targetPoint = Element.FuFanPoints.Where(
                    p =>
                    p.KoTsumoLostPoint.ToString() == lowPoint &&
                    p.OyaTsumoLostPoint.ToString() == highPoint)
                               .Select(p => p)
                               .FirstOrDefault();
                if (_isOyaAgare == true)
                {
                    _targetPoint = null;
                }
                _upPoint      = _targetPoint?.KoTsumoTotalPoint;
                _downOyaPoint = _targetPoint?.OyaTsumoLostPoint;
                _downKoPoint  = _targetPoint?.KoTsumoLostPoint;
            }
            #endregion

            #region "//2000"
            // "//2000"    亲自摸only   length==3 && [0]==null && [1]==null
            else if (txtStrings.Length == 3 && txtStrings[0] == "" && txtStrings[1] == "" && txtStrings[2] != "")
            {
                _targetPoint = Element.FuFanPoints.Where(
                    p =>
                    p.OyaTsumoLostPoint.ToString() == txtStrings[2] &&
                    (p.OyaTsumoTotalPoint / 3).ToString() == txtStrings[2])
                               .Select(p => p)
                               .FirstOrDefault();
                if (_isOyaAgare == false)
                {
                    _targetPoint = null;
                }
                _upPoint      = _targetPoint?.OyaTsumoTotalPoint;
                _downOyaPoint = null;
                _downKoPoint  = _targetPoint?.OyaTsumoLostPoint;
            }
            #endregion

            #region "30//4"
            // "30//4"                  length==3 && [0]!=null && [1]==null
            else if (txtStrings.Length == 3 && txtStrings[0] != "" && txtStrings[1] == "" && txtStrings[2] != "" && Convert.ToInt32(txtStrings[0]) <= 110)
            {
                int fan = Convert.ToInt32(txtStrings[2]) < 13 ? Convert.ToInt32(txtStrings[2]) : 13;
                if (fan <= 4)//4翻及以下
                {
                    _targetPoint = Element.FuFanPoints.Where(
                        p =>
                        p.Fu.ToString() == txtStrings[0] &&
                        p.Fan == fan)
                                   .Select(p => p)
                                   .FirstOrDefault();
                }
                else//5翻以上
                {
                    _targetPoint = Element.FuFanPoints.Where(
                        p => p.Fan == fan)
                                   .Select(p => p)
                                   .FirstOrDefault();
                }
                if (_targetPoint == null)
                {
                    return;
                }
                if (_isOyaAgare && _isTsumo)
                {
                    _upPoint      = _targetPoint.OyaTsumoTotalPoint;
                    _downOyaPoint = null;
                    _downKoPoint  = _targetPoint.OyaTsumoLostPoint;
                    if (_targetPoint.Fu != 110 && _targetPoint.Fan != 1)
                    {
                        MessageBox.Show("亲家自摸" + _targetPoint.Fu + "符" + _targetPoint.Fan + "番为\n" + _targetPoint.OyaTsumoLostPoint + "点all");
                    }
                    else
                    {
                        _targetPoint = null;
                    }
                }
                else if (_isOyaAgare)
                {
                    _upPoint      = _targetPoint.OyaAgareTotalPoint;
                    _downOyaPoint = null;
                    _downKoPoint  = null;
                    if (_targetPoint.Fu != 20)
                    {
                        MessageBox.Show("亲家荣和" + _targetPoint.Fu + "符" + _targetPoint.Fan + "番为\n" + _targetPoint.OyaAgareTotalPoint + "点");
                    }
                    else
                    {
                        _targetPoint = null;
                    }
                }
                else if (_isTsumo)
                {
                    _upPoint      = _targetPoint.KoTsumoTotalPoint;
                    _downOyaPoint = _targetPoint.OyaTsumoLostPoint;
                    _downKoPoint  = _targetPoint.KoTsumoLostPoint;
                    if (_targetPoint.Fu != 110 || _targetPoint.Fan != 1)
                    {
                        MessageBox.Show("子家自摸" + _targetPoint.Fu + "符" + _targetPoint.Fan + "番为\n" + _targetPoint.KoTsumoLostPoint + "点/" + _targetPoint.OyaTsumoLostPoint + "点");
                    }
                    else
                    {
                        _targetPoint = null;
                    }
                }
                else
                {
                    _upPoint      = _targetPoint?.KoAgareTotalPoint;
                    _downOyaPoint = null;
                    _downKoPoint  = null;
                    if (_targetPoint.Fu != 20)
                    {
                        MessageBox.Show("子家荣和" + _targetPoint.Fu + "符" + _targetPoint.Fan + "番为\n" + _targetPoint.KoAgareTotalPoint + "点");
                    }
                    else
                    {
                        _targetPoint = null;
                    }
                }
            }
            #endregion
        }