Игра 2048

Program _2048_;
Uses Crt;
Var
  v,h,sc,won,i,eng,ent:integer;
  a:array[1..5,1..5] of integer;
  n,k:string;
label
  m1,endgame,r1,w1;
begin
writeln('Вводите W,A,S,D для передвижения блоков');
m1:
  randomize;
    h:=random(4)+1;
    v:=random(4)+1;
if a[h,v]=0 then
  a[h,v]:=2
else
  goto m1;
writeln('Счет:',sc);
for h:=1 to 4 do
  writeln(a[h,1],'  ',a[h,2],'  ',a[h,3],'  ',a[h,4]);
r1:
eng:=0;
repeat
  n:=readkey;
until (n='w') or (n='a') or (n='s') or (n='d');
clrscr;
if (n='w') then
begin
  for i:=1 to 2 do
  for h:=2 to 4 do
  for v:=1 to 4 do
  begin
    if (a[h,v]=0) or (a[h-1,v]<>0) then
      eng+=1;
    if a[h,v]<>0 then
      if a[h-1,v]=0 then
        begin
          a[h-1,v]:=a[h,v];
          a[h,v]:=0;
        end;
  end;
  for h:=2 to 4 do
  for v:=1 to 4 do
  begin
    if (a[h,v]=0) or (a[h-1,v]<>a[h,v]) then
      eng+=1;
    if a[h,v]<>0 then
      if a[h-1,v]=a[h,v] then
         begin
           a[h-1,v]:=a[h,v]*2;
           a[h,v]:=0;
           sc:=sc+a[h-1,v];
         end;
  end;
  for h:=2 to 4 do
  for v:=1 to 4 do
  begin
    if (a[h,v]=0) or (a[h-1,v]<>0) then
      eng+=1;
    if a[h,v]<>0 then
      if a[h-1,v]=0 then
        begin
          a[h-1,v]:=a[h,v];
          a[h,v]:=0;
        end;
   end;
end;
if (n='s') then
begin
  for i:=1 to 2 do 
  for h:=3 downto 1 do
  for v:=1 to 4 do
  begin
    if (a[h,v]=0) or (a[h+1,v]<>0) then
      eng+=1;
    if a[h,v]<>0 then
      if a[h+1,v]=0 then
        begin
          a[h+1,v]:=a[h,v];
          a[h,v]:=0;
        end;
  end;
  for h:=3 downto 1 do
  for v:=1 to 4 do
  begin
    if (a[h,v]=0) or (a[h+1,v]<>a[h,v]) then
      eng+=1;
    if a[h,v]<>0 then
     if a[h+1,v]=a[h,v] then
       begin
         a[h+1,v]:=a[h,v]*2;
         a[h,v]:=0;
         sc:=sc+a[h+1,v];
       end;
  end;
  for h:=3 downto 1 do
  for v:=1 to 4 do
  begin
    if (a[h,v]=0) or (a[h+1,v]<>0) then
      eng+=1;
    if a[h,v]<>0 then
      if a[h+1,v]=0 then
        begin
          a[h+1,v]:=a[h,v];
          a[h,v]:=0;
        end;
   end;
end;
if (n='a') then
begin 
  for i:=1 to 2 do
  for v:=2 to 4 do
  for h:=1 to 4 do
  begin
    if (a[h,v]=0) or (a[h,v-1]<>0) then
      eng+=1;
    if a[h,v]<>0 then
      if a[h,v-1]=0 then
        begin
          a[h,v-1]:=a[h,v];
          a[h,v]:=0;
        end;
  end;
  for v:=2 to 4 do
  for h:=1 to 4 do
  begin
    if (a[h,v]=0) or (a[h,v-1]<>a[h,v]) then
      eng+=1;
    if a[h,v]<>0 then
      if a[h,v-1]=a[h,v] then
        begin
          a[h,v-1]:=a[h,v]*2;
          a[h,v]:=0;
          sc:=sc+a[h,v-1];
        end;
  end;
  for v:=2 to 4 do
  for h:=1 to 4 do
  begin
    if (a[h,v]=0) or (a[h,v-1]<>0) then
      eng+=1;
    if a[h,v]<>0 then
      if a[h,v-1]=0 then
        begin
          a[h,v-1]:=a[h,v];
          a[h,v]:=0;
        end;
   end;
end;
if (n='d') then
begin
  for i:=1 to 2 do
  for v:=3 downto 1 do
  for h:=1 to 4 do
  begin
    if (a[h,v]=0) or (a[h,v+1]<>0) then
      eng+=1;
    if a[h,v]<>0 then
      if a[h,v+1]=0 then
        begin
          a[h,v+1]:=a[h,v];
          a[h,v]:=0;
        end;
  end;
  for v:=3 downto 1 do
  for h:=1 to 4 do
  begin
    if (a[h,v]=0) or (a[h,v+1]<>a[h,v]) then
      eng+=1;
    if a[h,v]<>0 then
      if a[h,v+1]=a[h,v] then
        begin
          a[h,v+1]:=a[h,v]*2;
          a[h,v]:=0;
          sc:=sc+a[h,v+1];
        end;
  end;
  for v:=3 downto 1 do
  for h:=1 to 4 do
  begin
    if (a[h,v]=0) or (a[h,v+1]<>0) then
      eng+=1;
    if a[h,v]<>0 then
      if a[h,v+1]=0 then
        begin
          a[h,v+1]:=a[h,v];
          a[h,v]:=0;
        end;
   end;
end;
  if eng=48 then
  begin
    writeln('Счет:',sc);
    for h:=1 to 4 do
      writeln(a[h,1],'  ',a[h,2],'  ',a[h,3],'  ',a[h,4]);
    i:=0;
    for h:=1 to 4 do
    for v:=1 to 4 do
      if a[h,v]=0 then
      i:=1;
    if i=0 then
      goto endgame
    else
      i:=0;
    goto r1;
  end
  else
    eng:=0;
for h:=1 to 4 do
for v:=1 to 4 do
  if (a[h,v]=2048) and (won=0) then
    begin
    writeln('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
    writeln('!!!!!!!!!!Вы Выиграли!!!!!!!!!!');
    writeln('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
    won:=1;
    end
  else
    if a[h,v]<>0 then
      ent+=1;
goto m1;
endgame:
  writeln('Вы Проиграли, ваш счет:',sc);
  writeln('Заново? Да + Нет - ');
  repeat
    k:=readkey;
  until (k='+') or (k='-');
  if k='+' then
    begin
      clrscr;
      for h:=1 to 4 do
      for v:=1 to 4 do
      a[h,v]:=0;
      goto m1;
    end;
end.
Добавлено: 05 Июня 2014 11:35:15 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...