Учебный Проект. Релиз 7. Класс Computer2: различия между версиями
Материал из wikiru.visual-prolog.com
Строка 2: | Строка 2: | ||
<vip> | <vip> | ||
/****************************************** | /****************************************** | ||
Copyright (c) 2007. Prolog Development Center | |||
Written by: Victor Yukhtenko | |||
Class computer2 | |||
******************************************/ | ******************************************/ | ||
class computer2:player | class computer2:player | ||
Строка 81: | Строка 84: | ||
defineSearchDepth(). | defineSearchDepth(). | ||
clauses | clauses | ||
successfulStep(PolyLine)=BestMove:- | successfulStep(PolyLine)=BestMove:- | ||
BestMove=successfulStep(maxDepth_V,PolyLine). | BestMove=successfulStep(maxDepth_V,PolyLine). | ||
successfulStep( | predicates | ||
successfulStep: (positive Depth, juniourJudge::cell*)->juniourJudge::cell BestMove determ. | |||
clauses | |||
successfulStep(Depth,PolyLine)=SafeMove:- | |||
successfulStep( | genericComputer_V:stepCandidate(PolyLine,PolyLine1,SafeMove), | ||
genericComputer_V:stepCandidate(PolyLine, PolyLine1, | isSafeMove(Depth,PolyLine,SafeMove,PolyLine1), | ||
!. | |||
predicates | |||
isSafeMove:(positive Depth,juniourJudge::cell* PolyLine,juniourJudge::cell Move,juniourJudge::cell* PolyLineAfterMove) determ. | |||
clauses | clauses | ||
isSafeMove(_Depth,PolyLine,Move,_PolyLine1):- %this move wins | |||
list::isMember( | list::isMember(Move, PolyLine), | ||
!. | |||
isSafeMove(Depth,_PolyLine,_Move,_PolyLine1):- %it is safe until that depth | |||
Depth>maxDepth_V-1, | |||
!. | !. | ||
isSafeMove(Depth,_PolyLine,_MoveIn,PolyLine1):- %it is not loss move till the end of the depth limit | |||
not(_MoveOut=successfulStep(Depth+1,PolyLine1)). | |||
clauses | clauses |
Версия 09:40, 18 декабря 2007
Учебный Проект. Релиз 7 |
---|
/****************************************** Copyright (c) 2007. Prolog Development Center Written by: Victor Yukhtenko Class computer2 ******************************************/ class computer2:player open core predicates getPlayerDescriptor:(game::language_D)->string Descriptor. end class computer2 implement computer2 inherits genericComputer open core clauses new():- PolyLineBraneObj=polylineStrategy2::new(), setpolylineStrategy(PolyLineBraneObj). clauses getPlayerDescriptor(game::en)=polylineStrategy2::playerDescriptorEn_C. getPlayerDescriptor(game::ru)=polylineStrategy2::playerDescriptorRu_C. end implement computer2 /****************************************** Class polylineStrategy2 ******************************************/ class polylineStrategy2:polylineStrategy open core predicates classInfo : core::classInfo. constants playerDescriptorEn_C="Computer: Prognosis within Limited Depth". playerDescriptorRu_C="Computer: Прогноз на заданную глубину". end class polylineStrategy2 implement polylineStrategy2 open core, exception constants className = "polylineStrategy2". classVersion = "1.0". clauses classInfo(className, classVersion). facts maxDepth_V:positive:=5. genericComputer_V:genericComputer:=erroneous. clauses new():- defineSearchDepth(). clauses setGenericComputer(GenericComputerObj):- genericComputer_V:=GenericComputerObj. predicates defineSearchDepth:(). clauses defineSearchDepth():- DepthStr=humanInterface::getInput(humanInterface::searchDepth_S,toString(maxDepth_V)), not(DepthStr=""), !, try maxDepth_V:=toTerm(DepthStr), if maxDepth_V mod 2 = 0 then maxDepth_V:=maxDepth_V+1 end if catch _TraceID1 do humanInterface::announce(humanInterface::errorMustBeNumber_S,""), defineSearchDepth() end try. defineSearchDepth(). clauses successfulStep(PolyLine)=BestMove:- BestMove=successfulStep(maxDepth_V,PolyLine). predicates successfulStep: (positive Depth, juniourJudge::cell*)->juniourJudge::cell BestMove determ. clauses successfulStep(Depth,PolyLine)=SafeMove:- genericComputer_V:stepCandidate(PolyLine,PolyLine1,SafeMove), isSafeMove(Depth,PolyLine,SafeMove,PolyLine1), !. predicates isSafeMove:(positive Depth,juniourJudge::cell* PolyLine,juniourJudge::cell Move,juniourJudge::cell* PolyLineAfterMove) determ. clauses isSafeMove(_Depth,PolyLine,Move,_PolyLine1):- %this move wins list::isMember(Move, PolyLine), !. isSafeMove(Depth,_PolyLine,_Move,_PolyLine1):- %it is safe until that depth Depth>maxDepth_V-1, !. isSafeMove(Depth,_PolyLine,_MoveIn,PolyLine1):- %it is not loss move till the end of the depth limit not(_MoveOut=successfulStep(Depth+1,PolyLine1)). clauses randomStep()=Cell:- findAll(NewCell,genericComputer_V:stepCandidate(juniourJudge::polyline_P,_Polyline1, NewCell),CellCandidateListWithDuplicates), CellCandidateList=list::removeDuplicates(CellCandidateListWithDuplicates), not(CellCandidateList=[]), NoOfVariants=list::length(CellCandidateList), ChoiceNo=math::random(NoOfVariants-1), Cell=list::nth(ChoiceNo+1,CellCandidateList). end implement polylineStrategy2