모두. 나는 minimax 알고리즘의 버전을 학교 프로젝트를 위해 C#에서 실행하려고 노력 중이다. 우리는 단순한 Mancala AI를 만들려고합니다.C#에서 부모 클래스가 자식 메서드를 사용하도록하는 방법이 있습니까?
이 목적으로 미래의 움직임을 시뮬레이션하기 위해 보드에 대한 모든 하위 값과 기타 정보를 포함하는 노드로 구성된 트리를 설정했습니다.
초기에는 보드에 변경 될 때마다 트리를 다시 실행하는 대신, 현재 보드와 일치하는 자식 노드를 찾고 그때부터 모든 작업을 수행하기를 기대하면서 트리에 변경 가능한 루트가 있기를 바랬습니다. 그것을 확장하고 거기에서 일하십시오.
내 트리를 업데이트하는 방법에 대한 이동
, 나는 간단한 for 루프를 시도하고있다 :for(int i = 0; i < 6; i++) {
...
if(bCopy.stonesAt(myPits[i]) == (myPits[myPits.Length-i-1]))
myChildren[i]= new MaxNode(...);
else
myChildren[i] = new MinNode(...);
}
} else {
myChildren[i].addChildren(board, depth);
}
}
타원은 읽을 수 있도록하기 위해 코드 또는 인수 장소에 있습니다.
이것은 내가 많은 문제를 일으키는 원인이됩니다. Mancala는 당신이 다시 갈 수있게 해주는 움직임이 있기 때문에 주어진 자식 노드가 MinNode인지 아니면 MaxNode인지를 알 수있는 방법이 없습니다. 나는 MinNodes와 MaxNodes를 추상 클래스 DecisionNode의 자식 클래스로 설정했다.
마지막 줄 (myChildren [i] .addChildren (board, depth))이 가장 낮은 수준으로 내려 가서 어느 것이 적절한 지에 따라 MaxNode addChildren 또는 MinNode addChildren을 사용하기를 바랬습니다. 그러나 DecisionNode addChildren 메소드를 사용합니다.
코드는 별개의 클래스에 보관하고 싶습니다. 그렇게 할 방법이 있습니까?
편집 : 나는 이미 DecisionNode.addChildren을 가상으로 설정했고 MinNode & MaxNode addChildren을 재정의로 설정했음을 언급해야합니다. 그러나, 컴파일시에 myChildren [i]의 타입을 알지 못하기 때문에, 그 대신에 부모 클래스가 기본값으로 사용된다. 메서드 호출은 하위 클래스 중 하나 대신
이됩니다.
몇 가지 문제가 있습니다. 기본 클래스에 addchildren을 추상화하고 불평하기 시작한 곳을 확인합니다. –