public State(int numCanibaisLeft, int numBoysLeft, int numCanibaisRight, int numBoysRight, BoatPosition boatPosition) { this.numCanibaisLeft = numCanibaisLeft; this.numBoysLeft = numBoysLeft; this.numCanibaisRight = numCanibaisRight; this.numBoysRight = numBoysRight; this.boatPosition = boatPosition; }
public CaptainScreen(String Username, String Password) { LogicController = controller.GetLogicController(); LogicController.NewSession(Username, Password); boat = BoatPosition.GetBoatPosition(); controller.generateMap(); InitializeComponent(); }
/// <summary> /// Check if any boat are on positions between start X to end x and start y and end y /// </summary> /// <param name="playerId">Player id which boats are checked</param> /// <param name="startX">Start x position</param> /// <param name="endX">End x position</param> /// <param name="startY">Start y position</param> /// <param name="endY">End y position</param> /// <returns>Result</returns> public static bool IsAnyBoatHere(int playerId, int startX, int endX, int startY, int endY) { BoatPosition boatPosition = _context.BoatPositions .Include(bp => bp.Position) .Include(bp => bp.Boat) .Where(bp => bp.Position.X >= startX && bp.Position.X <= endX && bp.Position.Y >= startY && bp.Position.Y <= endY) .FirstOrDefault(); return(boatPosition != null); }
/// <summary> /// Deep copy newBoatPosition object /// </summary> /// <returns>Deep copy</returns> public BoatPosition DeepCopy() { BoatPosition newBoatPosition = (BoatPosition)this.MemberwiseClone(); if (newBoatPosition.Boat != null && newBoatPosition.Boat.Player != null && newBoatPosition.Boat.Player.Account != null) { newBoatPosition.Boat.Player.Account.Password = null; } return(newBoatPosition); }
public State(int[] distribution, BoatPosition boat, State parent, int distance) { MissionariesEast = distribution[0]; CannibalsEast = distribution[1]; MissionariesWest = distribution[2]; CannibalsWest = distribution[3]; Boat = boat; Distance = distance; Parent = parent; }
BoatPosition initialLocationMode = BoatPosition.Offset; // sets boat to offset state initially // changes the boats state based on position of it public virtual void UpdateBoat() { //Debug.Log("1 - Made it to UpdateBoat"); float valueX = this.gameObject.transform.position.x; // obatins ship x, y, z coordinates float valueY = this.gameObject.transform.position.y; float valueZ = this.gameObject.transform.position.z; switch (initialLocationMode) { // indicates boat is still offset and keeps state that way case BoatPosition.Offset: if (valueX > 2 || valueY > 6.5 || valueZ > 2 || valueX < -2 || valueY < 3 || valueZ < -2) { //Debug.Log("1 - Made it to case BoatPosition.Offset first if"); initialLocationMode = BoatPosition.Offset; } // indicates boat is now standard position and switches state from offset to standard else if (valueX <= 2 && valueY <= 6.5 && valueZ <= 2 && valueX >= -2 && valueY >= 3 && valueZ >= -2) { //Debug.Log("1 - Made it to case BoatPosition.Offset else if"); initialLocationMode = BoatPosition.Standard; } break; // indicates boat is still in standard position and maintains state case BoatPosition.Standard: if (valueX <= 2 && valueY <= 6.5 && valueZ <= 2 && valueX >= -2 && valueY >= 3 && valueZ >= -2) { //Debug.Log("1 - Made it to case BoatPosition.Standard if"); initialLocationMode = BoatPosition.Standard; } // indiactes boat is offset and switches state from standard to offset else if (valueX > 2 || valueY > 6.5 || valueZ > 2 || valueX < -2 || valueY < 3 || valueZ < -2) { //Debug.Log("1 - Made it to case BoatPosition.Offset first if"); initialLocationMode = BoatPosition.Offset; } break; } // performs action based off of internal state DoAction(initialLocationMode); }
// will perform action based on state protected void DoAction(BoatPosition location) { //Debug.Log("2 - Made it to DoAction"); switch (location) { // if standard do nothing case BoatPosition.Standard: //Debug.Log("2 - Made it to case BoatPosition.Standard:"); // do nothing break; // if offset, move boat properly to standard case BoatPosition.Offset: // move ship back to original //Debug.Log("2 - Made it to case BoatPosition.offset: "); transform.position = new Vector3(0f, 5.5f, 0f); break; } }
private static void SetBoatPositions(List <Position> positions, Boat boat) { boat.Positions = new List <BoatPosition>(); foreach (Position position in positions) { BoatPosition boatPosition = new BoatPosition { BoatId = boat.Id, PositionId = position.Id }; _context.BoatPositions.Add(boatPosition); _context.SaveChanges(); boat.Positions.Add(boatPosition); } _context.Boats.Update(boat); _context.SaveChanges(); }
private State CreateState(int[] distribution, BoatPosition boat) { var east = new int[] { MissionariesEast + distribution[0], CannibalsEast + distribution[1] }; var west = new int[] { MissionariesWest + distribution[2], CannibalsWest + distribution[3] }; var newState = new State(new int[] { east[0], east[1], west[0], west[1] }, boat, this, Distance + 1); if (!newState.IsValidState()) { return(null); } return(newState); }
public int Part1() { foreach (var instruction in Input) { char direction = instruction[0]; int values = Convert.ToInt32(instruction.Substring(1)); Directions.Add(direction); Values.Add(values); } BoatPosition.Add('S', 0); BoatPosition.Add('N', 0); BoatPosition.Add('W', 0); BoatPosition.Add('E', 0); char[] boatDirections = new char[4] { 'N', 'E', 'S', 'W' }; char lastBoatDirection = 'E'; for (int i = 0; i < Directions.Count; i++) { if (BoatPosition.ContainsKey(Directions[i])) { BoatPosition[Directions[i]] += Values[i]; } if (Directions[i] == 'F') { BoatPosition[lastBoatDirection] += Values[i]; } if (Directions[i] == 'L' || Directions[i] == 'R') { if (Directions[i] == 'R') { int index = Array.IndexOf(boatDirections, lastBoatDirection); while (Values[i] != 0) { index++; if (index == 4) { index = 0; } lastBoatDirection = boatDirections[index]; Values[i] -= 90; } } if (Directions[i] == 'L') { int index = Array.IndexOf(boatDirections, lastBoatDirection); index -= 1; while (Values[i] != 0) { if (index < 0) { index = 3; } lastBoatDirection = boatDirections[index]; index--; Values[i] -= 90; } } } } var ManhattanDistance = Math.Abs(BoatPosition['N'] - BoatPosition['S']) + Math.Abs(BoatPosition['W'] - BoatPosition['E']); return(ManhattanDistance); }
// Update is called once per frame void Update() { if (state == GameState.fail || state == GameState.win) { return; } if (Input.GetMouseButtonDown(0) && !BoatMove) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.tag == "devil" || hit.collider.gameObject.tag == "priest") { PlayerMove = hit.collider.gameObject; } } } if (PlayerMove != null && PlayerMove.transform.parent == null) { if (((boatPosition == BoatPosition.left && Left.Contains(PlayerMove)) || (boatPosition == BoatPosition.right && Right.Contains(PlayerMove))) && OnTheBoat.Count < 2) { if (pos1 == null) { PlayerMove.transform.position = boat.transform.position + new Vector3(-0.5f, 1, 0); pos1 = PlayerMove; } else { PlayerMove.transform.position = boat.transform.position + new Vector3(0.5f, 1, 0); pos2 = PlayerMove; } PlayerMove.transform.parent = boat.transform; if (boatPosition == BoatPosition.left) { Left.Remove(PlayerMove); } else if (boatPosition == BoatPosition.right) { Right.Remove(PlayerMove); } OnTheBoat.Add(PlayerMove); } PlayerMove = null; } if (PlayerMove != null && PlayerMove.transform.parent != null) { if (boatPosition == BoatPosition.right) { PlayerMove.transform.position = new Vector3(5.5f + Convert.ToInt32(PlayerMove.name), 0, 0); PlayerMove.transform.parent = null; Right.Add(PlayerMove); if (Right.Count == 6) { state = GameState.win; } } else if (boatPosition == BoatPosition.left) { PlayerMove.transform.position = new Vector3(-11 + Convert.ToInt32(PlayerMove.name), 0, 0); PlayerMove.transform.parent = null; Left.Add(PlayerMove); } if (pos1 == PlayerMove) { pos1 = null; } else { pos2 = null; } OnTheBoat.Remove(PlayerMove); PlayerMove = null; } if (BoatMove) { if (boatPosition == BoatPosition.right) { CheckState1(Right); boat.transform.Translate(Vector3.left * Time.deltaTime * 3); if (boat.transform.position.x <= -4) { BoatMove = false; boatPosition = BoatPosition.left; CheckState2(Left); } } if (boatPosition == BoatPosition.left) { CheckState1(Left); boat.transform.Translate(Vector3.right * Time.deltaTime * 3); if (boat.transform.position.x >= 4) { BoatMove = false; boatPosition = BoatPosition.right; CheckState2(Right); } } } }
// Update is called once per frame void Update() { if (state == GameState.fail || state == GameState.win) { return; //如果游戏胜利或者失败就不再更新 } if (Input.GetMouseButtonDown(0) && !BoatMove) //如果船不在移动,判断是否点击鼠标左键 { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //从相机处发出射线 RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.collider.gameObject.tag == "devil" || hit.collider.gameObject.tag == "priest") //判断射线击中点是否是恶魔或者牧师 { PlayerMove = hit.collider.gameObject; //记录下被点击的人物 } } } if (PlayerMove != null && PlayerMove.transform.parent == null)//被点击人物不为空且其父对象为空,说明被点击人物在岸上 { if (((boatPosition == BoatPosition.left && Left.Contains(PlayerMove)) || (boatPosition == BoatPosition.right && Right.Contains(PlayerMove))) && OnTheBoat.Count < 2) //判断船和被点击人物是否在同一岸边且船未坐满 { if (pos1 == null) //如果船的第一个位置不为空则把人物移动到第一个位置 { PlayerMove.transform.position = boat.transform.position + new Vector3(-0.5f, 1, 0); pos1 = PlayerMove; } else//否则把人物移动到第二个位置 { PlayerMove.transform.position = boat.transform.position + new Vector3(0.5f, 1, 0); pos2 = PlayerMove; } PlayerMove.transform.parent = boat.transform; //将船设为人物的父对象 if (boatPosition == BoatPosition.left) //从对应的岸中移除人物 { Left.Remove(PlayerMove); } else if (boatPosition == BoatPosition.right) { Right.Remove(PlayerMove); } OnTheBoat.Add(PlayerMove); //将人物添加到船上 } PlayerMove = null; //将点击的人物清空 } if (PlayerMove != null && PlayerMove.transform.parent != null) //被点击的人物不为空且其父对象不为空,说明人物在船上 { if (boatPosition == BoatPosition.right) //判断船的位置 { PlayerMove.transform.position = new Vector3(5.5f + Convert.ToInt32(PlayerMove.name), 0, 0); PlayerMove.transform.parent = null; Right.Add(PlayerMove); if (Right.Count == 6) { state = GameState.win; //如果右岸人数为6,则游戏胜利 } } else if (boatPosition == BoatPosition.left) { PlayerMove.transform.position = new Vector3(-11 + Convert.ToInt32(PlayerMove.name), 0, 0); PlayerMove.transform.parent = null; Left.Add(PlayerMove); } if (pos1 == PlayerMove) { pos1 = null; } else { pos2 = null; } OnTheBoat.Remove(PlayerMove); PlayerMove = null; } if (BoatMove) //判断船是否在移动 { if (boatPosition == BoatPosition.right) //如果船在右边则向左移动 { CheckState1(Right); boat.transform.Translate(Vector3.left * Time.deltaTime * 3); if (boat.transform.position.x <= -4) { BoatMove = false; boatPosition = BoatPosition.left; CheckState2(Left); } } if (boatPosition == BoatPosition.left)//如果船在左边则向右移动 { CheckState1(Left); boat.transform.Translate(Vector3.right * Time.deltaTime * 3); if (boat.transform.position.x >= 4) { BoatMove = false; boatPosition = BoatPosition.right; CheckState2(Right); } } } }