Board index » delphi » star.pas - starfield that you can fly around in - star.pas [1/1]

star.pas - starfield that you can fly around in - star.pas [1/1]

Quote
thec...@iconn.net (TheCrow) wrote:
>eyBJbnRlZ2VyIE1hdGggU3RhcmZpZWxkIH0NCnsgSmFjayBNb3R0IC0gKEMp
>IDE5OTYgfQ0KeyBmcmVlIHRvIHVzZSBmb3Igbm9uY29tbWVyY2lhbCBwdXJw
> <snip>

uhm. what sort of idiot MIME-encodes a textfile? (unless you have
krad-31337 high-ASCII text in your source code)

why can't people use common sense... *sigh* he could have at least had
the decency to use UUE :P
---
      quantum porcupine, coder, musician        |   that which is, is not
    and porcupine.  mailto:jsha...@nmsu.edu     |  that which can, can not
http://infinity.beve.blacksburg.va.us/~porcpine | that which does, does not

 

Re:star.pas - starfield that you can fly around in - star.pas [1/1]


LD A,<53hinf$...@bubba.NMSU.Edu>
CALL &HC800
LD A,Pascal Quentin Porcupine <q...@antistatic.com>
CALL &HC803
RET

Ok
run

Quote
>thec...@iconn.net (TheCrow) wrote:

>>eyBJbnRlZ2VyIE1hdGggU3RhcmZpZWxkIH0NCnsgSmFjayBNb3R0IC0gKEMp
>>IDE5OTYgfQ0KeyBmcmVlIHRvIHVzZSBmb3Igbm9uY29tbWVyY2lhbCBwdXJw
>> <snip>

>uhm. what sort of idiot MIME-encodes a textfile? (unless you have
>krad-31337 high-ASCII text in your source code)

>why can't people use common sense... *sigh* he could have at least had
>the decency to use UUE :P

Oh please don't whine, here is the unencoded .pas :

{ Integer Math Starfield }
{ Jack Mott - (C) 1996 }
{ free to use for noncommercial purposes }
{ Give credit where credit is due }
{ Contact: thec...@iconn.net }
PROGRAM StarFieldCoolness;

USES
 crt,graph;
CONST
 MAX = 250;
VAR
  xv :array[1..MAX] of integer;
  yv :array[1..MAX] of integer;
  x,y:array[1..MAX] of integer;
  x2,y2:longint;
  xyS:longint;
  c:array[1..MAX] of integer;
  i,count:integer;
  speed:integer;
  k:char;

PROCEDURE Init;
var
  grDriver : Integer;
  grMode   : Integer;
  ErrCode  : Integer;
begin
  grDriver := Detect;
  InitGraph(grDriver,grMode,'c:\tp\bgi');
  ErrCode := GraphResult;
end;

PROCEDURE ResetStar(star:integer);
VAR
  r:integer;
BEGIN
  x[star] := random(640)+1;
  y[star] := random(480)+1;
  x[star] := x[star] - 250;
  y[star] := y[star] - 170;

if speed <> 0 then
  begin
  xv[star] := x[star] div speed;
  yv[star] := y[star] div speed;
  end
else
  begin
  xv[star] := x[star];
  yv[star] := y[star];
  end;

if (xv[star] = 0) and (yv[star] = 0) then
  begin
    xv[star] := 1;
    yv[star] := 1;
  end;

END;

PROCEDURE MoveRight;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do xv[i] := xv[i] - 1;
END;
PROCEDURE MoveLeft;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do xv[i] := xv[i] + 1;
END;

PROCEDURE MoveUp;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do yv[i] := yv[i] + 1;
END;

PROCEDURE MoveDown;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do yv[i] := yv[i] - 1;
END;

PROCEDURE MoveUpLeft;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do
    begin
      yv[i] := yv[i] + 1;
      xv[i] := xv[i] + 1;
    end;
END;

PROCEDURE MoveUpRight;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do
    begin
      yv[i] := yv[i] + 1;
      xv[i] := xv[i] - 1;
    end;
END;

PROCEDURE MoveDownRight;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do
    begin
      yv[i] := yv[i] - 1;
      xv[i] := xv[i] -1;
    end;
END;

PROCEDURE MoveDownLeft;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do
    begin
      yv[i] := yv[i] - 1;
      xv[i] := xv[i] +1;
    end;
END;

BEGIN

Init;
randomize;
speed := 15;
FOR i := 1 TO MAX DO ResetStar(i);
count := 0;
REPEAT
inc(count);

FOR i := 1 TO MAX DO
  BEGIN

    {Optional, makes stars move faster as they get closer}
    { Havent gotten this to look very good yet }
{
    if count mod 15 = 0 then
      begin
        if xv[i] > 0 then xv[i] := xv[i] + 1
        else if xv[i] < 0 then xv[i] := xv[i] - 1;

        if yv[i] > 0 then yv[i] := yv[i] + 1
        else if yv[i] < 0 then yv[i] := yv[i] - 1;
      end;
 }
    x[i] := x[i] + xv[i];
    y[i] := y[i] + yv[i];
    IF (x[i] > 320) or (x[i] < -320) or (y[i] > 240) or (y[i] < -240)
THEN
      ResetStar(i);
    x2 := x[i];
    y2 := y[i];
    xyS := x2*x2+y2*y2;
    { x^2+y^2 = d^2 (distance from origin) would work better but slower}
    if xyS > 40000 then c[i] := 15
    else if xyS > 10000 then c[i] :=7
    else c[i] := 8;

    putpixel(x[i]+320,y[i]+240,c[i]);

  END;

    if keypressed then
      begin
        k := readkey;
        if k = 'q' then halt;
        if k = '6' then MoveRight;
        if k = '4' then MoveLeft;
        if k = '8' then MoveUp;
        if k = '2' then MoveDown;
        if k = '7' then MoveUpLeft;
        if k = '9' then MoveUpRight;
        if k = '1' then MoveDownLeft;
        if k = '3' then MoveDownRight;
        if k = '=' then dec(speed);
        if k = '-' then inc(speed);
      end;

delay(20);
FOR i := 1 TO MAX DO
  putpixel(x[i]+320,y[i]+240,0);

UNTIL 1 = 2;
END.

Greetings,                      |Programmer, musician     |
                                |MSX-owner and lover      |
    Moonchild                   |GFX artist, translator   |
                                |Poet, writer, lycanthrope|
(homo lupus universalis)        |Shoshoni tribe-member    |

Re:star.pas - starfield that you can fly around in - star.pas [1/1]


LD A,<53hinf$...@bubba.NMSU.Edu>
CALL &HC800
LD A,Pascal Quentin Porcupine <q...@antistatic.com>
CALL &HC803
RET

Ok
run

Quote
>thec...@iconn.net (TheCrow) wrote:

>>eyBJbnRlZ2VyIE1hdGggU3RhcmZpZWxkIH0NCnsgSmFjayBNb3R0IC0gKEMp
>>IDE5OTYgfQ0KeyBmcmVlIHRvIHVzZSBmb3Igbm9uY29tbWVyY2lhbCBwdXJw
>> <snip>

>uhm. what sort of idiot MIME-encodes a textfile? (unless you have
>krad-31337 high-ASCII text in your source code)

>why can't people use common sense... *sigh* he could have at least had
>the decency to use UUE :P

Oh please don't whine, here is the unencoded .pas :

{ Integer Math Starfield }
{ Jack Mott - (C) 1996 }
{ free to use for noncommercial purposes }
{ Give credit where credit is due }
{ Contact: thec...@iconn.net }
PROGRAM StarFieldCoolness;

USES
 crt,graph;
CONST
 MAX = 250;
VAR
  xv :array[1..MAX] of integer;
  yv :array[1..MAX] of integer;
  x,y:array[1..MAX] of integer;
  x2,y2:longint;
  xyS:longint;
  c:array[1..MAX] of integer;
  i,count:integer;
  speed:integer;
  k:char;

PROCEDURE Init;
var
  grDriver : Integer;
  grMode   : Integer;
  ErrCode  : Integer;
begin
  grDriver := Detect;
  InitGraph(grDriver,grMode,'c:\tp\bgi');
  ErrCode := GraphResult;
end;

PROCEDURE ResetStar(star:integer);
VAR
  r:integer;
BEGIN
  x[star] := random(640)+1;
  y[star] := random(480)+1;
  x[star] := x[star] - 250;
  y[star] := y[star] - 170;

if speed <> 0 then
  begin
  xv[star] := x[star] div speed;
  yv[star] := y[star] div speed;
  end
else
  begin
  xv[star] := x[star];
  yv[star] := y[star];
  end;

if (xv[star] = 0) and (yv[star] = 0) then
  begin
    xv[star] := 1;
    yv[star] := 1;
  end;

END;

PROCEDURE MoveRight;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do xv[i] := xv[i] - 1;
END;
PROCEDURE MoveLeft;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do xv[i] := xv[i] + 1;
END;

PROCEDURE MoveUp;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do yv[i] := yv[i] + 1;
END;

PROCEDURE MoveDown;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do yv[i] := yv[i] - 1;
END;

PROCEDURE MoveUpLeft;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do
    begin
      yv[i] := yv[i] + 1;
      xv[i] := xv[i] + 1;
    end;
END;

PROCEDURE MoveUpRight;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do
    begin
      yv[i] := yv[i] + 1;
      xv[i] := xv[i] - 1;
    end;
END;

PROCEDURE MoveDownRight;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do
    begin
      yv[i] := yv[i] - 1;
      xv[i] := xv[i] -1;
    end;
END;

PROCEDURE MoveDownLeft;
VAR
  i:integer;

BEGIN
  for i := 1 to MAX do
    begin
      yv[i] := yv[i] - 1;
      xv[i] := xv[i] +1;
    end;
END;

BEGIN

Init;
randomize;
speed := 15;
FOR i := 1 TO MAX DO ResetStar(i);
count := 0;
REPEAT
inc(count);

FOR i := 1 TO MAX DO
  BEGIN

    {Optional, makes stars move faster as they get closer}
    { Havent gotten this to look very good yet }
{
    if count mod 15 = 0 then
      begin
        if xv[i] > 0 then xv[i] := xv[i] + 1
        else if xv[i] < 0 then xv[i] := xv[i] - 1;

        if yv[i] > 0 then yv[i] := yv[i] + 1
        else if yv[i] < 0 then yv[i] := yv[i] - 1;
      end;
 }
    x[i] := x[i] + xv[i];
    y[i] := y[i] + yv[i];
    IF (x[i] > 320) or (x[i] < -320) or (y[i] > 240) or (y[i] < -240)
THEN
      ResetStar(i);
    x2 := x[i];
    y2 := y[i];
    xyS := x2*x2+y2*y2;
    { x^2+y^2 = d^2 (distance from origin) would work better but slower}
    if xyS > 40000 then c[i] := 15
    else if xyS > 10000 then c[i] :=7
    else c[i] := 8;

    putpixel(x[i]+320,y[i]+240,c[i]);

  END;

    if keypressed then
      begin
        k := readkey;
        if k = 'q' then halt;
        if k = '6' then MoveRight;
        if k = '4' then MoveLeft;
        if k = '8' then MoveUp;
        if k = '2' then MoveDown;
        if k = '7' then MoveUpLeft;
        if k = '9' then MoveUpRight;
        if k = '1' then MoveDownLeft;
        if k = '3' then MoveDownRight;
        if k = '=' then dec(speed);
        if k = '-' then inc(speed);
      end;

delay(20);
FOR i := 1 TO MAX DO
  putpixel(x[i]+320,y[i]+240,0);

UNTIL 1 = 2;
END.

Greetings,                      |Programmer, musician     |
                                |MSX-owner and lover      |
    Moonchild                   |GFX artist, translator   |
                                |Poet, writer, lycanthrope|
(homo lupus universalis)        |Shoshoni tribe-member    |

Other Threads