Esempio n. 1
0
 private void Forward(int iStartX, int iStartY, out int iEndX, out int iEndY)
 {
     iEndX = iStartX;
     iEndY = iStartY;
     if (CurrentDirection == Direction.South && !m_mdMaze.BlockedSquare(iStartX, iStartY + 1))
     {
         iEndY++;
     }
     if (CurrentDirection == Direction.North && !m_mdMaze.BlockedSquare(iStartX, iStartY - 1))
     {
         iEndY--;
     }
     if (CurrentDirection == Direction.East && !m_mdMaze.BlockedSquare(iStartX + 1, iStartY))
     {
         iEndX++;
     }
     if (CurrentDirection == Direction.West && !m_mdMaze.BlockedSquare(iStartX - 1, iStartY))
     {
         iEndX--;
     }
 }
Esempio n. 2
0
        private void DrawTrial(Graphics g)
        {
            Pen pThin = new Pen(Color.Black, 2);
            Pen pThick = new Pen(Color.Black, 5);
            int iX = 0, iY = 0;
            int iStartX = 0, iStartY = 0;
            int iEndX = iStartX, iEndY = iStartY;

            //g.FillRegion(Brushes.Gray, MazePictureBox.Region);

            for (iX = 0; iX < m_mdMaze.Width; iX++)
            {
                for (iY = 0; iY < m_mdMaze.Height; iY++)
                {
                    if (!m_mdMaze.BlockedSquare(iX, iY))
                    {
                        if (m_mdMaze.IsTargetSqaure(iX, iY))
                        {
                            g.FillRectangle(Brushes.Green, iX * SCALE, iY * SCALE, SCALE, SCALE);
                        }
                        else
                        {
                            g.FillRectangle(Brushes.White, iX * SCALE, iY * SCALE, SCALE, SCALE);
                        }
                        g.DrawRectangle(pThin, iX * SCALE, iY * SCALE, SCALE, SCALE);
                    }
                }
            }
            g.FillEllipse(Brushes.Yellow, CurrentState.X * SCALE + 2, CurrentState.Y * SCALE + 2, SCALE - 4, SCALE - 4);

            foreach (KeyValuePair <State, double> pair in CurrentBelief.Beliefs(0.01))
            {
                MazeState ms = (MazeState)pair.Key;
                Pen       p1 = new Pen(Color.Blue, (float)Math.Max(1, 20 * pair.Value));
                iStartX = (int)((ms.X + 0.5) * SCALE);
                iStartY = (int)((ms.Y + 0.5) * SCALE);
                iEndX   = iStartX;
                iEndY   = iStartY;
                if (ms.CurrentDirection == MazeState.Direction.North)
                {
                    iEndY -= SCALE / 2;
                }
                if (ms.CurrentDirection == MazeState.Direction.South)
                {
                    iEndY += SCALE / 2;
                }
                if (ms.CurrentDirection == MazeState.Direction.East)
                {
                    iEndX += SCALE / 2;
                }
                if (ms.CurrentDirection == MazeState.Direction.West)
                {
                    iEndX -= SCALE / 2;
                }
                g.DrawLine(p1, iStartX, iStartY, iEndX, iEndY);
            }
            if (CurrentState != null)
            {
                iStartX = (int)((CurrentState.X + 0.5) * SCALE);
                iStartY = (int)((CurrentState.Y + 0.5) * SCALE);
                iEndX   = iStartX;
                iEndY   = iStartY;
                if (CurrentState.CurrentDirection == MazeState.Direction.North)
                {
                    iEndY -= SCALE / 2;
                }
                if (CurrentState.CurrentDirection == MazeState.Direction.South)
                {
                    iEndY += SCALE / 2;
                }
                if (CurrentState.CurrentDirection == MazeState.Direction.East)
                {
                    iEndX += SCALE / 2;
                }
                if (CurrentState.CurrentDirection == MazeState.Direction.West)
                {
                    iEndX -= SCALE / 2;
                }
                g.DrawLine(pThick, iStartX, iStartY, iEndX, iEndY);
            }
            Text = CurrentState.ToString();
            if (CurrentObservation.FrontWall)
            {
                iStartX = 0;
                iStartY = (m_mdMaze.Height + 1) * SCALE;
                iEndX   = SCALE;
                iEndY   = iStartY;
                g.DrawLine(pThick, iStartX, iStartY, iEndX, iEndY);
            }
            if (CurrentObservation.RightWall)
            {
                iStartX = SCALE;
                iStartY = (m_mdMaze.Height + 1) * SCALE;
                iEndX   = iStartX;
                iEndY   = iStartY + SCALE;
                g.DrawLine(pThick, iStartX, iStartY, iEndX, iEndY);
            }
            if (CurrentObservation.BackWall)
            {
                iStartX = 0;
                iStartY = (m_mdMaze.Height + 2) * SCALE;
                iEndX   = SCALE;
                iEndY   = iStartY;
                g.DrawLine(pThick, iStartX, iStartY, iEndX, iEndY);
            }
            if (CurrentObservation.LeftWall)
            {
                iStartX = 0;
                iStartY = (m_mdMaze.Height + 1) * SCALE;
                iEndX   = 0;
                iEndY   = iStartY + SCALE;
                g.DrawLine(pThick, iStartX, iStartY, iEndX, iEndY);
            }
        }