Пример #1
0
 public status(int startPriestCount, int startDevilCount, int endPriestCount, int endDevilCount, BoatLocation boatLocation = BoatLocation.Left, PeopleOnBoat peopleOnBoat = PeopleOnBoat.FAILED, status prevStatus = null)
 {
     currentStatus     = new int[4];
     currentStatus[0]  = startPriestCount;
     currentStatus[1]  = startDevilCount;
     currentStatus[2]  = endPriestCount;
     currentStatus[3]  = endDevilCount;
     this.peopleOnBoat = peopleOnBoat;
     this.boatLocation = boatLocation;
     prev = prevStatus;
 }
Пример #2
0
    public bool Run()
    {
        FirstSceneController action = SSDirector.getInstance().currentSceneController as FirstSceneController;

        if (action.onBoatDevil.Count + action.onBoatPriest.Count == 0)
        {
            BoatLocation location     = action.boat.transform.position.x < 0 ? BoatLocation.Left : BoatLocation.Right;
            status       cStatus      = new status(action.startPriest.Count, action.startDevil.Count, action.endPriest.Count, action.endDevil.Count, location);
            PeopleOnBoat peopleOnBoat = BFSeach(cStatus);
            if (location == BoatLocation.Left)
            {
                if (peopleOnBoat == PeopleOnBoat.P)
                {
                    action.actionManager.OnBoat(action.startPriest[0], action.actionManager);
                }
                else if (peopleOnBoat == PeopleOnBoat.PP)
                {
                    action.actionManager.OnBoat(action.startPriest[0], action.actionManager);
                    action.actionManager.OnBoat(action.startPriest[action.startPriest.Count - 1], action.actionManager);
                }
                else if (peopleOnBoat == PeopleOnBoat.D)
                {
                    action.actionManager.OnBoat(action.startDevil[0], action.actionManager);
                }
                else if (peopleOnBoat == PeopleOnBoat.DD)
                {
                    action.actionManager.OnBoat(action.startDevil[0], action.actionManager);
                    action.actionManager.OnBoat(action.startDevil[action.startDevil.Count - 1], action.actionManager);
                }
                else if (peopleOnBoat == PeopleOnBoat.PD)
                {
                    action.actionManager.OnBoat(action.startDevil[0], action.actionManager);
                    action.actionManager.OnBoat(action.startPriest[0], action.actionManager);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                if (peopleOnBoat == PeopleOnBoat.P)
                {
                    action.actionManager.OnBoat(action.endPriest[0], action.actionManager);
                }
                else if (peopleOnBoat == PeopleOnBoat.PP)
                {
                    action.actionManager.OnBoat(action.endPriest[0], action.actionManager);
                    action.actionManager.OnBoat(action.endPriest[action.endPriest.Count - 1], action.actionManager);
                }
                else if (peopleOnBoat == PeopleOnBoat.D)
                {
                    action.actionManager.OnBoat(action.endDevil[0], action.actionManager);
                }
                else if (peopleOnBoat == PeopleOnBoat.DD)
                {
                    action.actionManager.OnBoat(action.endDevil[0], action.actionManager);
                    action.actionManager.OnBoat(action.endDevil[action.endDevil.Count - 1], action.actionManager);
                }
                else if (peopleOnBoat == PeopleOnBoat.PD)
                {
                    action.actionManager.OnBoat(action.endDevil[0], action.actionManager);
                    action.actionManager.OnBoat(action.endPriest[0], action.actionManager);
                }
                else
                {
                    return(false);
                }
            }
        }
        else if (action.actionManager.moveToAction == null || !action.actionManager.moveToAction.enable)
        {
            action.actionManager.MoveBoat(action.boat, action.actionManager);
        }

        return(true);
    }