Example #1
0
    public static int GetZili(Qizi qizi, PointData point)
    {
        int zili = 0;

        zili = (int)tabe[qizi];
        if (qizi == Qizi.BLACKZU)
        {
            if (Utility.IsBlackGuoHe(point))
            {
                zili = ZHILI40;
            }
            if (Utility.IsRedYingZhang(point))
            {
                zili = ZHILI80;
            }
        }
        if (qizi == Qizi.REDBING)
        {
            if (Utility.IsRedGuoHe(point))
            {
                zili = ZHILI40;
            }
            if (Utility.IsBlackYingZhang(point))
            {
                zili = ZHILI80;
            }
        }
        return(zili);
    }
Example #2
0
    public ResultData Check()
    {
        ResultData result = new ResultData();

        Utility.CheckQizi(fen);

        Qizi qizi = fen.GetCurrentQizi();

        if ((fen.current & (int)qizi) == 0x0000)
        {
            throw new AppException(ErrorMessage.AE0001);
        }

        switch (qizi)
        {
        case Qizi.REDSHUAI:
        case Qizi.BLACKJIANG:
            result = CheckJiangShuai();
            break;

        case Qizi.REDSHI:
        case Qizi.BLACKSHI:
            result = CheckShi();
            break;

        case Qizi.REDXIANG:
        case Qizi.BLACKXIANG:
            result = CheckXiang();
            break;

        case Qizi.REDMA:
        case Qizi.BLACKMA:
            result = CheckMa();
            break;

        case Qizi.REDCHE:
        case Qizi.BLACKCHE:
            result = CheckChe();
            break;

        case Qizi.REDPAO:
        case Qizi.BLACKPAO:
            result = CheckPao();
            break;

        case Qizi.REDBING:
        case Qizi.BLACKZU:
            result = CheckBingZu();
            break;

        case Qizi.KONGZI:
        default:
            break;
        }
        if (result.result)
        {
            CheckJiangjun();
        }
        return(result);
    }
Example #3
0
    private int GetZiliEvaluate()
    {
        int zili = 0;

        //x0-8,y0-9(黑方:0-4,红方:5-9)
        for (int x = 0; x <= 8; x++)
        {
            for (int y = 0; y <= 9; y++)
            {
                Qizi qizi = fen.chess[x, y];
                if (qizi != Qizi.KONGZI)
                {
                    PointData point = new PointData(x, y);
                    if (((int)qizi & fen.current) == 0x0000)
                    {
                        //对手棋子
                        zili -= ZiliProvider.GetZili(qizi, point);
                    }
                    else
                    {
                        //自己棋子
                        zili += ZiliProvider.GetZili(qizi, point);
                    }
                }
            }
        }
        return(zili);
    }
Example #4
0
 public void AddMove(MoveData move)
 {
     Qizi[] qizis = new Qizi[2];
     qizis[0]        = fen[move.start];
     qizis[1]        = fen[move.end];
     fen[move.start] = Qizi.KONGZI;
     fen[move.end]   = qizis[0];
     fen.current     = fen.current ^ 0x0003;
     fen.moves.Insert(0, move);
     moves.Insert(0, qizis);
 }
Example #5
0
    public List <MoveData> GetZoufaLsit()
    {
        List <MoveData> result = new List <MoveData>();

        Dictionary <int, List <MoveData> > map = new Dictionary <int, List <MoveData> >();

        //x0-8,y0-9(黑方:0-4,红方:5-9)
        for (int x = 0; x <= 8; x++)
        {
            for (int y = 0; y <= 9; y++)
            {
                Qizi qizi = fen.chess[x, y];
                if (qizi != Qizi.KONGZI)
                {
                    if (((int)qizi & fen.current) == 0x0000)
                    {
                        continue;
                    }

                    GetMoveList(ref map, qizi, x, y);
                }
            }
        }

        //排列顺序:车>马>炮>兵>象>仕>将
        for (int i = 10; i <= 70; i += 10)
        {
            if (map.ContainsKey(i))
            {
                result.AddRange(map[i].ToArray());
            }
            if (map.ContainsKey(i + 1))
            {
                result.AddRange(map[i + 1].ToArray());
            }
            if (map.ContainsKey(i + 2))
            {
                result.AddRange(map[i + 2].ToArray());
            }
            if (map.ContainsKey(i + 3))
            {
                result.AddRange(map[i + 3].ToArray());
            }
            if (map.ContainsKey(i + 4))
            {
                result.AddRange(map[i + 4].ToArray());
            }
        }

        return(result);
    }
    public ResultData GetMoveLine()
    {
        ResultData result = new ResultData();

        Qizi qizi = fen.GetCurrentQizi();

        switch (qizi)
        {
        case Qizi.REDSHUAI:
        case Qizi.BLACKJIANG:
            result = GetJiangShuai();
            break;

        case Qizi.REDSHI:
        case Qizi.BLACKSHI:
            result = GetShi();
            break;

        case Qizi.REDXIANG:
        case Qizi.BLACKXIANG:
            result = GetXiang();
            break;

        case Qizi.REDMA:
        case Qizi.BLACKMA:
            result = GetMa();
            break;

        case Qizi.REDCHE:
        case Qizi.BLACKCHE:
            result = GetChe();
            break;

        case Qizi.REDPAO:
        case Qizi.BLACKPAO:
            result = GetPao();
            break;

        case Qizi.REDBING:
        case Qizi.BLACKZU:
            result = GetBingZu();
            break;

        case Qizi.KONGZI:
        default:
            break;
        }
        return(result);
    }
Example #7
0
    public static String ConvertQiPanToString(FenData fen)
    {
        StringBuilder builder = new StringBuilder();

        //x0-8,y0-9(黑方:0-4,红方:5-9)
        for (int x = 0; x <= 8; x++)
        {
            for (int y = 0; y <= 9; y++)
            {
                Qizi qizi = fen.chess[x, y];

                builder.Append(GetQiZiString(qizi));
            }
        }

        return(builder.ToString());
    }
Example #8
0
    public static String GetQiZiString(Qizi qizi)
    {
        String str = "";

        switch (qizi)
        {
        case Qizi.REDSHUAI:
            str = "K";
            break;

        case Qizi.BLACKJIANG:
            str = "k";
            break;

        case Qizi.REDSHI:
            str = "A";
            break;

        case Qizi.BLACKSHI:
            str = "a";
            break;

        case Qizi.REDXIANG:
            str = "B";
            break;

        case Qizi.BLACKXIANG:
            str = "b";
            break;

        case Qizi.REDMA:
            str = "N";
            break;

        case Qizi.BLACKMA:
            str = "n";
            break;

        case Qizi.REDCHE:
            str = "R";
            break;

        case Qizi.BLACKCHE:
            str = "r";
            break;

        case Qizi.REDPAO:
            str = "C";
            break;

        case Qizi.BLACKPAO:
            str = "c";
            break;

        case Qizi.REDBING:
            str = "p";
            break;

        case Qizi.BLACKZU:
            str = "p";
            break;

        case Qizi.KONGZI:
        default:
            str = "0";
            break;
        }
        return(str);
    }
Example #9
0
    private void GetMoveList(ref Dictionary <int, List <MoveData> > map, Qizi qizi, int x, int y)
    {
        int             key  = 0;
        List <MoveData> list = null;
        PointData       p    = new PointData(x, y);

        switch (qizi)
        {
        case Qizi.REDCHE:
        case Qizi.BLACKCHE:
            GetCheList(out list, p);
            key = 10;
            break;

        case Qizi.REDMA:
        case Qizi.BLACKMA:
            GetMaList(out list, p);
            key = 20;
            break;

        case Qizi.REDPAO:
        case Qizi.BLACKPAO:
            GetPaoList(out list, p);
            key = 30;
            break;

        case Qizi.REDBING:
        case Qizi.BLACKZU:
            GetBingZuList(out list, p);
            key = 40;
            break;

        case Qizi.REDXIANG:
        case Qizi.BLACKXIANG:
            GetXiangList(out list, p);
            key = 50;
            break;

        case Qizi.REDSHI:
        case Qizi.BLACKSHI:
            GetShiList(out list, p);
            key = 60;
            break;

        case Qizi.REDSHUAI:
        case Qizi.BLACKJIANG:
            GetJiangShuaiList(out list, p);
            key = 70;
            break;

        case Qizi.KONGZI:
        default:
            break;
        }
        if (list != null)
        {
            while (map.ContainsKey(key))
            {
                ++key;
            }
            map.Add(key, list);
        }
    }