CODINGLISTINGS ★ XOR-SPRITE (SCHNEIDER AKTIV) ★

XOR-Sprite (Schneider Aktiv)Coding Listings
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

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)
PRINT CHR$(23) + CHRS(1) ergibt XOR-Modus
PRINT CHR$(23) + CHR$(2) ergibt AND-Modus
PRINT CHR$(23) + CHR$(3) ergibt OR:Modus

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
PEN 1 auf PAPER = 01 xor 00 = 01 = PEN 1
PEN 1 auf PEN 2 = 01 xor 10 = 11 = PEN 3

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
PEN 1 auf PEN 1 = 01 xor 01 = 00 = PAPER
PEN 1 auf PEN 3 = 01 xor 11 = 10 = PEN 2

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.

SA

★ PUBLISHER: Schneider Aktiv
★ YEAR: 1986
★ LiCENCE: LISTING
★ COLLECTION: SCHNEIDER AKTIV 1986
★ AUTHOR: Olav Pankow
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» XOR-Sprite    (Schneider  Aktiv)    GERMANDATE: 2021-06-12
DL: 148
TYPE: ZIP
SiZE: 4Ko
NOTE: Dumped by Johnny Farragut ; 40 Cyls
.HFE: Χ

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding Src's » Raytracing (Devilmarkus)
» Coding Src's » Animation (CPC Infos)
» Coding Src's » Graphic - Circle Writer (Amstrad Computer User)
» Coding Src's » Graphic (Mark Holmes/Amstrad Action)
» Coding Src's » Graphic - 3D - Cone (Amstrad Computer User)
» Coding Src's » Arnold Jewels (Amstrad Computer User)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 286 millisecondes et consultée 706 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.