コード例 #1
0
ファイル: ProgramQ2.cs プロジェクト: Tilps/Stash
 private static void GetExit(PortalLoc portalLoc, out int nextX, out int nextY, int[,] map, int R, int C)
 {
     nextX = -1;
     nextY = -1;
     if (portalLoc.dir == 0)
     {
         if (Wall(portalLoc.X, portalLoc.Y - 1, map, R, C))
         {
             nextX = portalLoc.X;
             nextY = portalLoc.Y;
             return;
         }
         if (Wall(portalLoc.X, portalLoc.Y, map, R, C))
         {
             nextX = portalLoc.X;
             nextY = portalLoc.Y-1;
             return;
         }
     }
     if (portalLoc.dir == 1)
     {
         if (Wall(portalLoc.X-1, portalLoc.Y, map, R, C))
         {
             nextX = portalLoc.X;
             nextY = portalLoc.Y;
             return;
         }
         if (Wall(portalLoc.X, portalLoc.Y, map, R, C))
         {
             nextX = portalLoc.X-1;
             nextY = portalLoc.Y;
             return;
         }
     }
 }
コード例 #2
0
ファイル: ProgramQ2.cs プロジェクト: Tilps/Stash
 private static List<PortalLoc> GetPortalLocs(int[,] map, int startX, int startY, int R, int C)
 {
     if (portalLocCache[startX, startY] != null)
         return portalLocCache[startX, startY];
     List<PortalLoc> locs = new List<PortalLoc>();
     for (int i = startX + 1; i <= C; i++)
     {
         if (Wall(i, startY, map, R, C))
         {
             PortalLoc loc = new PortalLoc();
             loc.X = i;
             loc.Y = startY;
             loc.dir = 1;
             locs.Add(loc);
             break;
         }
     }
     for (int i = startX - 1; i >= -1; i--)
     {
         if (Wall(i, startY, map, R, C))
         {
             PortalLoc loc = new PortalLoc();
             loc.X = i + 1;
             loc.Y = startY;
             loc.dir = 1;
             locs.Add(loc);
             break;
         }
     }
     for (int i = startY + 1; i <= R; i++)
     {
         if (Wall(startX, i, map, R, C))
         {
             PortalLoc loc = new PortalLoc();
             loc.X = startX;
             loc.Y = i;
             loc.dir = 0;
             locs.Add(loc);
             break;
         }
     }
     for (int i = startY - 1; i >= -1; i--)
     {
         if (Wall(startX, i, map, R, C))
         {
             PortalLoc loc = new PortalLoc();
             loc.X = startX;
             loc.Y = i+1;
             loc.dir = 0;
             locs.Add(loc);
             break;
         }
     }
     portalLocCache[startX, startY] = locs;
     return locs;
 }
コード例 #3
0
ファイル: ProgramQ2.cs プロジェクト: Tilps/Stash
 private static bool NextTo(int X, int Y, PortalLoc portalLoc, int[,] map, int R, int C)
 {
     if (portalLoc.dir == 0)
     {
         if (portalLoc.X == X && portalLoc.Y == Y && Wall(X, Y - 1, map, R, C))
             return true;
         if (portalLoc.X == X && portalLoc.Y == Y + 1 && Wall(X, Y + 1, map, R, C))
             return true;
     }
     if (portalLoc.dir == 1)
     {
         if (portalLoc.Y == Y && portalLoc.X == X && Wall(X - 1, Y, map, R, C))
             return true;
         if (portalLoc.Y == Y && portalLoc.X == X + 1 && Wall(X + 1, Y, map, R, C))
             return true;
     }
     return false;
 }