![]() |
Mini-Programmiersprache
Wie ich schon in einem anderen Thread erwähnt habe, ich bastle gerade an einer Mini-Programmiersprache im Stil von Roboter Karol, für komplette Programmieranfänger, zum Lernen von ersten Programmierideen. Ich habe aber das Gefühl, das meine Algorithmen alles unnötig komplizieren. Könnte mir bitte jemand ein paar Codeschnipsel und Anregungen dazu geben?
|
Re: Mini-Programmiersprache
:gruebel:
Codeschnipsel wozu? Apfelbaumzüchtung? :lol: Du musst schon bitte ein paar Informationen mehr geben. Warum hast du das Gefühl dass die Algorithmen alles verkomplizieren? Wie gesagt...zeig ein bisschen Source, dann können wir auch helfen. Greetz alcaeus |
Re: Mini-Programmiersprache
Hallo,
wenn ich richtig verstanden habe, hast du dir eine Programmiersprache ausgedacht und willst diese jetzt compilieren/interpretieren? Dann müssten wir auch erstmal etwas über diese Sprache erfahren; wie sieht sie aus? Wahrscheinlich willst du sie interpretieren? Hier im Forum wurde auch schon einiges zum Thema Parsen gesagt. Wenn du dann noch schreibst, wo es hakt, dann können wir auch sicher einiges dazu beitragen, dass es irgendwann läuft... Bis dann Peter |
Re: Mini-Programmiersprache
Robot Karol ist eigentlich auch keine Programmiersprache, mit der man Anwendungen erstellt, sondern, der Quellcode wird in der Anwendung, also der IDE ausgeführt und sonst nirgends. Das einzige was passiert, ist dass der Roboter auf einer Ebene rumläuft. Willst du soeine Programmiersprache, oder eine, bei der am Ende EXE-Dateien rauskommen?
|
Re: Mini-Programmiersprache
Zugegeben, es ist nicht wirklich eine Programmiersprache.
Ich will wirklich nur, dass der Roboter etwas rumläuft, das reicht mir vorerst an Schwierigkeit. Das ganze läuft ungefähr so ab: Zeile für Zeile wird ausgelesen, wird überprüft, ob Befehl vorhanden, ansonsten ein Syntaxfehler, wenn Befehl vorhanden dann (if-Abfrage für jeden Befehl) zugeordneten Befehl ausführen. Schlimm wirds aber erst mit Schleifen und Bedingungen. Da werfe ich dann mit Arrays um mich. Ein "wenn" erhöht die Variable "condsopen" um 1, ein ~wenn verringert sie um 1 usw... Ich denke, da gibt es bessere Möglichkeiten. |
Re: Mini-Programmiersprache
Hallo,
Zitat:
Dazu brauchst du: -die möglichkeit von "Goto"-Funktionen(Jumps) -und eine interne Variable Ein Beispiel (weis, ist nicht wirklick Assembler, für die Demonstartion reichst aber):
Delphi-Quellcode:
Zu diesem Thema gibt es im Forum aber noch andere Beiträge. Alternativ könntest du dir ein ganz simples Delphi Porgramm schreiben und dort dir den Assembler-Code anzeigen lassen.
09:var counter //lokale Variable deklarieren
10:if counter > endcount then goto 14; //die überprüfung ob die Schleife schon fertig ist 11:{tu was in einer Schleife} 12:inc(counter); //Schleifenvariable um eins erhöhen 13:goto 10; 14:{tu das nach der Schleife} |
Re: Mini-Programmiersprache
Ich habe null Ahnung von Assembler. Ich kenne dort nur den Befehl mov, weis nicht die Parameter, habe null Ahnung von der Syntax und weis auch nicht, was der Befehl bewirkt. :mrgreen:
EDIT: Es funktioniert ja auch, aber eben so unübersichtlich... |
Re: Mini-Programmiersprache
Vielleicht liegt das Problem dann darin, dass Du kein ordentliches Konzept hast, sondern wild drauf los
gecodet hast. Das kommt ja bekanntlich auch bei den Besten mal vor... ;) Falls Du doch ein Konzept hast kannste das ja mal hochladen. Wird sicher viele interessieren wie man sowas anfangen kann. Ausserdem kann dann über die Umsetzung besser nachgedacht werden. |
Re: Mini-Programmiersprache
Such mal im Forum ein bsichen durch die Gegend. Vor ein paar Monaten hat mal jemand eine eigene Sprache vorgestellt, die die einfachsten Befehle beherscht hat. Da kannst du vielleicht was lernen.
|
Re: Mini-Programmiersprache
|
Re: Mini-Programmiersprache
Zitat:
Heute nachmittag lade ich das file mal hoch. Wie gesagt, buggy, aber es läuft. Aber ich warne euch: Ich habe keine Einrückungen, kommentiere nie und mein Code ist ein einziger Flickenteppich, den wohl nur ich noch verstehe... ...zumindest ein bisschen... :mrgreen: |
Re: Mini-Programmiersprache
Zitat:
|
Re: Mini-Programmiersprache
Wäre dir dankbar für einen Link...
|
Re: Mini-Programmiersprache
|
Re: Mini-Programmiersprache
Danke!
|
Re: Mini-Programmiersprache
Hier ist mein Programm, inlusive Source. Habs auch noch mit dem Code-Formatter formatiert.
[edit=Sharky]Anhang auf Wunsch entfernt. Mfg, Sharky[/edit] |
Re: Mini-Programmiersprache
Also:
1. Woher weiss ich, welche Befehle ich eingeben muss, damit dieser "Roboter" was macht? 2. Der Hilfe-Button funktioniert auch nicht. 3. Wozu ist die "Drehen"-Funktion da, wenn der Roboter sich bei einem Klick auf 'nen Pfeil sowieso in Pfeilrichtung bewegt? 4. Hab keine Änderung im Quellcode vorgenommen, soll diese Änderung aber trotzdem speichern.. Diese Liste lässt sich wahrscheinlich noch weiter fortsetzen, aber ich schlage vor, du überarbeitest das ganze nochmal! |
Re: Mini-Programmiersprache
Hi,
beim Quellcode fehlen die DFM Dateien |
Re: Mini-Programmiersprache
könntest du uns bitte sagen, wie die befehle, die den roboter steuern, heißen
und wie schon erwähnt: die dfm-dateiem fehlen |
Re: Mini-Programmiersprache
Nachdem ich entdeckt habe, dass das Programm eine Codevervollständigung hat, kann ich euch mal einweihen :zwinker: :
Die Befehle lauten einfach wie in dem Menü, also z.B.
Code:
Eine Hilfe wäre aber vielleicht nicht schlecht, gerade da man bei "höherer" Syntax wie Schleife eigentlich raten muss.
Unten
Drehelinks Und es ist ja wohl ein Witz, dass in der Codevervollständigung "/Tue" steht, es so verollständigt wird und man am Ende nun "~Tue" schreiben muss. Ist auf dem Weg zu einem netten Programm, aber eine Alpha-Version ohne Hilfe ist nicht wirklich der Bringer. |
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; |
Re: Mini-Programmiersprache
So genau habe ich mir deinen Quelltext nicht angeguckt aber ich meinte das so ungefähr:
Delphi-Quellcode:
Frag mich notfalls mal in ICQ!
if leftstr(cmd,1) = '%' then
for i:=0 to High(RobVariablenIntegerName) do begin if RobVariablenIntergerName[i] = cmd then begin // blablabla end else begin // Dein Array um eine Variable erweitern end; P.s. da fällt mir ein das wenn du das so machst eigentlich einen Schritt gemacht hast deine Sprache OO zu machen, dann wären es nur noch wenig Schritte bis zu der nexten ebene! |
Re: Mini-Programmiersprache
Gute Idee, danke!
Achja, ICQ hab ich nicht. OO heißt objekt-orientiert, oder? Und noch ne Frage: Wie mache ich eine .pas Unit zu einer .dcu Datei, die ich ins Lib Verzeichnis packen kann? |
Re: Mini-Programmiersprache
Zitat:
Egal! Ja! Frag mich nicht, fände es aber trotzdem nicht schlecht wenn du das ganze doch 3D machst, zum Thema 3D gibts genügend Tutorials auf ![]() Du könntest dann mithilfe deiner Skriptsprache einige Interresante Dinge Realisieren, die im 2D Raum nicht möglich sind! |
Re: Mini-Programmiersprache
Was heißt NP?
Das OpenGL Zeug schau ich mir mal an, ich würde es natürlich gerne in 3D machen, aber ich habe damit keine Erfahrung, und ich habe auch nur ein ganz billiges 3D Programm, ich wüsste gar nicht, wie ich 3D Modelle erstelle. Zitat:
|
Re: Mini-Programmiersprache
Zitat:
Deiner Fantasie sind hinsichtlich dieser Ideen keine Grenzen gesetzt. |
Re: Mini-Programmiersprache
Zitat:
![]() |
Re: Mini-Programmiersprache
Ich raff bei
![]() Ich weiß auch nicht, wie man z.B. auf einem bestimmten Bereich eines Formulars eine 3D Welt zeichnen kann. Kann mir das bitte jemand erklären? |
Re: Mini-Programmiersprache
Ich wieß nicht, ob es zu empfehlen ist, aber schau dir mal
![]() |
Re: Mini-Programmiersprache
Rate dir von GLScene ab, falls etwas nicht funktioniert lade dir unter Files ein vorgefertigtes Projekt runter, und keine Angst, ich kann es durchaus verstehen wenn du am Anfang nichts raffst!
Bei glCreateWND handelt es sich vermutlich um die API Version (Lektion1), ich rate dir von dieser bei deinem Programm ab! Wie gesagt lade dir ein VCL beispiel runter, dort wirst du schon sehen wie es geht, notfalls helfe ich dir! |
Re: Mini-Programmiersprache
Liste der Anhänge anzeigen (Anzahl: 1)
Wäre für Hilfe sehr dankbar!
Ich danke euch allen dafür, dass ich mir so intensiv helft. Ich habe jetzt auch schon eine Variablenunterstützung eingebaut, ein Beispielcode, der dabei ist, erklärt das ganze. Leider ist +-*/ nicht drin, das krieg ich vielleicht mit einem Math-Parser hin. Ich habe diesmal die Source und die Hilfe weggelassen, da die Source sich eh bald wieder ändert, und die Hilfe eh total veraltet ist. Auch die gewünschte Setze Roboter/Setze Ziegel/Hebe Ziegel auf Funktion zur Entwurfszeit ist integriert. OpenGl versteh ich immer noch nicht. Hab mir jetzt ein paar Beispiele runtergeladen, aber ich müsste immer noch wissen, wie ich speziell in dem von mir definierten Bereich (der Roboterwelt) die 3D Welt zeichnen kann. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 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