![]() |
Re: Mini-Programmiersprache
Das mit den *.dfm Dateien tut mir leid, Hilfe gibt es, hab ich aber vergessen (So bin ich nun mal).
Das mit den Änderungen ist mir bekannt, bin aber noch nicht dazu gekommen, es zu ändern. Hier eine kleine Befehlsreferenz: oben, unten, rechts, links: Erklärt sich von selbst. drehelinks, dreherechts: Nicht schwer zu erkennen. vorwärts: Ein Schritt in die momentane Richtung des Roboters. rückwärts: Ein Schritt gegen die momentane RIchtung des Roboters. bausteinlegen: Legt einen Baustein bausteinaufheben: Hebt einen Baustein auf. wenn <bedingung> dann: Bedingungsabfrage. ~wenn: Bedingung Ende tue x mal: Ähnlich wie for I:=1 to x do ~tue: Ende der Tue-Schleife solange <Bedingung>: Solange Bedingung wahr wiederhole. bis <Bedingung>: Solange Bedingung nicht ist wahr wiederhole. ~Schleife: Ende der solange/bis-Schleife istoben, istunten, istrechts, istlinks: Bedingungen, sind wahr wenn die Richtung stimmt. ístwand: Wenn der Roboter vor dem Ende des Bereichs steht, gibt diese Bedingung wahr zurück. istbaustein: Steht der Roboter vor einem Baustein, gibt diese BEdingung wahr zurück. nicht: Kehrt das ergebnis der nachfolgenden BEdingung um. Auto-Vervollständigung geht mit Strg+Leertaste. Zu der Frage, wozu drehelinks/dreherechts gut ist: Beispiel: Man will testen, ob links vom Roboter ein Baustein ist. Code dazu: bis istlinks tue drehelinks ~schleife EDIT: Das mit dem /Tue und ~Tue muss ich auch noch ändern. Zuerst hieß es /Tue, aber weil das mit dem Syntaxhighlighting so nicht richtig hinhaut, hab ich es in ~Tue umbenannt. Ich sagte ja schon, dass es buggy und noch lange nicht fertig ist. |
Re: Mini-Programmiersprache
Hier ist das File inkl. HTML-Hilfe(Hier stehen die Blockende-Elemente immer noch mit dem Prefix "/" drin, das ist jetzt "~", also nicht "/wenn" sondern "~wenn"). Die Dfm-Dateien sind jetzt auch drin.
[edit=Sharky]Anhang auf Wunsch entfernt. Mfg, Sharky[/edit] |
Re: Mini-Programmiersprache
So, hab's mir jetzt mal angeguckt:
Bei diesem Code (Voraussetzung Roboter ganz oben links, Stein in 2. Reihe von oben)
Delphi-Quellcode:
Hängt dein Programm ewig in der letzten Schleife.
unten
solange nicht istrechts tue dreherechts ~Schleife solange nicht istbaustein tue vorwärts ~Schleife Bausteinaufheben solange nicht istwand tue rückwärts ~schleife Außerdem finde ich es extrem nervig, dass man a) Ziegel und b) den Roboter im Entwicklungsmodus nicht einfach setzen kann. Man muss sich immer erst ein Programm schreiben, das den Roboter in die gewünschte Position bewegt und dann an dieser position den Ziegel ablegt. Außerdem würde ich mir noch weitere Abfragen wünschen, z.B., wo sich der Roboter gerade befindet. Also alle Kästchen als 2-Dimensionalen Array und prüfen, welche Koordinaten der Roboter gerade hat. Ein zweiter Roboter wäre auch nicht schlecht. Man könnte sie dann ansteuern mit
Delphi-Quellcode:
Ansosnten nicht schlecht :thumb:
Roboter1.unten
Roboter2.oben |
Re: Mini-Programmiersprache
Das das Prog in der letzten Schleife hängt, ist völlig klar. Du musst das so schreiben:
Code:
mit istwand wird gecheckt, ob der Robo vor einer Wand steht, wenn du ihn rückwärts bewegst, kommt er nie vor eine Wand. Wenn du auf die "Welt" des Roboters klickst, kannst du ihn mit den Pfeiltasten steuern (in der Entwurfszeit) und ihn so an die Stelle bringen, an die du ihn haben willst. Mit den Icons in der Werkzeugleiste geht das auch. Mit Z legst du einen Baustein, mit A hebst du ihn auf. Mit L drehst du ihn links, mit R rechts.
drehelinks //Das ist nur dafür da, damit gleich am Anfang gecheckt wird, ob der Robo schon mit dem
drehelinks //Rücken zur Wand steht solange nicht istwand //Steht der Robo an der Wand-Schleife vorwärts ~schleife drehelinks drehelinks Ach ja und das mit der Abfrage wird nicht hinhauen, da man um die Abfrage zu speichern Variablen bräuchte, die ziemlich schwer ins Programm einzubauen sind (Also zur Laufzeit benutzerdefinierte Variablen deklarieren? Ich hab k.a. wie das geht.) Es gibt noch 3 Befehle, stehen nicht in der Hilfe und werden auch nicht gehighlightet. §d für d entweder 'o','u','l','r' einsetzen (ohne Hochkommas). Gibt dem Robo die Richtung d $xy setzt den robo an die Pos x,y (oben-links ist pos 0,0, unten rechts ist pos 9,9) %xy schiebt den robo um x nach rechts und um y nach unten (Funzt leider nicht mit negativen Zahlen) ACHTUNG! Diese Befehle sind extrem fehlerfreudig! Sie funktionieren nur mit den korrekten Parametern, ansonsten kann es sein, dass der Roboter komplett verschwindet oder das Programm abschmiert. Zwischen den Parametern und dem Anfangszeichen auf keinen Fall Leerzeichen einfügen: Beispiel: §u Setzt den Robo nach unten §1 oder §d oder § u Nichts passiert oder der Robo verschwindet vom Feld. $11 Setzt den Robo auf pos 1,1 $ 11 oder $ag Nichts passiert. %11 Schiebt den Robo um 1,1 nach unten-rechts % 11 oder %ab Nichts passiert. |
Re: Mini-Programmiersprache
Hi,
:thumb: gefällt mir sehr gut. Was du noch machen könntest ist, dass man auch eine Zeile freilassen kann :). Mein erstes Script:
Code:
Tue 10 mal
Solange nicht istUnten drehelinks ~schleife Solange nicht istWand Vorwärts ~schleife drehelinks Solange nicht istWand Vorwärts ~schleife drehelinks Solange nicht istWand Vorwärts ~schleife drehelinks Solange nicht istWand Vorwärts ~schleife drehelinks ~tue |
Re: Mini-Programmiersprache
Zitat:
Okay, dir ist das alles klar. Aber du musst ja davon ausgehen, dass ein eventueller User die ganze Entwicklung nicht mitgemacht hat und somit nicht über alle Befehle Bescheid weiß. :wink: Zitat:
Zitat:
Genau das selbe mit den Ziegeln. Ich muss vor meinem eigentlichen Programm den Roboter erst über die ganze Fläche jagen und ZIegel austeilen, bevor ich Mit dem programm beginnen kann, das die Zeigel wieder einsammelt. Gibt es in deiner "Programmiersprache" auch Variablen, anhand derer ich gleiche Bewegungsabläufe darstellen kann. Bsp: statt:
Delphi-Quellcode:
besser
unten
unten unten unten unten
Delphi-Quellcode:
solange i <> 5 tue
unten inc(i) ~tue Und zu aller letzt stellt sich mir die Frage, ob Zitat:
Ist aber nur meine Meinung! :mrgreen: |
Re: Mini-Programmiersprache
Die Idee gefällt mir gut aber besser wäre es gewesen das noch ein bischen zu erweitern, z.b. in den 3D Raum mit OpenGL, das würde die Sache komplizierter machen!
|
Re: Mini-Programmiersprache
Ich hab null Ahnung von 3D Programmierung und eigentlich ist es schon etwas 3D, denn es lassen sich 10 Bausteine übereinaner legen, und ich kann es auch so erweitern, dass der Roboter nur einen Baustein hinauffahren kann und auch nur einen herab.
Aber wenn mir jemand OpenGL erklärt erweitere ich es gerne! Wie gesagt, die Sourcefiles sind jetzt alle dabei und ich würde mich freuen, wenn jemand sie sich ansieht und mir ein paar Verbesserungsvorschläge gibt, denn wie gesagt, ich bin 14 und kenne niemanden, der Ahnung von Delphi hat. Mein ganzes Wissen stammt von Webseiten und der Delphi Hilfe. @gordan_freeman: Viele kennen sich überhaupt nicht mit Konzepten der Programmierung aus. Dafür ist solch eine Sprache vielleicht ganz gut, auch um Grundformen von Bedingungen und Schleifen kennenzulernen. Aber wenn das Programm deiner Meinung nach unnötig ist, so kann ich wenigstens bei der Programmierung lernen. Variablen gibt es nicht, da ich keine Ahnung habe, wie man eine Benutzerdefinierte Variable auslesen kann´, und auch nicht, wie man auf Benutzereingabe checken kann, ob eine Variable gleich einer anderen ist. Statt
Code:
schreib einfach
unten
unten unten unten unten
Code:
Hättest du die Hilfe gelesen, wüsstest du das auch.
tue 5 mal
unten ~tue Achja und @Spider: Wegen der Leerzeile: Eigentlich müsste das gehen, ich muss mir den Sourcecode nochmal ansehen, was denn da schon wieder faul ist. Noch ein Code:
Code:
// Programm oben-links
// Der Roboter wird nach oben-links gesetzt (Position 0,0) bis istlinks drehelinks ~schleife bis istwand links ~bis dreherechts bis istwand oben ~schleife dreherechts dreherechts |
Re: Mini-Programmiersprache
Dafür machst das nicht schlecht, aber erstmal ein Tipp: Kommentieren, kommentieren, kommentieren!!! Auch für dich!!
Zweitens: Für OpenGL gibt es genügend Tutorials auf: ![]() Variablen könntest du mit Dynamischen Array Realisieren!
Delphi-Quellcode:
Die Variable könntest du z.b. durch '§' oder '%' erkennbar machen!
RobVariablenInteger: array of Integer;
RobVariablenIntegerName: array of String; P.s.: Mach doch Goto wenigstens rein, wenn es schon keine Funktionen und Proceduren gibt, allerdings gibts auf der OpenGL Seite auch ein Tutorial über Skriptsprachen! |
Re: Mini-Programmiersprache
Jetzt nurmal so vor mich hin getippt, ohne auf syntax zu achten:
Delphi-Quellcode:
So müsste dann eine Variablenwertzuweisung funktionieren.
if cmdunknown then
for I:=0 to length(vars) do begin if leftstr(cmd,length(vars[I]))=vars[I] then varvalue[I]:=strtoint(midstr(length(vars[I])+1)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz