Exemple #1
0
        public override void Execute()
        {
            // assumes x,y and x2,y2 have been normalized so that x,y is top-left
            Tools.PrepareUndo(x, y, x2, y2, plr);

            switch (algorithm)
            {
                case 0:
                    TShock.Players[plr].SendMessage(String.Format("0: Recursive Backtracker maze creation initiated!"), Color.Green);
                    this.maze = new Mazes.Maze(new Mazes.Point(x, y), new Mazes.Point(x2 - x, y2 - y), new Mazes.Point(TShock.Players[plr].TileX, TShock.Players[plr].TileY),
                        tunnelWidth, wallWidth, algorithm, 0, this.PeekBlock, this.NukeTiles);
                    //RecursiveBacktracker();
                    break;
                case 1:
                    // TShock.Players[plr].SendMessage(String.Format("1: Growing Tree maze creation initiated!"), Color.Green);
                    //  GrowingTree();
                    break;
                default:
                    TShock.Players[plr].SendMessage(String.Format("Invalid algorithm specified."), Color.Red);
                    break;
            }
            MazeState ms = new MazeState();
            while (ms.status < 8)
            {
                ms = maze.Step();
            }



            TShock.Players[plr].SendMessage(String.Format("Maze creation complete."), Color.LimeGreen);
            ResetSection();

        } //Execute()
Exemple #2
0
/////
//////////////////////////////////////////////////
/////

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (createInProgress)
            {
                // update maze here
                MazeState ms = this.maze.Step();
                //toolbarLabel1.Text = ms.status.ToString() + "     " + ms.message;

                if (ms.status == 1)
                {
                    this.firstCell = maze.mazeData.tunnelling.First();
                    SetRect(new Rect(this.firstCell, maze.mazeData.tunnelWidthP()), Color.Orange);
                }

                if (ms.status >= 2 && ms.status <= 4)
                {
                    int c = maze.mazeData.tunnelling.Count();
                    if (c > 0)
                    {
                        SetRect(new Rect(maze.mazeData.lastCell, maze.mazeData.tunnelWidthP()), Color.Red);
                    }
                    if (c > 1)
                    {
                        SetRect(new Rect(this.prevCell, maze.mazeData.tunnelWidthP()), pathColor);
                        toolbarLabel1.Text = maze.mazeData.lastCell.ToString() + " / " + this.prevCell.ToString();
                    }
                    this.prevCell = maze.mazeData.lastCell;
                    mazePanel.Invalidate();
                }
                if (ms.status == 8)
                {
                    createInProgress = false;
                    timer1.Stop();
                }

                this.lastMazeState = ms;
            }


            if (solveInProgress)
            {
                int prevExp = solver.exploredPoints.Count;

                //  Stopwatch stopwatch = Stopwatch.StartNew();
                this.solver.SolveStep();
                //   stopwatch.Stop();
                //   Debug.WriteLine(stopwatch.ElapsedMilliseconds);

                // for (int i = prevExp;  i < solver.exploredPoints.Count; i++)
                foreach (ExploredPoint ep in solver.exploredPoints)
                {
                    //mazeBmp.SetPixel(solver.exploredPoints[i].p.X, solver.exploredPoints[i].p.Y, solvePathColor);
                    // bug here - exception if edge of map is reached.
                    mazeBmp.SetPixel(ep.p.X, ep.p.Y, solvePathColor);
                }

                if (solver.state == 4)
                {
                    //solver.
                }
                else if (solver.state >= 8)
                {
                    solveInProgress = false;
                    timer1.Stop();
                }
                if (solver.state >= 12)
                {
                    foreach (Mazes.Point s in solver.solution)
                    {
                        SetPixel(s, solutionColor);
                    }
                }
                this.toolbarLabel1.Text = "alivePoints.Count: " + solver.alivePoints.Count();
                mazePanel.Invalidate();
            }
        }
Exemple #3
0
        /////
        //////////////////////////////////////////////////
        /////
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (createInProgress)
            {
                // update maze here
                MazeState ms = this.maze.Step();
                //toolbarLabel1.Text = ms.status.ToString() + "     " + ms.message;

                if (ms.status == 1)
                {
                    this.firstCell = maze.mazeData.tunnelling.First();
                    SetRect(new Rect(this.firstCell, maze.mazeData.tunnelWidthP()), Color.Orange);
                }

                if (ms.status >= 2 && ms.status <= 4)
                {
                    int c = maze.mazeData.tunnelling.Count();
                    if (c > 0)
                    {
                        SetRect(new Rect(maze.mazeData.lastCell, maze.mazeData.tunnelWidthP()), Color.Red);
                    }
                    if (c > 1)
                    {
                        SetRect(new Rect(this.prevCell, maze.mazeData.tunnelWidthP()), pathColor);
                        toolbarLabel1.Text = maze.mazeData.lastCell.ToString() + " / " + this.prevCell.ToString();
                    }
                    this.prevCell = maze.mazeData.lastCell;
                    mazePanel.Invalidate();
                }
                if (ms.status == 8)
                {
                    createInProgress = false;
                    timer1.Stop();
                }

                this.lastMazeState = ms;
            }

            if (solveInProgress)
            {
                int prevExp = solver.exploredPoints.Count;

              //  Stopwatch stopwatch = Stopwatch.StartNew();
                this.solver.SolveStep();
             //   stopwatch.Stop();
             //   Debug.WriteLine(stopwatch.ElapsedMilliseconds);

               // for (int i = prevExp;  i < solver.exploredPoints.Count; i++)
                foreach (ExploredPoint ep in solver.exploredPoints)
                {
                    //mazeBmp.SetPixel(solver.exploredPoints[i].p.X, solver.exploredPoints[i].p.Y, solvePathColor);
                    // bug here - exception if edge of map is reached.
                    mazeBmp.SetPixel(ep.p.X, ep.p.Y, solvePathColor);
                }

                if (solver.state == 4)
                {
                    //solver.
                }
                else if (solver.state >= 8)
                {
                    solveInProgress = false;
                    timer1.Stop();
                }
                if (solver.state >= 12)
                {
                    foreach (Mazes.Point s in solver.solution)
                    {
                        SetPixel(s, solutionColor);
                    }
                }
                this.toolbarLabel1.Text = "alivePoints.Count: " + solver.alivePoints.Count();
                mazePanel.Invalidate();
            }
        }