Example #1
0
 // dir 方向へ(なるべく)前進する Loc を返す。
 // (前方、斜め前方、側面方向の Loc を返す)
 public                     Loc[] Forwards5(Dir front)
 {
     return(new[] {
         Forward(front),
         Forward(front.Clockwise()),
         Forward(front.Anticlockwise()),
         Forward(front.Clockwise().Clockwise()),
         Forward(front.Anticlockwise().Anticlockwise()),
     });
 }
Example #2
0
    // 前進する場合の移動先の候補を返す。進めない場合は後退する。
    private static Loc[] Advance(Loc fm, Dir dir)
    {
        var locs = new[] {
            fm.Forward(dir),
            fm.Forward(dir.Clockwise()),
            fm.Forward(dir.Anticlockwise()),
            fm.Forward(dir.Clockwise().Clockwise()),
            fm.Forward(dir.Anticlockwise().Anticlockwise()),
            fm.Backward(dir),
        };

        return(locs);
    }
Example #3
0
 // 斜め方向
 public                     Loc[] ForwardsDiagonally(Dir front)
 {
     return(new[] {
         Forward(front.Clockwise()),
         Forward(front.Anticlockwise()),
     });
 }
Example #4
0
    // to に近づく
    private static Loc[] Approach(Loc fm, Loc to)
    {
        Dir dir = fm.Toward(to);

        var locs = new[] {
            fm.Forward(dir),
            fm.Forward(dir.Clockwise()),
            fm.Forward(dir.Anticlockwise()),
            fm.Forward(dir.Clockwise().Clockwise()),
            fm.Forward(dir.Anticlockwise().Anticlockwise()),
        };

        Array.Sort(locs, (a, b) => {
            var x = a.SquareDistance(to);
            var y = b.SquareDistance(to);
            return(x.CompareTo(y));
        });
        return(locs);
    }
Example #5
0
 public Loc Left(Dir front)
 {
     return(Forward(front.Anticlockwise().Anticlockwise()));
 }