Einführung in Q-BASIC

Einleitung | Allgemeine Befehle | Grafik Befehle | Beispiele | Anregungen

Einleitung

Alle in Großbuchstaben geschriebenen Wörter stellen Befehle dar, alle in Kleinbuchstaben geschriebenen sind Parameter die angegeben werden müssen. Parameter die in []-Klammern stehen sind optional, müssen also nicht angegeben werden.
BASIC-Code wird Zeilenweise interpretiert, das heißt pro Zeile darf nur ein Befehl gegeben werden. Wenn es nötig ist mehrere Befehle pro Zeile anzugeben kann man dies tun indem man die Befehle mit einem Doppelpunkt trennt.

Variablen

$ Text (Zeichenfolge)
!Kommazahl-Kurz
# Kommazahl-Lang
% Ganzzahl-Normal
& Ganzahl-Lang

Variablen die ohne Endung notiert werden, werden automatisch zu Zahlen


allgemeine Befehle

INPUT variable

Liest eine Eingabe ein und setzt sie in die entsprechende Variable. Dabei sind sowohl Text als auch Zahlen Variablen erlaubt.

INKEY$

Liest nur ein Zeichen von der Tastatur und nimmt wie eine Text-Variable den Wert an, welcher dann an eine Variable oder direkt in einer IF-Anweisung benutzt werden kann.

SLEEP

Pausiert das Programm bis eine Taste gedrückt wurde.

BEEP

Gibt einen kurzen Ton auf dem Intern-Speaker aus. Ist meist sinnvoll um den Programmverlauf zu überprüfen.

REM / '

Dieser Befehl dient dazu Kommentare. Statt REM kan auch der Oberstrich ' verwendet werden um die Kommentare kompakter zu gestalten.

GOTO zeile

Läßt das Programm zur angegebnen Zeile springen. Zeilen können entweder mit Nummern markiert werden oder mit Wörtern, die Wörter müssen dann aber mit einem Doppelpunkt abgeschlossen werden.

Beispiel 1:
10 PRINT "Hallo"
GOTO 10

Beispiel 2:
Start:
PRINT "Hallo"
GOTO Start

PRINT text / variable

Schreibt den angegebenen Text auf den Bildschirm. Der Text muß in Anführungszeichen stehen. Wenn mehr als nur ein Text geschrieben werden soll, kann dieser durch ein Semikolon - ; angehängt werden. Es können auch Variablen angegeben werden, deren Wert dann ausgegeben werden.

Beispiel:
x = 50
PRINT "Wert von X: "; x; "."

Ausgabe:
Wert von X: 50.

IF bedingung THEN ereignis

Dient dazu Bedingungen zu bewerten und in abhängigkeit von ihnen ein Ereignis zu starten. Bedingungen bestehen meist aus Vergleichen von Variablen durch <, >, <=, >=. Es können auch mehrere Vergleiche verknüpft werden dazu dienen die Operanten AND (und), OR (oder), XOR (ausschließendes oder). Falls das Ereignis aus mehreren Befehlen besteht kann es über mehere Zeilen verteilt werden und muß mit einem END IF abgeschlossen werden.

Beispiel:
INPUT A
INPUT B
IF A > B THEN
PRINT "A ist größer als B"
END IF

RANDOMIZE TIMER

Leitet den Zufallgenerator ein.

RND

Funtioniert wie eine Kommazahl mit einem zufälligen Wert 0 < RND < 1. RND multiplizert mit einer Ganzzahl bringt eine zufallige Ganzzahl mit dem maximal Wert der Ganzzahl.

Beispiel:
PRINT "Zufallszahl zwischen 1 und 50: "; INT(RND*50)
PRINT "Zufallszahl zwischen 0 und 1: "; RND

INT(zahl)

Rundet eine Kommazahl auf eine Ganzzahl.

Grafik Befehle

Man muß zuerst um auf einen Grafik-Screens malen zu können ihn einleiten:

SCREEN modus

9 - 640*350 / 16 Farben / 2 Seiten
12 - 640*480 / 16 Farben / 1 Seite
13 - 320*200 / 256 Farben / 1 Seite

Nach der initialisierung des Grafik-Screens kann man mit folgenden Befehken auf ihn zugreifen und zeichnen:

CLS

Löscht den gesamten Bildschirm.

PSET (x, y), [farbe]

Zeichnet einen Punkt auf den Koordinaten X und Y mit der angegebenen Farben.

POINT (x,y)

Liefert die Farbnummer an den angegebnen Koordinate. Der Befehl wird wie eine normale Ganzzahl behandelt. Der Befehl kann teilweise ganz gut für Kollisionsabfrage genutzt werden.

LINE (x1, y1) - (x2, y2), [farbe], [bf]

Zeichnet eine Linie von X1, Y1 zu X2, Y2 mit der angegebenen Farbe. Wenn BF angegeben wird, wird statt der Linie ein Rechteck gezeichnet.

CIRCLE (x, y), radius, [farbe]

Zeichnet einen Kreis auf den Koordinaten X und Y mit angegebenem Radius und Farbe.

Beispiele

Punkte-Misch

'Punkte-Misch
' Autor: Ingo Ruhnke
SCREEN 13 'initialisation des Grafik-Screens
DO
PSET (RND*320, RND*200), RND*255 'Zeichnet Zufälligen Punkt auf den Bildschirm
LOOP UNTIL INKEY$="q"

Dieses Programm ist im vergleich zum unteren recht sauber gestaltet. Es enthält ausreichent Kommentare und Befehle die anderen Befehlen unterstellt sind werden eingerückt.

Crazy-Polys

5 a = 1: b = 1: aa = 1: bb = 1: aaa = 1: bbb = 1
10 SCREEN 12
20 CLS
30 x = INT(RND * 640)
40 y = INT(RND * 480)
50 xx = INT(RND * 640)
60 yy = INT(RND * 480)
70 xxx = INT(RND * 640)
80 yyy = INT(RND * 480)
90 LINE (x, y)-(xx, yy), 1
100 LINE (xx, yy)-(xxx, yyy), 4
110 LINE (xxx, yyy)-(x, y), 10
120 x = x + a: y = y + b
130 xx = xx + aa: yy = yy + bb
140 xxx = xxx + aaa: yyy = yyy + bbb
150 IF x >= 640 THEN a = INT(RND * 5) - 5
160 IF y >= 480 THEN b = INT(RND * 5) - 5
170 IF xx >= 640 THEN aa = INT(RND * 5) - 5
180 IF yy >= 480 THEN bb = INT(RND * 5) - 5
190 IF xxx >= 480 THEN aaa = INT(RND * 5) - 5
200 IF yyy >= 480 THEN bbb = INT(RND * 5) - 5
210 IF x <= 0 THEN a = INT(RND * 5)
220 IF y <= 0 THEN b = INT(RND * 5)
230 IF xx <= 0 THEN aa = INT(RND * 5)
240 IF yy <= 0 THEN bb = INT(RND * 5)
250 IF xxx <= 0 THEN aaa = INT(RND * 5)
260 IF yyy <= 0 THEN bbb = INT(RND * 5)
270 z = z + 1: IF z = 15 THEN CLS : z = 0: REM (z ist der "Verwisch Effekt")
280 GOTO 90
Dieser Quell-Code ist nicht sehr sauber und sollte zur Übung etwas übersichtlicher gestaltent werden.

Hi-Res

DECLARE SUB ShowScore (p1 AS INTEGER, p2 AS INTEGER)
DECLARE SUB Explo (ex AS INTEGER, ey AS INTEGER, Player AS INTEGER)
DECLARE SUB SetScr ()
DECLARE SUB Pause ()

COMMON x  AS INTEGER
COMMON y  AS INTEGER
COMMON x1 AS INTEGER
COMMON y1 AS INTEGER
COMMON m  AS INTEGER
COMMON n  AS INTEGER
COMMON m1 AS INTEGER
COMMON n1 AS INTEGER
COMMON SHARED a AS STRING
COMMON r AS INTEGER
COMMON p AS INTEGER
COMMON p1 AS INTEGER
COMMON Time AS SINGLE

CONST g = 20
CONST maxX = 639 - g
CONST maxY = 479 - g
CONST minX = 0 + g
CONST minY = 16 + g
CONST Farbe1 = 2
CONST Farbe2 = 1

CONST StartX = 300
CONST StartY = 240
CONST StartX1 = 340
CONST StartY1 = 240
CONST StartM = 0
CONST StartM1 = 0
CONST StartN = 1
CONST StartN1 = -1
CONST StartTime = 300

SCREEN 12
SetScr
CALL ShowScore(p, p1)
Time = StartTime
x = StartX
y = StartY
x1 = StartX1
y1 = StartY1

n = StartN
n1 = StartN1

Pause

DO UNTIL a$ = "q"

a$ = INKEY$
FOR za = 1 TO Time: NEXT za
Time = Time - .01

x = x + m
y = y + n
x1 = x1 + m1
y1 = y1 + n1

IF POINT(x, y) = Farbe2 OR POINT(x, y) = Farbe1 THEN
   p = p + 1
   CALL Explo(x, y, 1)
   x = StartX
   y = StartY
   x1 = StartX1
   y1 = StartY1
   m = StartM
   n = StartN
   m1 = StartM1
   n1 = StartN1
   Time = StartTime
   Pause
   CLS
   SetScr
   CALL ShowScore(p, p1)
END IF


IF POINT(x1, y1) = Farbe2 OR POINT(x1, y1) = Farbe1 THEN
   p1 = p1 + 1
   CALL Explo(x1, y1, 2)
   Pause
   SetScr
   CALL ShowScore(p, p1)
   x = StartX
   y = StartY
   x1 = StartX1
   y1 = StartY1
   m = StartM
   n = StartN
   m1 = StartM1
   n1 = StartN1
   Time = StartTime
END IF

PSET (x, y), Farbe1
PSET (x1, y1), Farbe2

SELECT CASE a$

   'Player 1
   CASE "w"'(CHR$(0) + "H")' oben
      IF n <> 1 THEN n = -1: m = 0
   CASE "s"'(CHR$(0) + "P")  'unten
      IF n <> -1 THEN n = 1: m = 0
   CASE "d"'(CHR$(0) + "M")  'rechts
      IF m <> -1 THEN n = 0: m = 1
   CASE "a"'(CHR$(0) + "K") 'links
      IF m <> 1 THEN n = 0: m = -1

   CASE ("y")
      SELECT CASE m
         CASE 1 'rechts
            m = 0
            n = -1

         CASE -1 'links
            m = 0
            n = 1

         CASE 0
            SELECT CASE n 'oben
               CASE -1
                  m = -1
                  n = 0
               CASE 1 'unten
                  m = 1
                  n = 0
            END SELECT
      END SELECT

   CASE ("x")
      SELECT CASE m
         CASE 1 'rechts
            m = 0
            n = 1
            
         CASE -1 'links
            m = 0
            n = -1

         CASE 0
            SELECT CASE n 'oben
               CASE -1
                  m = 1
                  n = 0
               CASE 1 'unten
                  m = -1
                  n = 0
            END SELECT
      END SELECT


   'Player 2
   CASE ("8") 'oben
      IF n1 <> 1 THEN n1 = -1: m1 = 0
   CASE ("5") 'unten
      IF n1 <> -1 THEN n1 = 1: m1 = 0
   CASE ("6") 'rechts
      IF m1 <> -1 THEN n1 = 0: m1 = 1
   CASE ("4")'links
      IF m1 <> 1 THEN n1 = 0: m1 = -1

   CASE ("1")
      SELECT CASE m1
         CASE 1 'rechts
            m1 = 0
            n1 = -1

         CASE -1 'links
            m1 = 0
            n1 = 1

         CASE 0
            SELECT CASE n1 'oben
               CASE -1
                  m1 = -1
                  n1 = 0
               CASE 1 'unten
                  m1 = 1
                  n1 = 0
            END SELECT
      END SELECT

   CASE ("2")
      SELECT CASE m1
         CASE 1 'rechts
            m1 = 0
            n1 = 1

         CASE -1 'links
            m1 = 0
            n1 = -1

         CASE 0
            SELECT CASE n1 'oben
               CASE -1
                  m1 = 1
                  n1 = 0
               CASE 1 'unten
                  m1 = -1
                  n1 = 0
            END SELECT
      END SELECT
  
   CASE ("c")
      p = 0: p1 = 0:
      Pause
      SetScr
      CALL ShowScore(p, p1)
      x = StartX
      y = StartY
      x1 = StartX1
      y1 = StartY1
      m = StartM
      n = StartN
      m1 = StartM1
      n1 = StartN1
      Time = StartTime

END SELECT

LOOP

SUB Explo (ex AS INTEGER, ey AS INTEGER, Player AS INTEGER)

SELECT CASE Player
CASE 1
FOR r = 1 TO 40 STEP 1
   CIRCLE (ex, ey), r, 2
   CIRCLE (ex, ey), r / 2, 10
   FOR za = 1 TO 10: NEXT za
NEXT r

CASE 2
FOR r = 1 TO 40 STEP 1
   CIRCLE (ex, ey), r, 1
   CIRCLE (ex, ey), r / 2, 9
   FOR za = 1 TO 10: NEXT za
NEXT r

END SELECT

FOR r = 0 TO 40 STEP 1
   CIRCLE (ex, ey), r, 0
   FOR za = 1 TO 100: NEXT za
NEXT r


END SUB

SUB Pause

DO UNTIL (a$ = CHR$(13) OR a$ = "q" OR a$ = " ")
a$ = INKEY$
LOOP

END SUB

SUB SetScr

CLS

LINE (minX, minY)-(maxX, minY), 2
LINE (maxX, minY)-(maxX, maxY), 2
LINE (minX, minY)-(minX, maxY), 1
LINE (minX, maxY)-(maxX, maxY), 1



END SUB

SUB ShowScore (p1 AS INTEGER, p2 AS INTEGER)

COLOR 7: LOCATE 1, 1: PRINT "Punkte ->",
COLOR Farbe1: PRINT "Player 1:"; p2,
COLOR Farbe2: PRINT " Player 2:"; p1

END SUB

Anregungen

Zahlenraten:

Schreib ein Programm bei dem sich der Computer eine Zufallszahl denkt und der Spieler sich durch raten der Zahl nähern muß. Der Computer sagt dabei ob die eingegebene Zahl größer oder kleiner ist als die gedachte. Am Anfang sollte der Spieler dem Computer eine Zahlenobergrenze für die Zufallszahl.

Bildschirmschoner:

Schreibe einige Bildschirmschoner bei denen zufallig Kreise, Rechtecke oder Linien auf dem Bildschirm verteilt werden. Experimentiere auch mit expandierenden Kreisen und Rechtecken.

© Ingo Ruhnke, 9.10.1997



Schlund und Partner zurück zu Programming Stuff
zurück zur Startseite

Last updated on Februar 13, 1998
created by Ingo Ruhnke