Написание программы игры "Жизнь" на Pascal 7.0

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Содержание работы

Задание 2

Игра “Жизнь”. Игра написана на Pascal 7.0, содержит простой и понятный интерфейс, высокую скорость, возможность управления в любой момент игры. Есть возможность наблюдения итоги игры во время работы программы. Есть и недостаток: она написана под MS-DOS. Тест игры успешно прошёл на Pentium II – 233 MГц.

Исходный код игры:

Program Life;

Uses Crt,Graph;

Const up=215;

      sipe=300;

      color:byte=$B8;{ColTrue and ColFalse}

      time:word=0;{Time -> ms}

      Q:word=100;{Quantity repeat -> thing}

Type  TBool=array(.0..up,0..sipe-1.)of byte;

      PBool=^TBool;

      TSosedy=array(.0..3,0..sipe-1.)of byte;

      PSosedy=TSosedy;

Label Conting,Meny,Start,ExitGlob,ExitSmol,ReStart;

Var   bool:PBool;

      a:PSosedy;

      Povtor,LastStep,k,Step,Schet,PodSchet,Sector,j,i,NachX,NachY:word;

      Nj,Kj,Ni,Ki:word;

      Number:longint;

      ExitNow,ExitBool:boolean;

      Col,size:byte;

      List:string;

      Command:string[2];

{IntroduceGraph - func}

Function IntroduceGraph:boolean;

Var grDriver,grMode,ErrCode:Integer;

Label ExitGraph;

Begin

grDriver:=Detect;

InitGraph(grDriver, grMode, '');

ErrCode:=GraphResult;IntroduceGraph:=false;

If ErrCode<>grOk then Begin

  Write('Mistake initiales graph: ',GraphErrorMsg(ErrCode));ReadLn;

  IntroduceGraph:=true;goto ExitGraph;end;

If GetMaxX<319then Begin

  OutTextXY(0,0,'MaxX<320. Exit: press "ENTER".');ReadLn;

  CloseGraph;IntroduceGraph:=true;goto ExitGraph;end;

If GetMaxColor<>15 then Begin

  OutTextXY(0,0,'Enough color. Exit: press "ENTER".');ReadLn;

  CloseGraph;IntroduceGraph:=true;end;

ExitGraph:End;

{CleenDisplay - proc}

Procedure CleanDisplay(Ky:word);

Begin SetFillStyle(1,0);Bar(0,0,GetMaxX,Ky);

End;

{PrintList - proc}

Procedure PrintList(Var j,i:word;ListDop:string);

Begin

OutTextXY(i*7,9*j,ListDop);

i:=i+length(ListDop);

End;

{PrintNumber - proc}

Procedure PrintNumber(MaximX:Longint;n:shortint;Var List:string);

Var NumbersList:string[11];

Begin

Str(MaximX,NumbersList);List:=List+NumbersList;

MaximX:=MaximX div 10;

While MaximX<>0do Begin

MaximX:=MaximX div 10;n:=n-1;end;

If n<0 then n:=0;

While n<>0 do Begin

 List:=List+' ';

 n:=n-1;end;

End;

{IntroduceFacts - proc}

Procedure IntroduceFacts(up,sipe,Sector:word);

Var   j,i,Code1,Code2,w,SectorA,SectorB:word;predel,k,Step:byte;

Begin

SectorB:=Sector-(Sector div $FF)*$FF;

SectorA:=Sector div $FF;

If (SectorA=255)or(SectorA=0)then SectorA:=1;

If SectorB=255then SectorB:=1;

predel:=sipe-((sipe-1)div 8)*8;

For j:=up-1downto 0do Begin k:=predel;

  For i:=(sipe-1)div 8downto 0do Begin Step:=1;

  While k<>0do Begin k:=k-1;For W:=SectorB to 0do Code1:=Random($FF)+Random(SectorB);

    For W:=SectorA+i to 0 do Code2:=Random(SectorB)+Random($ff);

    Code1:=Code1+Code2+(Random(SectorB) div 16)*Code1 div (Random(SectorA)*Code2+1)-j+i;

    bool^(.j,i*8+k.):=(Code1-(Code1 div(Step*2))*Step*2)div step;

    If bool^(.j,i*8+k.)=1then Schet:=Schet+1;

    If k<>0then Step:=Step*2;end;k:=8;end;end;

End;

{PrintDisplay - proc}

Procedure PrintDisplay(bool:PBool;up,sipe,NachX,NachY:word;size,color,col:byte);

Var i,j:word;

Begin

For j:=0to up-1 do For i:=0to sipe-1do Begin

  If bool^(.j,i.)=1then SetFillStyle(1,Color)else SetFillStyle(1,Col);

  Bar(NachX+size*i,NachY+size*j,NachX+size*(i+1)-2,NachY+size*(j+1)-2);

end;End;

{LifeInToroid - proc}

Procedure LifeInToroid(up,sipe:word;color,col:byte);

Var Dj,Di,DNj,DKj,DNi,DKi,Nj,Ni,Kj,Ki,x,y,z:word;i,j:word;

Procedure Translyator;

Var k:word;

Begin

If Dj=0then DNj:=up-1 else DNj:=Dj-1;If Dj=up-1 then DKj:=0 else DKj:=Dj+1;

For k:=0to sipe-1do begin If k=0then DNi:=sipe-1 else DNi:=k-1;If k=sipe-1 then DKi:=0 else DKi:=k+1;

a(.z,k.):=bool^(.DNj,DNi.)+bool^(.DNj,k.)+bool^(.DNj,DKi.)+bool^(.Dj,DNi.)+bool^(.Dj,DKi.)+bool^(.DKj,DNi.)+bool^(.DKj,k.)

+bool^(.DKj,DKi.);end;

End;

Begin PodSchet:=0;Schet:=0;

z:=3;Dj:=up-1;Translyator;

z:=0;Dj:=0;Translyator;

z:=1;Dj:=1;Translyator;

y:=0;z:=1;

For j:=0to up-1do begin

x:=y;y:=z;z:=z+1-((z+1)div 3)*3;

  If j=0then Nj:=up-1 else Nj:=j-1;

  If j=up-1then Begin For Di:=0to sipe-1do a(.x,Di.):=a(.3,Di.);Kj:=0;end else Kj:=j+1;

  If j<up-3then Begin Dj:=j+2;Translyator;end;

  For i:=0to sipe-1do begin

    If i=0then Ni:=sipe-1 else Ni:=i-1;

    If i=sipe-1 then Ki:=0 else Ki:=i+1;

    If (bool^(.j,i.)=1)then Begin Schet:=Schet+1;If((a(.x,i.)<2)or(a(.x,i.)>3)) then Begin Schet:=Schet-1;SetFillStyle(1,col);

      bool^(.j,i.):=0;PodSchet:=PodSchet+1;Bar(NachX+size*i,NachY+size*j,NachX+size*(i+1)-2,NachY+size*(j+1)-2);

    end;end;

    If (bool^(.j,i.)=0)and(a(.x,i.)=3)then Begin bool^(.j,i.):=1;SetFillStyle(1,color);Schet:=Schet+1;PodSchet:=PodSchet+1;

      Bar(NachX+size*i,NachY+size*j,NachX+size*(i+1)-2,NachY+size*(j+1)-2);

end;end;end;

Number:=Number+1;If Number>2000000000 then Number:=0;

End;

{START}

Begin

TextMode(CO80+Font8x8);

TextColor(15);

If IntroduceGraph then goto ExitGlob;

SetColor(15);

j:=(GetMaxY-16)div up;

i:=GetMaxX div sipe;

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.