| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Jul 2004
Beiträge: 4
|
Da ich neu hier bin, stelle ich mich erstmal vor: Mein Nickname ist alberth.dent (ganz was neues ) und ich Interessiere mich für Programmieren im Allgemeinen. Vor ein, zwei Wochen machte mich ein Freund auf Brainfuck aufmerksam. Um ein bisschen ActionScript zu üben, habe ich heut Nacht einen kleinen Brainfuck-Interpreter mit Flash gemacht:http://frexx.de/as-brainfuck/ Brainfucker.as: Code: // ActionScript Brainfuck Interpreter v1.0 // 2004/07/11 Wolfgang Frisch // http://frexx.de/as-brainfuck/ // If you should really find a useful application of this piece of code, // please let me know! // Corrections and suggestions go to: brainfuck@frexx.de // brainfuck class class Brainfucker { // output event; function onOutput(n:Number); when this event is fired. fuck() returns false; var onOutput; // input event; function onInput(); when input is available, update your input:Array and call fuck again var onInput; // internal vars var steps = 0; // operations counter var memSize:Number = 30000; // memory size var mem:Array; // memory var ptr:Number; // memory pointer var p; // program pointer var loopStack = new Array(); // array contains program positions of open loops // initialize new brainfuck function init() { var i; for(i=0;i<memSize;i++) mem[i]=0; ptr=0; steps = 0; p=0; loopStack.length=0; } // constructor function Brainfucker () { mem = new Array( memSize ); init(); } // fuck function function fuck( input:Array, program:Array ) { for(;p<program.length;) { steps++; switch( program[p] ) { case ',': if( input.length ) mem[ptr] = input.shift(); else { onInput(); return false; } break; case '.': onOutput( mem[ptr] ); p++; // -> event; Brainfucker's owner has to call fuck() again return false; case '>': if(++ptr>=memSize) ptr=0; break; case '<': if(--ptr<0) ptr=memSize-1; break; case '+': if(++mem[ptr]>255) mem[ptr]=0; break; case '-': if(--mem[ptr]<0) mem[ptr]=255; break; case '[': if(mem[ptr]!=0) loopStack.push( p ); else { p++; for( var c=1; (p<program.length) && (c>0); p++ ) { if( program[p] == '[' ) c++; if( program[p] == ']' ) c--; } p--; } break; case ']': if( mem[ptr] == 0 ) loopStack.pop(); else p=loopStack[loopStack.length-1]; break; default: steps--; break; } p++; // fire a blind output event from time to time to allow terminate in case // of an infinite brainfuck if( steps%10000 == 0 ) { onOutput(0); return false; } } return true; } } Brainfuck - Wikipedia The Brainfuck Programming Language brainfuck.ca - interpreter u.a. ![]() Urban Müller, Brainfuck-Erfinder Code: Die Brainfuck-Syntax: + inkrementiert die aktuelle Zelle - dekrementiert die aktuelle Zelle > verschiebt den Parzellenzeiger auf die nachfolgende < bzw. vorherige Zelle . gibt das Zeichen der aktuellen Zelle auf der Standardausgabe aus , liest ein Zeichen von der Standardeingabe und speichert dessen ASCII-Wert in der aktuellen Zelle [ Schleifenkonstrukt: Anfang (springt zum passenden ], falls die aktuelle Zelle==0 ist) ] Schleifenkonstrukt: Ende (springt zum passenden [, falls die aktuelle Zelle!=0 ist) Alle anderen Zeichen werden ignoriert, Kommentare können also einfach wüst mit dem Code vermischt werden. Kurzes Codebeispiel: .+[.+] gibt den Asciizeichensatz aus. Eine gute Einführung ist die Wiki-Seite zu BF. Ich habe noch ein paar Kleinigkeiten verbessert/verändert. Voraussichtlich werde ich das Teil aber jetzt in Ruhe lassen, da es schließlich nur zur Übung gedacht war. Wenn jmd. was verbessern will, gibts auf anfrage die .fla.
__________________ delete this; Geändert von alberth.dent (11-07-2004 um 17:41 Uhr) |
| | |
| | #2 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Coole Sache das, dann programmier damit doch jetzt mal ein Tweening mfg. r
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
| | #3 (permalink) | |
| Neuer User Registriert seit: Jul 2004
Beiträge: 4
| Zitat:
Gute Idee! Falls ich heute noch Lust und Zeit habe, baue ich einen Schalter ein, um die Ausgabe statt ins Textfeld als ActionScript auszuführen. Leider ist bei "99 bottles of beer" mein Brainfuck-Verständnis zu Ende, weshalb ich damit eigtl. nix anfangen kann. Vielleicht gibts ja einen Wahnsinnigen im FF, der das hinkriegt. Ich poste mal oben noch die Brainfuck-Syntax...Die Speicherfunktion klappt leider noch nicht, weil ich die XMLConnector-Formatierer noch nich' ganz kapier. Meine XML-Datei sieht so aus: Code: <?xml version="1.0" encoding="iso-8859-1"?> <file_listing> <file name='anfangende.bf'><description comment='2004/07/11 10:32:27'/></file> <file name='primes.bf'><description comment='2004/07/11 10:32:25'/></file> <file name='triangle.bf'><description comment='2004/07/11 9:58:00'/></file> </file_listing> Wäre eine andere Struktur sinnvoller?
__________________ delete this; Geändert von alberth.dent (11-07-2004 um 12:48 Uhr) | |
| | |
| | #4 (permalink) |
| helpQLODhelp Registriert seit: Feb 2002 Ort: Köln
Beiträge: 8.505
|
Du benutzt einen "Rearrange Fields"-Formatter und stellst seinen Optionstring auf label=name. mfg r.
__________________ Ralf Bokelberg™ - Flex & Flash Consulting |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |