Beispiel #1
0
        private void visualizeButton_Click(object sender, EventArgs e)
        {
            bool validText = true;

            for (int i = 0; i < inputTextBox.Text.Length; i++)
            {
                if (inputTextBox.Text[i] != 'a' && inputTextBox.Text[i] != 'b' && inputTextBox.Text[i] != 'c')
                {
                    MessageBox.Show(" Invalid Input");
                    validText               = false;
                    inputTextBox.Text       = "";
                    resultTextBox.BackColor = Color.White;
                    resultTextBox.Text      = "";
                    break;
                }
            }

            if (validText)
            {
                TM.localTape = new Tape();
                TM.localTape.setTapeState(inputTextBox.Text);
                tapeRefresh();
                statesList    = TM.visualize(inputTextBox.Text);
                curStateIndex = 0;
                curStateId    = prevStateId = statesList[0].q;
                TMVPanel.Refresh();
                resultTextBox.BackColor = Color.White;
                resultTextBox.Text      = "";
            }
        }
Beispiel #2
0
 private void allStepsButton_Click(object sender, EventArgs e)
 {
     while (curStateIndex < statesList.Count - 1)
     {
         oneStepButton_Click(sender, e);
         TMVPanel.Refresh();
         tapeRichTextBox.Refresh();
         System.Threading.Thread.Sleep(1000);
     }
 }
Beispiel #3
0
        private void TMVPanel_Paint(object sender, PaintEventArgs e)
        {
            blackPen = new Pen(Color.FromArgb(0, 0, 0));
            redPen   = new Pen(Color.Red);
            bluePen  = new Pen(Color.Blue);
            g        = TMVPanel.CreateGraphics();


            blackPen.Width = 3F;
            redPen.Width   = 5F;
            bluePen.Width  = 5F;

            //draw states
            Point drawPosition;

            for (int i = 0; i < statePosition.Count; i++)
            {
                drawPosition    = statePosition[i];
                drawPosition.X -= 25;
                drawPosition.Y -= 25;
                if (i == curStateId)
                {
                    drawState(i, redPen);
                }
                else if (i == prevStateId)
                {
                    drawState(i, bluePen);
                }
                else
                {
                    drawState(i, blackPen);
                }
            }

            // write Qs
            for (int i = 0; i < statePosition.Count; i++)
            {
                Label lbl = new Label();
                lbl.Size = new Size(30, 15);
                lbl.Text = "Q" + i.ToString();
                Point lblPosition = statePosition[i];
                lblPosition.X -= 12;
                lblPosition.Y -= 5;
                lbl.Location   = lblPosition;
                TMVPanel.Controls.Add(lbl);
            }

            //draw the arrows
            drawTransition(0, 1, blackPen);
            drawTransition(1, 2, blackPen);
            drawTransition(2, 3, blackPen);
            drawTransition(3, 4, blackPen);
            drawTransition(4, 5, blackPen);
            drawTransition(5, 6, blackPen);
            drawTransition(5, 10, blackPen);
            drawTransition(6, 7, blackPen);
            drawTransition(6, 9, blackPen);
            drawTransition(7, 8, blackPen);
            drawTransition(8, 6, blackPen);
            drawTransition(9, 5, blackPen);
            drawTransition(10, 11, blackPen);

            drawSelfArrow(1, orientation.North, blackPen);
            drawSelfArrow(2, orientation.North, blackPen);
            drawSelfArrow(3, orientation.North, blackPen);
            drawSelfArrow(4, orientation.North, blackPen);
            drawSelfArrow(6, orientation.North, blackPen);
            drawSelfArrow(7, orientation.North, blackPen);
            drawSelfArrow(8, false ? orientation.East : orientation.South, blackPen);
            drawSelfArrow(9, false ? orientation.East : orientation.South, blackPen);
            drawSelfArrow(10, false ? orientation.East : orientation.South, blackPen);

            // write text of each arrows
            drawText(new Point(170, 75), "a,a|R");

            drawText(new Point(290, 40), "a,a|R");
            drawText(new Point(375, 75), "b,b|R");

            drawText(new Point(490, 40), "b,b|R");
            drawText(new Point(577, 75), "c,c|R");

            drawText(new Point(690, 40), "c,c|R");
            drawText(new Point(775, 75), "^,^|L");

            //q4
            drawText(new Point(950, 50), "a,a|L");
            drawText(new Point(950, 70), "b,b|L");
            drawText(new Point(950, 90), "c,c|L");
            drawText(new Point(440, 160), "^,^|R");

            //q5
            drawText(new Point(195, 250), "a,x|R");
            drawText(new Point(28, 350), "b,b|R");

            //q6
            drawText(new Point(290, 233), "a,a|R");
            drawText(new Point(400, 257), "b,y|R");
            drawText(new Point(370, 350), "z,z|L");

            //q7
            drawText(new Point(583, 225), "b,b|R");
            drawText(new Point(583, 245), "z,z|R");
            drawText(new Point(610, 320), "c,z|L");

            //q8
            drawText(new Point(650, 470), "b,b|L");
            drawText(new Point(650, 490), "z,z|L");
            drawText(new Point(470, 323), "y,y|R");

            //q9
            drawText(new Point(390, 490), "y,b|L");
            drawText(new Point(390, 510), "a,a|L");
            drawText(new Point(190, 365), "x,x|R");

            //q10
            drawText(new Point(90, 500), "b,b|R");
            drawText(new Point(90, 520), "z,z|R");
            drawText(new Point(170, 450), "^,^|R");
        }