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; }
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); }