Tin học Game đánh cờ Caro 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,623
744
22
Phú Yên
Trường THPT Lương Văn Chánh
[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

Dựa theo Game đánh cờ của bạn @Bùi Thành Công , mình viết lại với Turbo Pascal.
Đặc biệt là trí tuệ nhân tạo, mình phải nghĩ rất lâu mới ra được :D
Game chỉ chạy được trên Turbo Pascal thôi nha.
Mã:
 Program Caro;
 uses crt;
 const
      SizeMax = 8;
      Trong = ' ';
      Cham = 'ù';
      Ngang = 'Ä';
      Doc = '³';
      CX = 'X';  { Nguoi choi }
      CO = 'O';  { May tinh }
 var
    Banco,BancoAo: array[1..SizeMax*2+2,1..SizeMax*2+2] of char;
    x,y: integer;
    Luot,Choilai: char;
    SoX,SoO: integer;
    An: Boolean;
    Size: integer;
    CheDo: string[2];
 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;
 Procedure DanhCoAo(dx,dy: integer);
 Begin
      if (BancoAo[dx,dy] = Trong) and (BancoAo[dx-1,dy] = Cham)
      and (BancoAo[dx+1,dy] = Cham) then
      begin
           BancoAo[dx,dy] := Ngang;
      end
      else
      if (BancoAo[dx,dy] = Trong) and (BancoAo[dx,dy-1] = Cham)
      and (BancoAo[dx,dy+1] = Cham) then
      begin
           BanCoAo[dx,dy] := Doc;
      end;
 End;
 Function KiemTraAo: integer;
 var x,y,kt: integer;
 Begin
      Kt := 0;
      for x := 2 to Size*2 do
          for y := 2 to Size*2 do
          begin
               if (BancoAo[x,y] = Trong) and (BancoAo[x-1,y] = Doc)
               and (BancoAo[x+1,y] = Doc) and (BancoAo[x,y-1] = Ngang)
               and (BancoAo[x,y+1] = Ngang) then inc(kt);
          end;
      KiemTraAo := kt;
 End;
 Function BiAn(x,y: integer): Boolean;
 var so: integer;
 Begin
      so := 0;
      if Banco[x,y] = Trong then
      begin
      if BanCoAo[x-1,y] = Doc then inc(so);
      if BanCoAo[x+1,y] = Doc then inc(so);
      if BanCoAo[x,y-1] = Ngang then inc(so);
      if BanCoAo[x,y+1] = Ngang then inc(so);
      end;
      if so = 3 then Bian := True
      else Bian := False;
 End;
 Procedure ResetBanCoAo;
 Begin
      for x := 2 to Size*2 do
          for y := 2 to Size*2 do
          BancoAo[x,y] := BanCo[x,y];
 End;
 Function PhongThu: integer;
 var x,y,so,max: integer;
 Begin
      max := 0;
      x := 1;
      while x <= Size*2 do
      begin
          inc(x);
          y := 1;
          while y <= Size*2 do
          begin
          inc(y);
          if (BancoAo[x,y] = Trong) and ((x+y) mod 2 <> 0) then
          begin
               DanhCoAo(x,y);
               So := KiemTraAo;
               if So > max then
               begin
                    Max := so;
                    x := 1;
                    y := 1;
               end
               else BanCoAo[x,y] := Trong;
          end;
          end;
      end;
      PhongThu := Max;
 End;
 Procedure AI;
 var x,y,min,max,so,lx,ly: integer;
 Begin
      repeat
      Textcolor(white);
      Gotoxy(Size*2 + 5,3);Write('Dang suy nghi....');
      Delay(500);
      Min := SizeMax*SizeMax;
      Max := 0;
      lx := 0;
      ResetBanCoAo;
      for x := Size*2 downto 2 do
          for y := Size*2 downto 2 do
          if (BancoAo[x,y] = Trong) and ((x + y) mod 2 <> 0) then
          begin
               DanhCoAo(x,y);
               So := KiemTraAo;
               if (So = 0) and
               (Bian(x-1,y) or Bian(x+1,y) or Bian(x,y-1) or Bian(x,y+1))
               then So := Max - 1;
               if So >= Max then
               begin
                    Max := So;
                    lx := x;
                    ly := y;
               end;
               BanCoAo[x,y] := Trong;
          end;
      case Chedo[1] of
      '1': if max = 0 then
      repeat
            lx := 2+Random(Size*2-1);
            ly := 2+Random(Size*2-1);
      until (Banco[lx,ly] = Trong) and ((lx + ly) mod 2 <> 0);
      '2':
      if lx = 0 then
      begin
      for x := Size*2 downto 2 do
          for y := Size*2 downto 2 do
          if (BancoAo[x,y] = Trong) and ((x + y) mod 2 <> 0) then
          begin
               ResetBanCoAo;
               DanhCoAo(x,y);
               So := PhongThu;
               if So <= Min then
               begin
                    Min := So;
                    lx := x;
                    ly := y;
               end;
          end;
      end
      else if max = 0 then
      repeat
            ResetBanCoAo;
            lx := 2+Random(Size*2-1);
            ly := 2+Random(Size*2-1);
            DanhCoAo(lx,ly);
            So := 0;
            if Bian(lx-1,ly) or Bian(lx+1,ly) or Bian(lx,ly-1) or
            Bian(lx,ly+1) then So := -1;
            Gotoxy( 60,10);Write(So);
      until (Banco[lx,ly] = Trong) and ((lx + ly) mod 2 <> 0) and (So = 0);
                 end;
          Gotoxy(60,10);Write(lx,' ',ly);
          DanhCo(lx,ly);
          InDiem;
          Gotoxy(Size*2 + 5,3);clreol;
      until (Luot = CX) or (SoX + SoO = sqr(Size - 1));
 End;
 Procedure Dichuyen;
 var k: char;
 Begin
      x := 2;
      y := 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
      Randomize;
      repeat
      repeat
      clrscr;
      TextColor(White);
      Write('Chon kich thuoc choi (1x1..',SizeMax,'x',SizeMax,'): '); Readln(Size);
      until (Size in [1..SizeMax]);
      clrscr;
      repeat
      clrscr;
      Writeln('Chon che do: ');
      Writeln('     [1].De');
      Writeln('     [2].Kho');
      Write  ('     ');
      readln(Chedo);
      until (Chedo = '1') or (Chedo = '2');
      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.
Để copy Code vào Pascal các bạn xem tại https://diendan.hocmai.vn/threads/cach-dan-code-vao-trong-pascal.686564/

Cách chơi: các bạn di chuyển con trỏ đến các vị trí giữa 2 dấu chấm rồi ấn Enter.
Khi đủ một ô thì sẽ ăn nha. Cái này tương tự như Game Caro bậc thang ý.
upload_2018-8-7_21-54-37.png
@ka1412, @Nguyễn Tùng Ân , @Nguyễn Khoa vào xem nha.
Test thử cái AI thế nào :p
 

ka1412

Học sinh chăm học
Thành viên
24 Tháng mười một 2017
874
730
121
Hà Nội
CNN | Life
Dựa theo Game đánh cờ của bạn @Bùi Thành Công , mình viết lại với Turbo Pascal.
Đặc biệt là trí tuệ nhân tạo, mình phải nghĩ rất lâu mới ra được :D
Game chỉ chạy được trên Turbo Pascal thôi nha.
Mã:
Program Caro;
 uses crt;
 const
      SizeMax = 8;
      Trong = ' ';
      Cham = 'ù';
      Ngang = 'Ä';
      Doc = '³';
      CX = 'X';  { Nguoi choi }
      CO = 'O';  { May tinh }

 var
    Banco,BancoAo: 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;

 Procedure DanhCoAo(dx,dy: integer);
 Begin
      if (BancoAo[dx,dy] = Trong) and (BancoAo[dx-1,dy] = Cham)
      and (BancoAo[dx+1,dy] = Cham) then
      begin
           BancoAo[dx,dy] := Ngang;
      end
      else
      if (BancoAo[dx,dy] = Trong) and (BancoAo[dx,dy-1] = Cham)
      and (BancoAo[dx,dy+1] = Cham) then
      begin
           BanCoAo[dx,dy] := Doc;
      end;
 End;

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

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

 Procedure ResetBanCoAo;
 Begin
      for x := 2 to Size*2 do
          for y := 2 to Size*2 do
          BancoAo[x,y] := BanCo[x,y];
 End;

 Function PhongThu: integer;
 var x,y,so,max: integer;
 Begin
      max := 0;
      x := 1;
      while x <= Size*2 do
      begin
          inc(x);
          y := 1;
          while y <= Size*2 do
          begin
          inc(y);
          if (BancoAo[x,y] = Trong) and ((x+y) mod 2 <> 0) then
          begin
               DanhCoAo(x,y);
               So := KiemTraAo;
               if So > max then
               begin
                    Max := so;
                    x := 1;
                    y := 1;
               end
               else BanCoAo[x,y] := Trong;
          end;
          end;
      end;
      PhongThu := Max;
 End;

 Procedure AI;
 var x,y,min,max,so,lx,ly: integer;
 Begin
      repeat
      Delay(500);
      Min := SizeMax*SizeMax;
      Max := 0;
      lx := 0;
      ResetBanCoAo;
      for x := Size*2 downto 2 do
          for y := Size*2 downto 2 do
          if (BancoAo[x,y] = Trong) and ((x + y) mod 2 <> 0) then
          begin
               DanhCoAo(x,y);
               So := KiemTraAo;
               if (So = 0) and
               (Bian(x-1,y) or Bian(x+1,y) or Bian(x,y-1) or Bian(x,y+1))
               then So := Max - 1;
               if So >= Max then
               begin
                    Max := So;
                    lx := x;
                    ly := y;
               end;
               BanCoAo[x,y] := Trong;
          end;
      if lx = 0 then
      begin
      TextColor(white);
      Gotoxy(Size*2 + 5,3);Write('Dang suy nghi....');
      for x := Size*2 downto 2 do
          for y := Size*2 downto 2 do
          if (BancoAo[x,y] = Trong) and ((x + y) mod 2 <> 0) then
          begin
               ResetBanCoAo;
               DanhCoAo(x,y);
               So := PhongThu;
               if So < Min then
               begin
                    Min := So;
                    lx := x;
                    ly := y;
               end;
          end;
      Gotoxy(Size*2 + 5,3);clreol;
      end;
          DanhCo(lx,ly);
          InDiem;
      until (Luot = CX) or (SoX + SoO = sqr(Size - 1));
 End;

 Procedure Dichuyen;
 var k: char;
 Begin
      x := 2;
      y := 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.
Để copy Code vào Pascal các bạn xem tại https://diendan.hocmai.vn/threads/cach-dan-code-vao-trong-pascal.686564/

Cách chơi: các bạn di chuyển con trỏ đến các vị trí giữa 2 dấu chấm rồi ấn Enter.
Khi đủ một ô thì sẽ ăn nha. Cái này tương tự như Game Caro bậc thang ý.
View attachment 71166
@ka1412, @Nguyễn Tùng Ân , @Nguyễn Khoa vào xem nha.
Test thử cái AI thế nào :p
Code nhìn có vẻ gọn hơn =)
 

Nguyễn Tùng Ân

Học sinh chăm học
Thành viên
16 Tháng ba 2018
190
289
61
17
Cần Thơ
THCS An Lạc
Dựa theo Game đánh cờ của bạn @Bùi Thành Công , mình viết lại với Turbo Pascal.
Đặc biệt là trí tuệ nhân tạo, mình phải nghĩ rất lâu mới ra được :D
Game chỉ chạy được trên Turbo Pascal thôi nha.
Mã:
Program Caro;
 uses crt;
 const
      SizeMax = 8;
      Trong = ' ';
      Cham = 'ù';
      Ngang = 'Ä';
      Doc = '³';
      CX = 'X';  { Nguoi choi }
      CO = 'O';  { May tinh }

 var
    Banco,BancoAo: 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;

 Procedure DanhCoAo(dx,dy: integer);
 Begin
      if (BancoAo[dx,dy] = Trong) and (BancoAo[dx-1,dy] = Cham)
      and (BancoAo[dx+1,dy] = Cham) then
      begin
           BancoAo[dx,dy] := Ngang;
      end
      else
      if (BancoAo[dx,dy] = Trong) and (BancoAo[dx,dy-1] = Cham)
      and (BancoAo[dx,dy+1] = Cham) then
      begin
           BanCoAo[dx,dy] := Doc;
      end;
 End;

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

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

 Procedure ResetBanCoAo;
 Begin
      for x := 2 to Size*2 do
          for y := 2 to Size*2 do
          BancoAo[x,y] := BanCo[x,y];
 End;

 Function PhongThu: integer;
 var x,y,so,max: integer;
 Begin
      max := 0;
      x := 1;
      while x <= Size*2 do
      begin
          inc(x);
          y := 1;
          while y <= Size*2 do
          begin
          inc(y);
          if (BancoAo[x,y] = Trong) and ((x+y) mod 2 <> 0) then
          begin
               DanhCoAo(x,y);
               So := KiemTraAo;
               if So > max then
               begin
                    Max := so;
                    x := 1;
                    y := 1;
               end
               else BanCoAo[x,y] := Trong;
          end;
          end;
      end;
      PhongThu := Max;
 End;

 Procedure AI;
 var x,y,min,max,so,lx,ly: integer;
 Begin
      repeat
      Delay(500);
      Min := SizeMax*SizeMax;
      Max := 0;
      lx := 0;
      ResetBanCoAo;
      for x := Size*2 downto 2 do
          for y := Size*2 downto 2 do
          if (BancoAo[x,y] = Trong) and ((x + y) mod 2 <> 0) then
          begin
               DanhCoAo(x,y);
               So := KiemTraAo;
               if (So = 0) and
               (Bian(x-1,y) or Bian(x+1,y) or Bian(x,y-1) or Bian(x,y+1))
               then So := Max - 1;
               if So >= Max then
               begin
                    Max := So;
                    lx := x;
                    ly := y;
               end;
               BanCoAo[x,y] := Trong;
          end;
      if lx = 0 then
      begin
      TextColor(white);
      Gotoxy(Size*2 + 5,3);Write('Dang suy nghi....');
      for x := Size*2 downto 2 do
          for y := Size*2 downto 2 do
          if (BancoAo[x,y] = Trong) and ((x + y) mod 2 <> 0) then
          begin
               ResetBanCoAo;
               DanhCoAo(x,y);
               So := PhongThu;
               if So < Min then
               begin
                    Min := So;
                    lx := x;
                    ly := y;
               end;
          end;
      Gotoxy(Size*2 + 5,3);clreol;
      end;
          DanhCo(lx,ly);
          InDiem;
      until (Luot = CX) or (SoX + SoO = sqr(Size - 1));
 End;

 Procedure Dichuyen;
 var k: char;
 Begin
      x := 2;
      y := 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.
Để copy Code vào Pascal các bạn xem tại https://diendan.hocmai.vn/threads/cach-dan-code-vao-trong-pascal.686564/

Cách chơi: các bạn di chuyển con trỏ đến các vị trí giữa 2 dấu chấm rồi ấn Enter.
Khi đủ một ô thì sẽ ăn nha. Cái này tương tự như Game Caro bậc thang ý.
View attachment 71166
@ka1412, @Nguyễn Tùng Ân , @Nguyễn Khoa vào xem nha.
Test thử cái AI thế nào :p
Chạy ổn nha anh, AI cũng được, hay anh thêm vào chọn mức độ để tùy chỉnh AI ho người dùng, bên phần chọn kích cỡ anh ghi là 1x1 -> 8x8 thay vì 1..8, ai không học pascal thì không hiều đc, lâu chưa lên HM nên không biết hihi
 

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,623
744
22
Phú Yên
Trường THPT Lương Văn Chánh
Chạy ổn nha anh, AI cũng được, hay anh thêm vào chọn mức độ để tùy chỉnh AI ho người dùng, bên phần chọn kích cỡ anh ghi là 1x1 -> 8x8 thay vì 1..8, ai không học pascal thì không hiều đc, lâu chưa lên HM nên không biết hihi
đã sửa rồi......chơi thử xem sao
Nói trước là cái chế độ dễ là nó Random nên cũng chưa chắc là dễ đâu nha
 

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,623
744
22
Phú Yên
Trường THPT Lương Văn Chánh
  • Like
Reactions: Elishuchi

Thảo_UwU

Học sinh chăm học
Thành viên
16 Tháng mười 2021
398
333
76
18
Hà Nội
Dựa theo Game đánh cờ của bạn @Bùi Thành Công , mình viết lại với Turbo Pascal.
Đặc biệt là trí tuệ nhân tạo, mình phải nghĩ rất lâu mới ra được :D
Game chỉ chạy được trên Turbo Pascal thôi nha.
Mã:
 Program Caro;
 uses crt;
 const
      SizeMax = 8;
      Trong = ' ';
      Cham = 'ù';
      Ngang = 'Ä';
      Doc = '³';
      CX = 'X';  { Nguoi choi }
      CO = 'O';  { May tinh }
 var
    Banco,BancoAo: array[1..SizeMax*2+2,1..SizeMax*2+2] of char;
    x,y: integer;
    Luot,Choilai: char;
    SoX,SoO: integer;
    An: Boolean;
    Size: integer;
    CheDo: string[2];
 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;
 Procedure DanhCoAo(dx,dy: integer);
 Begin
      if (BancoAo[dx,dy] = Trong) and (BancoAo[dx-1,dy] = Cham)
      and (BancoAo[dx+1,dy] = Cham) then
      begin
           BancoAo[dx,dy] := Ngang;
      end
      else
      if (BancoAo[dx,dy] = Trong) and (BancoAo[dx,dy-1] = Cham)
      and (BancoAo[dx,dy+1] = Cham) then
      begin
           BanCoAo[dx,dy] := Doc;
      end;
 End;
 Function KiemTraAo: integer;
 var x,y,kt: integer;
 Begin
      Kt := 0;
      for x := 2 to Size*2 do
          for y := 2 to Size*2 do
          begin
               if (BancoAo[x,y] = Trong) and (BancoAo[x-1,y] = Doc)
               and (BancoAo[x+1,y] = Doc) and (BancoAo[x,y-1] = Ngang)
               and (BancoAo[x,y+1] = Ngang) then inc(kt);
          end;
      KiemTraAo := kt;
 End;
 Function BiAn(x,y: integer): Boolean;
 var so: integer;
 Begin
      so := 0;
      if Banco[x,y] = Trong then
      begin
      if BanCoAo[x-1,y] = Doc then inc(so);
      if BanCoAo[x+1,y] = Doc then inc(so);
      if BanCoAo[x,y-1] = Ngang then inc(so);
      if BanCoAo[x,y+1] = Ngang then inc(so);
      end;
      if so = 3 then Bian := True
      else Bian := False;
 End;
 Procedure ResetBanCoAo;
 Begin
      for x := 2 to Size*2 do
          for y := 2 to Size*2 do
          BancoAo[x,y] := BanCo[x,y];
 End;
 Function PhongThu: integer;
 var x,y,so,max: integer;
 Begin
      max := 0;
      x := 1;
      while x <= Size*2 do
      begin
          inc(x);
          y := 1;
          while y <= Size*2 do
          begin
          inc(y);
          if (BancoAo[x,y] = Trong) and ((x+y) mod 2 <> 0) then
          begin
               DanhCoAo(x,y);
               So := KiemTraAo;
               if So > max then
               begin
                    Max := so;
                    x := 1;
                    y := 1;
               end
               else BanCoAo[x,y] := Trong;
          end;
          end;
      end;
      PhongThu := Max;
 End;
 Procedure AI;
 var x,y,min,max,so,lx,ly: integer;
 Begin
      repeat
      Textcolor(white);
      Gotoxy(Size*2 + 5,3);Write('Dang suy nghi....');
      Delay(500);
      Min := SizeMax*SizeMax;
      Max := 0;
      lx := 0;
      ResetBanCoAo;
      for x := Size*2 downto 2 do
          for y := Size*2 downto 2 do
          if (BancoAo[x,y] = Trong) and ((x + y) mod 2 <> 0) then
          begin
               DanhCoAo(x,y);
               So := KiemTraAo;
               if (So = 0) and
               (Bian(x-1,y) or Bian(x+1,y) or Bian(x,y-1) or Bian(x,y+1))
               then So := Max - 1;
               if So >= Max then
               begin
                    Max := So;
                    lx := x;
                    ly := y;
               end;
               BanCoAo[x,y] := Trong;
          end;
      case Chedo[1] of
      '1': if max = 0 then
      repeat
            lx := 2+Random(Size*2-1);
            ly := 2+Random(Size*2-1);
      until (Banco[lx,ly] = Trong) and ((lx + ly) mod 2 <> 0);
      '2':
      if lx = 0 then
      begin
      for x := Size*2 downto 2 do
          for y := Size*2 downto 2 do
          if (BancoAo[x,y] = Trong) and ((x + y) mod 2 <> 0) then
          begin
               ResetBanCoAo;
               DanhCoAo(x,y);
               So := PhongThu;
               if So <= Min then
               begin
                    Min := So;
                    lx := x;
                    ly := y;
               end;
          end;
      end
      else if max = 0 then
      repeat
            ResetBanCoAo;
            lx := 2+Random(Size*2-1);
            ly := 2+Random(Size*2-1);
            DanhCoAo(lx,ly);
            So := 0;
            if Bian(lx-1,ly) or Bian(lx+1,ly) or Bian(lx,ly-1) or
            Bian(lx,ly+1) then So := -1;
            Gotoxy( 60,10);Write(So);
      until (Banco[lx,ly] = Trong) and ((lx + ly) mod 2 <> 0) and (So = 0);
                 end;
          Gotoxy(60,10);Write(lx,' ',ly);
          DanhCo(lx,ly);
          InDiem;
          Gotoxy(Size*2 + 5,3);clreol;
      until (Luot = CX) or (SoX + SoO = sqr(Size - 1));
 End;
 Procedure Dichuyen;
 var k: char;
 Begin
      x := 2;
      y := 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
      Randomize;
      repeat
      repeat
      clrscr;
      TextColor(White);
      Write('Chon kich thuoc choi (1x1..',SizeMax,'x',SizeMax,'): '); Readln(Size);
      until (Size in [1..SizeMax]);
      clrscr;
      repeat
      clrscr;
      Writeln('Chon che do: ');
      Writeln('     [1].De');
      Writeln('     [2].Kho');
      Write  ('     ');
      readln(Chedo);
      until (Chedo = '1') or (Chedo = '2');
      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.
Để copy Code vào Pascal các bạn xem tại https://diendan.hocmai.vn/threads/cach-dan-code-vao-trong-pascal.686564/

Cách chơi: các bạn di chuyển con trỏ đến các vị trí giữa 2 dấu chấm rồi ấn Enter.
Khi đủ một ô thì sẽ ăn nha. Cái này tương tự như Game Caro bậc thang ý.
View attachment 71166
@ka1412, @Nguyễn Tùng Ân , @Nguyễn Khoa vào xem nha.
Test thử cái AI thế nào :p
1663160710536.png
Chỗ này ko hiểu sao ko chạy đc ạ :))
:= Cham; ấy ạ
 

phu12t1

Học sinh mới
17 Tháng một 2023
2
0
1
15
Tiền Giang
Dựa theo Game đánh cờ của bạn @Bùi Thành Công , mình viết lại với Turbo Pascal.
Đặc biệt là trí tuệ nhân tạo, mình phải nghĩ rất lâu mới ra được :D
Game chỉ chạy được trên Turbo Pascal thôi nha.
Mã:
 Program Caro;
 uses crt;
 const
      SizeMax = 8;
      Trong = ' ';
      Cham = 'ù';
      Ngang = 'Ä';
      Doc = '³';
      CX = 'X';  { Nguoi choi }
      CO = 'O';  { May tinh }
 var
    Banco,BancoAo: array[1..SizeMax*2+2,1..SizeMax*2+2] of char;
    x,y: integer;
    Luot,Choilai: char;
    SoX,SoO: integer;
    An: Boolean;
    Size: integer;
    CheDo: string[2];
 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;
 Procedure DanhCoAo(dx,dy: integer);
 Begin
      if (BancoAo[dx,dy] = Trong) and (BancoAo[dx-1,dy] = Cham)
      and (BancoAo[dx+1,dy] = Cham) then
      begin
           BancoAo[dx,dy] := Ngang;
      end
      else
      if (BancoAo[dx,dy] = Trong) and (BancoAo[dx,dy-1] = Cham)
      and (BancoAo[dx,dy+1] = Cham) then
      begin
           BanCoAo[dx,dy] := Doc;
      end;
 End;
 Function KiemTraAo: integer;
 var x,y,kt: integer;
 Begin
      Kt := 0;
      for x := 2 to Size*2 do
          for y := 2 to Size*2 do
          begin
               if (BancoAo[x,y] = Trong) and (BancoAo[x-1,y] = Doc)
               and (BancoAo[x+1,y] = Doc) and (BancoAo[x,y-1] = Ngang)
               and (BancoAo[x,y+1] = Ngang) then inc(kt);
          end;
      KiemTraAo := kt;
 End;
 Function BiAn(x,y: integer): Boolean;
 var so: integer;
 Begin
      so := 0;
      if Banco[x,y] = Trong then
      begin
      if BanCoAo[x-1,y] = Doc then inc(so);
      if BanCoAo[x+1,y] = Doc then inc(so);
      if BanCoAo[x,y-1] = Ngang then inc(so);
      if BanCoAo[x,y+1] = Ngang then inc(so);
      end;
      if so = 3 then Bian := True
      else Bian := False;
 End;
 Procedure ResetBanCoAo;
 Begin
      for x := 2 to Size*2 do
          for y := 2 to Size*2 do
          BancoAo[x,y] := BanCo[x,y];
 End;
 Function PhongThu: integer;
 var x,y,so,max: integer;
 Begin
      max := 0;
      x := 1;
      while x <= Size*2 do
      begin
          inc(x);
          y := 1;
          while y <= Size*2 do
          begin
          inc(y);
          if (BancoAo[x,y] = Trong) and ((x+y) mod 2 <> 0) then
          begin
               DanhCoAo(x,y);
               So := KiemTraAo;
               if So > max then
               begin
                    Max := so;
                    x := 1;
                    y := 1;
               end
               else BanCoAo[x,y] := Trong;
          end;
          end;
      end;
      PhongThu := Max;
 End;
 Procedure AI;
 var x,y,min,max,so,lx,ly: integer;
 Begin
      repeat
      Textcolor(white);
      Gotoxy(Size*2 + 5,3);Write('Dang suy nghi....');
      Delay(500);
      Min := SizeMax*SizeMax;
      Max := 0;
      lx := 0;
      ResetBanCoAo;
      for x := Size*2 downto 2 do
          for y := Size*2 downto 2 do
          if (BancoAo[x,y] = Trong) and ((x + y) mod 2 <> 0) then
          begin
               DanhCoAo(x,y);
               So := KiemTraAo;
               if (So = 0) and
               (Bian(x-1,y) or Bian(x+1,y) or Bian(x,y-1) or Bian(x,y+1))
               then So := Max - 1;
               if So >= Max then
               begin
                    Max := So;
                    lx := x;
                    ly := y;
               end;
               BanCoAo[x,y] := Trong;
          end;
      case Chedo[1] of
      '1': if max = 0 then
      repeat
            lx := 2+Random(Size*2-1);
            ly := 2+Random(Size*2-1);
      until (Banco[lx,ly] = Trong) and ((lx + ly) mod 2 <> 0);
      '2':
      if lx = 0 then
      begin
      for x := Size*2 downto 2 do
          for y := Size*2 downto 2 do
          if (BancoAo[x,y] = Trong) and ((x + y) mod 2 <> 0) then
          begin
               ResetBanCoAo;
               DanhCoAo(x,y);
               So := PhongThu;
               if So <= Min then
               begin
                    Min := So;
                    lx := x;
                    ly := y;
               end;
          end;
      end
      else if max = 0 then
      repeat
            ResetBanCoAo;
            lx := 2+Random(Size*2-1);
            ly := 2+Random(Size*2-1);
            DanhCoAo(lx,ly);
            So := 0;
            if Bian(lx-1,ly) or Bian(lx+1,ly) or Bian(lx,ly-1) or
            Bian(lx,ly+1) then So := -1;
            Gotoxy( 60,10);Write(So);
      until (Banco[lx,ly] = Trong) and ((lx + ly) mod 2 <> 0) and (So = 0);
                 end;
          Gotoxy(60,10);Write(lx,' ',ly);
          DanhCo(lx,ly);
          InDiem;
          Gotoxy(Size*2 + 5,3);clreol;
      until (Luot = CX) or (SoX + SoO = sqr(Size - 1));
 End;
 Procedure Dichuyen;
 var k: char;
 Begin
      x := 2;
      y := 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
      Randomize;
      repeat
      repeat
      clrscr;
      TextColor(White);
      Write('Chon kich thuoc choi (1x1..',SizeMax,'x',SizeMax,'): '); Readln(Size);
      until (Size in [1..SizeMax]);
      clrscr;
      repeat
      clrscr;
      Writeln('Chon che do: ');
      Writeln('     [1].De');
      Writeln('     [2].Kho');
      Write  ('     ');
      readln(Chedo);
      until (Chedo = '1') or (Chedo = '2');
      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.
Để copy Code vào Pascal các bạn xem tại https://diendan.hocmai.vn/threads/cach-dan-code-vao-trong-pascal.686564/

Cách chơi: các bạn di chuyển con trỏ đến các vị trí giữa 2 dấu chấm rồi ấn Enter.
Khi đủ một ô thì sẽ ăn nha. Cái này tương tự như Game Caro bậc thang ý.
View attachment 71166
@ka1412, @Nguyễn Tùng Ân , @Nguyễn Khoa vào xem nha.
Test thử cái AI thế nào :p
Sao tới khúc Banco[x,y] := Cham; rồi mik chạy nó hiện lên Type mismatch vậy
 

Attachments

  • 23421cb510a2cbfc92b3.jpg
    23421cb510a2cbfc92b3.jpg
    61.3 KB · Đọc: 1
Top Bottom