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 = ""; } }
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); } }
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"); }