コード例 #1
0
ファイル: Loc.cs プロジェクト: m-ishikawa/Rlike
 // 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()),
     });
 }
コード例 #2
0
ファイル: EnemyStrategy.cs プロジェクト: m-ishikawa/Rlike
    // 前進する場合の移動先の候補を返す。進めない場合は後退する。
    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);
    }
コード例 #3
0
ファイル: Loc.cs プロジェクト: m-ishikawa/Rlike
 // 斜め方向
 public                     Loc[] ForwardsDiagonally(Dir front)
 {
     return(new[] {
         Forward(front.Clockwise()),
         Forward(front.Anticlockwise()),
     });
 }
コード例 #4
0
ファイル: EnemyStrategy.cs プロジェクト: m-ishikawa/Rlike
    // 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);
    }
コード例 #5
0
    //Actions
    public virtual void Explore()
    {
        int number  = Random.Range(1, 5);
        Dir dir_Itr = Dir.Up;

        for (int i = 0; i < number; i++)
        {
            dir_Itr = dir_Itr.Clockwise();
            character.TryToMove(dir_Itr);
        }
    }
コード例 #6
0
    public Dir FindPath(Coord start, Coord dest)
    {
        int   seed;
        Dir   dir_Iter = Dir.Up;
        Coord front, temp;
        bool  succeed = false;

        ResetCheck();
        queue.Clear();
        queue.Add(start);
        from[start.x][start.y] = Dir.Up;

        while (!succeed && queue.Count != 0)
        {
            seed  = Random.Range(1, 5);
            front = queue[0];

            queue.RemoveAt(0);
            for (int i = 0; i < seed; i++)
            {
                dir_Iter = dir_Iter.Clockwise();
            }
            for (int i = 0; i < 4; i++)
            {
                dir_Iter = dir_Iter.Clockwise();
                temp     = front + dir_Iter.ToCoord();
                if (temp.x != Mathf.Clamp(temp.x, 0, 100))
                {
                    continue;
                }
                if (temp.y != Mathf.Clamp(temp.y, 0, 100))
                {
                    continue;
                }
                if (from[temp.x][temp.y] != Dir.Stay)
                {
                    continue;
                }
                if (currMap.CheckWallExists(temp))
                {
                    from[temp.x][temp.y] = (Dir)10;
                    continue;
                }

                queue.Add(temp);
                from[temp.x][temp.y] = dir_Iter;
                if (IsArrived(temp, dest))
                {
                    succeed = true;
                    break;
                }
            }
        }

        temp     = dest;
        dir_Iter = Dir.Stay;

        if (succeed)
        {
            while (!IsArrived(temp, start))
            {
                dir_Iter = from[temp.x][temp.y];
                temp     = temp + dir_Iter.Reverse().ToCoord();
            }
        }

        return(dir_Iter);
    }
コード例 #7
0
 public static Dir CounterClockwise(this Dir thiz)
 {
     return(thiz.Clockwise().Reverse());
 }
コード例 #8
0
ファイル: Loc.cs プロジェクト: m-ishikawa/Rlike
 public Loc Right(Dir front)
 {
     return(Forward(front.Clockwise().Clockwise()));
 }
コード例 #9
0
 public static Dir Opposite(this Dir dir)
 {
     return(dir.Clockwise().Clockwise().Clockwise().Clockwise());
 }