★ CODING ★ LISTINGS ★ XOR-SPRITE (SCHNEIDER AKTIV) ★ |
XOR-Sprite (Schneider Aktiv) | Coding Listings |
BASIC-TRICKKISTE Die CPC-Serie verfügt über ein ausgeklügeltes Betriebssystem, in dem ungeahnte Fähigkeiten schlummern. Diese können auch vom BASIC ausgeschöpft werden, wobei das Handbuch nur spärlich Hilfestellung leistet. Aber zum Glück gibt es ja SCHNEIDER AKTIV, das dieses Manko wieder ausbügelt. TRICKREICHE SPRITES! In jedem Profi-Spielprogramm schweben diese Figuren mühelos über den Bildschirm, ohne daß die schöne Kulisse dahinter Schaden nimmt. Versucht der BASIC-Programmierer ähnliches, muß er frustriert feststellen, daß jede Bewegung seiner Spielfigur breite Schneisen' in den mühsam erstellten Hintergrund schlägt. Doch „Desperado City“ ist damit nicht verloren und dem „Cavern of Danger“ kann geholfen werden. Es geht nämlich auch anders, wie das Programm XOR zeigt. Steuern Sie nach dem Programmstart die Männchen mit den Cursor-Tasten über den Bildschirm. Wie sie unschwer erkennen werden, scheinen die Männchen vor dem Linien-Wirrwar zu schweben — und das ohne großen Programmieraufwand! Aber es kommt noch besser: Mit _dnem Druck auf COPY können Sie die Männchen wahlweise vor oder hinter die Linien zaubern. Diesen Umstand haben wir allein dem Steuerzeichen CHR$(23) zu verdanken, mit dem verschiedene Graphik-Modi ausgewählt werden können. Aber vorab ein kleiner Ausflug in die Aussagenlogik: Ein Byte besteht bekanntlich aus acht Bits, die wiederum als ,wahre4 oder »falsche* Aussagen angesehen werden können (das soll nicht heißen, daß Bits lügen, sondern daß sie lediglich die Zustände 1 oder 0 kennen). Diese Aussagen können nun auf verschiedene Weise miteinander verknüpft werden, wobei das Ergebnis in Abhängigkeit von der Art der Verknüpfung und dem ,Wahrheitsgehalt' der Ausgangsaussagen wieder eine ,wahre4 oder ,falsche' Aussage ist. Bei der AND-Verknüpfung ist das Ergebnis nur dann ,wahr‘ (=1), wenn beide Operanden wahr sind, an sonsten ist es falsch (=0). Die OR-Verknüpfung ist bescheidener: hier kommt bereits eine 1 heraus, wenn nur einer der beiden (oder beide) Operanden gleich 1 ist. Eine Spezialität ist nun die XOR-Verknüpfung: hier ist das Ergebnis dann gleich 1, wenn nur genau ein Operand gleich 1 ist. Haben beide Operanden den gleichen .Wahrheitsgehalt' (beide 1 oder 0), ist das Ergebnis gleich 0. Ob Sie's nun glauben oder nicht — genau dieser XOR-Verknüpfung verdanken wir unsere .Schwebe-männchen1. Wir können nämlich mit CHR$(23) die Verknüpfungsart von Graphik und Hintergrund bestimmen. Hierbei gilt folgendes: PRINT CHR$(23) + CHRS(0) ergibt Normal-Modus (überschreiben) Die erste Mögichkeit ist ja von den oben erwähnten .Schneisen' her hinlänglich bekannt. Die beiden letzten Möglichkeiten geben für graphische Experimente nicht soviel her, wohl aber die XOR-Graphik. Zuerst jedoch noch ein wichtiger Hinweis: Das Ganze klappt beim CPC nur in der Graphik- und nicht in der Textausgabe. XOR-Effekte lassen sich also nur mit Punkten und mit Linien erzielen oder nach dem TAG-Befehl, der die Ausgabe von Textzeichen an einer beliebigen Punktposition ermöglicht. Jeder Punkt des Graphikbildschirms ist nun mit einem bestimmten Farbattribut behaftet. Im Mode 1 stehen Ihnen 4 INK's (0—3) zur gleichzeitigen Verfügung, und entsprechend sehen die (binären) Farb-attribute aus: 00, 01, 10, 11. Je nach ausgewähltem Modus wird nun bei der Graphikausgabe das Attribut eines jeden Punktes mit dem des darunterliegenden verknüpft. Dies geschieht bit-weise, d.h. das Ergebnis-Attribut ergibt sich aus der Verknüpfung der einzelnen Stellen der binären Ausgangs-Attribute. In unserem Programm ergeben sich folgende Kombinationen: PAPER auf PAPER = 00 xor 00 = 00 = PAPER Die erste Besonderheit liegt in der letzten Kombination. Treffen die mit PEN 1 ausgegebenen Männchen auf die in PEN 2 ausgegebenen Linien, so erscheinen die (Kollisionspunkte' in PEN 3. Dies ist jedoch nicht direkt ersichtlich, da PEN 3 mit der gleichen Farbe (Nr. 26) belegt ist wie PEN 1 — die Männchen erscheinen intakt. Das ändert sich mit einem Druck auf COPY, da nun PEN 3 mit der gleichen Farbe wie PEN 2 (Nr. 10) belegt wird, und nun erscheinen die Linien intakt. Das ist ja alles schön und gut, werden Sie sagen, aber das ließe sich auch mit der OR-Verknüpfung hinkriegen und wie wird denn nun der Hintergrund wieder repariert?! Ganz einfach — Sie geben das gleiche Zeichen an derselben Stelle noch einmal aus, so wie dies in Zeile 360 geschieht. Jetzt ergeben sich folgende Kombinationen: PAPER auf PAPER = 00 xor 00 = 00 = PAPER Die zweite Kombination sorgt dafür, daß sich die PAPER-überlagemden Männchen in .Wohlgefallen* auflösen, und die dritte Kombination repariert die Linien, indem die Kollisionspunkte wieder deren Farbe annehmen. Wenn wir nun den ganzen Vorgang — punktweise verschoben — wiederholen, entsteht der Eindruck einer gleitenden Bewegung vor einem festen Hintergrund. Das Ganze funktioniert natürlich auch im MODE 0 und mit anderen Farben und bedingt auch im Mode 2, d.h. wenn Vorder- und Hintergrund mit demselben PEN erstellt sind. Schließlich sei noch erwähnt, daß sich mit den aufgeführten logischen Verknüpfungen auch interessante Rechenoperationen durchführen lassen. Diese jetzt jedoch im Einzelnen aufzuführen, würden den Rahmen des Artikels sprengen. Und noch etwas: Sollte Ihnen die Cursor-Abfrage in den Zeilen 290 und 300 schleierhaft Vorkommen, so lassen Sie sich belehren, daß im CPC ein ,wahrer' Sachverhalt den Wert —1 und ein »falscher* den Wert 0 zugewiesen bekommt. Damit läßt es sich rechnen und manche IF-Abfragen können durch einen schnellen Arithmetik-Ausdruck ersetzt werden. Der gleiche Umstand läßt sich auch auf Variablen anwenden, die nur zwei Werte annehmen. Für solche Flag's sollten die Werte —1 und 0 gewählt werden, da sich dadurch IF-Abfragen auf die Firm ‘IF Flag THEN ...‘ oder ‘IF NOT flag THEN ...“ beschränkt werden können.
|