<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
	<channel>
		<title>BlitzBasic Portal Worklogs - Q</title>
		<link>https://www.blitzforum.de/worklogs/447/</link>
		<description>Worklog von SEDM</description>
		<language>de</language>
		<managingEditor>mail@blitzforum.de</managingEditor>
		<webMaster>mail@blitzforum.de</webMaster>
		<pubDate>Fri, 25 Mar 2011 21:15:41 +0100</pubDate>
		<lastBuildDate>Fri, 25 Mar 2011 21:15:41 +0100</lastBuildDate>

		<item>
			<title>Orks im Quelltext</title>
			<link>https://www.blitzforum.de/worklogs/447/#3226</link>
			<guid>https://www.blitzforum.de/worklogs/447/#3226</guid>
			<author>Farbfinsternis</author>
			<description>Es gibt immer wieder Sachen die man beachten muss welche eigentlich Bl&amp;ouml;dsinn sind, die aber dennoch nicht verboten werden sollten. Beispielsweise ein &amp;quot;Then&amp;quot; am Ende einer Zeile ... Dieses wird nun von Q ignoriert, Ihr d&amp;uuml;rft es also weiterhin sinnfrei an einen mehrzeiligen Vergleich h&amp;auml;ngen.&lt;br /&gt;&lt;br /&gt;Eine &amp;Auml;nderung gibt es bei den Types. Das Schl&amp;uuml;sselwort f&amp;uuml;r eine Methode heisst nun nicht mehr &amp;quot;Method&amp;quot; sondern &amp;quot;Function&amp;quot;. Da ich Types nach &amp;quot;var myType = function(){&amp;quot; &amp;uuml;bersetze ist ohnehin jede Methode global.&lt;br /&gt;&lt;br /&gt;Desweiteren werden nun auch nicht deklarierte Variablen und Funktionen erkannt und als Fehler bei Benutzung ausgegeben.&lt;br /&gt;&lt;br /&gt;Um m&amp;ouml;glichst viele Syntaxfehler zu erkennen und um die Quelle bestm&amp;ouml;glichst zu &amp;uuml;bersetzen habe ich nun Stacks f&amp;uuml;r Variablen, Funktionen, Types und Type-Methoden eingef&amp;uuml;hrt. Auf der Strecke geblieben ist der lesbare JavaScript Code. Der wird nun so erzeugt dass er funktioniert und gut komprimierbar ist, wer lesbaren JS Code ben&amp;ouml;tigt darf jBB gern direkt verwenden.&lt;br /&gt;&lt;br /&gt;Alles in Allem ist ein Release noch nicht in Sicht. Erst wenn auch die komplexeste und die bekloppteste Zeile interpretiert oder ignoriert wird, wird es ein Release geben.&lt;br /&gt;</description>
			<pubDate>Fri, 25 Mar 2011 21:15:41 +0100</pubDate>
		</item>

		<item>
			<title>If funktioniertNicht = True Then crap = True</title>
			<link>https://www.blitzforum.de/worklogs/447/#3223</link>
			<guid>https://www.blitzforum.de/worklogs/447/#3223</guid>
			<author>Farbfinsternis</author>
			<description>Ich habe noch ein paar Probleme mit den Vergleichen. Es ist echt irre wieviele KOmbinationen man mit Basic erzeugen kann.&lt;br /&gt;&lt;br /&gt;Folgendes Programm...&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]rem&lt;br /&gt;	Q Script&lt;br /&gt;	Mauszeiger im Canvas&lt;br /&gt;endrem&lt;br /&gt;&lt;br /&gt;public pointer = LoadImage(&amp;quot;media/pointer.png&amp;quot;)&lt;br /&gt;&lt;br /&gt;Function Init() As INIT&lt;br /&gt;	Graphics(800, 600)&lt;br /&gt;	ClsColor(90, 120, 200)&lt;br /&gt;	HidePointer()&lt;br /&gt;EndFunction&lt;br /&gt;&lt;br /&gt;Function Game() As MAIN&lt;br /&gt;	Cls()&lt;br /&gt;	&lt;br /&gt;	public mx = MouseX()&lt;br /&gt;	public my = MouseY()&lt;br /&gt;	&lt;br /&gt;	DrawImage(pointer, mx, my)&lt;br /&gt;	&lt;br /&gt;	If mx &amp;gt; 400 Then &lt;br /&gt;		DrawText(&amp;quot;Halbzeit&amp;quot;, mx, my)&lt;br /&gt;	EndIf&lt;br /&gt;EndFunction[/syntax]&lt;br /&gt;&lt;br /&gt;... erzeugt z.Z. diese Ausgabe ...&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('0')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('0')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox0&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('0');&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;lt;title&amp;gt;Hallo Welt&amp;lt;/title&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;lt;script type='text/javascript' src='http&amp;#58;//www.sedm.de/jbb/js/jbb.js'&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;&lt;br /&gt;var pointer=LoadImage&amp;#40;&amp;quot;media/pointer.png&amp;quot;&amp;#41;;&lt;br /&gt;&lt;br /&gt;function Init&amp;#40;&amp;#41;&amp;#123;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;Graphics&amp;#40;&amp;quot;jBBCanvas&amp;quot;, Game, 30&amp;#41;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;ClsColor&amp;#40;90,120,200&amp;#41;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;HidePointer&amp;#40;&amp;#41;;&lt;br /&gt;&lt;br /&gt;&amp;#125;;&lt;br /&gt;&lt;br /&gt;function Game&amp;#40;&amp;#41;&amp;#123;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Cls&amp;#40;&amp;#41;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;var mx=MouseX&amp;#40;&amp;#41;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;var my=MouseY&amp;#40;&amp;#41;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;DrawImage&amp;#40;pointer,mx,my&amp;#41;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;if&amp;#40;mx&amp;gt;400&amp;#41;&amp;nbsp; ;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;DrawText&amp;#40;&amp;quot;Halbzeit&amp;quot;,mx,my&amp;#41;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;#125;&lt;br /&gt;&lt;br /&gt;&amp;#125;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;body onLoad=&amp;quot;Init&amp;#40;&amp;#41;;&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;canvas id='jBBCanvas' width='800' height='600' oncontextmenu=&amp;quot;return false;&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;Sorry, your browser doesn't support HTML5 Canvas.&lt;br /&gt;&lt;br /&gt;&amp;lt;/canvas&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Wie man sieht ist der &amp;quot;If Block&amp;quot; jetzt nicht so ganz richtig umgesetzt. Aber wo ein Problem ist lauert auch schon irgendwo die L&amp;ouml;sung.&lt;br /&gt;&lt;br /&gt;Desweiteren sieht man am obigen Q Script dass sich das Variablen Handling leicht von BMax unterscheidet. Prinzipiell ist eine Variable immer global (public). Nur in Types kann man bestimmen dass eine Variable privat (private) ist und nur Methoden eines Types darauf zugreifen k&amp;ouml;nnen. In &amp;quot;Objects&amp;quot; ist es vollkommen egal ob man eine Variable als &amp;quot;private&amp;quot; oder &amp;quot;public&amp;quot; definiert, in &amp;quot;Objects&amp;quot; sind Variablen immer &amp;ouml;ffentlich.&lt;br /&gt;&lt;br /&gt;Zudem funktionieren nun endlich Default-Werte f&amp;uuml;r Funktionen und Methoden zuverl&amp;auml;ssig. Leider l&amp;auml;uft das ableiten von Klassen noch nicht, aber auch das ist nur eine Baustelle die es zu beackern gilt.&lt;br /&gt;&lt;br /&gt;</description>
			<pubDate>Mon, 21 Mar 2011 18:55:39 +0100</pubDate>
		</item>

		<item>
			<title>Zielgerade</title>
			<link>https://www.blitzforum.de/worklogs/447/#3219</link>
			<guid>https://www.blitzforum.de/worklogs/447/#3219</guid>
			<author>Farbfinsternis</author>
			<description>Mittlerweile werden ca. 90% eines Q Programms nach JavaScript &amp;uuml;bersetzt. Im letzten Eintrag habe ich (nach erneutem Lesen) den Unterschied zwischen &amp;quot;Type&amp;quot; und &amp;quot;Object&amp;quot; nur unzureichend beschrieben. Lasst mich das jetzt nachholen.&lt;br /&gt;&lt;br /&gt;W&amp;auml;hrend man von einem Type beliebig viele Instanzen erzeugen kann, ist ein Object statisch. Man kann nicht mittels &amp;quot;new&amp;quot; eine Instanz von diesem Objekt bilden. Es ist sozusagen die Konstante unter den Klassen. Vorteil ist zum einen dass Objects wesentlich schneller sind als Types, und zum Anderen dass man sie ohne Umwege direkt per Ajax an externe Scripts schicken kann. Zu diesem Zweck ist bereits das AddOn &amp;quot;jBBAjax&amp;quot; in Arbeit, dieses verwendet jedoch jQuery als Grundlage.&lt;br /&gt;Wie, wann und warum sollte man also ein Object anstelle eines Types verwenden?&lt;br /&gt;&lt;br /&gt;Erstens: Wenn Du wei&amp;szlig;t dass Du nur eine einzige Instanz eines Types ben&amp;ouml;tigen wirst, solltest Du ein Object verwenden ... &lt;br /&gt;&lt;br /&gt;Zweitens: Wenn Du objektorientiert per Ajax mit einem Server kommunizieren willst solltest Du ein Object verwenden&lt;br /&gt;&lt;br /&gt;Ein Object wird mit &amp;quot;Object [nameDesObjekts]&amp;quot; definiert (Objekte k&amp;ouml;nnen nicht deklariert werden, sie sind mit ihrem Erscheinen definiert) und mit &amp;quot;EndObject&amp;quot; geschlossen. Der Zugriff auf die Eigenschaften und Methoden erfolgt dann &amp;uuml;ber &amp;quot;[nameDesObjekts].Eigenschaft/Methode&amp;quot;&lt;br /&gt;&lt;br /&gt;Beispiel:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox1&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('1')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox1&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('1')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox1&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('1');&quot;&gt;&lt;br /&gt;Object myObject&lt;br /&gt;&amp;nbsp; &amp;nbsp; Local x = 0&lt;br /&gt;&amp;nbsp; &amp;nbsp; Local y = 0&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Function inkX&amp;#40;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; x++&lt;br /&gt;&amp;nbsp; &amp;nbsp; EndFunction&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Function inkY&amp;#40;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; y++&lt;br /&gt;&amp;nbsp; &amp;nbsp; EndFunction&lt;br /&gt;EndObject&lt;br /&gt;&lt;br /&gt;myObject.inkX&amp;#40;&amp;#41;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Ich hoffe die Objekt-Geschichte nun einigerma&amp;szlig;en klarer gemacht zu haben &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt;&lt;br /&gt;</description>
			<pubDate>Thu, 17 Mar 2011 21:14:40 +0100</pubDate>
		</item>

		<item>
			<title>Funktionen, Methoden, Datentypen</title>
			<link>https://www.blitzforum.de/worklogs/447/#3215</link>
			<guid>https://www.blitzforum.de/worklogs/447/#3215</guid>
			<author>Farbfinsternis</author>
			<description>Mittlerweile werden schon weite Teile eines Q Programms &amp;uuml;bersetzt und viele m&amp;ouml;gliche Syntax-Fehler werden erkannt und ausgegeben. F&amp;uuml;r das Parsen von Funktionen und Methoden wird nun dieselbe Methode in der Klasse &amp;quot;TQ&amp;quot; verwendet. Ein weiteres Detail ist die Tatsache dass Datentypen f&amp;uuml;r Variablen nun gesichert werden. Da Q typenlos ist (im Moment) werden diese nur erkannt und gesichert, aber noch nicht verwendet. Um Q mit Datentypen auszustatten muss der erzeugte JavaScript Code erheblich erweitert werden und es muss wesentlich defiziler ge-parsed werden als dies derzeit der Fall ist.&lt;br /&gt;&lt;br /&gt;Die jetzt implementierten Datentypen sind experimentell und bewirken noch absolut gar nichts, sie sehen aber aus wie von BlitzMax bekannt:&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Function myFunc(x:Int = 0, y:Int = 0, line:String = &amp;quot;Hello World&amp;quot;)[/syntax]&lt;br /&gt;&lt;br /&gt;Default-Werte f&amp;uuml;r Funktionsparameter funktionieren bereit hervorragend (soetwas gibt es in JavaScript nicht).&lt;br /&gt;&lt;br /&gt;Neu ist die M&amp;ouml;glichkeit JSON Objekte aus JavaScript in Q zu nutzen:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox2&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('2')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox2&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('2')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox2&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('2');&quot;&gt;&lt;br /&gt;Object myObject&lt;br /&gt;&amp;nbsp; &amp;nbsp; x = 10&lt;br /&gt;&amp;nbsp; &amp;nbsp; y = 20&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Function myFunc&amp;#40;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DrawText&amp;#40;&amp;quot;Hallo Welt&amp;quot;, Self.x, Self.y&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp; EndFunction&lt;br /&gt;EndObject&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Der Unterschied zwischen einem Object und einem Type ist dass f&amp;uuml;r ein Object kein &amp;quot;Extends&amp;quot; existiert und das man Objects direkt an PHP schicken kann um dort die Daten auszuwerten.&lt;br /&gt;&lt;br /&gt;Ich hoffe noch in dieser Woche ein Release bringen zu k&amp;ouml;nnen ... bis dahin: have fun with jBB &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt;&lt;br /&gt;</description>
			<pubDate>Wed, 16 Mar 2011 20:41:22 +0100</pubDate>
		</item>

		<item>
			<title>Mehr Passes</title>
			<link>https://www.blitzforum.de/worklogs/447/#3213</link>
			<guid>https://www.blitzforum.de/worklogs/447/#3213</guid>
			<author>Farbfinsternis</author>
			<description>Es hat nicht gen&amp;uuml;gt einen Source in zwei Passes zu analysieren. Au&amp;szlig;erdem habe ich den Automatismus entfernt der ablief sobald ich das Objekt &amp;quot;TQ&amp;quot; initialisiert hatte, stattdessen wird nun jeder Pass im Hauptprogramm aufgerufen. Das hat jetzt keine programmatischen Gr&amp;uuml;nde, sondern wurde notwendig weil mir hier unter Linux nur die Standard IDE zur Verf&amp;uuml;gung steht und diese eigentlich v&amp;ouml;llig ungeeignet ist um mehr damit zu machen als einen Brief an die Oma zu schreiben.&lt;br /&gt;&lt;br /&gt;Im ersten Pass werden Kommentare und Leerzeilen entfernt, es werden eindeutige Bezeichner bereits umgewandelt weil sie allein auf einer Zeile stehen m&amp;uuml;ssen (EndIf, Wend, EndFunction, EndMethod, etc.) und Ausdr&amp;uuml;cke die durch ein Semikolon (&amp;quot;;&amp;quot;) getrennt auf einer Zeile stehen werden auf mehrere Zeilen verteilt.&lt;br /&gt;Letzterer Fall wird zuerst durchgef&amp;uuml;hrt so dass ein &amp;quot;While a == 1; b++; Wend&amp;quot; auch weiterhin funktioniert.&lt;br /&gt;&lt;br /&gt;Der zweite Pass pr&amp;uuml;ft ob grobe Syntax-Fehler vorliegen. Bspw. die Definition einer Funktion ohne Klammern, oder das Fehlen der &amp;quot;INIT&amp;quot; und/oder der &amp;quot;MAIN&amp;quot; Funktionen.&lt;br /&gt;&lt;br /&gt;Der dritte Pass parsed jede einzelne Zeile und pr&amp;uuml;ft dabei ob Schl&amp;uuml;sselworte oder jBB-Funktionen vorliegen. Ist dies der Fall werden diese aufgeteilt und eine neue Zeile erzeugt die dem JS Syntax entspricht.&lt;br /&gt;&lt;br /&gt;Desweiteren gab es Spezialf&amp;auml;lle in denen ich Code doppelt hatte. So glich der Code eine Methode zu parsen dem eine Funktion zu parsen so sehr dass ich diese F&amp;auml;lle zusammen gefasst habe. Funktionen, Types und Methoden werden nun von derselben Methode behandelt (der globale State ist nur anders) um doppelten Code zu vermeiden.&lt;br /&gt;&lt;br /&gt;Letzte Neuerung ist die Tatsache dass ich nun jede Zeile aufteile und nachschaue was passiert, auch wenn keine Q oder jBB Funktionen enthalten sind. Dies soll eine genauere Syntax Pr&amp;uuml;fung erm&amp;ouml;glichen um mehr Fehler abzufangen.&lt;br /&gt;&lt;br /&gt;Da ich keinen Compiler baue sondern nur einen MetaCompiler, ist es mir derzeit unm&amp;ouml;glich Kontext-Fehler zu entdecken. Zwar kann ich meckern wenn eine Funktion in einer Funktion definiert wird, oder das eine Klammer fehlt ... aber wenn irgendwo eine Variable ohne vorherige Deklaration eingef&amp;uuml;hrt wird geht das v&amp;ouml;llig unter. Eventuell baue ich noch einen Stack ein der es mir gestattet derartige Dinge zu entdecken. Auch eine Funktion ohne EndFunction wird nicht entdeckt. &lt;br /&gt;&lt;br /&gt;Es gab einige Zeit eine Diskussion dar&amp;uuml;ber ob es m&amp;ouml;glich w&amp;auml;re BMax Code nach jBB zu konvertieren. Mit Q w&amp;auml;re das prinzipiell m&amp;ouml;glich. Es m&amp;uuml;sste die Init- und die Main-Funktion entsprechend gekennzeichnet werden. Erste Idee w&amp;auml;re es dies &amp;uuml;ber einen Kommentar zu tun:&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]Function myFunc() ' As Init[/syntax]&lt;br /&gt;Das immer noch bestehende Problem ist aber dass nicht jeder beliebige BMax Code konvertiert werden kann weil jBB viele Dinge nicht unterst&amp;uuml;tzt oder Dinge anders gehandhabt werden. Allein ein Array zu erzeugen sieht in jBB v&amp;ouml;llig anders aus als in BMax und Q folgt JavaScript und nicht BMax.&lt;br /&gt;&lt;br /&gt;Aber gut. Q trennt jBB von JS und vielleicht lassen sich L&amp;ouml;sungen finden um Q weiter an BMax anzun&amp;auml;hern.</description>
			<pubDate>Tue, 15 Mar 2011 21:20:45 +0100</pubDate>
		</item>

		<item>
			<title>Das Q Karussell</title>
			<link>https://www.blitzforum.de/worklogs/447/#3212</link>
			<guid>https://www.blitzforum.de/worklogs/447/#3212</guid>
			<author>Farbfinsternis</author>
			<description>Bei  &lt;b&gt;Q&lt;/b&gt; handelt es sich um eine Meta-Sprache welche nach HTML/JavaScript &amp;uuml;bersetzt wird. Die Ausgabedatei(en) greifen dann auf das &lt;a href=&quot;http://sedm.de/jmax/&quot; target=&quot;_blank&quot;&gt;JavaScript Framework jBB&lt;/a&gt; zu. So erm&amp;ouml;glicht Q das Programmieren von Browsergames auf Basis des HTML5 Canvas Element, ohne direkt JavaScript verwenden zu m&amp;uuml;ssen. Ein Q Source &amp;auml;hnelt sehr dem von BlitzMax:&lt;br /&gt;[syntax=&amp;quot;bmax&amp;quot;]&lt;br /&gt;Global myImage = LoadImage(&amp;quot;media/pointer.png&amp;quot;)&lt;br /&gt;&lt;br /&gt;rem&lt;br /&gt;	eine Klasse&lt;br /&gt;endrem&lt;br /&gt;Type tType&lt;br /&gt;	Field x&lt;br /&gt;	Field y&lt;br /&gt;	&lt;br /&gt;	Method getX()&lt;br /&gt;		Return x&lt;br /&gt;	EndMethod&lt;br /&gt;EndType&lt;br /&gt;&lt;br /&gt;Global mouseCoords = new tType&lt;br /&gt;&lt;br /&gt;' &amp;quot;As INIT&amp;quot; definiert diese Funktion als Initialisierungsfunktion&lt;br /&gt;Function myInit() As INIT&lt;br /&gt;	Graphics(800, 600, 30); SetColor(255, 255, 255); ClsColor(90, 120, 200)&lt;br /&gt;	HidePointer()&lt;br /&gt;EndFunction&lt;br /&gt;&lt;br /&gt;' &amp;quot;As MAIN&amp;quot; definiert diese Funktion als Hauptfunktion&lt;br /&gt;Function myGame() As MAIN&lt;br /&gt;	Cls()&lt;br /&gt;	&lt;br /&gt;	mouseCoords.x = MouseX()&lt;br /&gt;	mouseCoords.y = MouseY()&lt;br /&gt;	&lt;br /&gt;	DrawImage(myImage, mouseCoords.getX(), mouseCoords.y ) ' Bild zeichnen&lt;br /&gt;	&lt;br /&gt;EndFunction&lt;br /&gt;[/syntax]&lt;br /&gt;Der Q Transformer (ich mag ihn nicht Compiler nennen) ist in BlitzMax programmiert, ich werde ihn f&amp;uuml;r Linux und Windows bereitstellen. Den Source werde ich bei Release beilegen so dass Interessierte sich das Programm auch f&amp;uuml;r MacOS kompilieren k&amp;ouml;nnen.&lt;br /&gt;&lt;br /&gt;--------------------------------&lt;br /&gt;&lt;br /&gt;Die Methode &amp;quot;Brute Force&amp;quot; funktioniert zwar am Ende, aber sie l&amp;auml;sst den Quelltext quasi explodieren. Die M&amp;ouml;glichkeit beliebig viele Leerzeichen zu setzen und auch Tabs einfach mal so zu spammen habe ich nun im Griff und normale Funktionen, Methoden und Types kommen nun damit klar. Auch Default-Werte f&amp;uuml;r Funktionsparameter werden nun ordentlich in funktionierenden JavaScript Code umgewandelt.&lt;br /&gt;Types werden nach &lt;i&gt;&amp;quot;var FunktionsName = function(&amp;quot;&lt;/i&gt; umgebaut und Methoden nach &lt;i&gt;&amp;quot;this.MethodenName = function(){&amp;quot;&lt;/i&gt;. Derzeit gibt es noch keine Konstruktor-Parameter f&amp;uuml;r Types aber ich will das unbedingt haben weil es mich schon immer gest&amp;ouml;rt hat dass BMax diese nicht unterst&amp;uuml;tzt.&lt;br /&gt;Weiterhin werden nun jBB Funktionen korrekt umgesetzt und Q ist nicht mehr case-sensitive. Mittlerweile gibt der Compiler auch Fehler aus wenn er Syntax-Fehler findet, aber das ist noch sehr rudiment&amp;auml;r. Das Problem ist wohl dass ich hier keinen klassischen Compiler/Interpreter baue (das ist mir viel zu kompliziert), sondern nur einen Quelltext in einen anderen &amp;uuml;berf&amp;uuml;hre. &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;Noch ein paar Sachen zu Q:&lt;br /&gt;&lt;li&gt; Q ist Typenlos ... man kann der Variable &amp;quot;t&amp;quot; ein &amp;quot;3.14&amp;quot; zuweisen, oder ein &amp;quot;1&amp;quot; oder ein &amp;quot;Hallo Welt&amp;quot;&lt;br /&gt;&lt;li&gt; in Q hei&amp;szlig;t es &amp;quot;EndFunction&amp;quot;, &amp;quot;EndType&amp;quot;, &amp;quot;EndMethod&amp;quot;, &amp;quot;EndIf&amp;quot; etc ... ein &amp;quot;End Function&amp;quot; wird als Fehler angesehen&lt;br /&gt;&lt;li&gt; Q ist nicht case-sensitive was jBB oder Q Funktionen betrifft. Das hei&amp;szlig;t: Du kannst schreiben &amp;quot;endif&amp;quot; oder &amp;quot;EndIf&amp;quot;, oder &amp;quot;eNdIf&amp;quot; ... spielt keine Rolle ... aber Deine eigenen Variablen oder Funktionen m&amp;uuml;ssen exakt so geschrieben werden wie die definiert wurden. Hast Du also die Funktion &amp;quot;doSomething&amp;quot; erstellt, darfst Du sie nicht mit &amp;quot;dosomething&amp;quot; aufrufen. Gleiches gilt f&amp;uuml;r Variablen. Es ist nat&amp;uuml;rlich m&amp;ouml;glich dass diese Beschr&amp;auml;nkung in einer sp&amp;auml;teren Version von Q entfernt wird.&lt;br /&gt;&lt;li&gt; Q soll einmal Vererbung unterst&amp;uuml;tzen. Derzeit ist dieses Feature nicht implementiert, auch wenn der Interpreter ein &amp;quot;extends&amp;quot; bereits verarbeitet. &lt;br /&gt;&lt;li&gt; Q ist ausschliesslich f&amp;uuml;r jBB gedacht, deshalb gibt es das Schl&amp;uuml;sselwort &amp;quot;AS&amp;quot; welches einer beliebigen Funktionsdefinition angef&amp;uuml;gt wird. &amp;quot;As&amp;quot; definiert eine Funktion als Initialisierungsfunktion oder als Hauptfunktion. Soll eine Funktion als &amp;quot;Init&amp;quot; dienen f&amp;uuml;gt man dem Funktionskopf &amp;quot;As Init&amp;quot; hinzu. Ist die Funktion als Hauptfunktion gedacht schreibt man &amp;quot;As Main&amp;quot; ... Beispiel: &amp;quot;Function myMain() As Main&amp;quot;&lt;br /&gt;&lt;li&gt; Q &amp;uuml;bernimmt klassische Operatoren. Ein &amp;quot;==&amp;quot; ist ein Vergleich, ein &amp;quot;=&amp;quot; ist eine Zuweisung. Die Operatoren &amp;quot;And&amp;quot;, &amp;quot;Or&amp;quot; etc. werden von Q in die JavaScript &amp;Auml;quivalente &amp;uuml;bersetzt. Beispiel: &amp;quot;If a = 1&amp;quot; wird nicht pr&amp;uuml;fen ob a = 1 ist sondern a den Wert 1 zuweisen, nur &amp;quot;If a == 1&amp;quot; wird pr&amp;uuml;fen ob a = 1 ist.&lt;br /&gt;&lt;li&gt; Der Q &amp;quot;Compiler&amp;quot; wird &amp;uuml;ber die Konsole/das Terminal bedient. Mindestens die Parameter &amp;quot;file&amp;quot; und &amp;quot;output&amp;quot; m&amp;uuml;ssen &amp;uuml;bergeben werden, f&amp;uuml;r alle anderen Parameter existieren Default-Werte.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Es gibt noch irre viel Arbeit ... wer nicht auf Q warten will kann sich ja mit JS besch&amp;auml;ftigen solange direkt mit &lt;a href=&quot;http://sedm.de/jmax/&quot; target=&quot;_blank&quot;&gt;jBB&lt;/a&gt; arbeiten &lt;img src=&quot;/forum/images/smiles/icon_wink.gif&quot; alt=&quot;Wink&quot; /&gt; Have Fun!&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;- &lt;a href=&quot;http://sedm.de/jmax/&quot; target=&quot;_blank&quot;&gt;jBB Framework&lt;/a&gt;&lt;br /&gt;- &lt;a href=&quot;http://www.sedm.de/jmax/community/&quot; target=&quot;_blank&quot;&gt;jBB Community Forum&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;</description>
			<pubDate>Mon, 14 Mar 2011 22:31:53 +0100</pubDate>
		</item>


	</channel>
</rss>
