Wer kennt nicht NIGHT DRIVER für den C64 ? So oder ähnlich könnte man es programmieren

  • Hallo,


    wer kennt nicht das Spiel NIGHT DRIVER für den C64 ?
    Ich dachte mir, so schwer kann das nicht in BASIC zu programmieren sein, also habe ich damit angefangen (noch ohne Kurven):


    10 DEFINT A-J
    20 OPTION BASE 1
    30 DIM CY(10),DY(10)
    40 S$=CHR$(179):T$=CHR$(219)
    50 B=1:REM INDEX FOR HIGHLIGHTED MARK
    60 MAX=.4:V=MAX:REM INITIAL DELAY
    70 CLS:LOCATE 23,14
    80 PRINT "PRESS 'A' TO ACCELERATE, 'Y' TO SLOW DOWN OR 'Q' TO QUIT";
    90 FOR I=1 TO 10:READ CX(I),CY(I):NEXT I:REM READ COORDS FOR PHASE 1
    100 FOR I=1 TO 10:READ DX(I),DY(I):NEXT I:REM READ COORDS FOR PHASE 2
    120 REM MAIN PROGRAM
    130 FOR I=1 TO 10
    140 REM DRAW 1ST PHASE
    150 LOCATE CY(I),CX(I):IF B=I THEN PRINT T$; ELSE PRINT S$;
    160 LOCATE CY(I),79-CX(I):IF B=I THEN PRINT T$; ELSE PRINT S$;
    170 REM DELETE 2ND PHASE (EVEN IF NOT YET DRAWN)
    180 LOCATE DY(I),DX(I):PRINT " ";
    190 LOCATE DY(I),79-DX(I):PRINT " ";
    200 NEXT I
    210 GOSUB 410:REM KEY PRESSED?
    220 FOR I=1 TO 10
    230 REM DRAW 2ND PHASE STREET
    240 LOCATE DY(I),DX(I):IF B=I THEN PRINT T$; ELSE PRINT S$;
    250 LOCATE DY(I),79-DX(I):IF B=I THEN PRINT T$; ELSE PRINT S$;
    260 REM DELETE 1ST PHASE DRAWINGS
    270 LOCATE CY(I),CX(I):PRINT " ";
    280 LOCATE CY(I),79-CX(I):PRINT " ";
    290 NEXT I
    300 GOSUB 410:REM KEY PRESSED?
    400 GOTO 130
    410 LOCATE 1,1:PRINT "SPEED";41-INT(V*100);" ";
    420 B=B+1:IF B>10 THEN B=1
    430 K$=INKEY$
    440 IF K$="q" OR K$="Q" THEN 500
    450 IF K$="a" OR K$="A" THEN V=V-.01:IF V<.02 THEN V=.02
    460 IF K$="y" OR K$="Y" THEN V=V+.01:IF V>MAX THEN V=MAX
    470 Z=TIMER+V:WHILE Z>TIMER:WEND:REM NOW WAIT V SEC
    480 SOUND INT(MAX*200-V*200)+37,1
    490 RETURN
    500 LOCATE 24,1:END
    510 DATA 30,2, 29,4, 28,6, 27,8, 25,10, 23,12, 20,14, 16,16, 11,18, 5,20
    520 DATA 29,3, 28,5, 27,7, 26,9, 24,11, 22,13, 19,15, 15,17, 10,19, 4,21


    Dann habe ich mir aber gesagt, wenn ich die Kurven (mindestens 2 Varianten) auch implementiere, wächst die Anzahl der DATA Werte (pro "Bild" immerhin 40 Werte).
    Was noch schlimmer ist, das muss man dann alles ausprobieren, ein Blatt mit Rechenkästchen/Karomuster wäre dann angebracht.
    Ausserdem kann man dann nicht die Kurven stufenweise stärker machen, sondern man muss sich wie bereits erwähnt bei den DATA Werten festlegen.


    Aber es geht auch viel eleganter:


    10 DEFINT A-J
    40 S$=CHR$(179):T$=CHR$(219)
    50 B=1:REM INDEX FOR HIGHLIGHTED MARK
    60 MAX=.4:V=MAX:REM INITIAL DELAY
    70 CLS:LOCATE 23,14
    80 PRINT "PRESS 'A' TO ACCELERATE, 'Y' TO SLOW DOWN OR 'Q' TO QUIT";
    120 REM MAIN PROGRAM
    130 FOR I=1 TO 10
    140 REM DRAW 1ST PHASE
    145 M=INT(.25*(I*I))
    150 LOCATE I*2,44+M:IF B=I THEN PRINT T$; ELSE PRINT S$;
    160 LOCATE I*2,35-M:IF B=I THEN PRINT T$; ELSE PRINT S$;
    170 REM DELETE 2ND PHASE (EVEN IF NOT YET DRAWN)
    180 LOCATE I*2+1,45+M:PRINT " ";
    190 LOCATE I*2+1,34-M:PRINT " ";
    200 NEXT I
    210 GOSUB 410:REM KEY PRESSED?
    220 FOR I=1 TO 10
    230 REM DRAW 2ND PHASE STREET
    235 M=INT(.25*(I*I))
    240 LOCATE I*2+1,45+M:IF B=I THEN PRINT T$; ELSE PRINT S$;
    250 LOCATE I*2+1,34-M:IF B=I THEN PRINT T$; ELSE PRINT S$;
    260 REM DELETE 1ST PHASE DRAWINGS
    270 LOCATE I*2,44+M:PRINT " ";
    280 LOCATE I*2,35-M:PRINT " ";
    290 NEXT I
    300 GOSUB 410:REM KEY PRESSED?
    400 GOTO 130
    410 LOCATE 1,1:PRINT "SPEED";41-INT(V*100);" ";
    420 B=B+1:IF B>10 THEN B=1
    430 K$=INKEY$
    440 IF K$="q" OR K$="Q" THEN 500
    450 IF K$="a" OR K$="A" THEN V=V-.01:IF V<.02 THEN V=.02
    460 IF K$="y" OR K$="Y" THEN V=V+.01:IF V>MAX THEN V=MAX
    470 Z=TIMER+V:WHILE Z>TIMER:WEND:REM NOW WAIT V SEC
    480 SOUND INT(MAX*200-V*200)+37,1
    490 RETURN
    500 LOCATE 24,1:END


    Die Zeilennummern habe ich mal ähnlich gelassen, damit man die zwei Ansätze vergleichen kann.


    Als Nächstes versuche ich die Kurven zu implementieren, bitte Geduld.

    Bilder

    "The biggest communication problem is we do not listen to understand. We listen to reply." - Stephen Covey


    Webseite und Blog ist immer noch - seit fast 20 Jahren - online.

  • Ich finde es super, das du hier ein paar kleine BASIC-Programme zeigst.
    Wird langsam mal wieder Zeit meinen 8088 PC wieder aufzustellen und
    mich nochmal ein wenig mit GW-BASIC zu befassen.


    Gruß Björn

    The evil is always and everywhere.

  • Super!!

    »It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.« (Edsger W. Dijkstra)


    Homespage| Computerarchäologie | Blog | Forschung

  • Wie jetzt? Nur 50 Zeilen für dieses Programm? Echt jetzt?
    Ich bin beeindruckt. Dieses Programm sollte doch eigentlich unter allen Basic-varianten funktionieren
    - eventuell mit ein wenig Anpassung?


    Stefan

  • Hallo Stefan,


    es ist ja noch nicht fertig, dann wenn es fertig ist, werden es wohl wirklich 50 Zeilen werden (mehr nicht). Momentan fehlen noch die Kurven, wird leider etwas trickreicher als gedacht, aber ich bekomme das am Wochenende spätestens alles geregelt.
    Du siehst hier also momentan nur "Proof of Concept" Material...


    Hier mal (als Zwischenhappen) der Code für die 2 Stufen der Kurve, in Richtung "rechts", bin momentan noch am Grübeln wie man die Strasse dann so gestaltet (im Ablauf des Spiels), dass man einen Crash macht, wenn man nicht lenkt.


    Gruss Peter