Hallo!
Ich hatte gerade irgendwie Lust, einen Brainfuck-Interpreter zu schreiben. Hab ich auch versucht, allerdings kommt beim Ausführen ein Fehler (Arrayindex überschreitet Grenzen oder so ähnlich). Mein bisheriger Code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
namespace BrainfuckInterpreter { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private byte[] zellen = new byte[50]; private int index = 25; private int i = 0;
private void Form1_Load(object sender, EventArgs e) {
}
private void button2_Click(object sender, EventArgs e) { for (int _i = 0; _i < 50; _i++) { zellen[_i] = 0; } }
private void goLastBr() { int cnt = 1; i--; while ((index >= 0) && (cnt > 0)) { switch (textBox1.Text[i]) { case ']': cnt++; break; case '[': cnt--; break; } i--; } }
private void button1_Click(object sender, EventArgs e) { i = 0; while (i < textBox1.Text.Length) { switch (textBox1.Text[i]) { case '+': zellen[index]++; break; case '-': zellen[index]--; break; case '>': index++; break; case '<': index--; break; case ']': goLastBr(); break; case '.': textBox2.Text += zellen[index]; break; } i++; } } } } |
Also erstmal alles bis auf das Eingabe-Kommando (,) implementiert. Die entscheidende Zeile, die nicht funktioniert, ist die hier:
C#-Quelltext
1:
| case '.': textBox2.Text += zellen[index]; |
abgesehen davon, dass die Klammern noch nicht das machen, was sie sollen, aber dort wurde ich ja auch mitten im Schreiben "gestört", als ich schonmal den Rest testen wollte.
Leider macht der Code aber nicht das, was ich dachte. Ich möchte hier nicht eine String-Darstellung der Zahl, sondern das Zeichen, das den ASCII-Code von zellen[index] hat, zu textBox2.Text konkatenieren. Kann mir jemand die Funktion nennen, die sowas macht (idealerweise wäre natürlich auch der umgekehrte Fall ganz toll)?
Danke schonmal.
EDIT: Wieder mal viel zu kompliziert gedacht: ich muss den Int einfach casten. Habe jetzt also zellen[index] durch (char)zellen[index] ersetzt und es geht.