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