DataMuseum.dk

Presents historical artifacts from the history of:

MIKADOS

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about MIKADOS

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦b9c7a38e8⟧

    Length: 3808 (0xee0)
    Notes: Mikados TextFile, Mikados_K
    Names: »ASG«

Derivation

└─⟦ca21ef4c0⟧ Bits:30005311 Extended Pascal System Disc v. 04.07.1980 (SPC/1)
    └─ ⟦this⟧ »ASG« 

Text

PROGRAM ASG;
 
       (*************************************************)
       (*                                               *)
       (*      A  S  G    =    ANOTHER STUPID GAME      *)
       (*                                               *)
       (* TWO PLAYERS COMPETE ON A CRT TERMINAL.        *)
       (* BY USING TWO SETS OF CRT CONTROL KEYS THEY    *)
       (* CONTROL ONE CONSTANTLY MOVING CURSOR EACH.    *)
       (* THE FIRST PLAYER WHOSE CURSOR ENTERS A        *)
       (* FIELD THAT HAS PREVIOUSLY BEEN ACCESSED,      *)
       (* LOOSES                                        *)
       (* THE CURSOR CONTROLS ARE:                      *)
       (* FUNCTION   PLAYER 1       PLAYER2             *)
       (*    UP         W              I                *)
       (*   LEFT        A              J                *)
       (*   RIGHT       S              K                *)
       (*   DOWN        Z              M                *)
       (*************************************RM-790725***)
 
 
CONST  MAXROW = 24;
       MAXCOL = 79;
       IOCHANNEL = 96 ; (*ON SPC/1 TERMINAL PORT; USE 96, 98, 100, 102
                          FOR MULTI-USER SYSTEM TERMINAL 1, 2, 3, 4 *)
       
VAR    FREESQUARE: ARRAY(1..MAXCOL,1..MAXROW) OF BOOLEAN;
       X1, Y1, X2, Y2, X1DELTA, Y1DELTA, X2DELTA, Y2DELTA: INTEGER;
       ASCORE, BSCORE: INTEGER;
       DELAYTIME: INTEGER;
       GAMEOVER: BOOLEAN;
 
 
PROCEDURE INITIALIZE;
  VAR X,Y: INTEGER;
BEGIN
  FOR X:= 1 TO MAXCOL DO
    FOR Y:= 1 TO MAXROW DO
      IF (X IN (.1,MAXCOL.)) OR (Y IN (.1,MAXROW.)) THEN
        BEGIN
        FREESQUARE(X,Y) := FALSE;
        GOTOXY(X,Y);
        WRITE('*')
        END
      ELSE FREESQUARE(X,Y) := TRUE;
  X1 :=  4; Y1 := 12; X1DELTA :=  1; Y1DELTA := 0;
  X2 := MAXCOL-3; Y2 := 13; X2DELTA := -1; Y2DELTA := 0;
  DELAYTIME := 20;
END  (*INITIALIZE*);
 
 
BEGIN
  ASCORE := 0; BSCORE := 0;
  REPEAT
    BEGIN
    CLEARSCREEN;
    GOTOXY( 10, 4 );
    WRITE('CURRENT SCORE: PLAYER 1: ',ASCORE,'; PLAYER 2: ',BSCORE);
    GOTOXY( 10, 10 );
    WRITE('PRESS "RETURN" TO START A NEW GAME, "ESC" TO TERMINATE');
    READLN;
    IF NOT EOF THEN
      BEGIN
      CLEARSCREEN;
      INITIALIZE;
      GAMEOVER := FALSE;
      REPEAT
        BEGIN
        DELAY( DELAYTIME );
        CASE CHR( IN80(IOCHANNEL,127) ) OF
          'A': BEGIN X1DELTA:=-1; Y1DELTA:=0 END;
          'Z': BEGIN X1DELTA:=0; Y1DELTA:=1 END;
          'W': BEGIN X1DELTA:=0; Y1DELTA:=-1 END;
          'S': BEGIN X1DELTA:=1; Y1DELTA:=0 END;
          'J': BEGIN X2DELTA:=-1; Y2DELTA:=0 END;
          'M': BEGIN X2DELTA:=0; Y2DELTA:=1 END;
          'I': BEGIN X2DELTA:=0; Y2DELTA:=-1 END;
          'K': BEGIN X2DELTA:=1; Y2DELTA:=0 END;
        END  (*CASE IN80*);
        X1 := X1 + X1DELTA; Y1 := Y1 + Y1DELTA;
        X2 := X2 + X2DELTA; Y2 := Y2 + Y2DELTA;
        IF NOT FREESQUARE(X1,Y1) THEN
          BEGIN
          GAMEOVER := TRUE;
          BSCORE := BSCORE + 1
          END
        ELSE
          BEGIN
          GOTOXY( X1, Y1 );
          WRITE( '1' );
          FREESQUARE(X1,Y1) := FALSE;
          IF NOT FREESQUARE(X2,Y2) THEN
            BEGIN
            GAMEOVER := TRUE;
            ASCORE := ASCORE + 1;
            END
          ELSE
            BEGIN
            GOTOXY( X2, Y2 );
            WRITE( '2' );
            FREESQUARE(X2,Y2) := FALSE;
            END;
          END;
        END  (*REPEATSTATEMENT*);
      UNTIL GAMEOVER;
      END  (*IF NOT EOF*);
    END;
  UNTIL EOF;
  GOTOXY( 1, 23 );
  WRITELN( 'GAME OVER' )
END.