예제 #1
0
 public PlayerState(
     int number, string name, ColorState color,
     PositionState position, DirectionState direction,
     bool alive)
 {
     this.Number = number;
     this.Name = name;
     this.Color = color;
     this.Position = position;
     this.Direction = direction;
     this.Alive = alive;
 }
예제 #2
0
 /// <summary>
 /// 与えられた位置から与えられた方向に進んだ次の位置を求める。
 /// 例えば (1, 2), Right を渡すと (2, 2) を返す。
 /// </summary>
 /// <param name="pos">位置</param>
 /// <param name="dir">向き</param>
 /// <returns>次の位置</returns>
 public static PositionState GetNextPosition(PositionState pos, DirectionState dir)
 {
     switch (dir.Value)
     {
         case Direction.Right: return new PositionState(pos.X + 1, pos.Y);
         case Direction.RightUp: return new PositionState(pos.X + 1, pos.Y - 1);
         case Direction.Up: return new PositionState(pos.X, pos.Y - 1);
         case Direction.LeftUp: return new PositionState(pos.X - 1, pos.Y - 1);
         case Direction.Left: return new PositionState(pos.X - 1, pos.Y);
         case Direction.LeftDown: return new PositionState(pos.X - 1, pos.Y + 1);
         case Direction.Down: return new PositionState(pos.X, pos.Y + 1);
         case Direction.RightDown: return new PositionState(pos.X + 1, pos.Y + 1);
     }
     throw new ArgumentException();
 }
예제 #3
0
 public InitialPlayerState(PositionState position, DirectionState direction)
 {
     this.Position = position;
     this.Direction = direction;
 }
예제 #4
0
 public bool Equals(PositionState other)
 {
     if ((object)other == null) return false;
     return this.X.Equals(other.X) && this.Y.Equals(other.Y);
 }
예제 #5
0
 /// <summary>
 /// 与えられた位置がフィールド内か否かを調べる。
 /// </summary>
 /// <param name="field">フィールド</param>
 /// <param name="pos">位置</param>
 /// <returns>位置がフィールド内なら true 、そうでなければ false</returns>
 public static bool IsIn(FieldState field, PositionState pos)
 {
     return pos.X >= 0 && pos.Y >= 0 && pos.X < field.Width && pos.Y < field.Height;
 }
예제 #6
0
 private void stepMovePlayer(int playerNumber, Action action)
 {
     var player = State.Players[playerNumber];
     var dir = player.Direction.Value;
     if (player.Dead)
     {
         return;
     }
     if (action == Action.Right)
     {
         switch (dir)
         {
             case Direction.Right: dir = Direction.RightDown; break;
             case Direction.RightUp: dir = Direction.Right; break;
             case Direction.Up: dir = Direction.RightUp; break;
             case Direction.LeftUp: dir = Direction.Up; break;
             case Direction.Left: dir = Direction.LeftUp; break;
             case Direction.LeftDown: dir = Direction.Left; break;
             case Direction.Down: dir = Direction.LeftDown; break;
             case Direction.RightDown: dir = Direction.Down; break;
         }
     }
     else if (action == Action.Left)
     {
         switch (dir)
         {
             case Direction.Right: dir = Direction.RightUp; break;
             case Direction.RightUp: dir = Direction.Up; break;
             case Direction.Up: dir = Direction.LeftUp; break;
             case Direction.LeftUp: dir = Direction.Left; break;
             case Direction.Left: dir = Direction.LeftDown; break;
             case Direction.LeftDown: dir = Direction.Down; break;
             case Direction.Down: dir = Direction.RightDown; break;
             case Direction.RightDown: dir = Direction.Right; break;
         }
     }
     var pos = player.Position;
     switch (dir)
     {
         case Direction.Right: pos = new PositionState(pos.X + 1, pos.Y); break;
         case Direction.RightUp: pos = new PositionState(pos.X + 1, pos.Y - 1); break;
         case Direction.Up: pos = new PositionState(pos.X, pos.Y - 1); break;
         case Direction.LeftUp: pos = new PositionState(pos.X - 1, pos.Y - 1); break;
         case Direction.Left: pos = new PositionState(pos.X - 1, pos.Y); break;
         case Direction.LeftDown: pos = new PositionState(pos.X - 1, pos.Y + 1); break;
         case Direction.Down: pos = new PositionState(pos.X, pos.Y + 1); break;
         case Direction.RightDown: pos = new PositionState(pos.X + 1, pos.Y + 1); break;
     }
     var players = State.Players.ToList();
     players[playerNumber] = new PlayerState(
         player.Number, player.Name, player.Color,
         pos, new DirectionState(dir), player.Alive);
     State = new GameState(State.Field, players.AsReadOnly());
 }
예제 #7
0
 private bool isInField(PositionState pos)
 {
     return pos.X >= 0 && pos.Y >= 0 && pos.X < State.Field.Width && pos.Y < State.Field.Height;
 }