Tin học Game đánh cờ Pascal

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,619
744
21
Phú Yên
Trường THPT Lương Văn Chánh
Qua vài lần chạy mình thấy nó có một vài lỗi nhỏ, nhưng bạn cũng không phải quá nghiêm trọng :D
Khi mình di chuyển thì con trỏ nó đi không theo ý của mình, bấm vài lần đi theo đường khác thì mới được.
Khi mà mình gõ một gạch ăn luôn 2 ô thì nó không ăn được, phải đợi đến nước sau nó mới ăn.
 

Bùi Thành Công

Học sinh
Thành viên
23 Tháng bảy 2018
87
58
31
19
Nam Định
Thcs Giao Thủy
Qua vài lần chạy mình thấy nó có một vài lỗi nhỏ, nhưng bạn cũng không phải quá nghiêm trọng :D
Khi mình di chuyển thì con trỏ nó đi không theo ý của mình, bấm vài lần đi theo đường khác thì mới được.
Khi mà mình gõ một gạch ăn luôn 2 ô thì nó không ăn được, phải đợi đến nước sau nó mới ăn.

Lúc chơi mk cx gặp mấy lỗi như thế:p
 

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,619
744
21
Phú Yên
Trường THPT Lương Văn Chánh
Cover bản Turbo Pascal nha :) chỉ chạy được trên TP thôi, FB chạy không được.
Mã:
 Program Caro;
 uses crt;
 const
      SizeMax = 8;
      Trong = ' ';
      Cham = 'ù';
      Ngang = 'Ä';
      Doc = '³';
      CX = 'X';  { Nguoi choi }
      CO = 'O';  { May tinh }

 var
    Banco: array[1..SizeMax*2+2,1..SizeMax*2+2] of char;
    x,y: integer;
    Luot,Choilai: char;
    SoX,SoO: integer;
    An: Boolean;
    Size: integer;

 Procedure TaobanCo;
 var x,y: integer;
 Begin
      TextColor(LightGray);
      for x := 1 to Size*2 do
          for y := 1 to Size*2 do
          begin
               Banco[x,y] := Trong;
               if (x mod 2 = 0) and (y mod 2 = 0) then
               begin
                    Gotoxy(x,y);
                    Write(Cham);
                    Banco[x,y] := Cham;
               end;
          end;
 End;

 Procedure InDiem;
 Begin
      TextColor(LightGray);
      Gotoxy(2,Size*2+2);Write('Ban:      May Tinh:');
      TextColor(Red);
      Gotoxy(7,Size*2+2);Write(CX);
      TextColor(Blue);
      Gotoxy(22,Size*2+2);Write(CO);
      TextColor(Brown);
      Gotoxy(2,Size*2+4);
      clreol;
      Write('Ban: ',SoX);
      Gotoxy(12,Size*2+4);
      Write('May tinh: ',SoO);
 End;

 Procedure DoiLuot;
 Begin
      if Luot = CX then Luot := CO else Luot := CX;
 End;

 Procedure KiemTra;
 var x,y: integer;
 Begin
      an := False;
      for x := 2 to Size*2-1 do
          for y := 2 to Size*2-1 do
          begin
               if (Banco[x-1,y] = Doc) and (Banco[x+1,y] = Doc)
               and (Banco[x,y-1] = Ngang) and (Banco[x,y+1] = Ngang)
               and (Banco[x,y] = Trong) then
               begin
                    Gotoxy(x,y);
                    if Luot = CX then textColor(Red) else TextColor(Blue);
                    Write(Luot);
                    Banco[x,y] := Luot;
                    An := True;
                    if Luot = CX then inc(SoX) else Inc(SoO);
               end;
          end;
      if An then DoiLuot;
 End;

 Procedure DanhCo(dx,dy: integer);
 Begin
      TextColor(LightGray);
      if (Banco[dx,dy] = Trong) and (Banco[dx-1,dy] = Cham)
      and (Banco[dx+1,dy] = Cham) then
      begin
           Gotoxy(dx,dy); Write(Ngang);
           Banco[dx,dy] := Ngang;
           KiemTra;
           DoiLuot;
           x := dx;
           y := dy;
      end
      else
      if (Banco[dx,dy] = Trong) and (Banco[dx,dy-1] = Cham)
      and (Banco[dx,dy+1] = Cham) then
      begin
           Gotoxy(dx,dy); Write(Doc);
           BanCo[dx,dy] := Doc;
           KiemTra;
           DoiLuot;
           x := dx;
           y := dy;
      end;
 End;

 function DanhCoAo(dx,dy: integer): Boolean;
 Begin
      DanhCoAo := False;
      if (Banco[dx,dy] = Trong) and (Banco[dx-1,dy] = Cham)
      and (Banco[dx+1,dy] = Cham) then
      begin
           Banco[dx,dy] := Ngang;
           DanhCoAo := True;
      end
      else
      if (Banco[dx,dy] = Trong) and (Banco[dx,dy-1] = Cham)
      and (Banco[dx,dy+1] = Cham) then
      begin
           BanCo[dx,dy] := Doc;
           DanhCoAo := True;
      end;
 End;

 Function KiemTraAo: integer;
 var x,dx,y,dy,kt: integer;
 Begin
      Kt := 0;
      for x := 1 to Size*2 do
          for y := 1 to Size*2 do
          begin
               dx := x*2 - 1;
               dy := y*2 - 1;
               if (Banco[dx,dy] = Trong) and (Banco[dx-1,dy] = Doc)
               and (Banco[dx+1,dy] = Doc) and (Banco[dx,dy-1] = Ngang)
               and (Banco[dx,dy+1] = Ngang) then inc(kt);
          end;
      KiemTraAo := kt;
 End;

 Function BiAn(x,y: integer): Boolean;
 var so: integer;
 Begin
      so := 0;
      BiAn := False;
      if Banco[x-1,y] = Doc then inc(so);
      if Banco[x+1,y] = Doc then inc(so);
      if Banco[x,y-1] = Ngang then inc(so);
      if Banco[x,y+1] = Ngang then inc(so);
      if so = 3 then BiAn := True;
 End;

 Procedure AI;
 var x,y,so,lx,ly,max: integer;
 Begin
      repeat
      max := 0;
      lx := 0;
      Delay(500);
      for x := 2*Size downto 2 do
          for y := 2*Size downto 2 do
          if (Banco[x,y] = Trong) and (((x mod 2 = 0) and (y mod 2 <> 0))
          or ((x mod 2 <> 0) and (y mod 2 = 0)))
          then
          begin
               DanhCoAo(x,y);
               So := KiemTraAo;
               if (So <= 0) and (BiAn(x-1,y) or BiAn(x,y-1)
               or BiAn(x,y+1) or BiAn(x+1,y))
               then So := -1;
               BanCo[x,y] := Trong;
               if (So >= max) then
               begin
                    max := So;
                    lx := x;
                    ly := y;
               end;
          end;
          if lx = 0 then
          begin
          repeat
                lx := 2+Random(2*Size - 2);
                ly := 2+ Random(2*Size - 2);
          until DanhCoAo(lx,ly);
          BanCo[lx,ly] := Trong;
          end;
          DanhCo(lx,ly);
      until (luot = CX) or (SoX + SoO = sqr(Size-1));
 End;

 Procedure Dichuyen;
 var k: char;
 Begin
      x := 5 + 3;
      y := 3 + 2;
      repeat
            k := #0;
            if keypressed then k := readkey;
            case k of
            #75: if x > 2 then inc(x,-1);
            #77: if x < Size*2 then inc(x,1);
            #72: if y > 2 then inc(y,-1);
            #80: if y < Size*2 then inc(y,1);
            #13: begin DanhCo(x,y);if Luot = CO then AI;InDiem; end;
                   end;
            Gotoxy(x,y);
      until (k =#27) or (SoX+SoO = sqr(Size - 1));
      if k <> #27 then
      begin
           TextColor(LightRed);
           Gotoxy(10,5);
           if SoX > SoO then write('Ban thang')
           else if SoO > SoX then write('Ban thua!')
           else if SoO = SoX then write('Hoa!');
           repeat until readkey = #13;
      end;
 End;

 BEGIN
      repeat
      repeat
      clrscr;
      TextColor(White);
      Write('Chon kich thuoc choi (1..',SizeMax,'): '); Readln(Size);
      until (Size in [1..SizeMax]);
      clrscr;
      inc(Size);
      InDiem;
      Taobanco;
      SoO := 0;
      SoX := SoO;
      Luot := CX;
      Dichuyen;
      clrscr;
      TextColor(White);
      Write('Ban co muon choi lai khong (k = khong): ');
      repeat until Keypressed;
      Choilai := Readkey;
      until Choilai = 'k';
 END.
 
  • Like
Reactions: Bùi Thành Công

misoluto04@gmail.com

Banned
Banned
Thành viên
19 Tháng sáu 2018
895
462
101
19
Hà Nội
Good bye là xin chào...
C
mình mới làm đk cái game này, ae chơi cho ý kiến nha

Mã:
program danh_co;
uses crt;
type mang=array[1..75,1..23] of char;
var a,b,a1,b1,i,j,g,g1,u,u1:longint;
    move,key:char;
    free:mang;
procedure ve(free:mang;u,u1:longint;key:char);
var i,j:longint;
begin
  if key='1'then begin
  i:=9;
  while i<=15 do
  begin  j:=9;
    while j<=15 do
    begin
      if free[i,j]<>'|' then free[i,j]:='.';
      j:=j+2;
      end;
    i:=i+2;
    end;
  for i:=9 to 15 do
       for j:=9 to 15 do
       begin
         if (free[i,j]='_')or(free[i,j]='|')or(free[i,j]='.')then textcolor(15);
         if free[i,j]='x' then textcolor(12);
         if free[i,j]='o' then textcolor(11);
         gotoxy(i,j);write(free[i,j]);
         end;
  gotoxy(2,22);write('Ban:',u,'   May:',u1);
  gotoxy(15,23);write('An "p" de quay lai');
  end;
  if key='2'then begin
  i:=9;
  while i<=19 do
  begin  j:=9;
    while j<=19 do
    begin
      if free[i,j]<>'|' then free[i,j]:='.';
      j:=j+2;
      end;
    i:=i+2;
    end;
  for i:=9 to 19 do
       for j:=9 to 19 do
       begin
         if (free[i,j]='_')or(free[i,j]='|')or(free[i,j]='.')then textcolor(15);
         if free[i,j]='x' then textcolor(12);
         if free[i,j]='o' then textcolor(11);
         gotoxy(i,j);write(free[i,j]);
         end;
  gotoxy(2,22);write('Ban:',u,'   May:',u1);
  gotoxy(15,23);write('An "p" de quay lai');
  end;
  if key='3'then begin
  i:=1;
  while i<=21 do
  begin  j:=1;
    while j<=21 do
    begin
      if free[i,j]<>'|' then free[i,j]:='.';
      j:=j+2;
      end;
    i:=i+2;
    end;
  for i:=1 to 21 do
       for j:=1 to 21 do
       begin
         if (free[i,j]='_')or(free[i,j]='|')or(free[i,j]='.')then textcolor(15);
         if free[i,j]='x' then textcolor(12);
         if free[i,j]='o' then textcolor(11);
         gotoxy(i,j);write(free[i,j]);
         end;
  gotoxy(2,22);write('Ban:',u,'   May:',u1);
  gotoxy(15,23);write('An "p" de quay lai');
  end;
end;
function tontai(free:mang;key:char):boolean;
var i,j,d:longint;
begin
  i:=8; tontai:=true;
  if key='1'then
  while i<14 do
  begin i:=i+2;j:=8;
    while j<14 do
    begin j:=j+2;d:=0;
      if free[i-1,j]in['.','|','_'] then inc(d);
      if free[i+1,j]in['.','|','_'] then inc(d);
      if free[i,j-1]in['.','|','_'] then inc(d);
      if free[i,j+1]in['.','|','_'] then inc(d);
      if d=3 then exit(false);
      end;
    end;
  if key='2'then
  while i<18 do
  begin i:=i+2;j:=8;
    while j<18 do
    begin j:=j+2;d:=0;
      if free[i-1,j]in['.','|','_'] then inc(d);
      if free[i+1,j]in['.','|','_'] then inc(d);
      if free[i,j-1]in['.','|','_'] then inc(d);
      if free[i,j+1]in['.','|','_'] then inc(d);
      if d=3 then exit(false);
      end;
    end;
  if key='3'then begin
  i:=0;
  while i<20 do
  begin i:=i+2;j:=0;
    while j<20 do
    begin j:=j+2;d:=0;
      if free[i-1,j]in['.','|','_'] then inc(d);
      if free[i+1,j]in['.','|','_'] then inc(d);
      if free[i,j-1]in['.','|','_'] then inc(d);
      if free[i,j+1]in['.','|','_'] then inc(d);
      if d=3 then exit(false);
      end;
    end;
  end;
end;
procedure menu(free:mang;u,u1:longint);
var a,b,a1,b1,i,j,g,g1,d,d1,x,y,x1,y1,w1,min:longint;
    move,key:char;
    free1:mang;
begin  clrscr;
    writeln('  [1]:Bat dau');
    writeln('  [2]:Huong dan');
    writeln('  [3]:Thoat');
    write('Chon:');key:=readkey;
    if key='3'then halt;
    if key='2'then
    begin  clrscr;
      writeln('An cac phim a,d,s,w de di chuyen con tro chuot.');
      writeln('Di chuyen con tro chuot vao giua cac cham roi an phim "b" de noi');
      writeln('cac dau cham lai voi nhau.');
      writeln;
      write('An Enter de quay lai>>');
      readln;
      end;
    if key='1'then
    begin   clrscr;
      writeln('Ban chon che do nao');
      writeln(' [1]:3x3');
      writeln(' [2]:5x5');
      writeln(' [3]:10x10');
      write('Chon:');key:=readkey;
      end;
{che do 3x3}
    if key='1' then begin
    a:=9;b:=9;a1:=9;b1:=9;u:=0;u1:=0;
{reset lai ban do}
    for i:=9 to 15 do
     for j:=9 to 15 do
     if free[i,j]<>','then free[i,j]:=' ';
{Luot cua Ban}
    while u+u1<9 do
    begin clrscr;
      ve(free,u,u1,key);
      move:='\';g:=1;
      while (move<>'b')and(g=1) do
      begin  gotoxy(10,17);write('Luot cua Ban');
       gotoxy(a,b); g:=0;
       move:=readkey;
       case move of
       'a':begin a:=a-1;if a<=8 then inc(a);gotoxy(a,b);g:=1; end;
       'd':begin a:=a+1;if a>=16 then dec(a);gotoxy(a,b);g:=1;  end;
       'w':begin b:=b-1;if b<=8 then inc(b);gotoxy(a,b);g:=1;  end;
       's':begin b:=b+1;if b>=16 then dec(b);gotoxy(a,b);g:=1;  end;
       'b':begin if ((b mod 2=0)and(a mod 2<>0))or((b mod 2<>0)and(a mod 2=0)) then
           if b mod 2=0 then begin free[a,b]:='|';free[a,b+1]:='|';end
           else free[a,b]:='_' else move:='/';
           if (free[a,b]='|') then
           begin
             if a>=3 then if (free[a-2,b]='|')and(free[a-1,b-1]='_')and(free[a-1,b+1]='_')then begin g:=1;inc(u);free[a-1,b]:='x';move:='\';end;
             if (free[a+2,b]='|')and(free[a+1,b-1]='_')and(free[a+1,b+1]='_')then begin g:=1;inc(u);free[a+1,b]:='x';move:='\';end;
             end;
           if free[a,b]='_' then
           begin
             if (free[a-1,b+1]='|')and(free[a,b+2]='_')and(free[a+1,b+1]='|')then begin g:=1;inc(u);free[a,b+1]:='x';move:='\';end;
             if b>=3 then if (free[a-1,b-1]='|')and(free[a,b-2]='_')and(free[a+1,b-1]='|')then begin g:=1;inc(u);free[a,b-1]:='x';move:='\';end;
             end;
           if ((a mod 2<>0)and(b mod 2<>0))or((a mod 2=0)and(b mod 2=0))then begin move:='/';g:=1; end;
           end;
       'p':menu(free,u,u1);
        else begin move:='\';g:=1;end;
        end;
      ve(free,u,u1,key);
      if u+u1>=9 then break;
      end;
{Luot cua May}
     g1:=1;
     while (g1=1)and(u+u1<=9) do
      begin  gotoxy(10,17);write('Luot cua May.  ');delay(500);
        gotoxy(10,17);write('Luot cua May.. ');delay(500);
        gotoxy(10,17);write('Luot cua May...');delay(500);
        i:=8;g1:=0;d1:=u1;
        while (i<14)and(u+u1<=9) do
        begin j:=8; i:=i+2;
          while (j<14)and(u+u1<=9) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=3 then
            begin g1:=1;inc(u1);
              if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';free[i,j]:='o';
                end;
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';free[i,j]:='o';
                end;
              if d=3 then break;
              end ;
            if d=3 then break;
            end;
          if d=3 then break;
          end;
        ve(free,u,u1,key);

        if d1=u1 then begin
        i:=8;g1:=0;d1:=0;x:=0;
        while (i<14)and(u+u1<=9) do
        begin j:=8; i:=i+2;
          while (j<14)and(u+u1<=9) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d<2 then
            begin
              if not(free[i-1,j]in['.','|','_']) then
              begin x:=0;
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                if not(tontai(free,key))then begin free[i-1,j]:=' ';free[i-1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i+1,j]in['.','|','_']) then
              begin x:=0;
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                if not(tontai(free,key))then begin free[i+1,j]:=' ';free[i+1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j-1]in['.','|','_']) then
              begin x:=0;
                free[i,j-1]:='_';
                if not(tontai(free,key))then begin free[i,j-1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j+1]in['.','|','_']) then
              begin x:=0;
                free[i,j+1]:='_';
                if not(tontai(free,key))then begin free[i,j+1]:=' ';x:=6;end else break;
                end;
              if (d<2)and(x<>6)then break;
              end;
            if (d=2)or(d=4)then inc(d1);
            if (d<2)and(x<>6)then break;
            end;
          if (d<2)and(x<>6)then break;
          end;
        if (d<2)and(x<>6)then break;
        end;
        ve(free,u,u1,key);

        if d1=9 then begin
        i:=8;
        while i<14 do
        begin i:=i+2; j:=8;
          while j<14 do
          begin j:=j+2; d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=2 then begin
            if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                end else
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                end else
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';
                end else
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';
                end;
              break;
              end;
            if d=2 then break;
            end;
          if d=2 then break;
          end;
          if d=2 then break;
          end;
      if d=2 then break;
      i:=8; u1:=0;
      while i<14 do
      begin i:=i+2; j:=8;
        while j<14 do
        begin j:=j+2;d:=0;
          if free[i-1,j]in['.','|','_'] then inc(d);
          if free[i+1,j]in['.','|','_'] then inc(d);
          if free[i,j-1]in['.','|','_'] then inc(d);
          if free[i,j+1]in['.','|','_'] then inc(d);
          if (free[i,j]<>'x')and(d=4)then begin free[i,j]:='o';inc(u1);end;
          end;
        end;
        end;{ket thuc luot danh cua May}
      if u+u1>=9 then
      begin
        if u>u1 then begin gotoxy(10,8);write('Ban thang');end;
        if u<u1 then begin gotoxy(10,8);write('Ban thua');end;
        gotoxy(10,23);write('An Enter de quay lai>>>');readln;
        end;
      end;{ket thuc khi danh het}
      end;{ket thuc 3x3}

{che do 5x5}
    if key='2' then begin
    a:=9;b:=9;u:=0;u1:=0;
{reset lai ban do}
    for i:=9 to 19 do
     for j:=9 to 19 do
     if free[i,j]<>','then free[i,j]:=' ';
{Luot cua Ban}
    while u+u1<25 do
    begin clrscr;
      ve(free,u,u1,key);
      move:='\';g:=1;
      while (move<>'b')and(g=1) do
      begin  gotoxy(18,22);write('Luot cua Ban');
       gotoxy(a,b); g:=0;
       move:=readkey;
       case move of
       'a':begin a:=a-1;if a<=8 then inc(a);gotoxy(a,b);g:=1; end;
       'd':begin a:=a+1;if a>=20 then dec(a);gotoxy(a,b);g:=1;  end;
       'w':begin b:=b-1;if b<=8 then inc(b);gotoxy(a,b);g:=1;  end;
       's':begin b:=b+1;if b>=20 then dec(b);gotoxy(a,b);g:=1;  end;
       'b':begin if ((b mod 2=0)and(a mod 2<>0))or((b mod 2<>0)and(a mod 2=0)) then
           if b mod 2=0 then begin free[a,b]:='|';free[a,b+1]:='|';end
           else free[a,b]:='_' else move:='/';
           if (free[a,b]='|') then
           begin
             if a>=3 then if (free[a-2,b]='|')and(free[a-1,b-1]='_')and(free[a-1,b+1]='_')then begin g:=1;inc(u);free[a-1,b]:='x';move:='\';end;
             if (free[a+2,b]='|')and(free[a+1,b-1]='_')and(free[a+1,b+1]='_')then begin g:=1;inc(u);free[a+1,b]:='x';move:='\';end;
             end;
           if free[a,b]='_' then
           begin
             if (free[a-1,b+1]='|')and(free[a,b+2]='_')and(free[a+1,b+1]='|')then begin g:=1;inc(u);free[a,b+1]:='x';move:='\';end;
             if b>=3 then if (free[a-1,b-1]='|')and(free[a,b-2]='_')and(free[a+1,b-1]='|')then begin g:=1;inc(u);free[a,b-1]:='x';move:='\';end;
             end;
           if ((a mod 2<>0)and(b mod 2<>0))or((a mod 2=0)and(b mod 2=0))then begin move:='/';g:=1; end;
           end;
       'p':menu(free,u,u1);
        else begin move:='\';g:=1;end;
        end;
      ve(free,u,u1,key);
      if u+u1>=25 then break;
      end;
{Luot cua May}
     g1:=1;
     while (g1=1)and(u+u1<=25) do
      begin  gotoxy(10,17);write('Luot cua May.  ');delay(500);
        gotoxy(10,17);write('Luot cua May.. ');delay(500);
        gotoxy(10,17);write('Luot cua May...');delay(500);
        i:=8;g1:=0;d1:=u1;
        while (i<18)and(u+u1<=25) do
        begin j:=8; i:=i+2;
          while (j<18)and(u+u1<=25) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=3 then
            begin g1:=1;inc(u1);
              if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';free[i,j]:='o';
                end;
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';free[i,j]:='o';
                end;
              if d=3 then break;
              end ;
            if d=3 then break;
            end;
          if d=3 then break;
          end;
        ve(free,u,u1,key);

        if d1=u1 then begin
        i:=8;g1:=0;d1:=0;x:=0;
        while (i<18)and(u+u1<=25) do
        begin j:=8; i:=i+2;
          while (j<18)and(u+u1<=25) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d<2 then
            begin
              if not(free[i-1,j]in['.','|','_']) then
              begin x:=0;
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                if not(tontai(free,key))then begin free[i-1,j]:=' ';free[i-1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i+1,j]in['.','|','_']) then
              begin x:=0;
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                if not(tontai(free,key))then begin free[i+1,j]:=' ';free[i+1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j-1]in['.','|','_']) then
              begin x:=0;
                free[i,j-1]:='_';
                if not(tontai(free,key))then begin free[i,j-1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j+1]in['.','|','_']) then
              begin x:=0;
                free[i,j+1]:='_';
                if not(tontai(free,key))then begin free[i,j+1]:=' ';x:=6;end else break;
                end;
              if (d<2)and(x<>6)then break;
              end;
            if (d=2)or(d=4)then inc(d1);
            if (d<2)and(x<>6)then break;
            end;
          if (d<2)and(x<>6)then break;
          end;
        if (d<2)and(x<>6)then break;
        end;
        ve(free,u,u1,key);

        if d1=25 then begin
        i:=8;
        while i<18 do
        begin i:=i+2; j:=8;
          while j<18 do
          begin j:=j+2; d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=2 then begin
            if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                end else
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                end else
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';
                end else
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';
                end;
              break
              end;
            if d=2 then break;
            end;
          if d=2 then break;
          end;
          if d=2 then break;
          end;
      if d=2 then break;
      i:=8; u1:=0;
      while i<18 do
      begin i:=i+2; j:=8;
        while j<18 do
        begin j:=j+2;d:=0;
          if free[i-1,j]in['.','|','_'] then inc(d);
          if free[i+1,j]in['.','|','_'] then inc(d);
          if free[i,j-1]in['.','|','_'] then inc(d);
          if free[i,j+1]in['.','|','_'] then inc(d);
          if (free[i,j]<>'x')and(d=4)then begin free[i,j]:='o';inc(u1);end;
          end;
        end;
        end;{ket thuc luot danh cua May}
      if u+u1>=25 then
      begin
        if u>u1 then begin gotoxy(10,8);write('Ban thang');end;
        if u<u1 then begin gotoxy(10,8);write('Ban thua');end;
        gotoxy(10,23);write('An Enter de quay lai>>>');readln;
        end;
      end;{ket thuc khi danh het}
      end;{ket thuc 5x5}

{che do 10x10}
    if key='3' then begin
    a:=2;b:=2;u:=0;u1:=0;
{reset lai ban do}
    for i:=1 to 21 do
     for j:=1 to 21 do
     if free[i,j]<>','then free[i,j]:=' ';
{Luot cua Ban}
    while u+u1<100 do
    begin clrscr;
      ve(free,u,u1,key);
      move:='\';g:=1;
      while (move<>'b')and(g=1) do
      begin  gotoxy(18,22);write('Luot cua Ban');
       gotoxy(a,b); g:=0;
       move:=readkey;
       case move of
       'a':begin a:=a-1;if a<=0 then inc(a);gotoxy(a,b);g:=1; end;
       'd':begin a:=a+1;if a>=22 then dec(a);gotoxy(a,b);g:=1;  end;
       'w':begin b:=b-1;if b<=0 then inc(b);gotoxy(a,b);g:=1;  end;
       's':begin b:=b+1;if b>=22 then dec(b);gotoxy(a,b);g:=1;  end;
       'b':begin if ((b mod 2=0)and(a mod 2<>0))or((b mod 2<>0)and(a mod 2=0)) then
           if b mod 2=0 then begin free[a,b]:='|';free[a,b+1]:='|';end
           else free[a,b]:='_' else move:='/';
           if (free[a,b]='|') then
           begin
             if a>=3 then if (free[a-2,b]='|')and(free[a-1,b-1]='_')and(free[a-1,b+1]='_')then begin g:=1;inc(u);free[a-1,b]:='x';move:='\';end;
             if (free[a+2,b]='|')and(free[a+1,b-1]='_')and(free[a+1,b+1]='_')then begin g:=1;inc(u);free[a+1,b]:='x';move:='\';end;
             end;
           if free[a,b]='_' then
           begin
             if (free[a-1,b+1]='|')and(free[a,b+2]='_')and(free[a+1,b+1]='|')then begin g:=1;inc(u);free[a,b+1]:='x';move:='\';end;
             if b>=3 then if (free[a-1,b-1]='|')and(free[a,b-2]='_')and(free[a+1,b-1]='|')then begin g:=1;inc(u);free[a,b-1]:='x';move:='\';end;
             end;
           if ((a mod 2<>0)and(b mod 2<>0))or((a mod 2=0)and(b mod 2=0))then begin move:='/';g:=1; end;
           end;
       'p':menu(free,u,u1);
        else begin move:='\';g:=1;end;
        end;
      ve(free,u,u1,key);
      if u+u1>=25 then break;
      end;
{Luot cua May}
     g1:=1;
     while (g1=1)and(u+u1<=100) do
      begin  gotoxy(10,17);write('Luot cua May.  ');delay(500);
        gotoxy(10,17);write('Luot cua May.. ');delay(500);
        gotoxy(10,17);write('Luot cua May...');delay(500);
        i:=2;g1:=0;d1:=u1;
        while (i<20)and(u+u1<=100) do
        begin j:=2; i:=i+2;
          while (j<20)and(u+u1<=100) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=3 then
            begin g1:=1;inc(u1);
              if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';free[i,j]:='o';
                end;
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';free[i,j]:='o';
                end;
              if d=3 then break;
              end ;
            if d=3 then break;
            end;
          if d=3 then break;
          end;
        ve(free,u,u1,key);

        if d1=u1 then begin
        i:=0;g1:=0;d1:=0;x:=0;
        while (i<20)and(u+u1<=100) do
        begin j:=0; i:=i+2;
          while (j<20)and(u+u1<=100) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d<2 then
            begin
              if not(free[i-1,j]in['.','|','_']) then
              begin x:=0;
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                if not(tontai(free,key))then begin free[i-1,j]:=' ';free[i-1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i+1,j]in['.','|','_']) then
              begin x:=0;
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                if not(tontai(free,key))then begin free[i+1,j]:=' ';free[i+1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j-1]in['.','|','_']) then
              begin x:=0;
                free[i,j-1]:='_';
                if not(tontai(free,key))then begin free[i,j-1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j+1]in['.','|','_']) then
              begin x:=0;
                free[i,j+1]:='_';
                if not(tontai(free,key))then begin free[i,j+1]:=' ';x:=6;end else break;
                end;
              if (d<2)and(x<>6)then break;
              end;
            if (d=2)or(d=4)then inc(d1);
            if (d<2)and(x<>6)then break;
            end;
          if (d<2)and(x<>6)then break;
          end;
        if (d<2)and(x<>6)then break;
        end;
        ve(free,u,u1,key);

        if d1=100 then begin
        i:=2; write('‡o');readln;
        while i<20 do
        begin i:=i+2; j:=2;
          while j<20 do
          begin j:=j+2; d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=2 then begin
            if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                end else
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                end else
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';
                end else
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';
                end;
              break
              end;
            if d=2 then break;
            end;
          if d=2 then break;
          end;
          if d=2 then break;
          end;
      if d=2 then break;
      i:=2; u1:=0;
      while i<20 do
      begin i:=i+2; j:=2;
        while j<20 do
        begin j:=j+2;d:=0;
          if free[i-1,j]in['.','|','_'] then inc(d);
          if free[i+1,j]in['.','|','_'] then inc(d);
          if free[i,j-1]in['.','|','_'] then inc(d);
          if free[i,j+1]in['.','|','_'] then inc(d);
          if (free[i,j]<>'x')and(d=4)then begin free[i,j]:='o';inc(u1);end;
          end;
        end;
        end;{ket thuc luot danh cua May}
      if u+u1>=200 then
      begin
        if u>u1 then begin gotoxy(10,8);write('Ban thang');end;
        if u<u1 then begin gotoxy(10,8);write('Ban thua');end;
        gotoxy(10,23);write('An Enter de quay lai>>>');readln;
        end;
      end;{ket thuc khi danh het}
      end;{ket thuc 10x10}
      menu(free,u,u1);
end;
BEGIN
   menu(free,u,u1);
END.
Chơi thế nào vậy ... đẻ mình trải nghiệm ... hic
 

Bùi Thành Công

Học sinh
Thành viên
23 Tháng bảy 2018
87
58
31
19
Nam Định
Thcs Giao Thủy
b
Cover bản Turbo Pascal nha :) chỉ chạy được trên TP thôi, FB chạy không được.
Mã:
 Program Caro;
 uses crt;
 const
      SizeMax = 8;
      Trong = ' ';
      Cham = 'ù';
      Ngang = 'Ä';
      Doc = '³';
      CX = 'X';  { Nguoi choi }
      CO = 'O';  { May tinh }

 var
    Banco: array[1..SizeMax*2+2,1..SizeMax*2+2] of char;
    x,y: integer;
    Luot,Choilai: char;
    SoX,SoO: integer;
    An: Boolean;
    Size: integer;

 Procedure TaobanCo;
 var x,y: integer;
 Begin
      TextColor(LightGray);
      for x := 1 to Size*2 do
          for y := 1 to Size*2 do
          begin
               Banco[x,y] := Trong;
               if (x mod 2 = 0) and (y mod 2 = 0) then
               begin
                    Gotoxy(x,y);
                    Write(Cham);
                    Banco[x,y] := Cham;
               end;
          end;
 End;

 Procedure InDiem;
 Begin
      TextColor(LightGray);
      Gotoxy(2,Size*2+2);Write('Ban:      May Tinh:');
      TextColor(Red);
      Gotoxy(7,Size*2+2);Write(CX);
      TextColor(Blue);
      Gotoxy(22,Size*2+2);Write(CO);
      TextColor(Brown);
      Gotoxy(2,Size*2+4);
      clreol;
      Write('Ban: ',SoX);
      Gotoxy(12,Size*2+4);
      Write('May tinh: ',SoO);
 End;

 Procedure DoiLuot;
 Begin
      if Luot = CX then Luot := CO else Luot := CX;
 End;

 Procedure KiemTra;
 var x,y: integer;
 Begin
      an := False;
      for x := 2 to Size*2-1 do
          for y := 2 to Size*2-1 do
          begin
               if (Banco[x-1,y] = Doc) and (Banco[x+1,y] = Doc)
               and (Banco[x,y-1] = Ngang) and (Banco[x,y+1] = Ngang)
               and (Banco[x,y] = Trong) then
               begin
                    Gotoxy(x,y);
                    if Luot = CX then textColor(Red) else TextColor(Blue);
                    Write(Luot);
                    Banco[x,y] := Luot;
                    An := True;
                    if Luot = CX then inc(SoX) else Inc(SoO);
               end;
          end;
      if An then DoiLuot;
 End;

 Procedure DanhCo(dx,dy: integer);
 Begin
      TextColor(LightGray);
      if (Banco[dx,dy] = Trong) and (Banco[dx-1,dy] = Cham)
      and (Banco[dx+1,dy] = Cham) then
      begin
           Gotoxy(dx,dy); Write(Ngang);
           Banco[dx,dy] := Ngang;
           KiemTra;
           DoiLuot;
           x := dx;
           y := dy;
      end
      else
      if (Banco[dx,dy] = Trong) and (Banco[dx,dy-1] = Cham)
      and (Banco[dx,dy+1] = Cham) then
      begin
           Gotoxy(dx,dy); Write(Doc);
           BanCo[dx,dy] := Doc;
           KiemTra;
           DoiLuot;
           x := dx;
           y := dy;
      end;
 End;

 function DanhCoAo(dx,dy: integer): Boolean;
 Begin
      DanhCoAo := False;
      if (Banco[dx,dy] = Trong) and (Banco[dx-1,dy] = Cham)
      and (Banco[dx+1,dy] = Cham) then
      begin
           Banco[dx,dy] := Ngang;
           DanhCoAo := True;
      end
      else
      if (Banco[dx,dy] = Trong) and (Banco[dx,dy-1] = Cham)
      and (Banco[dx,dy+1] = Cham) then
      begin
           BanCo[dx,dy] := Doc;
           DanhCoAo := True;
      end;
 End;

 Function KiemTraAo: integer;
 var x,dx,y,dy,kt: integer;
 Begin
      Kt := 0;
      for x := 1 to Size*2 do
          for y := 1 to Size*2 do
          begin
               dx := x*2 - 1;
               dy := y*2 - 1;
               if (Banco[dx,dy] = Trong) and (Banco[dx-1,dy] = Doc)
               and (Banco[dx+1,dy] = Doc) and (Banco[dx,dy-1] = Ngang)
               and (Banco[dx,dy+1] = Ngang) then inc(kt);
          end;
      KiemTraAo := kt;
 End;

 Function BiAn(x,y: integer): Boolean;
 var so: integer;
 Begin
      so := 0;
      BiAn := False;
      if Banco[x-1,y] = Doc then inc(so);
      if Banco[x+1,y] = Doc then inc(so);
      if Banco[x,y-1] = Ngang then inc(so);
      if Banco[x,y+1] = Ngang then inc(so);
      if so = 3 then BiAn := True;
 End;

 Procedure AI;
 var x,y,so,lx,ly,max: integer;
 Begin
      repeat
      max := 0;
      lx := 0;
      Delay(500);
      for x := 2*Size downto 2 do
          for y := 2*Size downto 2 do
          if (Banco[x,y] = Trong) and (((x mod 2 = 0) and (y mod 2 <> 0))
          or ((x mod 2 <> 0) and (y mod 2 = 0)))
          then
          begin
               DanhCoAo(x,y);
               So := KiemTraAo;
               if (So <= 0) and (BiAn(x-1,y) or BiAn(x,y-1)
               or BiAn(x,y+1) or BiAn(x+1,y))
               then So := -1;
               BanCo[x,y] := Trong;
               if (So >= max) then
               begin
                    max := So;
                    lx := x;
                    ly := y;
               end;
          end;
          if lx = 0 then
          begin
          repeat
                lx := 2+Random(2*Size - 2);
                ly := 2+ Random(2*Size - 2);
          until DanhCoAo(lx,ly);
          BanCo[lx,ly] := Trong;
          end;
          DanhCo(lx,ly);
      until (luot = CX) or (SoX + SoO = sqr(Size-1));
 End;

 Procedure Dichuyen;
 var k: char;
 Begin
      x := 5 + 3;
      y := 3 + 2;
      repeat
            k := #0;
            if keypressed then k := readkey;
            case k of
            #75: if x > 2 then inc(x,-1);
            #77: if x < Size*2 then inc(x,1);
            #72: if y > 2 then inc(y,-1);
            #80: if y < Size*2 then inc(y,1);
            #13: begin DanhCo(x,y);if Luot = CO then AI;InDiem; end;
                   end;
            Gotoxy(x,y);
      until (k =#27) or (SoX+SoO = sqr(Size - 1));
      if k <> #27 then
      begin
           TextColor(LightRed);
           Gotoxy(10,5);
           if SoX > SoO then write('Ban thang')
           else if SoO > SoX then write('Ban thua!')
           else if SoO = SoX then write('Hoa!');
           repeat until readkey = #13;
      end;
 End;

 BEGIN
      repeat
      repeat
      clrscr;
      TextColor(White);
      Write('Chon kich thuoc choi (1..',SizeMax,'): '); Readln(Size);
      until (Size in [1..SizeMax]);
      clrscr;
      inc(Size);
      InDiem;
      Taobanco;
      SoO := 0;
      SoX := SoO;
      Luot := CX;
      Dichuyen;
      clrscr;
      TextColor(White);
      Write('Ban co muon choi lai khong (k = khong): ');
      repeat until Keypressed;
      Choilai := Readkey;
      until Choilai = 'k';
 END.

bạn ơi,nó dính lỗi này
upload_2018-8-6_21-14-51.png
 

Nhok Ko tên

Học sinh chăm học
Thành viên
20 Tháng ba 2018
398
431
76
Gia Lai
ThCS Trần Phú
mình mới làm đk cái game này, ae chơi cho ý kiến nha

Mã:
program danh_co;
uses crt;
type mang=array[1..75,1..23] of char;
var a,b,a1,b1,i,j,g,g1,u,u1:longint;
    move,key:char;
    free:mang;
procedure ve(free:mang;u,u1:longint;key:char);
var i,j:longint;
begin
  if key='1'then begin
  i:=9;
  while i<=15 do
  begin  j:=9;
    while j<=15 do
    begin
      if free[i,j]<>'|' then free[i,j]:='.';
      j:=j+2;
      end;
    i:=i+2;
    end;
  for i:=9 to 15 do
       for j:=9 to 15 do
       begin
         if (free[i,j]='_')or(free[i,j]='|')or(free[i,j]='.')then textcolor(15);
         if free[i,j]='x' then textcolor(12);
         if free[i,j]='o' then textcolor(11);
         gotoxy(i,j);write(free[i,j]);
         end;
  gotoxy(2,22);write('Ban:',u,'   May:',u1);
  gotoxy(15,23);write('An "p" de quay lai');
  end;
  if key='2'then begin
  i:=9;
  while i<=19 do
  begin  j:=9;
    while j<=19 do
    begin
      if free[i,j]<>'|' then free[i,j]:='.';
      j:=j+2;
      end;
    i:=i+2;
    end;
  for i:=9 to 19 do
       for j:=9 to 19 do
       begin
         if (free[i,j]='_')or(free[i,j]='|')or(free[i,j]='.')then textcolor(15);
         if free[i,j]='x' then textcolor(12);
         if free[i,j]='o' then textcolor(11);
         gotoxy(i,j);write(free[i,j]);
         end;
  gotoxy(2,22);write('Ban:',u,'   May:',u1);
  gotoxy(15,23);write('An "p" de quay lai');
  end;
  if key='3'then begin
  i:=1;
  while i<=21 do
  begin  j:=1;
    while j<=21 do
    begin
      if free[i,j]<>'|' then free[i,j]:='.';
      j:=j+2;
      end;
    i:=i+2;
    end;
  for i:=1 to 21 do
       for j:=1 to 21 do
       begin
         if (free[i,j]='_')or(free[i,j]='|')or(free[i,j]='.')then textcolor(15);
         if free[i,j]='x' then textcolor(12);
         if free[i,j]='o' then textcolor(11);
         gotoxy(i,j);write(free[i,j]);
         end;
  gotoxy(2,22);write('Ban:',u,'   May:',u1);
  gotoxy(15,23);write('An "p" de quay lai');
  end;
end;
function tontai(free:mang;key:char):boolean;
var i,j,d:longint;
begin
  i:=8; tontai:=true;
  if key='1'then
  while i<14 do
  begin i:=i+2;j:=8;
    while j<14 do
    begin j:=j+2;d:=0;
      if free[i-1,j]in['.','|','_'] then inc(d);
      if free[i+1,j]in['.','|','_'] then inc(d);
      if free[i,j-1]in['.','|','_'] then inc(d);
      if free[i,j+1]in['.','|','_'] then inc(d);
      if d=3 then exit(false);
      end;
    end;
  if key='2'then
  while i<18 do
  begin i:=i+2;j:=8;
    while j<18 do
    begin j:=j+2;d:=0;
      if free[i-1,j]in['.','|','_'] then inc(d);
      if free[i+1,j]in['.','|','_'] then inc(d);
      if free[i,j-1]in['.','|','_'] then inc(d);
      if free[i,j+1]in['.','|','_'] then inc(d);
      if d=3 then exit(false);
      end;
    end;
  if key='3'then begin
  i:=0;
  while i<20 do
  begin i:=i+2;j:=0;
    while j<20 do
    begin j:=j+2;d:=0;
      if free[i-1,j]in['.','|','_'] then inc(d);
      if free[i+1,j]in['.','|','_'] then inc(d);
      if free[i,j-1]in['.','|','_'] then inc(d);
      if free[i,j+1]in['.','|','_'] then inc(d);
      if d=3 then exit(false);
      end;
    end;
  end;
end;
procedure menu(free:mang;u,u1:longint);
var a,b,a1,b1,i,j,g,g1,d,d1,x,y,x1,y1,w1,min:longint;
    move,key:char;
    free1:mang;
begin  clrscr;
    writeln('  [1]:Bat dau');
    writeln('  [2]:Huong dan');
    writeln('  [3]:Thoat');
    write('Chon:');key:=readkey;
    if key='3'then halt;
    if key='2'then
    begin  clrscr;
      writeln('An cac phim a,d,s,w de di chuyen con tro chuot.');
      writeln('Di chuyen con tro chuot vao giua cac cham roi an phim "b" de noi');
      writeln('cac dau cham lai voi nhau.');
      writeln;
      write('An Enter de quay lai>>');
      readln;
      end;
    if key='1'then
    begin   clrscr;
      writeln('Ban chon che do nao');
      writeln(' [1]:3x3');
      writeln(' [2]:5x5');
      writeln(' [3]:10x10');
      write('Chon:');key:=readkey;
      end;
{che do 3x3}
    if key='1' then begin
    a:=9;b:=9;a1:=9;b1:=9;u:=0;u1:=0;
{reset lai ban do}
    for i:=9 to 15 do
     for j:=9 to 15 do
     if free[i,j]<>','then free[i,j]:=' ';
{Luot cua Ban}
    while u+u1<9 do
    begin clrscr;
      ve(free,u,u1,key);
      move:='\';g:=1;
      while (move<>'b')and(g=1) do
      begin  gotoxy(10,17);write('Luot cua Ban');
       gotoxy(a,b); g:=0;
       move:=readkey;
       case move of
       'a':begin a:=a-1;if a<=8 then inc(a);gotoxy(a,b);g:=1; end;
       'd':begin a:=a+1;if a>=16 then dec(a);gotoxy(a,b);g:=1;  end;
       'w':begin b:=b-1;if b<=8 then inc(b);gotoxy(a,b);g:=1;  end;
       's':begin b:=b+1;if b>=16 then dec(b);gotoxy(a,b);g:=1;  end;
       'b':begin if ((b mod 2=0)and(a mod 2<>0))or((b mod 2<>0)and(a mod 2=0)) then
           if b mod 2=0 then begin free[a,b]:='|';free[a,b+1]:='|';end
           else free[a,b]:='_' else move:='/';
           if (free[a,b]='|') then
           begin
             if a>=3 then if (free[a-2,b]='|')and(free[a-1,b-1]='_')and(free[a-1,b+1]='_')then begin g:=1;inc(u);free[a-1,b]:='x';move:='\';end;
             if (free[a+2,b]='|')and(free[a+1,b-1]='_')and(free[a+1,b+1]='_')then begin g:=1;inc(u);free[a+1,b]:='x';move:='\';end;
             end;
           if free[a,b]='_' then
           begin
             if (free[a-1,b+1]='|')and(free[a,b+2]='_')and(free[a+1,b+1]='|')then begin g:=1;inc(u);free[a,b+1]:='x';move:='\';end;
             if b>=3 then if (free[a-1,b-1]='|')and(free[a,b-2]='_')and(free[a+1,b-1]='|')then begin g:=1;inc(u);free[a,b-1]:='x';move:='\';end;
             end;
           if ((a mod 2<>0)and(b mod 2<>0))or((a mod 2=0)and(b mod 2=0))then begin move:='/';g:=1; end;
           end;
       'p':menu(free,u,u1);
        else begin move:='\';g:=1;end;
        end;
      ve(free,u,u1,key);
      if u+u1>=9 then break;
      end;
{Luot cua May}
     g1:=1;
     while (g1=1)and(u+u1<=9) do
      begin  gotoxy(10,17);write('Luot cua May.  ');delay(500);
        gotoxy(10,17);write('Luot cua May.. ');delay(500);
        gotoxy(10,17);write('Luot cua May...');delay(500);
        i:=8;g1:=0;d1:=u1;
        while (i<14)and(u+u1<=9) do
        begin j:=8; i:=i+2;
          while (j<14)and(u+u1<=9) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=3 then
            begin g1:=1;inc(u1);
              if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';free[i,j]:='o';
                end;
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';free[i,j]:='o';
                end;
              if d=3 then break;
              end ;
            if d=3 then break;
            end;
          if d=3 then break;
          end;
        ve(free,u,u1,key);

        if d1=u1 then begin
        i:=8;g1:=0;d1:=0;x:=0;
        while (i<14)and(u+u1<=9) do
        begin j:=8; i:=i+2;
          while (j<14)and(u+u1<=9) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d<2 then
            begin
              if not(free[i-1,j]in['.','|','_']) then
              begin x:=0;
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                if not(tontai(free,key))then begin free[i-1,j]:=' ';free[i-1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i+1,j]in['.','|','_']) then
              begin x:=0;
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                if not(tontai(free,key))then begin free[i+1,j]:=' ';free[i+1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j-1]in['.','|','_']) then
              begin x:=0;
                free[i,j-1]:='_';
                if not(tontai(free,key))then begin free[i,j-1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j+1]in['.','|','_']) then
              begin x:=0;
                free[i,j+1]:='_';
                if not(tontai(free,key))then begin free[i,j+1]:=' ';x:=6;end else break;
                end;
              if (d<2)and(x<>6)then break;
              end;
            if (d=2)or(d=4)then inc(d1);
            if (d<2)and(x<>6)then break;
            end;
          if (d<2)and(x<>6)then break;
          end;
        if (d<2)and(x<>6)then break;
        end;
        ve(free,u,u1,key);

        if d1=9 then begin
        i:=8;
        while i<14 do
        begin i:=i+2; j:=8;
          while j<14 do
          begin j:=j+2; d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=2 then begin
            if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                end else
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                end else
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';
                end else
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';
                end;
              break;
              end;
            if d=2 then break;
            end;
          if d=2 then break;
          end;
          if d=2 then break;
          end;
      if d=2 then break;
      i:=8; u1:=0;
      while i<14 do
      begin i:=i+2; j:=8;
        while j<14 do
        begin j:=j+2;d:=0;
          if free[i-1,j]in['.','|','_'] then inc(d);
          if free[i+1,j]in['.','|','_'] then inc(d);
          if free[i,j-1]in['.','|','_'] then inc(d);
          if free[i,j+1]in['.','|','_'] then inc(d);
          if (free[i,j]<>'x')and(d=4)then begin free[i,j]:='o';inc(u1);end;
          end;
        end;
        end;{ket thuc luot danh cua May}
      if u+u1>=9 then
      begin
        if u>u1 then begin gotoxy(10,8);write('Ban thang');end;
        if u<u1 then begin gotoxy(10,8);write('Ban thua');end;
        gotoxy(10,23);write('An Enter de quay lai>>>');readln;
        end;
      end;{ket thuc khi danh het}
      end;{ket thuc 3x3}

{che do 5x5}
    if key='2' then begin
    a:=9;b:=9;u:=0;u1:=0;
{reset lai ban do}
    for i:=9 to 19 do
     for j:=9 to 19 do
     if free[i,j]<>','then free[i,j]:=' ';
{Luot cua Ban}
    while u+u1<25 do
    begin clrscr;
      ve(free,u,u1,key);
      move:='\';g:=1;
      while (move<>'b')and(g=1) do
      begin  gotoxy(18,22);write('Luot cua Ban');
       gotoxy(a,b); g:=0;
       move:=readkey;
       case move of
       'a':begin a:=a-1;if a<=8 then inc(a);gotoxy(a,b);g:=1; end;
       'd':begin a:=a+1;if a>=20 then dec(a);gotoxy(a,b);g:=1;  end;
       'w':begin b:=b-1;if b<=8 then inc(b);gotoxy(a,b);g:=1;  end;
       's':begin b:=b+1;if b>=20 then dec(b);gotoxy(a,b);g:=1;  end;
       'b':begin if ((b mod 2=0)and(a mod 2<>0))or((b mod 2<>0)and(a mod 2=0)) then
           if b mod 2=0 then begin free[a,b]:='|';free[a,b+1]:='|';end
           else free[a,b]:='_' else move:='/';
           if (free[a,b]='|') then
           begin
             if a>=3 then if (free[a-2,b]='|')and(free[a-1,b-1]='_')and(free[a-1,b+1]='_')then begin g:=1;inc(u);free[a-1,b]:='x';move:='\';end;
             if (free[a+2,b]='|')and(free[a+1,b-1]='_')and(free[a+1,b+1]='_')then begin g:=1;inc(u);free[a+1,b]:='x';move:='\';end;
             end;
           if free[a,b]='_' then
           begin
             if (free[a-1,b+1]='|')and(free[a,b+2]='_')and(free[a+1,b+1]='|')then begin g:=1;inc(u);free[a,b+1]:='x';move:='\';end;
             if b>=3 then if (free[a-1,b-1]='|')and(free[a,b-2]='_')and(free[a+1,b-1]='|')then begin g:=1;inc(u);free[a,b-1]:='x';move:='\';end;
             end;
           if ((a mod 2<>0)and(b mod 2<>0))or((a mod 2=0)and(b mod 2=0))then begin move:='/';g:=1; end;
           end;
       'p':menu(free,u,u1);
        else begin move:='\';g:=1;end;
        end;
      ve(free,u,u1,key);
      if u+u1>=25 then break;
      end;
{Luot cua May}
     g1:=1;
     while (g1=1)and(u+u1<=25) do
      begin  gotoxy(10,17);write('Luot cua May.  ');delay(500);
        gotoxy(10,17);write('Luot cua May.. ');delay(500);
        gotoxy(10,17);write('Luot cua May...');delay(500);
        i:=8;g1:=0;d1:=u1;
        while (i<18)and(u+u1<=25) do
        begin j:=8; i:=i+2;
          while (j<18)and(u+u1<=25) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=3 then
            begin g1:=1;inc(u1);
              if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';free[i,j]:='o';
                end;
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';free[i,j]:='o';
                end;
              if d=3 then break;
              end ;
            if d=3 then break;
            end;
          if d=3 then break;
          end;
        ve(free,u,u1,key);

        if d1=u1 then begin
        i:=8;g1:=0;d1:=0;x:=0;
        while (i<18)and(u+u1<=25) do
        begin j:=8; i:=i+2;
          while (j<18)and(u+u1<=25) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d<2 then
            begin
              if not(free[i-1,j]in['.','|','_']) then
              begin x:=0;
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                if not(tontai(free,key))then begin free[i-1,j]:=' ';free[i-1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i+1,j]in['.','|','_']) then
              begin x:=0;
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                if not(tontai(free,key))then begin free[i+1,j]:=' ';free[i+1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j-1]in['.','|','_']) then
              begin x:=0;
                free[i,j-1]:='_';
                if not(tontai(free,key))then begin free[i,j-1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j+1]in['.','|','_']) then
              begin x:=0;
                free[i,j+1]:='_';
                if not(tontai(free,key))then begin free[i,j+1]:=' ';x:=6;end else break;
                end;
              if (d<2)and(x<>6)then break;
              end;
            if (d=2)or(d=4)then inc(d1);
            if (d<2)and(x<>6)then break;
            end;
          if (d<2)and(x<>6)then break;
          end;
        if (d<2)and(x<>6)then break;
        end;
        ve(free,u,u1,key);

        if d1=25 then begin
        i:=8;
        while i<18 do
        begin i:=i+2; j:=8;
          while j<18 do
          begin j:=j+2; d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=2 then begin
            if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                end else
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                end else
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';
                end else
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';
                end;
              break
              end;
            if d=2 then break;
            end;
          if d=2 then break;
          end;
          if d=2 then break;
          end;
      if d=2 then break;
      i:=8; u1:=0;
      while i<18 do
      begin i:=i+2; j:=8;
        while j<18 do
        begin j:=j+2;d:=0;
          if free[i-1,j]in['.','|','_'] then inc(d);
          if free[i+1,j]in['.','|','_'] then inc(d);
          if free[i,j-1]in['.','|','_'] then inc(d);
          if free[i,j+1]in['.','|','_'] then inc(d);
          if (free[i,j]<>'x')and(d=4)then begin free[i,j]:='o';inc(u1);end;
          end;
        end;
        end;{ket thuc luot danh cua May}
      if u+u1>=25 then
      begin
        if u>u1 then begin gotoxy(10,8);write('Ban thang');end;
        if u<u1 then begin gotoxy(10,8);write('Ban thua');end;
        gotoxy(10,23);write('An Enter de quay lai>>>');readln;
        end;
      end;{ket thuc khi danh het}
      end;{ket thuc 5x5}

{che do 10x10}
    if key='3' then begin
    a:=2;b:=2;u:=0;u1:=0;
{reset lai ban do}
    for i:=1 to 21 do
     for j:=1 to 21 do
     if free[i,j]<>','then free[i,j]:=' ';
{Luot cua Ban}
    while u+u1<100 do
    begin clrscr;
      ve(free,u,u1,key);
      move:='\';g:=1;
      while (move<>'b')and(g=1) do
      begin  gotoxy(18,22);write('Luot cua Ban');
       gotoxy(a,b); g:=0;
       move:=readkey;
       case move of
       'a':begin a:=a-1;if a<=0 then inc(a);gotoxy(a,b);g:=1; end;
       'd':begin a:=a+1;if a>=22 then dec(a);gotoxy(a,b);g:=1;  end;
       'w':begin b:=b-1;if b<=0 then inc(b);gotoxy(a,b);g:=1;  end;
       's':begin b:=b+1;if b>=22 then dec(b);gotoxy(a,b);g:=1;  end;
       'b':begin if ((b mod 2=0)and(a mod 2<>0))or((b mod 2<>0)and(a mod 2=0)) then
           if b mod 2=0 then begin free[a,b]:='|';free[a,b+1]:='|';end
           else free[a,b]:='_' else move:='/';
           if (free[a,b]='|') then
           begin
             if a>=3 then if (free[a-2,b]='|')and(free[a-1,b-1]='_')and(free[a-1,b+1]='_')then begin g:=1;inc(u);free[a-1,b]:='x';move:='\';end;
             if (free[a+2,b]='|')and(free[a+1,b-1]='_')and(free[a+1,b+1]='_')then begin g:=1;inc(u);free[a+1,b]:='x';move:='\';end;
             end;
           if free[a,b]='_' then
           begin
             if (free[a-1,b+1]='|')and(free[a,b+2]='_')and(free[a+1,b+1]='|')then begin g:=1;inc(u);free[a,b+1]:='x';move:='\';end;
             if b>=3 then if (free[a-1,b-1]='|')and(free[a,b-2]='_')and(free[a+1,b-1]='|')then begin g:=1;inc(u);free[a,b-1]:='x';move:='\';end;
             end;
           if ((a mod 2<>0)and(b mod 2<>0))or((a mod 2=0)and(b mod 2=0))then begin move:='/';g:=1; end;
           end;
       'p':menu(free,u,u1);
        else begin move:='\';g:=1;end;
        end;
      ve(free,u,u1,key);
      if u+u1>=25 then break;
      end;
{Luot cua May}
     g1:=1;
     while (g1=1)and(u+u1<=100) do
      begin  gotoxy(10,17);write('Luot cua May.  ');delay(500);
        gotoxy(10,17);write('Luot cua May.. ');delay(500);
        gotoxy(10,17);write('Luot cua May...');delay(500);
        i:=2;g1:=0;d1:=u1;
        while (i<20)and(u+u1<=100) do
        begin j:=2; i:=i+2;
          while (j<20)and(u+u1<=100) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=3 then
            begin g1:=1;inc(u1);
              if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';free[i,j]:='o';
                end;
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';free[i,j]:='o';
                end;
              if d=3 then break;
              end ;
            if d=3 then break;
            end;
          if d=3 then break;
          end;
        ve(free,u,u1,key);

        if d1=u1 then begin
        i:=0;g1:=0;d1:=0;x:=0;
        while (i<20)and(u+u1<=100) do
        begin j:=0; i:=i+2;
          while (j<20)and(u+u1<=100) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d<2 then
            begin
              if not(free[i-1,j]in['.','|','_']) then
              begin x:=0;
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                if not(tontai(free,key))then begin free[i-1,j]:=' ';free[i-1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i+1,j]in['.','|','_']) then
              begin x:=0;
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                if not(tontai(free,key))then begin free[i+1,j]:=' ';free[i+1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j-1]in['.','|','_']) then
              begin x:=0;
                free[i,j-1]:='_';
                if not(tontai(free,key))then begin free[i,j-1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j+1]in['.','|','_']) then
              begin x:=0;
                free[i,j+1]:='_';
                if not(tontai(free,key))then begin free[i,j+1]:=' ';x:=6;end else break;
                end;
              if (d<2)and(x<>6)then break;
              end;
            if (d=2)or(d=4)then inc(d1);
            if (d<2)and(x<>6)then break;
            end;
          if (d<2)and(x<>6)then break;
          end;
        if (d<2)and(x<>6)then break;
        end;
        ve(free,u,u1,key);

        if d1=100 then begin
        i:=2; write('‡o');readln;
        while i<20 do
        begin i:=i+2; j:=2;
          while j<20 do
          begin j:=j+2; d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=2 then begin
            if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                end else
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                end else
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';
                end else
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';
                end;
              break
              end;
            if d=2 then break;
            end;
          if d=2 then break;
          end;
          if d=2 then break;
          end;
      if d=2 then break;
      i:=2; u1:=0;
      while i<20 do
      begin i:=i+2; j:=2;
        while j<20 do
        begin j:=j+2;d:=0;
          if free[i-1,j]in['.','|','_'] then inc(d);
          if free[i+1,j]in['.','|','_'] then inc(d);
          if free[i,j-1]in['.','|','_'] then inc(d);
          if free[i,j+1]in['.','|','_'] then inc(d);
          if (free[i,j]<>'x')and(d=4)then begin free[i,j]:='o';inc(u1);end;
          end;
        end;
        end;{ket thuc luot danh cua May}
      if u+u1>=200 then
      begin
        if u>u1 then begin gotoxy(10,8);write('Ban thang');end;
        if u<u1 then begin gotoxy(10,8);write('Ban thua');end;
        gotoxy(10,23);write('An Enter de quay lai>>>');readln;
        end;
      end;{ket thuc khi danh het}
      end;{ket thuc 10x10}
      menu(free,u,u1);
end;
BEGIN
   menu(free,u,u1);
END.
Giỏi thế, có điều bạn nên đồ họa lại, âm thanh nhạc cho vui khi win, như vậy sẽ được nhiều người thik hơn
 

ThinhdhvA1K50

Học sinh chăm học
Thành viên
7 Tháng tám 2018
319
712
71
23
Hà Tĩnh
THPT CHUYÊN ĐẠI HỌC VINH
mình mới làm đk cái game này, ae chơi cho ý kiến nha

Mã:
program danh_co;
uses crt;
type mang=array[1..75,1..23] of char;
var a,b,a1,b1,i,j,g,g1,u,u1:longint;
    move,key:char;
    free:mang;
procedure ve(free:mang;u,u1:longint;key:char);
var i,j:longint;
begin
  if key='1'then begin
  i:=9;
  while i<=15 do
  begin  j:=9;
    while j<=15 do
    begin
      if free[i,j]<>'|' then free[i,j]:='.';
      j:=j+2;
      end;
    i:=i+2;
    end;
  for i:=9 to 15 do
       for j:=9 to 15 do
       begin
         if (free[i,j]='_')or(free[i,j]='|')or(free[i,j]='.')then textcolor(15);
         if free[i,j]='x' then textcolor(12);
         if free[i,j]='o' then textcolor(11);
         gotoxy(i,j);write(free[i,j]);
         end;
  gotoxy(2,22);write('Ban:',u,'   May:',u1);
  gotoxy(15,23);write('An "p" de quay lai');
  end;
  if key='2'then begin
  i:=9;
  while i<=19 do
  begin  j:=9;
    while j<=19 do
    begin
      if free[i,j]<>'|' then free[i,j]:='.';
      j:=j+2;
      end;
    i:=i+2;
    end;
  for i:=9 to 19 do
       for j:=9 to 19 do
       begin
         if (free[i,j]='_')or(free[i,j]='|')or(free[i,j]='.')then textcolor(15);
         if free[i,j]='x' then textcolor(12);
         if free[i,j]='o' then textcolor(11);
         gotoxy(i,j);write(free[i,j]);
         end;
  gotoxy(2,22);write('Ban:',u,'   May:',u1);
  gotoxy(15,23);write('An "p" de quay lai');
  end;
  if key='3'then begin
  i:=1;
  while i<=21 do
  begin  j:=1;
    while j<=21 do
    begin
      if free[i,j]<>'|' then free[i,j]:='.';
      j:=j+2;
      end;
    i:=i+2;
    end;
  for i:=1 to 21 do
       for j:=1 to 21 do
       begin
         if (free[i,j]='_')or(free[i,j]='|')or(free[i,j]='.')then textcolor(15);
         if free[i,j]='x' then textcolor(12);
         if free[i,j]='o' then textcolor(11);
         gotoxy(i,j);write(free[i,j]);
         end;
  gotoxy(2,22);write('Ban:',u,'   May:',u1);
  gotoxy(15,23);write('An "p" de quay lai');
  end;
end;
function tontai(free:mang;key:char):boolean;
var i,j,d:longint;
begin
  i:=8; tontai:=true;
  if key='1'then
  while i<14 do
  begin i:=i+2;j:=8;
    while j<14 do
    begin j:=j+2;d:=0;
      if free[i-1,j]in['.','|','_'] then inc(d);
      if free[i+1,j]in['.','|','_'] then inc(d);
      if free[i,j-1]in['.','|','_'] then inc(d);
      if free[i,j+1]in['.','|','_'] then inc(d);
      if d=3 then exit(false);
      end;
    end;
  if key='2'then
  while i<18 do
  begin i:=i+2;j:=8;
    while j<18 do
    begin j:=j+2;d:=0;
      if free[i-1,j]in['.','|','_'] then inc(d);
      if free[i+1,j]in['.','|','_'] then inc(d);
      if free[i,j-1]in['.','|','_'] then inc(d);
      if free[i,j+1]in['.','|','_'] then inc(d);
      if d=3 then exit(false);
      end;
    end;
  if key='3'then begin
  i:=0;
  while i<20 do
  begin i:=i+2;j:=0;
    while j<20 do
    begin j:=j+2;d:=0;
      if free[i-1,j]in['.','|','_'] then inc(d);
      if free[i+1,j]in['.','|','_'] then inc(d);
      if free[i,j-1]in['.','|','_'] then inc(d);
      if free[i,j+1]in['.','|','_'] then inc(d);
      if d=3 then exit(false);
      end;
    end;
  end;
end;
procedure menu(free:mang;u,u1:longint);
var a,b,a1,b1,i,j,g,g1,d,d1,x,y,x1,y1,w1,min:longint;
    move,key:char;
    free1:mang;
begin  clrscr;
    writeln('  [1]:Bat dau');
    writeln('  [2]:Huong dan');
    writeln('  [3]:Thoat');
    write('Chon:');key:=readkey;
    if key='3'then halt;
    if key='2'then
    begin  clrscr;
      writeln('An cac phim a,d,s,w de di chuyen con tro chuot.');
      writeln('Di chuyen con tro chuot vao giua cac cham roi an phim "b" de noi');
      writeln('cac dau cham lai voi nhau.');
      writeln;
      write('An Enter de quay lai>>');
      readln;
      end;
    if key='1'then
    begin   clrscr;
      writeln('Ban chon che do nao');
      writeln(' [1]:3x3');
      writeln(' [2]:5x5');
      writeln(' [3]:10x10');
      write('Chon:');key:=readkey;
      end;
{che do 3x3}
    if key='1' then begin
    a:=9;b:=9;a1:=9;b1:=9;u:=0;u1:=0;
{reset lai ban do}
    for i:=9 to 15 do
     for j:=9 to 15 do
     if free[i,j]<>','then free[i,j]:=' ';
{Luot cua Ban}
    while u+u1<9 do
    begin clrscr;
      ve(free,u,u1,key);
      move:='\';g:=1;
      while (move<>'b')and(g=1) do
      begin  gotoxy(10,17);write('Luot cua Ban');
       gotoxy(a,b); g:=0;
       move:=readkey;
       case move of
       'a':begin a:=a-1;if a<=8 then inc(a);gotoxy(a,b);g:=1; end;
       'd':begin a:=a+1;if a>=16 then dec(a);gotoxy(a,b);g:=1;  end;
       'w':begin b:=b-1;if b<=8 then inc(b);gotoxy(a,b);g:=1;  end;
       's':begin b:=b+1;if b>=16 then dec(b);gotoxy(a,b);g:=1;  end;
       'b':begin if ((b mod 2=0)and(a mod 2<>0))or((b mod 2<>0)and(a mod 2=0)) then
           if b mod 2=0 then begin free[a,b]:='|';free[a,b+1]:='|';end
           else free[a,b]:='_' else move:='/';
           if (free[a,b]='|') then
           begin
             if a>=3 then if (free[a-2,b]='|')and(free[a-1,b-1]='_')and(free[a-1,b+1]='_')then begin g:=1;inc(u);free[a-1,b]:='x';move:='\';end;
             if (free[a+2,b]='|')and(free[a+1,b-1]='_')and(free[a+1,b+1]='_')then begin g:=1;inc(u);free[a+1,b]:='x';move:='\';end;
             end;
           if free[a,b]='_' then
           begin
             if (free[a-1,b+1]='|')and(free[a,b+2]='_')and(free[a+1,b+1]='|')then begin g:=1;inc(u);free[a,b+1]:='x';move:='\';end;
             if b>=3 then if (free[a-1,b-1]='|')and(free[a,b-2]='_')and(free[a+1,b-1]='|')then begin g:=1;inc(u);free[a,b-1]:='x';move:='\';end;
             end;
           if ((a mod 2<>0)and(b mod 2<>0))or((a mod 2=0)and(b mod 2=0))then begin move:='/';g:=1; end;
           end;
       'p':menu(free,u,u1);
        else begin move:='\';g:=1;end;
        end;
      ve(free,u,u1,key);
      if u+u1>=9 then break;
      end;
{Luot cua May}
     g1:=1;
     while (g1=1)and(u+u1<=9) do
      begin  gotoxy(10,17);write('Luot cua May.  ');delay(500);
        gotoxy(10,17);write('Luot cua May.. ');delay(500);
        gotoxy(10,17);write('Luot cua May...');delay(500);
        i:=8;g1:=0;d1:=u1;
        while (i<14)and(u+u1<=9) do
        begin j:=8; i:=i+2;
          while (j<14)and(u+u1<=9) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=3 then
            begin g1:=1;inc(u1);
              if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';free[i,j]:='o';
                end;
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';free[i,j]:='o';
                end;
              if d=3 then break;
              end ;
            if d=3 then break;
            end;
          if d=3 then break;
          end;
        ve(free,u,u1,key);

        if d1=u1 then begin
        i:=8;g1:=0;d1:=0;x:=0;
        while (i<14)and(u+u1<=9) do
        begin j:=8; i:=i+2;
          while (j<14)and(u+u1<=9) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d<2 then
            begin
              if not(free[i-1,j]in['.','|','_']) then
              begin x:=0;
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                if not(tontai(free,key))then begin free[i-1,j]:=' ';free[i-1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i+1,j]in['.','|','_']) then
              begin x:=0;
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                if not(tontai(free,key))then begin free[i+1,j]:=' ';free[i+1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j-1]in['.','|','_']) then
              begin x:=0;
                free[i,j-1]:='_';
                if not(tontai(free,key))then begin free[i,j-1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j+1]in['.','|','_']) then
              begin x:=0;
                free[i,j+1]:='_';
                if not(tontai(free,key))then begin free[i,j+1]:=' ';x:=6;end else break;
                end;
              if (d<2)and(x<>6)then break;
              end;
            if (d=2)or(d=4)then inc(d1);
            if (d<2)and(x<>6)then break;
            end;
          if (d<2)and(x<>6)then break;
          end;
        if (d<2)and(x<>6)then break;
        end;
        ve(free,u,u1,key);

        if d1=9 then begin
        i:=8;
        while i<14 do
        begin i:=i+2; j:=8;
          while j<14 do
          begin j:=j+2; d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=2 then begin
            if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                end else
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                end else
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';
                end else
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';
                end;
              break;
              end;
            if d=2 then break;
            end;
          if d=2 then break;
          end;
          if d=2 then break;
          end;
      if d=2 then break;
      i:=8; u1:=0;
      while i<14 do
      begin i:=i+2; j:=8;
        while j<14 do
        begin j:=j+2;d:=0;
          if free[i-1,j]in['.','|','_'] then inc(d);
          if free[i+1,j]in['.','|','_'] then inc(d);
          if free[i,j-1]in['.','|','_'] then inc(d);
          if free[i,j+1]in['.','|','_'] then inc(d);
          if (free[i,j]<>'x')and(d=4)then begin free[i,j]:='o';inc(u1);end;
          end;
        end;
        end;{ket thuc luot danh cua May}
      if u+u1>=9 then
      begin
        if u>u1 then begin gotoxy(10,8);write('Ban thang');end;
        if u<u1 then begin gotoxy(10,8);write('Ban thua');end;
        gotoxy(10,23);write('An Enter de quay lai>>>');readln;
        end;
      end;{ket thuc khi danh het}
      end;{ket thuc 3x3}

{che do 5x5}
    if key='2' then begin
    a:=9;b:=9;u:=0;u1:=0;
{reset lai ban do}
    for i:=9 to 19 do
     for j:=9 to 19 do
     if free[i,j]<>','then free[i,j]:=' ';
{Luot cua Ban}
    while u+u1<25 do
    begin clrscr;
      ve(free,u,u1,key);
      move:='\';g:=1;
      while (move<>'b')and(g=1) do
      begin  gotoxy(18,22);write('Luot cua Ban');
       gotoxy(a,b); g:=0;
       move:=readkey;
       case move of
       'a':begin a:=a-1;if a<=8 then inc(a);gotoxy(a,b);g:=1; end;
       'd':begin a:=a+1;if a>=20 then dec(a);gotoxy(a,b);g:=1;  end;
       'w':begin b:=b-1;if b<=8 then inc(b);gotoxy(a,b);g:=1;  end;
       's':begin b:=b+1;if b>=20 then dec(b);gotoxy(a,b);g:=1;  end;
       'b':begin if ((b mod 2=0)and(a mod 2<>0))or((b mod 2<>0)and(a mod 2=0)) then
           if b mod 2=0 then begin free[a,b]:='|';free[a,b+1]:='|';end
           else free[a,b]:='_' else move:='/';
           if (free[a,b]='|') then
           begin
             if a>=3 then if (free[a-2,b]='|')and(free[a-1,b-1]='_')and(free[a-1,b+1]='_')then begin g:=1;inc(u);free[a-1,b]:='x';move:='\';end;
             if (free[a+2,b]='|')and(free[a+1,b-1]='_')and(free[a+1,b+1]='_')then begin g:=1;inc(u);free[a+1,b]:='x';move:='\';end;
             end;
           if free[a,b]='_' then
           begin
             if (free[a-1,b+1]='|')and(free[a,b+2]='_')and(free[a+1,b+1]='|')then begin g:=1;inc(u);free[a,b+1]:='x';move:='\';end;
             if b>=3 then if (free[a-1,b-1]='|')and(free[a,b-2]='_')and(free[a+1,b-1]='|')then begin g:=1;inc(u);free[a,b-1]:='x';move:='\';end;
             end;
           if ((a mod 2<>0)and(b mod 2<>0))or((a mod 2=0)and(b mod 2=0))then begin move:='/';g:=1; end;
           end;
       'p':menu(free,u,u1);
        else begin move:='\';g:=1;end;
        end;
      ve(free,u,u1,key);
      if u+u1>=25 then break;
      end;
{Luot cua May}
     g1:=1;
     while (g1=1)and(u+u1<=25) do
      begin  gotoxy(10,17);write('Luot cua May.  ');delay(500);
        gotoxy(10,17);write('Luot cua May.. ');delay(500);
        gotoxy(10,17);write('Luot cua May...');delay(500);
        i:=8;g1:=0;d1:=u1;
        while (i<18)and(u+u1<=25) do
        begin j:=8; i:=i+2;
          while (j<18)and(u+u1<=25) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=3 then
            begin g1:=1;inc(u1);
              if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';free[i,j]:='o';
                end;
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';free[i,j]:='o';
                end;
              if d=3 then break;
              end ;
            if d=3 then break;
            end;
          if d=3 then break;
          end;
        ve(free,u,u1,key);

        if d1=u1 then begin
        i:=8;g1:=0;d1:=0;x:=0;
        while (i<18)and(u+u1<=25) do
        begin j:=8; i:=i+2;
          while (j<18)and(u+u1<=25) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d<2 then
            begin
              if not(free[i-1,j]in['.','|','_']) then
              begin x:=0;
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                if not(tontai(free,key))then begin free[i-1,j]:=' ';free[i-1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i+1,j]in['.','|','_']) then
              begin x:=0;
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                if not(tontai(free,key))then begin free[i+1,j]:=' ';free[i+1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j-1]in['.','|','_']) then
              begin x:=0;
                free[i,j-1]:='_';
                if not(tontai(free,key))then begin free[i,j-1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j+1]in['.','|','_']) then
              begin x:=0;
                free[i,j+1]:='_';
                if not(tontai(free,key))then begin free[i,j+1]:=' ';x:=6;end else break;
                end;
              if (d<2)and(x<>6)then break;
              end;
            if (d=2)or(d=4)then inc(d1);
            if (d<2)and(x<>6)then break;
            end;
          if (d<2)and(x<>6)then break;
          end;
        if (d<2)and(x<>6)then break;
        end;
        ve(free,u,u1,key);

        if d1=25 then begin
        i:=8;
        while i<18 do
        begin i:=i+2; j:=8;
          while j<18 do
          begin j:=j+2; d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=2 then begin
            if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                end else
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                end else
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';
                end else
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';
                end;
              break
              end;
            if d=2 then break;
            end;
          if d=2 then break;
          end;
          if d=2 then break;
          end;
      if d=2 then break;
      i:=8; u1:=0;
      while i<18 do
      begin i:=i+2; j:=8;
        while j<18 do
        begin j:=j+2;d:=0;
          if free[i-1,j]in['.','|','_'] then inc(d);
          if free[i+1,j]in['.','|','_'] then inc(d);
          if free[i,j-1]in['.','|','_'] then inc(d);
          if free[i,j+1]in['.','|','_'] then inc(d);
          if (free[i,j]<>'x')and(d=4)then begin free[i,j]:='o';inc(u1);end;
          end;
        end;
        end;{ket thuc luot danh cua May}
      if u+u1>=25 then
      begin
        if u>u1 then begin gotoxy(10,8);write('Ban thang');end;
        if u<u1 then begin gotoxy(10,8);write('Ban thua');end;
        gotoxy(10,23);write('An Enter de quay lai>>>');readln;
        end;
      end;{ket thuc khi danh het}
      end;{ket thuc 5x5}

{che do 10x10}
    if key='3' then begin
    a:=2;b:=2;u:=0;u1:=0;
{reset lai ban do}
    for i:=1 to 21 do
     for j:=1 to 21 do
     if free[i,j]<>','then free[i,j]:=' ';
{Luot cua Ban}
    while u+u1<100 do
    begin clrscr;
      ve(free,u,u1,key);
      move:='\';g:=1;
      while (move<>'b')and(g=1) do
      begin  gotoxy(18,22);write('Luot cua Ban');
       gotoxy(a,b); g:=0;
       move:=readkey;
       case move of
       'a':begin a:=a-1;if a<=0 then inc(a);gotoxy(a,b);g:=1; end;
       'd':begin a:=a+1;if a>=22 then dec(a);gotoxy(a,b);g:=1;  end;
       'w':begin b:=b-1;if b<=0 then inc(b);gotoxy(a,b);g:=1;  end;
       's':begin b:=b+1;if b>=22 then dec(b);gotoxy(a,b);g:=1;  end;
       'b':begin if ((b mod 2=0)and(a mod 2<>0))or((b mod 2<>0)and(a mod 2=0)) then
           if b mod 2=0 then begin free[a,b]:='|';free[a,b+1]:='|';end
           else free[a,b]:='_' else move:='/';
           if (free[a,b]='|') then
           begin
             if a>=3 then if (free[a-2,b]='|')and(free[a-1,b-1]='_')and(free[a-1,b+1]='_')then begin g:=1;inc(u);free[a-1,b]:='x';move:='\';end;
             if (free[a+2,b]='|')and(free[a+1,b-1]='_')and(free[a+1,b+1]='_')then begin g:=1;inc(u);free[a+1,b]:='x';move:='\';end;
             end;
           if free[a,b]='_' then
           begin
             if (free[a-1,b+1]='|')and(free[a,b+2]='_')and(free[a+1,b+1]='|')then begin g:=1;inc(u);free[a,b+1]:='x';move:='\';end;
             if b>=3 then if (free[a-1,b-1]='|')and(free[a,b-2]='_')and(free[a+1,b-1]='|')then begin g:=1;inc(u);free[a,b-1]:='x';move:='\';end;
             end;
           if ((a mod 2<>0)and(b mod 2<>0))or((a mod 2=0)and(b mod 2=0))then begin move:='/';g:=1; end;
           end;
       'p':menu(free,u,u1);
        else begin move:='\';g:=1;end;
        end;
      ve(free,u,u1,key);
      if u+u1>=25 then break;
      end;
{Luot cua May}
     g1:=1;
     while (g1=1)and(u+u1<=100) do
      begin  gotoxy(10,17);write('Luot cua May.  ');delay(500);
        gotoxy(10,17);write('Luot cua May.. ');delay(500);
        gotoxy(10,17);write('Luot cua May...');delay(500);
        i:=2;g1:=0;d1:=u1;
        while (i<20)and(u+u1<=100) do
        begin j:=2; i:=i+2;
          while (j<20)and(u+u1<=100) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=3 then
            begin g1:=1;inc(u1);
              if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';free[i,j]:='o';
                end;
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';free[i,j]:='o';
                end;
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';free[i,j]:='o';
                end;
              if d=3 then break;
              end ;
            if d=3 then break;
            end;
          if d=3 then break;
          end;
        ve(free,u,u1,key);

        if d1=u1 then begin
        i:=0;g1:=0;d1:=0;x:=0;
        while (i<20)and(u+u1<=100) do
        begin j:=0; i:=i+2;
          while (j<20)and(u+u1<=100) do
          begin j:=j+2;d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d<2 then
            begin
              if not(free[i-1,j]in['.','|','_']) then
              begin x:=0;
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                if not(tontai(free,key))then begin free[i-1,j]:=' ';free[i-1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i+1,j]in['.','|','_']) then
              begin x:=0;
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                if not(tontai(free,key))then begin free[i+1,j]:=' ';free[i+1,j+1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j-1]in['.','|','_']) then
              begin x:=0;
                free[i,j-1]:='_';
                if not(tontai(free,key))then begin free[i,j-1]:=' ';x:=6;end else break;
                end ;
              if not(free[i,j+1]in['.','|','_']) then
              begin x:=0;
                free[i,j+1]:='_';
                if not(tontai(free,key))then begin free[i,j+1]:=' ';x:=6;end else break;
                end;
              if (d<2)and(x<>6)then break;
              end;
            if (d=2)or(d=4)then inc(d1);
            if (d<2)and(x<>6)then break;
            end;
          if (d<2)and(x<>6)then break;
          end;
        if (d<2)and(x<>6)then break;
        end;
        ve(free,u,u1,key);

        if d1=100 then begin
        i:=2; write('‡o');readln;
        while i<20 do
        begin i:=i+2; j:=2;
          while j<20 do
          begin j:=j+2; d:=0;
            if free[i-1,j]in['.','|','_'] then inc(d);
            if free[i+1,j]in['.','|','_'] then inc(d);
            if free[i,j-1]in['.','|','_'] then inc(d);
            if free[i,j+1]in['.','|','_'] then inc(d);
            if d=2 then begin
            if not(free[i-1,j]in['.','|','_']) then
              begin
                free[i-1,j]:='|';free[i-1,j+1]:='|';
                end else
              if not(free[i+1,j]in['.','|','_']) then
              begin
                free[i+1,j]:='|';free[i+1,j+1]:='|';
                end else
              if not(free[i,j-1]in['.','|','_']) then
              begin
                free[i,j-1]:='_';
                end else
              if not(free[i,j+1]in['.','|','_']) then
              begin
                free[i,j+1]:='_';
                end;
              break
              end;
            if d=2 then break;
            end;
          if d=2 then break;
          end;
          if d=2 then break;
          end;
      if d=2 then break;
      i:=2; u1:=0;
      while i<20 do
      begin i:=i+2; j:=2;
        while j<20 do
        begin j:=j+2;d:=0;
          if free[i-1,j]in['.','|','_'] then inc(d);
          if free[i+1,j]in['.','|','_'] then inc(d);
          if free[i,j-1]in['.','|','_'] then inc(d);
          if free[i,j+1]in['.','|','_'] then inc(d);
          if (free[i,j]<>'x')and(d=4)then begin free[i,j]:='o';inc(u1);end;
          end;
        end;
        end;{ket thuc luot danh cua May}
      if u+u1>=200 then
      begin
        if u>u1 then begin gotoxy(10,8);write('Ban thang');end;
        if u<u1 then begin gotoxy(10,8);write('Ban thua');end;
        gotoxy(10,23);write('An Enter de quay lai>>>');readln;
        end;
      end;{ket thuc khi danh het}
      end;{ket thuc 10x10}
      menu(free,u,u1);
end;
BEGIN
   menu(free,u,u1);
END.
game hay nhưng code toàn là code cơ bản
 
Top Bottom