diff --git a/src/framework/AI/AStar.java b/src/framework/AI/AStar.java index 3fa1d7b..0dd8a5e 100644 --- a/src/framework/AI/AStar.java +++ b/src/framework/AI/AStar.java @@ -3,41 +3,41 @@ import java.util.*; /** - * A*�N���X�B + * A*クラス。 */ public class AStar { private LinkedList locationOpenList = new LinkedList(); private LinkedList locationClosedList = new LinkedList(); /** - * �ŒZ�o�H�T���B �ŒZ�o�H�̃��X�g��Ԃ����A���‚���Ȃ��ꍇnull��Ԃ��B - * start = goal�̏ꍇ��null��Ԃ��B - * �߂�l�ɂ�goal����start�̂P�‘O�܂Ōo�H�������̂ڂ������̂������Ă���Bstart�͓����Ă��Ȃ��B + * 最短経路探査。 最短経路のリストを返すか、見つからない場合nullを返す。 + * start = goalの場合もnullを返す。 + * 戻り値にはgoalからstartの1個前まで経路をさかのぼったものが入っている。startは入っていない。 */ public Plan getPath(Location startLocation, Location goalLocation) { - //�o���n�_�ƖړI�n�_�������Ȃ�null��Ԃ� + //出発地点と目的地点が同じならnullを返す if (startLocation.equals(goalLocation)) { return null; } - // ������ + // 初期化 locationOpenList = new LinkedList(); locationClosedList = new LinkedList(); - // �o���n�_��LocationOpenList�ɒlj����� + // 出発地点をLocationOpenListに追加する locationOpenList.add(startLocation); while (!locationOpenList.isEmpty()) { - // LocationOpenList�̍ŏ��X�R�A�̒n�_��curLocation�Ƃ��Ď��o�� + // LocationOpenListの最小スコアの地点をcurLocationとして取り出す Collections.sort(locationOpenList, new CostComparator()); Location curLocation = locationOpenList.removeFirst(); - // ���݂̒n�_���ړI�n�_�Ȃ�ΒT������ + // 現在の地点が目的地点ならば探査完了 if (curLocation.equals(goalLocation)) { LinkedList locationPath = new LinkedList(); - // �o���n�_�܂Œʂ����n�_��H�� + // 出発地点まで通った地点を辿る curLocation = goalLocation; while (!curLocation.equals(startLocation)) { locationPath.add(curLocation); @@ -46,24 +46,24 @@ return new Plan(locationPath); } - // ���݂̒n�_���ړI�n�_�łȂ��Ȃ�A���݂̒n�_��LocationClosedList�Ɉڂ� + // 現在の地点が目的地点でないなら、現在の地点をLocationClosedListに移す locationClosedList.add(curLocation); - // �אڂ���n�_�𒲂ׂ� + // 隣接する地点を調べる ArrayList neighbors = curLocation.getSuccessors(); - // �אڂ���n�_�̐������A���[�v + // 隣接する地点の数だけ、ループ for (int i = 0; i < neighbors.size(); i++) { - // �ʉ߂ł��A�e���X�g�ɓ����ĂȂ��Ȃ�R�X�g�����炢�A + // 通過でき、各リストに入ってないならコストをもらい、 if (!locationOpenList.contains(neighbors.get(i)) && !locationClosedList.contains(neighbors.get(i))) { - //�n�_�R�X�g�����߂� + //地点コストを求める //agent.getLocationCost((Location)neighbors.get(i), null, null, null); - //�p�X�R�X�g�����߂� + //パスコストを求める ((Location)neighbors.get(i)).calculatesCosts(curLocation, goalLocation); - // LocationOpenList�Ɉڂ� + // LocationOpenListに移す locationOpenList.add((Location) neighbors.get(i)); } } @@ -75,10 +75,10 @@ } // ------------------------------------------------------------------------------------------------------------------------------------------- - // �R�X�g�̏����\�[�g�̂��߂̃N���X����낤 + // コストの昇順ソートのためのクラスを作ろう /** - * �\�[�g�������N���X�B + * ソート条件式クラス。 */ class CostComparator implements Comparator { public int compare(Location n1, Location n2) {