★ APPLICATIONS ★ PROGRAMMATION ★ Berechnung der Umsatzsteuer ★ |
Hisoft Sprites (Schneider CPC-Welt) | Applications Programmation |
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) 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. 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- 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: 0 XOR 0 = 0 |
|
|