Die Funktion replace
im untenstehenden Programm
ersetzt im String string alle Vorkommnisse von find mit replace. Die
Funktion interpret führt die Befehle F, L und R in einem String aus und
steuert Kara entsprechend durch die Gegend. Der Parameter stepLength
bestimmt dabei, wie "lange" ein Schritt von Kara sein soll, das heisst,
über wieviele Felder er sich erstrecken soll. Das Hauptprogram definiert
die Ersetzungsregel (GENERATOR_FIND und GENERATOR_REPLACE) sowie den
String, auf den diese Regel angewendet werden soll ("string").
ITERATIONS gibt an, wie oft die Regel angewendet werden soll. Durch die
Veränderung dieser Parameter entstehen faszinierende Fraktale!
// ... String replace (String string, String find, String replace) { String result = ""; int index = 0; while (index <= string.length()-find.length()) { String currentSubString = string.substring(index, index+find.length()); if (currentSubString.equals(find)) { result += replace; index += find.length(); } else { result += currentSubString; index++; } } return result; } void interpret (String string, int stepLength) { for (int i = 0; i < string.length(); i++) { if (string.charAt(i) == 'F') { forward(stepLength); } else if (string.charAt(i) == 'L') { kara.turnLeft(); } else if (string.charAt(i) == 'R') { kara.turnRight(); } } } public void myProgram() { // die Welt sollte gross genug sein, // um die entstehende Figur aufnehmen zu können final String GENERATOR_FIND = "F"; final String GENERATOR_REPLACE = "FLFRFRFLF"; final int ITERATIONS = 3; // Achtung, exponentielles Wachstum! // ITERATIONS sollte nicht zu gross gewählt werden String string = "FF"; for (int i = 0; i < ITERATIONS; i++) { world.clearAll(); kara.setPosition (0, world.getSizeY()-1); interpret (string, 3); tools.sleep(500); string = replace (string, GENERATOR_FIND, GENERATOR_REPLACE); } world.clearAll(); kara.setPosition (0, world.getSizeY()-1); interpret (string, 3); }