' Spiel Pong ' Von: "Andreas Meile" ' An: fam.altmann@t-online.de (Mario Altmann) ' Betreff: Re: QBasic (Tennis) ' Datum: Die, 22. Sept 1998 20:37 Uhr CONST Spielgeschw! = .1 Freq1! = 440! * 2! ^ (15! / 12!) Freq2! = 440! * 2! ^ (3! / 12!) ' Tastatur etwas schneller machen: Dazu den MODE-Befehl von DOS aufrufen SHELL "mode con rate=32 delay=1" LebLi% = 3 LebRe% = 3 ' Screen aufbauen SCREEN 0 WIDTH 40, 25 COLOR 7, 0, 0 CLS ' Wnde zeichnen LOCATE 1, 1 PRINT STRING$(39, ""); LOCATE 24, 1 PRINT STRING$(39, ""); ' tdliche Steine zeichnen COLOR 12 FOR i% = 2 TO 23 LOCATE i%, 1: PRINT ""; LOCATE , 39: PRINT ""; NEXT i% LOCATE 25, 1 COLOR 3 PRINT "Player 1 "; COLOR 14 PRINT STRING$(LebLi%, 2); SPACE$(21 - LebLi% - LebRe%); STRING$(LebRe%, 2); COLOR 3 PRINT " Player 2"; yls% = 11 ' Startposition Schlger yrs% = 11 WHILE LebLi% > 0 AND LebRe% > 0 ' solange noch beide Spieler Leben haben COLOR 9 FOR y% = 2 TO 23 LOCATE y%, 3 IF y% >= yls% AND y% <= yls% + 3 THEN PRINT ""; ELSE PRINT " "; END IF LOCATE y%, 37 IF y% >= yrs% AND y% <= yrs% + 3 THEN PRINT ""; ELSE PRINT " "; END IF NEXT y% ' Bereitschaft der Spieler LOCATE 13, 16 COLOR 2 PRINT "Get Ready!" ' Startmusik spielen PLAY "T180O2MNL8AA>MLCCCMNC "" WEND WHILE INKEY$ = "" WEND LOCATE 13, 16 PRINT SPACE$(10); x% = 20: y% = 13 ' zu Beginn einer Runde der Ball in der Mitte LOCATE y%, x% COLOR 14: PRINT CHR$(2); vx% = 1: vy% = 1 ' und nach unten rechts wegfliegen t! = TIMER WHILE x% > 2 AND x% < 38 ' Ball im Feld t$ = INKEY$ ' Tastatur abfragen SELECT CASE t$ CASE "Q", "q" ' linker Schlger nach oben IF yls% > 2 THEN yls% = yls% - 1 COLOR 9 LOCATE yls%, 3 PRINT ""; LOCATE yls% + 4, 3 PRINT " "; END IF CASE "A", "a" IF yls% < 20 THEN COLOR 9 LOCATE yls%, 3 PRINT " "; LOCATE yls% + 4, 3 PRINT ""; yls% = yls% + 1 END IF CASE CHR$(0) + "H" ' dito rechts IF yrs% > 2 THEN COLOR 9 yrs% = yrs% - 1 COLOR 9 LOCATE yrs%, 37 PRINT ""; LOCATE yrs% + 4, 37 PRINT " "; END IF CASE CHR$(0) + "P" IF yrs% < 20 THEN COLOR 9 LOCATE yrs%, 37 PRINT " "; LOCATE yrs% + 4, 37 PRINT ""; yrs% = yrs% + 1 END IF END SELECT IF TIMER > t! THEN ' 300 ms-Periode wieder vorbei LOCATE y%, x% PRINT " "; t! = t! + Spielgeschw! x% = x% + vx% y% = y% + vy% ' Test auf Wand und Schlger durchfhren, z.B. IF y% <= 2 THEN ' obere Bande SOUND Freq1!, 1! vy% = 1 END IF IF y% >= 23 THEN SOUND Freq1!, 1! vy% = -1 END IF IF x% = 4 AND y% >= yls% AND y% <= yls% + 3 THEN vx% = 1 ' Hier nur reflektieren, falls Ball auf Schlger trifft SOUND Freq2!, 1! END IF IF x% = 36 AND y% >= yrs% AND y% <= yrs% + 3 THEN vx% = -1 ' Hier nur reflektieren, falls auf Schlger SOUND Freq2!, 1! END IF COLOR 14 LOCATE y%, x% PRINT CHR$(2); ' Ball ausgeben END IF WEND ' Sound-Effekt FOR i% = 0 TO 7 FOR j% = 100 TO 500 STEP 20 LOCATE y%, x% COLOR j% \ 20 MOD 15 + 1 PRINT CHR$(2); SOUND j%, .1 NEXT j% NEXT i% LOCATE y%, x% ' Ball ausradieren PRINT " "; IF x% > 20 THEN ' der rechte Spieler hat verloren LebRe% = LebRe% - 1 LOCATE 25, 30 - LebRe% PRINT " "; ELSE ' der linke Spieler hat verloren LebLi% = LebLi% - 1 LOCATE 25, 10 + LebLi% PRINT " "; END IF t! = TIMER + .7 WHILE TIMER < t! WEND WEND COLOR 15 LOCATE 12, 14 PRINT "Game over! :-(" COLOR 13 LOCATE 14, 11 IF LebLi% = 0 THEN PRINT "Player 2 (right) won" ELSE PRINT "Player 1 (left) won" END IF PLAY "T180O3MNL8C