多彩网

爱因斯坦棋

爱因斯坦棋

huangxinzhen 2025-03-20 房产装修 2 次浏览 0个评论
class MoveList { public int From; public int To; } class Sum { public int WinSum = 0; public MoveList Move = new MoveList(); } class MoveListAndCount { public MoveList moveList = new MoveList(); public int Count = 0; } public class McSearch extends Einstein { private final int pos[] = {6,5,1}; private int CBoard[]; public MoveList BlueMoveList[] = new MoveList[6]; public MoveList GreenMoveList[] = new MoveList[6]; public Sum[] Num = new Sum[6]; McSearch() { CBoard = new int[25]; for(int i=0;i<6;i++) { Num[i] = new Sum(); BlueMoveList[i] = new MoveList(); GreenMoveList[i] = new MoveList(); } CopyBoard(); } public void CopyBoard() { for(int i=0;i<25;i++) { CBoard[i] = Board[i]; } } public void UnCopyBoard() { for(int i=0;i<25;i++) { Board[i] = CBoard[i]; } Init(); } public MoveListAndCount CreateBlueRandMove(int Dice,MoveListAndCount Move) { Move = BlueAloneMove(Dice,Move); if(Move.Count ==0 || Move.Count == 1) { Move.Count = 1; return Move; } int Rand = random.nextInt(Move.Count); Move.moveList = BlueMoveList[Rand]; return Move; } public MoveListAndCount CreateGreenRandMove(int Dice,MoveListAndCount Move) { Move = GreenAloneMove(Dice,Move); if(Move.Count ==0 || Move.Count == 1) { Move.Count = 1; return Move; } int Rand = random.nextInt(Move.Count); Move.moveList = GreenMoveList[Rand]; return Move; } public MoveListAndCount CreateBlueMove(int Dice,MoveListAndCount Move) { int m = Dice,i,min = 100,evals; while(m < 7 && !Stone[m].IsExist) { m++; } if(m<7) { for(i=0;i<3;i++) { if(IsBlueVaild(m,Stone[m].Position,Stone[m].Position + pos[i])) { int ToDice = Board[Stone[m].Position + pos[i]],DiceFrom = Stone[m].Position; MakeMove(Stone[m].Position,Stone[m].Position + pos[i]); if(IsBlueWin()) { UnMakeMove(m,ToDice,DiceFrom,DiceFrom + pos[i]); Move.moveList.From = Stone[m].Position; Move.moveList.To = Move.moveList.From + pos[i]; return Move; } evals = Blueevals(); UnMakeMove(m,ToDice,DiceFrom,DiceFrom + pos[i]); if(min > evals) { min = evals; Move.moveList.From = Stone[m].Position; Move.moveList.To = Stone[m].Position + pos[i]; } } } } int n =Dice; while(n > 0 && !Stone[n].IsExist) { n--; } if(m!=Dice && n>0) { for(i=0;i<3;i++) { if(IsBlueVaild(n,Stone[n].Position,Stone[n].Position + pos[i])) { int ToDice = Board[Stone[n].Position + pos[i]],DiceFrom = Stone[n].Position; MakeMove(Stone[n].Position,Stone[n].Position + pos[i]); if(IsBlueWin()) { UnMakeMove(n,ToDice,DiceFrom,DiceFrom + pos[i]); Move.moveList.From = Stone[n].Position; Move.moveList.To = Move.moveList.From + pos[i]; return Move; } evals = Blueevals(); UnMakeMove(n,ToDice,DiceFrom,DiceFrom + pos[i]); if(min > evals) { min = evals; Move.moveList.From = DiceFrom; Move.moveList.To = DiceFrom + pos[i]; } } } } return Move; } public MoveListAndCount CreateGreenMove(int Dice,MoveListAndCount Move) { int m = Dice,i,min = 200,evals; while(m < 13 && !Stone[m].IsExist) { m++; } for(i=0;i<3;i++) { if(m<13 && IsGreenVaild(m,Stone[m].Position,Stone[m].Position - pos[i])) { int ToDice = Board[Stone[m].Position - pos[i]],DiceFrom = Stone[m].Position; MakeMove(Stone[m].Position,Stone[m].Position - pos[i]); if(IsGreenWin()) { UnMakeMove(m,ToDice,DiceFrom,DiceFrom - pos[i]); Move.moveList.From = Stone[m].Position; Move.moveList.To = Move.moveList.From - pos[i]; return Move; } evals = Greenevals(); UnMakeMove(m,ToDice,DiceFrom,DiceFrom - pos[i]); if(min > evals) { min = evals; Move.moveList.From = Stone[m].Position; Move.moveList.To = Move.moveList.From - pos[i]; } } } if(m == Dice) return Move; int n =Dice -1; while(n > 6 && !Stone[n].IsExist) { n--; } for(i=0;i<3;i++) { if(n>6 && IsGreenVaild(n,Stone[n].Position,Stone[n].Position - pos[i])) { int ToDice = Board[Stone[n].Position - pos[i]],DiceFrom = Stone[n].Position; MakeMove(Stone[n].Position,Stone[n].Position - pos[i]); if(IsGreenWin()) { UnMakeMove(n,ToDice,DiceFrom,DiceFrom - pos[i]); Move.moveList.From = Stone[n].Position; Move.moveList.To = Move.moveList.From - pos[i]; return Move; } evals = Greenevals(); UnMakeMove(n,ToDice,DiceFrom,DiceFrom - pos[i]); if(min > evals) { min = evals; Move.moveList.From = Stone[n].Position; Move.moveList.To = Move.moveList.From - pos[i]; } } } return Move; } public MoveListAndCount BlueAloneMove(int Dice,MoveListAndCount Move) { int m = Dice,i,ToDice,DiceFrom; Move.Count = 0; while(m<7 && !Stone[m].IsExist) { m++; } for(i=0;i<3;i++) { if(m<7 && IsBlueVaild(m,Stone[m].Position,Stone[m].Position+pos[i])) { BlueMoveList[Move.Count].From = Stone[m].Position; BlueMoveList[Move.Count].To = Stone[m].Position+pos[i]; ToDice = Board[Stone[m].Position+pos[i]]; DiceFrom = Stone[m].Position; MakeMove(Stone[m].Position,Stone[m].Position+pos[i]); if(IsBlueWin()) { UnMakeMove(m,ToDice,DiceFrom,DiceFrom+pos[i]); Move.moveList.From = Stone[m].Position; Move.moveList.To = Stone[m].Position+pos[i]; Move.Count = 1; return Move; } UnMakeMove(m,ToDice,DiceFrom,DiceFrom+pos[i]); Move.moveList.From = Stone[m].Position; Move.moveList.To = Stone[m].Position+pos[i]; Move.Count++; } } if(m == Dice) return Move; int n = Dice -1; while(n>0 && !Stone[n].IsExist) { n--; } for(i=0;i<3;i++) { if(n>0 && IsBlueVaild(n,Stone[n].Position,Stone[n].Position+pos[i])) { BlueMoveList[Move.Count].From = Stone[n].Position; BlueMoveList[Move.Count].To = Stone[n].Position+pos[i]; ToDice = Board[Stone[n].Position+pos[i]]; DiceFrom = Stone[n].Position; MakeMove(Stone[n].Position,Stone[n].Position+pos[i]); if(IsBlueWin()) { UnMakeMove(n,ToDice,DiceFrom,DiceFrom+pos[i]); Move.moveList.From = Stone[n].Position; Move.moveList.To = Stone[n].Position+pos[i]; Move.Count = 1; return Move; } UnMakeMove(n,ToDice,DiceFrom,DiceFrom+pos[i]); Move.moveList.From = Stone[n].Position; Move.moveList.To = Stone[n].Position+pos[i]; Move.Count++; } } return Move; } public MoveListAndCount BlueMcevals(int Dice,MoveListAndCount Move,int size) { Move = BlueAloneMove(Dice,Move); int i,num=0,Rand,winnum,max=0; MoveListAndCount move = new MoveListAndCount(); if(Move.Count == 0 || Move.Count == 1) { return Move; } CopyBoard(); for(i=0;i<Move.Count;i++) { num=0; winnum = 0; while(num < size) { UnCopyBoard(); MakeMove(BlueMoveList[i].From,BlueMoveList[i].To); while(true) { Rand = GetGreenDice(); move = CreateGreenMove(Rand,move); MakeMove(move.moveList.From,move.moveList.To); if(IsGreenWin()) { num++; break; } Rand = GetBlueDice(); move = CreateBlueMove(Rand,move); MakeMove(move.moveList.From,move.moveList.To); if(IsBlueWin()) { num++; winnum++; break; } } } Num[i].WinSum = winnum; /****************************************************************************/ //注:Num[i].Move = BlueMoveList[i]是将其共用一个内存快, //不论修改其中任一个变量都将引起共用内存块的值得改变 //所以,此处只能用 Num[i].Move.From = BlueMoveList[i].From; //

爱因斯坦棋

转载请注明来自常州多彩网超声波设备有限公司,本文标题:《爱因斯坦棋》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!
Top
 钦州的最新广场  临沧培训师招聘最新信息  郑州最新出租店铺网  矿山黄金出售信息最新  漳州两顺招聘信息最新  安达招聘信息最新58  爱速度下载最新版  纯情和友情最新版  华为hms手机最新官网  曼联捐款最新信息  延吉楼房最新信息  李小龙最新信息  别惹农夫最新版有戴夫  亚洲黄网最新  随州最新的项目  浙江温州区划网最新通知  柘荣茶叶官网招聘网最新  宠物争锋最新版  桐城最新拆迁信息  muta音乐最新版  昭阳区靖安最新视频网  最新的鼠标推荐  枝江禁渔最新信息  东阳房租最新价格查询网  最新济南的云  最新国网电力交换机  商用车停产最新信息网  故城最新招聘信息司机  小米手环官网最新报价  金湖招聘公告网最新 
多彩网