DirectQB Teil 2 - primitive Draw Routinen Neuvorstellung von "XAO Wars 2" |
In dieser Ausgabe habe ich selbts ein Tuturial zu DirectQB geschrieben. Desweiteren gibt es ein Interview zum neuen Spiel von AnWeSoft namens "NEW WORLD" und eine Neuvorstellung des Spiels "XAO Wars 2" von Clocksoft.
DirectQB Teil 2 von Soeren Dressler
Nachdem nun DirectQB erfolgreich installiert wurde, kann
man mit der Programmierung beginnen.
Fangen wir als erstes mit den so genannten primitiven
Drawroutinen an. Ein QBasic-Programmierer versteht darunter, die von QBasic
gegebenen Möglichkeiten zur Grafikprogrammierung. Dazu gehören
zum Beispiel die Befehle LINE, PSET, POINT usw. DirectQB bietet diese Möglichkeiten
auch, nur dass diese auf Assembler basieren und somit um ein vielfaches
schneller sind, als die Befehle von QBasic. Die aller erste Zeile in dem
Programm sollte 'INCLUDE: 'DIRECT.BI' sein.
Dieses Kommando startet die Liste mit DirectQB-Befehlen, die erst jetzt
verwendbar werden.
Als nächstes muß DirectQB gestartet werden.
Das erfolgt durch folgenden Befehl:
DQBINIT (a, b, c)
Als erstes sollte man wissen, dass das eine Funktion
ist, die einen Wert zurück liefert. Normalerweise ist der Wert 0.
Das passiert aber nur wenn alles in Ordnung ist. D.h. wenn keine Fehler
aufgetreten sind. Wenn es aber doch zu Fehler gekommen ist, wird ein Wert
ungleich 0 zurück geliefert. In diesem Fall muß DirectQB sofort
aus dem Speicher entfernt werden bevor es zu schwerwiegenderen Fehlern
kommt, wie einem Systemabsturz. Für diese Aktion gibt es den Befehl
DQBclose,
auf jeden Fall vor dem Beenden des Programms stehen sollte. So sollte auf
jeden Fall der Anfang aussehen:
'$INCLUDE: 'DIRECTQB.BI'
IF DQBINT (A, B, C) THEN PRINT
"Es ist ein Fehler aufgetreten": DQBclose
PRINT "ES ist kein Fehler aufgetreten"
SLEEP
DQBclose
END
Was bedeutet nun A, B und C?
Diese Werte beschreiben die Speicherverwaltung. A gibt
die Anzahl der Layer, B die Anzahl der Soundsampels und C die Größe
des frei verwendbaren EMS Speichers an. Ein Beispiel:
DQBINIT(10, 5, 100)
Es wurden 10 Layer, 5 Soundsamples und 100 kb Speicher
reserviert.
Was ist ein Layer?
Ein Layer ist eine Art grafische Plattform die wie Bildschirmseiten
im EMS abgelegt werden. Jeder Layer benötigt 64kb Speicher und besitzt
eine Größe von 320*200 Pixeln. Jeder Layer bekommt eine Nummer
mit der er angewählt werden kann. Die 0 entspricht dem sichtbaren
Bildschirm alle anderen Nummern die dahinter liegenden Seiten. Man kann
nun beliebig auf diesen Layern malen, den Inhalt auf andere Layer kopieren
und löschen. Vorher sollte man aber den Bildschirm auf Grafik umschalten.
Normalerweise benutzt ein QBasic-Programmierer dafür den Befehl SCREEN
13. In diesem Fall benötigt man aber den Befehl DQBinitVGA welcher
dem Format 320*200 mit 256 Farben entspricht.
Um nun einen Pixel auf den Bildschirm zu bringen, benutzt
man das Kommando
DQBpset Layer, X, Y, Farbe
Layer gebt die Nummer des Layer's an auf dem gemalt werden
soll. X und Y sind X- und Y-Koordinaten und Farbe gibt den Farbwert an.
Ähnlich funktioniert das mit dem LINE Befehl:
DQBline Layer, X1,Y1,X2,Y2, Farbe
Wobei hier X1 und Y1 die Anfangskoordinaten und X2 und
Y2 die Endkoordinaten der Geraden sind.
Hier ein Beispiel:
'$INCLUDE: 'DIRECTQB.BI'
IF DQBINT (10, 0, 0) THEN PRINT
"Es ist ein Fehler aufgetreten": DQBclose
DQBinitVGA
DO
X% = RND * 320
Y% = RND * 200
C% = RND * 255
DQBpset 0, X%, Y%, C%
LOOP UNTIL INKEY$ = ""
DO
X1% = RND * 320
Y1% = RND * 200
X2% = RND * 320
Y2% = RND * 200
C% = RND * 255
DQBline 0, X1%, Y1%, X2%, y2%,
C%
LOOP UNTIL INKEY$ = ""
DQBclose
END
Um nun den Inhalt eines Layers auf einen anderen zu kopieren
gibt es den Befehl
DQBcopylayer A, B
Der Wert A ist die Nummer des zu kopierenden Layers und
B die Nummer des Layers auf den der Inhalt kopiert werden soll.
Der Ausdruck zum Löschen eines Layers heißt:
DQBclearlayer LAYER
LAYER ist die Nummer des Layers. Ist der Wert = 0 , dann
wird der Bildschirm gelöscht.
Die Funktion POINT gibt es bei DirectQB auch.Sie lautet:
DQBpoint LAYER, X, Y
Diese Funktion liefert den Farbwert an Stelle X und Y
zurück. LAYER ist wieder die Nummer des Layers. Hier ein Beispiel:
C% = DQBPOINT(0, 10, 20)
Der Farbwert an Position X = 10 und Y = 20 des Bildschirms wurde auf C% gespeichert.
Das war's für diesen Teil.
Das nächste mal wird es um Sprites, Mouse und Sound
gehen.
Ich war mal wieder ein bißchen im Internet unterwegs und habe dabei ein interessantes Spiel mit dem Namen "NEW WORLD" bei AnWeSoft gesehen.
Um ein bißchen mehr darüber zu erfahren, hab ich dem Programmierer, Andreas Weigel, ein paar Fragen gestellt.
Hallo Andreas,
Der Screenshot sieht ja schon sehr interessant aus. Vielleicht könntest
du einfach mal was über dein Projekt "NEW WORLD" erzählen.
Es sollte mal ein Aufbaustrategiespiel werden (wie Siedler oder Anno1602). Da hab ich aber schnell gemerkt, dass das nicht leicht zu lösen wäre. Da hab ich mich also entschieden, jetzt nur ein Strategiespiel (erstmal ohne Aufbauphase) zu programmieren.
Wie wird das Spielprinzip aussehen?
Das Spielprinzip sieht folgendermaßen aus:
man hat die Auswahl zwischen vorgegebenen Karten (auf einer Karte sind
die ganzen Gebäude etc schon plaziert).
Eine Karte ist in 4 Bildschirme eingeteilt, das heißt man sieht
immer nur 1/4 der gesamten Karte. Wie bei Siedler schaut man von schräg
oben auf das Spielgeschehen. Man sieht also nun die Gebäude, Menschen
etc und kann diese auch anklicken. Wenn man zum Beispiel eine Holzfällerhütte
anklickt, sieht man wie viele Bäume sich darin befinden etc. So kann
man über die einzelnen Gebäude die Wirtschaft seiner "Stadt beeinflussen".
Man ist also fast wie bei SimCity ein Bürgermeister.
Was sind die Features von "NEW WORLD"?
+ Es ist komplett mit DirectQB programmiert.
+ Es gibt Mausunterstützung und Soundunterstützung.
+ Alle Grafiken sind als BMP bzw. PCX gespeichert.
Was sind derzeitige Probleme?
+ Wenn ich aus 2 (oder mehreren)verschiedenen Bilddateien etwas laden
will, haut das nie mit der Farbe hin (siehe dqbsetPal)
+ Sound geht nicht mit DirectQB sondern mit einer selbständigen
SUB
+ Mir fehlen die ganzen Grafiken für s' Spiel
Vielen Dank an dieser Stelle noch mal an Andreas
Weigel.
Wir sind gespannt, auf das Resultat.
Neuvorstellung von "XAO Wars 2"
Mit der Idee, einfach einmal etwas anderes zu Programmieren als Tools, machte sich das Entwicklerteam von Clocksoft daran, einem Spiel Namens "XAO Wars" zum Leben zu verhelfen. Der Programmierer war aber mit dem ersten Teil nicht sonderlich zufrieden, was nicht sehr unverständlich, so dass er seine neuen Kenntnisse in einen Nachfolger ein zu bauen versuchte.
Das leider noch unfertige Ergebnis ist "XAO Wars 2". Dieses grafisch nicht ganz zu verachtende Spiel, ist ähnlich dem bekannten "Tank Wars".
Das eigentlich sehr einfache Spielprinzip basiert auf einem 2D Schlachtfeld.
Der Spieler sieht seinen eigenen, sowie auch den gegnerischen Panzer, die sich in einer kleinen Hügellandschaft gegenüberstehen.
Ziel ist es nun, den gegnerischen Panzer mit möglichst wenigen Versuchen zu treffen und natürlich auch zu zerstören.
Die einzigen Einstellungsmöglichkeiten bestehen aus Schußkraft und Winkel. Wobei es dem Spieler überlassen wird wie er sie einsetzt. Leider sind beide dieser Angaben nicht grafisch dargestellt, sonderen nur als Zahlen ablesbar, was die Treffsicherheit sehr stark begrenzt. Ein kleines Fadenkreuz würde den Winkel sehr viel Anschaulicher darstellen und ein Energiebalken die Abschußkraft ebenfalls deutlicher machen.
Aber sonst gibt es nichts an dem Spiel zu meckern.
Gewinner ist nun der, der zum Schluß noch am Leben ist. Da es aber noch keinen Computergegener gibt, ist man auf einen Menschlichen Gegner angewiesen.
Das Spiel selbst, ist immer noch in der Entwicklung und es wird nach Christian Sowada, dem Programmierer, woll nie wirklich fertig werden, was darauf zurückzuführen ist, dass es es sich dabei um ein Gemeinschaftsprojekt handelt. Trotzdem stebt Clocksoft ein komplettes Spiel an, welches zusätzliche Dinge wie das Einsammeln von Kisten, realistische Blitze, tobende Vulkanausbrüche, andere Waffen, einen mehr oder weniger schlauen Computergegner und sehr viel mehr Animationen beinhalten soll. Und vielleicht auch eine funktionierende Highscore ist noch geplant.
Mein Tip ist, dass man sich das Spiel einfach einmal downloadet, spielt und selbst entscheidet.
written by Soeren Dressler