Учебный Проект. Релиз 7. Класс Computer2: различия между версиями
Материал из wikiru.visual-prolog.com
| м (→Ссылки) | м | ||
| Строка 2: | Строка 2: | ||
| <vip> | <vip> | ||
| /****************************************** | /****************************************** | ||
| Copyright (c)  | Copyright (c) Victor Yukhtenko | ||
| Copyright (c) Elena Efimova | |||
| Predicate successfulStep | Predicate successfulStep | ||
| Class computer2 | Class computer2 | ||
| ******************************************/ | ******************************************/ | ||
| class computer2:player | class computer2:player | ||
| open core | open core | ||
| predicates | predicates | ||
|      getPlayerDescriptor:(game::language_D)->string Descriptor. |      getPlayerDescriptor:(game::language_D)->string Descriptor. | ||
| Строка 26: | Строка 25: | ||
|          PolyLineBraneObj=polylineStrategy2::new(), |          PolyLineBraneObj=polylineStrategy2::new(), | ||
|          setpolylineStrategy(PolyLineBraneObj). |          setpolylineStrategy(PolyLineBraneObj). | ||
| clauses | clauses | ||
|     getPlayerDescriptor(game::en)=polylineStrategy2::playerDescriptorEn_C. |     getPlayerDescriptor(game::en)=polylineStrategy2::playerDescriptorEn_C. | ||
| Строка 43: | Строка 42: | ||
| constants | constants | ||
|      playerDescriptorEn_C="Computer2: Limited Depth. Despair move - random". |      playerDescriptorEn_C="Computer2: Limited Depth. Despair move - random". | ||
|      playerDescriptorRu_C="Computer2: Ограниченная глубина. Ход  |      playerDescriptorRu_C="Computer2: Ограниченная глубина. Ход отчаяния - случайный". | ||
| end class polylineStrategy2 | end class polylineStrategy2 | ||
| Строка 101: | Строка 100: | ||
|          genericComputer_V:stepCandidate(PolyLine, PolyLine1,Cell), |          genericComputer_V:stepCandidate(PolyLine, PolyLine1,Cell), | ||
|              not(_=successfulStep(Counter-1,PolyLine1)). |              not(_=successfulStep(Counter-1,PolyLine1)). | ||
| class predicates | class predicates | ||
|      isStepSuccessful:(integer Counter,juniourJudge::cell* PolyLine,juniourJudge::cell BestMove) determ. |      isStepSuccessful:(integer Counter,juniourJudge::cell* PolyLine,juniourJudge::cell BestMove) determ. | ||
| Строка 110: | Строка 109: | ||
|      isStepSuccessful(Counter,_PolyLine,_BestMove):- |      isStepSuccessful(Counter,_PolyLine,_BestMove):- | ||
|          Counter<=1. |          Counter<=1. | ||
| clauses | clauses | ||
|      randomStep()=Cell:- |      randomStep()=Cell:- | ||
| Строка 119: | Строка 118: | ||
|          ChoiceNo=math::random(NoOfVariants-1), |          ChoiceNo=math::random(NoOfVariants-1), | ||
|          Cell=list::nth(ChoiceNo+1,CellCandidateList). |          Cell=list::nth(ChoiceNo+1,CellCandidateList). | ||
| end implement polylineStrategy2 | end implement polylineStrategy2 | ||
| </vip> | </vip> | ||
Текущая версия на 17:23, 28 марта 2011
| Учебный Проект. Релиз 7 | 
|---|
/****************************************** Copyright (c) Victor Yukhtenko Copyright (c) Elena Efimova Predicate successfulStep 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="Computer2: Limited Depth. Despair move - random". playerDescriptorRu_C="Computer2: Ограниченная глубина. Ход отчаяния - случайный". 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: (integer Counter, juniourJudge::cell*)->juniourJudge::cell nondeterm. clauses successfulStep(Counter,PolyLine)=BestMove:- genericComputer_V:stepCandidate(PolyLine,_PolyLine1,BestMove), isStepSuccessful(Counter,PolyLine,BestMove), !. successfulStep(Counter,PolyLine)=Cell:- genericComputer_V:stepCandidate(PolyLine, PolyLine1,Cell), not(_=successfulStep(Counter-1,PolyLine1)). class predicates isStepSuccessful:(integer Counter,juniourJudge::cell* PolyLine,juniourJudge::cell BestMove) determ. clauses isStepSuccessful(_Counter,PolyLine,BestMove):- list::isMember(BestMove, PolyLine), !. isStepSuccessful(Counter,_PolyLine,_BestMove):- Counter<=1. 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

