{"id":1260,"date":"2024-01-29T19:31:58","date_gmt":"2024-01-29T19:31:58","guid":{"rendered":"https:\/\/research.swissdigitization.ch\/?p=1260"},"modified":"2025-07-18T10:39:41","modified_gmt":"2025-07-18T10:39:41","slug":"crossplatform-basic-game-8-bit-homecomputer-moeglich-linejewels-als-eine-antwort","status":"publish","type":"post","link":"https:\/\/research.swissdigitization.ch\/?p=1260","title":{"rendered":"CrossPlatform-BASIC-Game (8-Bit Homecomputer) &#8211; M\u00f6glich? LineJewels\/LineJewls als eine Antwort [LinePrinterActionGame]"},"content":{"rendered":"\n<p><strong>Fragestellung: Ist es m\u00f6glich ein Basic-Game zu entwickeln, das auf den meisten 8Bit-Homecomputern wie C64,MSX,MS-DOS,ZX81 etc  l\u00e4uft? L\u00e4uft bestenfalls mit keinen! bis kleinen \u00c4nderungen?<\/strong> <\/p>\n\n\n\n<p>BASIC war die Sprache der 8Bit Homecomputer. Sie war alt (Darthmouth 1964), klein, eine Interpretersprache und dadurch relativ einfach zu implementieren. <\/p>\n\n\n\n<p><strong>Erste Erkenntnisse zur &#8222;Lingua-Franca&#8220; BASIC<\/strong><\/p>\n\n\n\n<p>Es w\u00fcrde also nahe liegen sie als die Lingua-Franca zu benutzen \u00fcber alle 8bit-HomeComputer hinweg. Und das trifft mehr oder minder f\u00fcr den ersten Darthmouth-Standard auch zu. Mehr oder weniger l\u00e4uft alles dadrauf &#8211; nimmt man es nicht so genau mit Strings (Definierte Stringl\u00e4nge bei Atari400\/800, kein einfaches Concat mit +, Input) oder dem RND-Befehl (RND(4) QW-Basic). <\/p>\n\n\n\n<p>Leider war Basic aber auch auf Input-Output-Programme f\u00fcr die fr\u00fche Entwicklung von Programme entwickelt worden, das heisst letztlich die Shell. Und so fehlt der Sprache per Standard jede Art von Keypressing-Funktionalit\u00e4t oder auch Grafikm\u00f6glichkeiten. Und hier legten sich die verschiedenen Computerhersteller wirklich ins Zeug Inkompatibilit\u00e4t aufzubauen. Allein die Geschichte um das Atari Basic zeigt auf was die Probleme waren: Der normale Interpreter brauchte schon 8k (Rom-Gr\u00f6sse mit akzeptablen Preis) &#8211; Atari wollte aber logischerweise auch Grafik-Commandos im Basic haben. Wie also reduzieren das Ganze? Indem man Befehle strich und anschliessend Befehle zus\u00e4tzlich ins ROM verlagerte (wo es anscheinend unendlich langsam war). <\/p>\n\n\n\n<p>All dies zeigt auf, dass diese Homecomputer letztlich zuerst als Hardware-Software-Paket verkauft wurden (obwohl Atari sein Basic zuerst seperat verkaufte). Die Kompatibilit\u00e4t war zuerst einmal da, indem man die meisten BASIC Lernkurse damit machen konnte. Danach wollten alle einzeln brillieren. Damit liessen sich nat\u00fcrlich de facto keine Platform \u00fcbergreifende Software entwicklen und verkaufen, zumal auch keine Compiler existierten. Nat\u00fcrlich hatte auch jede Platform ihren eigenen Zeichensatz mit eigenen GrafikChars.<\/p>\n\n\n\n<p><strong>LineJeweled &#8211; Game in der Lingua-Franca &#8222;BASIC&#8220;<\/strong><\/p>\n\n\n\n<p>Um \u00fcberhaupt eine Game \u00fcber verschiedene Plattformen entwickeln zu k\u00f6nnen, musste also benutzt werden, was im Standard-Output m\u00f6glich ist. Und das ist Print und Print ; (Lineprinter waren mal sehr in Mode). Ein Grafikaufbau mit CLS (Clearscreen) ist wegen Geschwindigkeit und Verf\u00fcgbarkeit des Befehls oder seiner Simulation (30x Print &#8222;&#8220;) leider nicht m\u00f6glich.) <\/p>\n\n\n\n<p>Das heisst letztlich musste eine Spielmechanik gefunden werden, die ein einfaches Actiongetriebenes Game doch m\u00f6glich macht und auch funktioniert, wenn man nicht auf dem Bildschirm zeichnen kann. Nach vielen Experimenten stellte sich heraus, dass man am Besten sich mit einer Variante von BeJeweled oder 3+ Gewinnt bedient. Das Spiel schreibt fortw\u00e4hrend das Spielfeld fort und der Spieler kann bei der Cursorposition einen zuf\u00e4lligen Edelstein einf\u00fcgen. So kann der Spieler* 3+ Reihen in jede Richtung generieren und Punkte sammeln. Technisch muss auch nichts im Spielfeld ge\u00e4ndert werden. Und das Spiel lebt vom Printen von Linien und verl\u00e4ngert das Spielfeld automatisch gegen oben. Dadurch entsteht ein f\u00fcr die Verh\u00e4ltnisse komplexes Spiel. <\/p>\n\n\n\n<p>Auf dem C64 sieht das wie folgt aus:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"710\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-28-um-16.56.13-1024x710.png\" alt=\"\" class=\"wp-image-1297\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-28-um-16.56.13-1024x710.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-28-um-16.56.13-300x208.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-28-um-16.56.13-768x533.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-28-um-16.56.13-624x433.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-28-um-16.56.13.png 1240w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p> Da die Anzeigen nicht immer neu gezeichnet werden, m\u00fcssen sie einmal pro Linie geschrieben werden. Dadurch schreibt das Spiel auch seine eigne History per PRINT ins Fenster.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Der Aufbau:<br>AkutellerScore | Aktuelle Linie |&nbsp;N\u00e4chsterEdelstein |&nbsp;Spielfeld &gt; Gemachte Reihen + Punkte<\/p>\n\n\n\n<p>Das Spiel ist deswegen Action getrieben, weil das Spiel unabh\u00e4ngig vom Spieler Edelsteine setzt und immer schneller wird.<\/p>\n\n\n\n<p><strong>LineJewel<\/strong>s<\/p>\n\n\n\n<p>Das Spiel kann hier in einem BBCMicro Emulator Online gespielt werden:<br><a href=\"https:\/\/bbcmic.ro\/#%7B%22v%22%3A1%2C%22program%22%3A%221%20REM%20LINE%20JEWELS%20-%20CROSS%208BIT%20PORTABLE%20BASIC%20GAME%20%5Cn2%20REM%20NEO%20LISTING%2FTYPE%20IN%208BIT%20GAME%20---%5Cn3%20REM%20C64_%20VICE%20-%20F10%20-%20IMPORT%20%7C%20PET_%20WWW.MASSWERK.AT%2FPET%2F%20%5Cn4%20REM%20AMSTRAD%20%28CPC%29_%20ARNDOLD%20%28AUTOTYPE%29%5Cn5%20REM%20MICROBBC_%20BBCMIC.RO%2F%20MSX_%20WEBMSX.ORG%20%28OPTION%2BB%29%5Cn6%20REM%20ATARI%20800XL_%20WWW.ATARIMAC.COM%2FINDEX.PHP%5Cn7%20REM%20-------------%20COPY%20FROM%20HERE%20-------------------%5Cn8%20DIM%20F%24%2850%29%3ADIM%20A%24%2850%29%3ADIM%20AC%24%2850%29%3ADIM%20CH%24%2850%29%3ADIM%20MO%24%2850%29%5Cn9%20DIM%20RE%24%2850%29%3ADIM%20L%24%2850%29%3ADIM%20DX%24%2850%29%3ADIM%20OB%24%2850%29%3ADIM%20N%24%2850%29%5Cn10%20LET%20A%24%3D%5C%22%5C%22%5Cn11%20F%24%3D%5C%22%23X.O%5C%22%5Cn12%20MC%3D0%5Cn13%20CH%24%3D%5C%22%5C%22%5Cn14%20LET%20HC%20%3D%20420%5Cn15%20LET%20AC%24%3D%5C%22%5C%22%5Cn16%20VE%20%3D%200.6%5Cn17%20DIM%20GT%2810%2C100%29%5Cn28%20GOTO%2070%5Cn39%20REM%20SETTINGS%5Cn40%20A%24%3D%5C%22%5C%22%5Cn41%20A%3D0%5Cn42%20CH%3D0%5Cn43%20IF%20MC%3D2%20THEN%20GOTO%2051%5Cn44%20IF%20MC%3D3%20THEN%20GOTO%2056%5Cn45%20IF%20MC%3D4%20THEN%20GOTO%2058%5Cn46%20REM%20C64-BASIC%5Cn47%20A%20%3D%20PEEK%28197%29%5Cn48%20IF%20A%3D10%20THEN%20A%24%3D%5C%22A%5C%22%3A%20GOTO%2069%5Cn49%20IF%20A%3D13%20THEN%20A%24%3D%5C%22S%5C%22%3A%20GOTO%2069%5Cn50%20GOTO%2069%5Cn51%20REM%20ATARI%20800XL%5Cn52%20CH%3DPEEK%28764%29%3APOKE%20764%2C255%3AIF%20CH%3D255%20THEN%20GOTO%2069%5Cn53%20IF%20CH%3D63%20THEN%20A%24%3D%5C%22A%5C%22%3AGOTO%2069%5Cn54%20IF%20CH%3D62%20THEN%20A%24%3D%5C%22S%5C%22%3AGOTO%2069%5Cn55%20GOTO%2069%5Cn56%20REM%20MICRO%20BBC%5Cn57%20A%24%3DINKEY%24%280%29%3AGOTO%2069%5Cn58%20REM%20GW-BASIC%2C%20MSX%2C%20AMSTRAD%20%28ATTENTION%20UPPERCASE%29%5Cn59%20A%24%3DINKEY%24%5Cn69%20GOTO%201320%5Cn70%20REM%20GO%20ON%5Cn80%20SP%20%3D%2060%5Cn95%20TS%20%3D%200%5Cn97%20REM%20BASIC%20DARTHMOUTH%20%3E%2064%20-%20ONLY%202BYTE%20VAR%20NAMES!%5Cn100%20GOSUB%205000%5Cn101%20OB%24%20%3D%20%5C%22%23XO.%5C%22%5Cn102%20PRINT%20%5C%22%3C%23%3E%3C.%3E%3CO%3E%3CO%3E%5C%22%5Cn103%20PRINT%20%5C%22%3C%23%3E%3CO%3E%3CO%3E%3CX%3E%3CX%3E%5C%22%5Cn104%20PRINT%20%5C%22%5C%22%5Cn105%20PRINT%20%5C%22LINEJEWELS%20-%20ONE%20BUTTON%20JEWLERY%20%5C%22%3BVE%5Cn106%20PRINT%20%5C%22%5C%22%5Cn117%20PRINT%20%5C%22ONE%20SOURCE%20FOR%20ALL%20OF%20THEM%5C%22%5Cn118%20PRINT%20%5C%22NEO%20LISTING%20%2F%20TYPE-IN%208BIT-GAME%5C%22%5Cn111%20PRINT%20%5C%22BY%20CHLUDENS.CH%20%28EXPER.%20ARCHEOLOGY%29%5C%22%5Cn112%20PRINT%20%5C%22GREETINGS%20R.%20WERNER%2C%20S.%20HOELTGEN%5C%22%5Cn113%20PRINT%20%5C%22USAGE%3A%20%3CS%3E%20SET%20STONE%20%5C%22%5Cn114%20PRINT%20%5C%22%20%20%20%20%20%20%20%3CA%3E%20ONE%20FORWARD%5C%22%5Cn115%20PRINT%20%5C%22TODO%20%3A%20CREATE%203%2B%20LINES%5C%22%5Cn116%20PRINT%20%5C%22%20%20%20%20%20%20%20WITH%20THE%20DIAMONDS%20%5C%22%3BOB%24%5Cn117%20PRINT%20%5C%22HIGHSCORE%3A%20%5C%22%3BHC%5Cn128%20REM%20PRINT%20%5C%22%20%5C%22%3BCHR%24%287%29%3BCHR%24%287%29%3BCHR%24%287%29%5Cn130%20PRINT%20%5C%22%20%5C%22%5Cn131%20PRINT%20%5C%22COMPUTER%3A%201%3AC64%202%3AATARI%20800XL%20%5C%22%5Cn132%20PRINT%20%5C%22%20%20%20%20%20%20%20%20%20%203%3AMICRO%20BBC%20%5C%22%5Cn133%20PRINT%20%5C%22%20%20%20%20%20%20%20%20%20%204%3AMSDOS%28GW%29%2CMSX%2CAMSTRAD%20%5C%22%5Cn134%20INPUT%20MC%5Cn135%20PRINT%20%5C%22%5C%22%20%5Cn136%20PRINT%20%5C%22%5C%22%5Cn137%20PRINT%20%5C%22GET%20RICH!%20%5C%22%5Cn138%20PRINT%20%5C%22%28NO%20CHANCE%20IF%20ARE%20NOT%20YET%29%5C%22%5Cn139%20PRINT%20%5C%22%5C%22%5Cn500%20SC%20%3D%200%5Cn510%20LI%20%3D%200%5Cn520%20X%20%3D%200%5Cn530%20AC%24%20%3D%20%5C%22%23%5C%22%5Cn540%20REM%20%5Cn1000%20REM%20NEXT%20LINE%5Cn1001%20GOSUB%206000%5Cn1002%20AC%24%20%3D%20CH%24%5Cn1005%20X%20%3D%200%5Cn1006%20MO%24%20%3D%20%5C%22INTERACTIVE%5C%22%5Cn1007%20RE%24%20%3D%20%5C%22%5C%22%5Cn1008%20REM%20IF%20SC%3C10000%20THEN%20PRINT%20%3B%5C%22%20%5C%22%3B%5Cn1009%20IF%20SC%3C1000%20THEN%20PRINT%20%3B%5C%22%20%5C%22%3B%5Cn1010%20IF%20SC%3C100%20THEN%20PRINT%20%3B%5C%22%20%5C%22%3B%5Cn1011%20IF%20SC%20%3C10%20THEN%20PRINT%20%3B%5C%22%20%5C%22%3B%5Cn1012%20L%24%20%3D%20%5C%22%5C%22%5Cn1013%20IF%20LI%3E40%20THEN%20L%24%3D%5C%22%20%5C%22%5Cn1015%20PRINT%20STR%24%28SC%29%3B%5C%22%20!%5C%22%3BL%24%3BSTR%24%2850-LI%29%3B%5C%22!%20%5C%22%3BAC%24%3B%5C%22%20!%20%5C%22%3B%5Cn1100%20GOSUB%206000%5Cn1110%20REM%5Cn1119%20KP%20%3D%200%5Cn1120%20IF%20LI%3C2%20THEN%20MO%24%20%3D%20%5C%22FORWARD%5C%22%5Cn1190%20IF%20MO%24%3C%3E%5C%22INTERACTIVE%5C%22%20THEN%20GOTO%201410%5Cn1199%20H%20%3D%200%20%5Cn1200%20REM%20---%20CHECK%20KEYS%20AND%20PAUSE%20---%5Cn1300%20REM%20.%5Cn1305%20REM%20.%5Cn1310%20GOTO%2040%5Cn1320%20IF%20A%24%3D%5C%22S%5C%22%20THEN%20CH%24%20%3D%20AC%24%5Cn1330%20IF%20A%24%3D%5C%22S%5C%22%20THEN%20MO%24%20%3D%20%5C%22ENDLINE%5C%22%5Cn1332%20IF%20A%24%3D%5C%22S%5C%22%20THEN%20RE%24%20%3D%20%5C%22%20%3E%5C%22%5Cn1333%20IF%20A%24%3D%5C%22S%5C%22%20THEN%20KP%20%3D%201%5Cn1334%20IF%20A%24%3D%5C%22S%5C%22%20THEN%20GOTO%201410%5Cn1335%20IF%20A%24%3D%5C%22A%5C%22%20THEN%20GOTO%201410%5Cn1336%20IF%20A%24%3D%5C%22s%5C%22%20THEN%20CH%24%20%3D%20AC%24%5Cn1337%20IF%20A%24%3D%5C%22s%5C%22%20THEN%20MO%24%20%3D%20%5C%22ENDLINE%5C%22%5Cn1338%20IF%20A%24%3D%5C%22s%5C%22%20THEN%20RE%24%20%3D%20%5C%22%20%3E%5C%22%5Cn1339%20IF%20A%24%3D%5C%22s%5C%22%20THEN%20KP%20%3D%201%5Cn1340%20IF%20A%24%3D%5C%22s%5C%22%20THEN%20GOTO%201410%5Cn1341%20IF%20A%24%3D%5C%22a%5C%22%20THEN%20GOTO%201410%5Cn1351%20H%20%3D%20H%20%2B%201%5Cn1352%20SP%20%3D%20%2850%20-%20LI%29%2F2%5Cn1360%20IF%20H%3CSP%20THEN%20GOTO%201200%5Cn1410%20PRINT%20CH%24%3B%5Cn1411%20LET%20FV%20%3D%200%5Cn1412%20GOSUB%207000%5Cn1418%20REM%20----%5Cn1420%20GT%28X%2CLI%29%3DFV%5Cn1425%20IF%20KP%20%3D%200%20THEN%20GOTO%202000%5Cn1430%20REM%20CHECK%20ALL%20-%20VERTICAL%20-%20HORIZONTAL%20ETC%5Cn1431%20TS%20%3D%200%5Cn1432%20FOR%20Q%3D0%20TO%203%5Cn1433%20VX%20%3D%200%5Cn1434%20REM%20TS%3D0%5Cn1435%20VY%20%3D%20-1%5Cn1436%20GOSUB%207000%5Cn1438%20IF%20Q%3D3%20THEN%20VY%20%3D%200%5Cn1439%20IF%20Q%3D3%20THEN%20VX%20%3D%20-1%5Cn1440%20CO%20%3D%200%5Cn1441%20IF%20Q%3D1%20THEN%20VX%20%3D%20-1%5Cn1442%20IF%20Q%3D2%20THEN%20VX%20%3D%201%5Cn1443%20SX%20%3D%20X%5Cn1444%20SY%20%3D%20LI%5Cn1445%20SX%20%3D%20SX%20%2B%20VX%5Cn1446%20SY%20%3D%20SY%20%2B%20VY%5Cn1447%20CO%20%3D%20CO%20%2B%201%5Cn1460%20IF%20SX%3C0%20THEN%20GOTO%201500%5Cn1461%20IF%20SY%3C0%20THEN%20GOTO%201500%5Cn1462%20IF%20SX%3E10%20THEN%20GOTO%201500%5Cn1470%20IF%20GT%28SX%2CSY%29%3DFV%20THEN%20GOTO%201445%5Cn1500%20REM%20%5Cn1510%20REM%20RE%24%20%3D%20RE%24%20%2B%20%5C%22%5C%22%3BCO%5Cn1511%20DX%24%20%3D%20%5C%22!%5C%22%5Cn1512%20IF%20Q%3D1%20THEN%20DX%24%20%3D%20%5C%22!%5C%22%5Cn1513%20IF%20Q%3D2%20THEN%20DX%24%20%3D%20%5C%22%2F%5C%22%5Cn1514%20IF%20Q%3D3%20THEN%20DX%24%20%3D%20%5C%22-%5C%22%5Cn1520%20IF%20CO%3E2%20THEN%20TS%20%3D%20TS%20%2B%20%28CO*10%29%5Cn1521%20IF%20MC%3D2%20THEN%20IF%20CO%3E2%20THEN%20RE%24%28LEN%28RE%24%29%2B1%29%3D%20STR%24%28CO%29%5Cn1522%20IF%20MC%3D2%20THEN%20IF%20CO%3E2%20THEN%20RE%24%28LEN%28RE%24%29%2B1%29%3D%20DX%24%3AGOTO%201524%5Cn1523%20IF%20CO%3E2%20THEN%20RE%24%20%3D%20RE%24%20%2B%20%5C%22%5C%22%20%2B%20STR%24%28CO%29%20%2B%20%5C%22%5C%22%2BDX%24%5Cn1524%20REM%20IF%20MC%3C%3E2%20THEN%20IF%20CO%3E2%20THEN%20PRINT%20CHR%24%287%29%3B%5Cn1600%20NEXT%20Q%5Cn2000%20X%20%3D%20X%20%2B%201%5Cn2010%20REM%5Cn2020%20REM%5Cn2400%20IF%20X%3C10%20THEN%20GOTO%201100%5Cn2405%20SC%20%3D%20SC%20%2B%20TS%5Cn2406%20IF%20MC%3D2%20THEN%20IF%20TS%3E0%20THEN%20RE%24%28LEN%28RE%24%29%2B1%29%3DSTR%24%28TS%29%3AGOTO%202410%5Cn2407%20IF%20TS%3E0%20THEN%20RE%24%20%3D%20RE%24%20%2B%20%5C%22%20%2B%5C%22%20%2B%20STR%24%28TS%29%5Cn2410%20IF%20RE%24%3C%3E%5C%22%5C%22%20THEN%20PRINT%20RE%24%3B%5Cn2500%20PRINT%20%5C%22%20%5C%22%5Cn2510%20LI%20%3D%20LI%20%2B%201%5Cn2520%20IF%20LI%3E49%20THEN%20GOTO%207050%5Cn2600%20REM%5Cn3900%20GOTO%201000%5Cn4000%20END%5Cn5000%20REM%20CLS%5Cn5010%20FOR%20T%3D0%20TO%2040%5Cn5020%20PRINT%20%5C%22%20%5C%22%5Cn5030%20NEXT%20T%5Cn5040%20RETURN%5Cn6000%20REM%20GET%20NEXT%20CHAR%5Cn6001%20C%20%3D%20RND%284%29%5Cn6002%20IF%20C%3D0%20THEN%20GOTO%206007%5Cn6003%20IF%20C%3D1%20THEN%20GOTO%206007%5Cn6004%20IF%20C%3D2%20THEN%20GOTO%206007%5Cn6005%20IF%20C%3D3%20THEN%20GOTO%206007%5Cn6006%20C%20%3D%20INT%28RND%281%29*4%29%5Cn6007%20REM%20C64%20ETC%5Cn6020%20CH%24%20%3D%20%5C%22%23%5C%22%5Cn6030%20IF%20C%3D1%20THEN%20CH%24%20%3D%20%5C%22X%5C%22%5Cn6040%20IF%20C%3D2%20THEN%20CH%24%20%3D%20%5C%22O%5C%22%5Cn6050%20IF%20C%3D3%20THEN%20CH%24%20%3D%20%5C%22.%5C%22%5Cn6060%20RETURN%5Cn7000%20REM%20GET%20FIELD%20VALUE%20FROM%20CH%24%5Cn7009%20FV%20%3D%200%5Cn7010%20IF%20CH%24%3D%5C%22X%5C%22%20THEN%20FV%20%3D%201%5Cn7020%20IF%20CH%24%3D%5C%22O%5C%22%20THEN%20FV%20%3D%202%5Cn7030%20IF%20CH%24%3D%5C%22.%5C%22%20THEN%20FV%20%3D%203%5Cn7040%20RETURN%5Cn7050%20PRINT%20%5C%22%20%5C%22%5Cn7055%20PRINT%20%5C%22END%20OF%20THE%20GAME%5C%22%5Cn7060%20IF%20SC%3CHC%20THEN%20GOTO%207065%5Cn7061%20PRINT%20%5C%22%5C%22%5Cn7062%20PRINT%20%5C%22NEW%20HIGHSCORE!%20%5C%22%3BSC%5Cn7063%20HC%3DSC%5Cn7065%20PRINT%20%5C%22%20%5C%22%5Cn7070%20PRINT%20%5C%22ANOTHER%20TRY%3F%20Y%20%7C%20N%5C%22%5Cn7080%20INPUT%20N%24%5Cn7090%20IF%20N%24%3D%5C%22Y%5C%22%20THEN%20GOTO%20500%22%7D\">Let&#8217;s Play LineJewels &gt;<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"517\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-29-um-20.13.23-1024x517.png\" alt=\"\" class=\"wp-image-1298\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-29-um-20.13.23-1024x517.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-29-um-20.13.23-300x151.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-29-um-20.13.23-768x388.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-29-um-20.13.23-1536x775.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-29-um-20.13.23-2048x1034.png 2048w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-29-um-20.13.23-624x315.png 624w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Herausforderungen<\/strong>: Keypressing, RND, Strings<\/p>\n\n\n\n<p>Prinzipiell ist die Grundmechanik bei allen Varianten diesselbe &#8211; also ein Code. Probleme gab es hier mit der Funktion von RND (Einige Interpreter spucken hier einen Integer aus RND(4) &gt; 0-4) und die Stringbehandlung: Atari verwendet eine selbstdefinierte gefixte L\u00e4nge. Einige Interpreter k\u00f6nnen keine Befehle mit &#8222;:&#8220; aneinanderh\u00e4ngen. Und andere wiederum kennen wie das Orginal nur [A-Z] und [AA-ZZ] Variabeln wie das Darthmouth-Orginal. Der Code musste also jeweils so angepasst werden, dass er mit all diesen Varianten l\u00e4uft, wobei das Problem ist: Gewisse Interpreter geben Fehlermeldung aus, wenn die Syntax nicht ihrer Syntax entspricht. All dies liess sich jedoch irgendwie umschiffen.<\/p>\n\n\n\n<p>Die gr\u00f6sste Herausfoderung war\/ist sicherlich das Nutzen von Keypressed, da dieses nicht im UrBasicStandard vorhanden war und darum auf jedem Computer irgendwie anders implementiert wurde. Keypress-Detection ist aber auch essentiell ist f\u00fcr jede Art von Actionspiel. Aus diesem Grund gibt es am Anfang eine Auswahl der Computer. Damit l\u00e4sst sich dann einfach die jeweilige Keypressed-Routine, die funktioniert nutzen. Eine Autodetection scheint  (wie beim RND) nicht m\u00f6glich zu sein, zu unterschiedlich sind die Dinge und zu verschieden auch die Befehlss\u00e4tze. So kennt nicht jedes Basic PEEK! <\/p>\n\n\n\n<p>Auch die Gr\u00f6sse des RAMs spielt vorallem bei dem Array der Edelsteine eine Rolle und so war dann DIM(10,100) f\u00fcr einige Computer schon zuviel. <\/p>\n\n\n\n<p><strong>Fazit<\/strong>: C64, MSX, Amstrad, BBC Micro, MS-DOS (GW-BASIC), Atari400\/800<\/p>\n\n\n\n<p>Prinzipiell scheint es unm\u00f6glich ein Actionbasiertes Game zu machen, dass auf allen 8Bit Computern l\u00e4uft. Zu divergent sind die verschiedenen Dialekte oder anders gesagt, das Fehlen von INKEY im urspr\u00fcnglichen Standard. <\/p>\n\n\n\n<p>Im Fall von LineJewels wurde der Kompromiss gemacht und die Keypressing-Routine mehrfach ausgef\u00fchrt, dadurch l\u00e4uft es zumindest auf 6-Systemen. Sicherlich k\u00f6nnte man noch PET hinzunehmen (\u00e4hnlich wie C64) und eine SMAKY Version einbauen. Bei ZX81 und Spektrum ist es meiner Meinung nach schwierig bzw. muss noch ausprobiert werden (Der ZX81 speichert das Programm nicht als Source-Code sondern in Codes). <\/p>\n\n\n\n<p>Den Code direkt auf dem C64 ausf\u00fchren? <a href=\"https:\/\/www.lemon64.com\/forum\/viewtopic.php?t=83997\">Hier findet man das File dazu D64 &gt;<\/a><\/p>\n\n\n\n<p><strong>Versionen<\/strong><\/p>\n\n\n\n<p>Atari 400\/800 Version<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"643\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-28-um-17.51.16-1024x643.png\" alt=\"\" class=\"wp-image-1301\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-28-um-17.51.16-1024x643.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-28-um-17.51.16-300x188.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-28-um-17.51.16-768x482.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-28-um-17.51.16-624x392.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-28-um-17.51.16.png 1248w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Amstrad Version<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"898\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-29-um-20.35.01-1024x898.png\" alt=\"\" class=\"wp-image-1303\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-29-um-20.35.01-1024x898.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-29-um-20.35.01-300x263.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-29-um-20.35.01-768x674.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-29-um-20.35.01-624x547.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-29-um-20.35.01.png 1172w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Noch nicht offizielle PET-Version<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"653\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-06-um-20.20.42-1-1024x653.png\" alt=\"\" class=\"wp-image-1304\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-06-um-20.20.42-1-1024x653.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-06-um-20.20.42-1-300x191.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-06-um-20.20.42-1-768x490.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-06-um-20.20.42-1-624x398.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/01\/Bildschirmfoto-2024-01-06-um-20.20.42-1.png 1330w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Code<\/strong><\/p>\n\n\n\n<p>Es sei schon gewarnt, der Code ist nicht besonders h\u00fcbsch geworden. Das liegt auch daran, dass das Erweitern des Codes mit Linebasierung umst\u00e4ndlich ist. Und so funktioniert ein st\u00e4ndiges Erweitern eigentlich nicht in BASIC, vermultich auch ein Grund, warum sich BASIC nicht wirklich f\u00fcr gr\u00f6ssere Projekte eignete und warum sich sp\u00e4ter zeilenlose Basics durchgesetzt haben.<\/p>\n\n\n\n<p> <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1 REM LINE JEWELS - CROSS 8BIT PORTABLE BASIC GAME \n2 REM NEO LISTING\/TYPE IN 8BIT GAME ---\n3 REM C64_ VICE - F10 - IMPORT | PET_ WWW.MASSWERK.AT\/PET\/ \n4 REM AMSTRAD (CPC)_ ARNDOLD (AUTOTYPE)\n5 REM MICROBBC_ BBCMIC.RO\/ MSX_ WEBMSX.ORG (OPTION+B)\n6 REM ATARI 800XL_ WWW.ATARIMAC.COM\/INDEX.PHP\n7 REM ------------- COPY FROM HERE -------------------\n8 DIM F$(50):DIM A$(50):DIM AC$(50):DIM CH$(50):DIM MO$(50)\n9 DIM RE$(50):DIM L$(50):DIM DX$(50):DIM OB$(50):DIM N$(50)\n10 LET A$=\"\"\n11 F$=\"#X.O\"\n12 MC=0\n13 CH$=\"\"\n14 LET HC = 420\n15 LET AC$=\"\"\n16 VE = 0.6\n17 DIM GT(10,100)\n28 GOTO 70\n39 REM SETTINGS\n40 A$=\"\"\n41 A=0\n42 CH=0\n43 IF MC=2 THEN GOTO 51\n44 IF MC=3 THEN GOTO 56\n45 IF MC=4 THEN GOTO 58\n46 REM C64-BASIC\n47 A = PEEK(197)\n48 IF A=10 THEN A$=\"A\": GOTO 69\n49 IF A=13 THEN A$=\"S\": GOTO 69\n50 GOTO 69\n51 REM ATARI 800XL\n52 CH=PEEK(764):POKE 764,255:IF CH=255 THEN GOTO 69\n53 IF CH=63 THEN A$=\"A\":GOTO 69\n54 IF CH=62 THEN A$=\"S\":GOTO 69\n55 GOTO 69\n56 REM MICRO BBC\n57 A$=INKEY$(0):GOTO 69\n58 REM GW-BASIC, MSX, AMSTRAD (ATTENTION UPPERCASE)\n59 A$=INKEY$\n69 GOTO 1320\n70 REM GO ON\n80 SP = 60\n95 TS = 0\n97 REM BASIC DARTHMOUTH &gt; 64 - ONLY 2BYTE VAR NAMES!\n100 GOSUB 5000\n101 OB$ = \"#XO.\"\n102 PRINT \"&lt;#&gt;&lt;.&gt;&lt;O&gt;&lt;O&gt;\"\n103 PRINT \"&lt;#&gt;&lt;O&gt;&lt;O&gt;&lt;X&gt;&lt;X&gt;\"\n104 PRINT \"\"\n105 PRINT \"LINEJEWELS - ONE BUTTON JEWLERY \";VE\n106 PRINT \"\"\n117 PRINT \"ONE SOURCE FOR ALL OF THEM\"\n118 PRINT \"NEO LISTING \/ TYPE-IN 8BIT-GAME\"\n111 PRINT \"BY CHLUDENS.CH (EXPER. ARCHEOLOGY)\"\n112 PRINT \"GREETINGS R. WERNER, S. HOELTGEN\"\n113 PRINT \"USAGE: &lt;S&gt; SET STONE \"\n114 PRINT \"       &lt;A&gt; ONE FORWARD\"\n115 PRINT \"TODO : CREATE 3+ LINES\"\n116 PRINT \"       WITH THE DIAMONDS \";OB$\n117 PRINT \"HIGHSCORE: \";HC\n128 REM PRINT \" \";CHR$(7);CHR$(7);CHR$(7)\n130 PRINT \" \"\n131 PRINT \"COMPUTER: 1:C64 2:ATARI 800XL \"\n132 PRINT \"          3:MICRO BBC \"\n133 PRINT \"          4:MSDOS(GW),MSX,AMSTRAD \"\n134 INPUT MC\n135 PRINT \"\" \n136 PRINT \"\"\n137 PRINT \"GET RICH! \"\n138 PRINT \"(NO CHANCE IF ARE NOT YET)\"\n139 PRINT \"\"\n500 SC = 0\n510 LI = 0\n520 X = 0\n530 AC$ = \"#\"\n540 REM \n1000 REM NEXT LINE\n1001 GOSUB 6000\n1002 AC$ = CH$\n1005 X = 0\n1006 MO$ = \"INTERACTIVE\"\n1007 RE$ = \"\"\n1008 REM IF SC&lt;10000 THEN PRINT ;\" \";\n1009 IF SC&lt;1000 THEN PRINT ;\" \";\n1010 IF SC&lt;100 THEN PRINT ;\" \";\n1011 IF SC &lt;10 THEN PRINT ;\" \";\n1012 L$ = \"\"\n1013 IF LI&gt;40 THEN L$=\" \"\n1015 PRINT STR$(SC);\" !\";L$;STR$(50-LI);\"! \";AC$;\" ! \";\n1100 GOSUB 6000\n1110 REM\n1119 KP = 0\n1120 IF LI&lt;2 THEN MO$ = \"FORWARD\"\n1190 IF MO$&lt;&gt;\"INTERACTIVE\" THEN GOTO 1410\n1199 H = 0 \n1200 REM --- CHECK KEYS AND PAUSE ---\n1300 REM .\n1305 REM .\n1310 GOTO 40\n1320 IF A$=\"S\" THEN CH$ = AC$\n1330 IF A$=\"S\" THEN MO$ = \"ENDLINE\"\n1332 IF A$=\"S\" THEN RE$ = \" &gt;\"\n1333 IF A$=\"S\" THEN KP = 1\n1334 IF A$=\"S\" THEN GOTO 1410\n1335 IF A$=\"A\" THEN GOTO 1410\n1336 IF A$=\"s\" THEN CH$ = AC$\n1337 IF A$=\"s\" THEN MO$ = \"ENDLINE\"\n1338 IF A$=\"s\" THEN RE$ = \" &gt;\"\n1339 IF A$=\"s\" THEN KP = 1\n1340 IF A$=\"s\" THEN GOTO 1410\n1341 IF A$=\"a\" THEN GOTO 1410\n1351 H = H + 1\n1352 SP = (50 - LI)\/2\n1360 IF H&lt;SP THEN GOTO 1200\n1410 PRINT CH$;\n1411 LET FV = 0\n1412 GOSUB 7000\n1418 REM ----\n1420 GT(X,LI)=FV\n1425 IF KP = 0 THEN GOTO 2000\n1430 REM CHECK ALL - VERTICAL - HORIZONTAL ETC\n1431 TS = 0\n1432 FOR Q=0 TO 3\n1433 VX = 0\n1434 REM TS=0\n1435 VY = -1\n1436 GOSUB 7000\n1438 IF Q=3 THEN VY = 0\n1439 IF Q=3 THEN VX = -1\n1440 CO = 0\n1441 IF Q=1 THEN VX = -1\n1442 IF Q=2 THEN VX = 1\n1443 SX = X\n1444 SY = LI\n1445 SX = SX + VX\n1446 SY = SY + VY\n1447 CO = CO + 1\n1460 IF SX&lt;0 THEN GOTO 1500\n1461 IF SY&lt;0 THEN GOTO 1500\n1462 IF SX&gt;10 THEN GOTO 1500\n1470 IF GT(SX,SY)=FV THEN GOTO 1445\n1500 REM \n1510 REM RE$ = RE$ + \"\";CO\n1511 DX$ = \"!\"\n1512 IF Q=1 THEN DX$ = \"!\"\n1513 IF Q=2 THEN DX$ = \"\/\"\n1514 IF Q=3 THEN DX$ = \"-\"\n1520 IF CO&gt;2 THEN TS = TS + (CO*10)\n1521 IF MC=2 THEN IF CO&gt;2 THEN RE$(LEN(RE$)+1)= STR$(CO)\n1522 IF MC=2 THEN IF CO&gt;2 THEN RE$(LEN(RE$)+1)= DX$:GOTO 1524\n1523 IF CO&gt;2 THEN RE$ = RE$ + \"\" + STR$(CO) + \"\"+DX$\n1524 REM IF MC&lt;&gt;2 THEN IF CO&gt;2 THEN PRINT CHR$(7);\n1600 NEXT Q\n2000 X = X + 1\n2010 REM\n2020 REM\n2400 IF X&lt;10 THEN GOTO 1100\n2405 SC = SC + TS\n2406 IF MC=2 THEN IF TS&gt;0 THEN RE$(LEN(RE$)+1)=STR$(TS):GOTO 2410\n2407 IF TS&gt;0 THEN RE$ = RE$ + \" +\" + STR$(TS)\n2410 IF RE$&lt;&gt;\"\" THEN PRINT RE$;\n2500 PRINT \" \"\n2510 LI = LI + 1\n2520 IF LI&gt;49 THEN GOTO 7050\n2600 REM\n3900 GOTO 1000\n4000 END\n5000 REM CLS\n5010 FOR T=0 TO 40\n5020 PRINT \" \"\n5030 NEXT T\n5040 RETURN\n6000 REM GET NEXT CHAR\n6001 C = RND(4)\n6002 IF C=0 THEN GOTO 6007\n6003 IF C=1 THEN GOTO 6007\n6004 IF C=2 THEN GOTO 6007\n6005 IF C=3 THEN GOTO 6007\n6006 C = INT(RND(1)*4)\n6007 REM C64 ETC\n6020 CH$ = \"#\"\n6030 IF C=1 THEN CH$ = \"X\"\n6040 IF C=2 THEN CH$ = \"O\"\n6050 IF C=3 THEN CH$ = \".\"\n6060 RETURN\n7000 REM GET FIELD VALUE FROM CH$\n7009 FV = 0\n7010 IF CH$=\"X\" THEN FV = 1\n7020 IF CH$=\"O\" THEN FV = 2\n7030 IF CH$=\".\" THEN FV = 3\n7040 RETURN\n7050 PRINT \" \"\n7055 PRINT \"END OF THE GAME\"\n7060 IF SC&lt;HC THEN GOTO 7065\n7061 PRINT \"\"\n7062 PRINT \"NEW HIGHSCORE! \";SC\n7063 HC=SC\n7065 PRINT \" \"\n7070 PRINT \"ANOTHER TRY? Y | N\"\n7080 INPUT N$\n7090 IF N$=\"Y\" THEN GOTO 500<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Fragestellung: Ist es m\u00f6glich ein Basic-Game zu entwickeln, das auf den meisten 8Bit-Homecomputern wie C64,MSX,MS-DOS,ZX81 etc l\u00e4uft? L\u00e4uft bestenfalls mit keinen! bis kleinen \u00c4nderungen? BASIC war die Sprache der 8Bit Homecomputer. Sie war alt (Darthmouth 1964), klein, eine Interpretersprache und dadurch relativ einfach zu implementieren. Erste Erkenntnisse zur &#8222;Lingua-Franca&#8220; BASIC Es w\u00fcrde also nahe liegen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[66,15,1],"tags":[],"class_list":["post-1260","post","type-post","status-publish","format-standard","hentry","category-basic","category-coding","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/1260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1260"}],"version-history":[{"count":21,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/1260\/revisions"}],"predecessor-version":[{"id":5135,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/1260\/revisions\/5135"}],"wp:attachment":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}