APPLICATIONSPROGRAMMATION ★ Berechnung der Umsatzsteuer ★

Hisoft Sprites (Schneider CPC-Welt)Applications Programmation
★ 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 ★ 

Blockgrafik

Bei Grafik muß Pascal erweitert werden, damit der Programmierer zumindest den gleichen Komfort hat wie bei BASIC, Aber es geht sogar noch besser, das zeigt unser Beispiel über Blockgrafik.

Bei komplizierten Datenstrukturen geht es darum, Bilder aus einzelnen Bildpunkten aufzubauen. Wer denkt da nicht an UFOs, Autos, Westernhelden, kurzum: die ganze Palette der Spielesprites? Ideal fiir eine Figur ist ein zweidimensionales Array of Boolean, dessen „breite“ und „höhe“ Sie an der Konstantendeklaration Ihren Bedürfnissen anpassen können.

Definition für mehrere Sprites

Da wir aber mehrere Figuren vordefinieren wollen, fassen wir kurzerhand „maxsprites“ solcher Gestalten in einem weiteren Array zusammen. Damit geht die Sache in die dritte Dimension, was unsere Vorstellungskraft bereits reichlich strapaziert. Daher hier eine kurze Merkregel für das Array spr: spr[x,y,z]:

x=Nummer des Sprites (1.. maxsprites)
y=y-Koordinate (1..hoehe)
z=x-Koordinate (1.breite)

Damit ein solches Sprite auch definiert werden kann, gibt es zum einen den Datentyp spritestr, zum anderen die Prozedur line. Sie ermöglicht es, in der Reihe z des Sprites s die Zeile shape einzufügen. Damit können Sie eine Figur von oben nach unten, von unten nach oben, von Innen nach außen oder querbeet definieren, indem Sie einzelne Zeilen hinzufügen. Wichtig ist dabei nur, daß Sie die Zeile bis zur vollen Länge mit Leerzeichen auffüllen. Dieses bedeutet ,.Punkt nicht gesetzt“, jedes andere setzt einen Punkt in unserem Array of Boolean.

Da es in der Natur eine Unmenge symmetrischer

Gebilde gibt, die Sie vielleicht auch gerne darstellen würden, kommen Sie nicht umhin, auch die folgenden beiden Prozeduren abzutippen. mirrorleft spiegelt die linke Hälfte nach rechts, mirrortip die obere Hälfte nach unten. Beide Prozeduren, hintereinander aufgerufen, führen eine Punktspiegelung am Mittelpunkt aus, wie das Hauptprogramm anhand eines rautenähnlichen Gebildes demonstriert.
Ein kleiner Luxus ist die Prozedur invert, welche ein Negativ der Figur herstellt. Sicher gibt es auch dafür hin und wieder Verwendung.

Ebenso einfach wie diese drei ist auch die Prozedur initsprites aufgebaut. Sie setzt einfach alle Punkte auf FALSE zurück. Ob Sie sie zu Programmbeginn aufrufen oder nicht, bleibt Ihnen überlassen.

Günstig ist es auf alle Fälle, wenn Sie Sprites definieren, die völlig leere Zeichen enthalten; etwa, wenn Sie eine vorgegebene Höhe nicht voll ausnutzen. Dann nämlich sparen Sie sich einige Line-Be-fehle, ohne zu riskieren, daß Schrott auf dem Bildschirm erscheint.

Die Prozeduren gpen und plotd benutzen die Firmware, um den Grafikstift (0 oder 1) zu wählen und einen Punkt zu zeichnen. Sie werden von der Prozedur setsprite benötigt. Sie zieht wieder einen (kleinen!) Bandwurm an Parametern hinter sich her. Das Wichtigste ist natürlich die Nummer des Sprites, gefolgt von der gewünschten Zeichenposition. Die Koordinaten (x/y) entsprechen hierbei der linken unteren Ecke der Figur.

Mit Hilfe eines Vergrößerungsfaktors lassen sich kleinere Sprites auch auf einer größeren Fläche zeichnen, was jedoch zu einer vergröberten Darstellung fuhrt. Für „Originalgröße“ steht natürlich die Eins. Der letzte Parameter ist vom Typ Boolean und gibt an, ob der Hintergrund (des ganzen Sprite-Feldes) gelöscht werden (FALSE) oder erhalten bleiben (TRUE) soll.

Viele Zählvariablen verderben nicht die Übersichtlichkeit

Die Prozedur selbst benötigt eine Unmenge von Zählvariablen, obwohl sie recht einfach funktioniert. Für jeden gesetzten Punkt im Array wird ein Block auf den Bildschirm gezeichnet, der dem Vergrößerungsfaktor vfak entspricht. Wenn vorgesehen ist, daß der Hintergrund gelöscht wird, zeichnet die Routine in Farbe 0 einen ebenso großen Block, wenn ein Array-Element mit dem Wert FALSE angetroffen wird. Um die Prozedur zu verstehen, sollten Sie sich die Stellen ansehen, an denen die Koordinatenpunkte xh und yh ihre Werte ändern. Die Routine ist übrigens für die Anwendung im 80-Zeichen Modus angelegt, da in x^Richtung immer nur um einen Schritt vorgerückt wird.

Das Hauptprogramm zeichnet das oben erwähnte Rautenmuster in verschiedenen Vergrößerungsstufen. Wenn Sie sich das Ab tippen dieser primitiven Konstruktion ersparen wollen, begnügen Sie sich eben mit der hier ab ge-
druckten Hardcopy. Sie können sich dann gleich an interessantere Objekte wagen.

Die Bezeichnung „Sprites“ ist Ihnen sicherlich von Computerspielen her bekannt. Dort sind Sprites bewegliche Figuren, die über den Bildschirm flitzen. Sicher können Sie das auch mit dieser Routine erreichen. Dazu muß es möglich sein, ein Sprite wieder verschwinden zu lassen.

Sprites werden durch den XOR-Modus gelöscht

Die langsamste Methode wäre es, eine Figur durch ein „Leersprite“ (nur FALSE-Eintragungen) und die Option „Hintergrund löschen“ wieder zu entfernen. Daß es auch einfacher geht, wissen Sie sicher von BASIC. Dort haben Sie doch auch die Möglichkeit, mit PRINT CHR$(23);CHRS(1);

den sogenannten XOR-Modus einzuschalten, der Grafiken durch ein Exklusiv oder mit dem Hintergrund verknüpft. Das geht in Pascal natürlich auch:
WRITE (CHR(23),CHR( 1)) Die Verknüpfungstabelle für XOR sieht bekanntlich so aus:

0 XOR 0 = 0
1 XOR 0 = 1
0 XOR 1 = 1
1 XOR 1 = 0

Programmbeispiel zum Sprite-Löschen

Das bedeutet, daß Sie nur ein zweites setsprite ausführen müssen, um die alte Figur zu löschen: „Punkt gesetzt“ XOR ,»Punkt gesetzt“ heißt „Punkt verschwindet“. Probieren Sie's doch mal mit einer beliebigen Figur:

WRITE (CHR(23),CHR(1))
FOR i := 0 TO 640 DO

BEGIN
setpsrite (1,i,10,1,TRUE);
setsprite (1,i,10,1,TRUE);
i:=i+4
END

Was hier mit Punkten geschah, soll in der nächsten Folge mit Linien realisiert werden. „Polygonzüge“ oder „Vektorgrafik“ lauten die offiziellen, etwas hochtrabenden Bezeichnungen dafür. Sie werden staunen, mit welch einfachen Mitteln man komplizierte Grafiken aufbauen kann.

JE , SW

★ PUBLISHER: Schneider CPC-Welt
★ YEAR: 1988
★ CONFIG: 64K + AMSDOS
★ LiCENCE: LISTING
★ COLLECTION: SCHNEIDER CPC-WELT 1988
★ LANGUAGE:
★ AUTHOR: Alwin Ertl
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Hisoft-Sprites    (Schneider  CPC-Welt)    LISTING    GERMANDATE: 2021-06-21
DL: 177
TYPE: PDF
SiZE: 865Ko
NOTE: 3 pages/PDFlib v1.6

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

Lien(s):
» Applications » Generador de Sprites / Amstrad Sprites
» Applications » Sprites Alive
» Applications » Sprites Logiciels - Budget Familial
» Applications » Sprites Logiciels - Graphisto+ Graph
» Applications » HSD: Hard Sprites Designer
» Applications » Sprites Alive - Compiler Version
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» 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 169 millisecondes et consultée 758 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.