[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]

    (* Just one of the (dozens) of possible ways of doing the old Tron game in *)
    (* Pascal... Have fun!                                                     *)
    (* Two players only. Cursor keys, and O, P, Q, R                           *)
    (* Freeware - 1994 - Luis Evaristo Beda Netto Marques da Fonseca           *)
    (* Thunderball Software Inc.                                               *)

    Program Tron;

    Uses Graph,Crt;

    Var Cpos1,Lpos1,Cpos2,Lpos2,Npos1,Npos2,Winner,Vel,Ngames:Integer;
        Conta,Bluep,Yellowp:Integer;
        Out:Boolean;
        Exitgame:Char;

    Procedure Initg;                      {initialize graphics}
    var gd,gm:integer;
    Begin
        Gd:=detect;
        Initgraph(Gd,Gm,'C:\TP\BGI');
    End;

    Procedure InitVar(Var Cpos1,Lpos1,Cpos2,Lpos2,Npos1,Npos2:Integer;Var out:Boolean);
    Begin                                   {initilize game variables}
        Npos1:=3;
        Npos2:=1;
        Lpos1:=240;
        Lpos2:=240;
        Cpos1:=370;
        Cpos2:=270;
        out:=False;
    End;

    Procedure PressKey(Var Npos1,Npos2:Integer);
    Var Ch:Char;
        Num:Integer;
    Begin
    If Keypressed then                              {get the key pressed and}
        Ch:=ReadKey;                                 {change course accordingly}
        if Ch=#0 then
        begin
            Ch:=ReadKey;
            Num:=Ord(Ch);
            Case Num of
                75:If Npos1<>3 then Npos1:=1;
                72:If Npos1<>4 then Npos1:=2;
                77:If Npos1<>1 then Npos1:=3;
                80:If Npos1<>2 then Npos1:=4;
            End;
        End
        Else
        Begin
            Num:=Ord(Ch);
            Case Num of
                111:If Npos2<>3 then Npos2:=1;
                113:If Npos2<>4 then Npos2:=2;
                112:If Npos2<>1 then Npos2:=3;
                 97:If Npos2<>2 then Npos2:=4;
            End;
        end;
    End;

    Procedure ScrnOutput(Npos1,Npos2:integer;Var Lpos1,Lpos2,Cpos1,Cpos2,Winner,Vel:Integer; Var out:Boolean);
    Var Color:Word;
    Begin
         Case Npos1 of                              {write output at screen and}
              1:Cpos1:=Cpos1-1;                     {actualize position variables}
              2:Lpos1:=Lpos1-1;
              3:Cpos1:=Cpos1+1;
              4:Lpos1:=Lpos1+1;
         End;
         Color:=GetPixel(Cpos1,Lpos1);
         If Color<>0 then
         Begin
            out:=true;
            winner:=2;
         End;
         Color:=Cyan;
         PutPixel(Cpos1,Lpos1,Color);
         Case Npos2 of
              1:Cpos2:=Cpos2-1;
              2:Lpos2:=Lpos2-1;
              3:Cpos2:=Cpos2+1;
              4:Lpos2:=Lpos2+1;
         End;
         Color:=GetPixel(Cpos2,Lpos2);
         If Color<>0 then
         Begin
            out:=true;
            winner:=1;
         End;
         Color:=Yellow;
         PutPixel(Cpos2,Lpos2,Color);
         Delay(Vel);
    End;

    Begin
    exitgame:='Y';
    While Upcase(exitgame)='Y' do
    Begin
         yellowp:=0;
         bluep:=0;
         Clrscr;
         Writeln('Choose speed (1-very fast to 100-really slow):');
         Readln(Vel);
         Writeln('Choose number of games:');
         Readln(ngames);
         if not odd(ngames) then
         begin
             writeln('Only odd numbers are accepted. Adding one.');
             inc(ngames);
             readln;
         end;
         For Conta:=1 to ngames do
         Begin
              Initg;
              InitVar(Cpos1,Lpos1,Cpos2,Lpos2,Npos1,Npos2,out);
              SetColor(Blue);
              Rectangle(0,0,639,479);
              While out=False do
              Begin
                   Presskey(Npos1,Npos2);
                   ScrnOutput(Npos1,Npos2,Lpos1,Lpos2,Cpos1,Cpos2,winner,Vel,out);
              End;
              Clrscr;
              If winner=1 then
                  bluep:=bluep+1
              else
                  yellowp:=yellowp+1;
         Closegraph;
         End;
         Write('And the winner is the ');
         if bluep>yellowp then
             Write('blue')
         else
             Write('yellow');
         writeln(' player!');
         Write('New game? (Y/N): ');
         Readln(exitgame);
    End;
    End.

[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]