Lập trình trò chơi tính điểm quân đôminô trong Pascal

Chủ nhật - 09/08/2020 10:05
Cho 1 quân đôminô trên bàn và một số quân đôminô. Một người chơi một trò chơi sau đây:
- Người đó lần lượt gắn các quân đôminô vào quân đã có sẵn ban đầu.
- Người đó được gọi là thắng cuộc nếu tổng các số điểm của các quân còn lại là nhỏ nhất trong tất cả cách lắp.
- Hãy lập trình để máy chơi được trò chơi trên và luôn thắng cuộc.
■ Hướng dẫn:
- Đây là trò chơi một người, thuật toán chủ yếu là vét cạn các cách đi có thể để tổng số điểm còn lại đạt giá trị nhỏ nhất.
- Ta dùng thủ tục đệ qui Find (trai, phai: byte) để có thể quay lui khi vét cạn.
Thủ tục này thể hiện bằng PASCAL như sau:
{$M65520,0,0}
PROGRAM BAILAM3;
USES CRT;
TYPE Conco=Record
           x,y: Byte;
           co: set of byte;
           End;
VAR i,j,m,1m,1maxphai,1maxtrai,1minphai,lmintrai: Integer;
sigma,max,min: longint;
domino: array[1..100 of conco;
luutrai,luuphai,kqmaxtrai,kqmaxphai,kqmintrai,kqminphai: array[1.. 100] og byte;
          flag: set of byte;
          ch:char;
          tarn: set of byte;
          trai,phai,demtrai,demphai: Byte;
          oknhap: boolean;
PROCEDURE KEU;
BEGIN
      Sound(1305);
      Delay(300);
      Nosound;
END;
PROCEDURE FIND (trai,phai: Byte);
VAR j : integer;
         found: boolean;
BEGIN
         found : = false;
         For j : = 1 to 1m do
               If j in flag then
                  With domino[j] do
                       Begin
                            If (trai in co) then
                                Begin
                                    found : = true;
                                    sigma : = sigma-x-y;
                                    flag: = flag-[j]
                                    demtrai : = demtrai+1;
                                    luutrai[demtrai] : = j;
                                    If (trai=x) then Find(y,phai)
                                    Else Find(x,phai);
                                    demtrai: = demtrai-1;
                                    sigma: = sigma+x+y;
                                    flag: = flag+[j];
                               End;
                               If (phai in co) then
                               Begin
                                     found: = true;
                                     flag : = flag-[j];
                                     sigma: = sigma-x-y;
                                     demphai: = demphai+1;
                                     luuphai[demphai] : = j;
                                     If (phai=x) then find (trai,y);
                                     Else find(trai,x);
                                     demphai : = demphai-1;
                                     sigma : = sigma+x+y;
                                     flag : = flag+[j];
                                End;
                        End;
                  If (not found) then
                  Begin
                       If (sigma>max) then
                       begin
                            max: = sigma;
                            1maxphai : = demphai;
                            1maxtrai : = demtrai
                            kqmaxtrai : = luutrai;
                            kqmaxphai : = luuphai;
                       end;
                       If (sigmacmin) then
                       begin
                           min : = sigma;
                           1minphai : = demphai;
                           1mintrai : = demtrai;
                           kqmintrai : = luutrai
                           kqminphai : = luuphai;
                      end;
                 End;
END;
PROCEDURE XUAT;
BEGIN
      Repeat
           clrscr;
           writeln(’Menu’);
           Writeln(‘1. Xem dap so cau 2');
           Writeln('2. Xem dap so cau 3');
           Writeln('3. quit');
           Repeat
               ch : = readkey;
           Until ch in; [‘1’..’3’]
           Case ch of
               '1' : begin
                    For i : = 1mintrai down to 1 do
                   With domino[kqmintrai[i] do
                    begin
                       write(x',’,y,'->');
                    end;
                    For i : = 1 to 1minphai do
                    With domino[kqminphai[i]] do
                     begin
                         write(x,',',y,'->');
                    end;
                    Gotoxy(where-2,wherey);Writeln(' ');
                    Writeln(‘So diem con lai la',min) ;
                    readln;
               end;
               '2' : begin
                    For i: = 1maxtrai down to 1 do
                    With domino[kqmaxphai[i]] do
                    begin
                        write(x,',',y,’->');
                    end;
                    Gotoxy(where-2,wherey);Writeln(' ');
                    Writeln(‘So diem con lai la',max);
                    readln;
                    end;
               end;
          Until ch=’3';
END;
PROCEDURE DOING;
BEGIN
      clrscr;
      Writeln(Nhap vao cap i0 j0');
      Readln(trai phai);
      If (((trai-m)*(trai)>0) or ((phai-m)*(phai)>0)) then
      begin
          keu;
              Writeln(‘Nhap bay ba');
              Readin;
              exit;
       end;
       tam : = [trai,phai];
       i: = 0;
       Repeat
            i : = i + 1;
       Until (domino[i].co=tam);
       demphai : = 1;
       demtrai : = 0;
       flag : = flag-[i];
       luuphai[1]: = i;
       sigma: = sigma-domino[i].x-domino[i].y;
       Writeln(‘Wait me a few minutes long’);
       max : = 0;
      min : = 2147483647;
      Find(trai,phai);
      xuat;
      readln
END;
PROCEDURE NHAP;
VAR s : string;
         error : integer;
BEGIN
        Writeln(‘Nhap m');
        Readln(s);
       Val(s,m,error);
        If (error< >0) then
        begin
             Writeln(‘Kieu so sai.Nhap lai');
             Readin;
             exit;
         end;
         Writeln(‘Cong thuc tinh so hinh chu nhat la To hop C(m+1), 2+m+1=(m+1)*(m+2)/2');
         1m : = (m+1)*(m+2) div 2;
         Writeln(‘Va so do bang',1m);
         oknhap : = true;
         flag : = [1..1m];
         1m : = 0;
         sigma : = 0;
         For i : = 0 to m do
             For j : = i to m do
                 begin
                     1m: = lin+1;
                     sigma: = sigma+i+j;
                     domino[1m].x : = i;
                     domino[1m].y: = j;
                     domino[1m].co: = [i,j];
                 end;
          Oknhap : = true;
          readln;
END;
BEGIN
      oknhap : = false;
      Repeat
      clrscr;
      writeln(’Menu’);
      Writeln(1. Cau 1');
      Writeln('2. Can 2 & 3');
      Writeln('3. quit');
      Repeat
          ch: = readkey;
      Until ch in ['1'..'3'];
      Case ch of
           '1' : Nhap;
           '2' : If oknhap then Doing
                Else.
                keu;
           end;
      Until ch='3';
END.

  Ý kiến bạn đọc

THÀNH VIÊN

Hãy đăng nhập thành viên để trải nghiệm đầy đủ các tiện ích trên site
Kênh Bóng đá trực tiếp hôm nay miễn phí ⇔ ABC8
Kênh 90Phut TV full HD ⇔ i9bet
xs66 ⇔ Jun88 ⇔ kuwin
truc tiep bong da xoilac tv mien phi
link trực tiếp
bóng đá xôi lạc tv hôm nay ⇔ link xem truc tiep bong da xoilac tv ⇔ https://104.248.99.177/
18win ⇔ xem bóng đá cà khịa tv trực tuyến hôm nay
hitclub ⇔ New88 ⇔ ok365
18win ⇔ 789BET ⇔ Kubet
sin88.run ⇔ 789BET ⇔ BJ88
33win ⇔ hq88 ⇔ BJ88
https://789betcom0.com/ ⇔ https://hi88.baby/
Luck8 ⇔ https://98win.care/
77win ⇔ 789bet ⇔ Nhà cái 789bet
bet88 ⇔ F168 ⇔ Nhà cái MB66
WW88 ⇔ J88 ⇔ BJ88 ⇔ 
789Bet ⇔ 789Bet ⇔ 33WIN
qh88 ⇔ nhà cái ok365 ⇔ VIPwin
Go88 ⇔  ⇔ 789club ⇔ ABC8
Kubet ⇔ saowin ⇔ hi88 ⇔ 789BET
BJ88 ⇔ https://okvipno1.com/
8K BET ⇔ Go88 ⇔ 789club
https://23win.school/ ⇔ hi88 ⇔ 33win
 ⇔ https://69vncom.pro/ ⇔ Bet88
https://789bethv.com/ ⇔ https://88clb.promo/
Kuwin ⇔ NEW88 ⇔ k8cc ⇔ 33WIN
https://1mb66.com/ ⇔ https://kubetvn88.com/
https://ww88.fund/ ⇔ https://uk88.rocks
https://8xbet68.net/ ⇔ https://u888com.club/
kubet.li ⇔ BJ88 ⇔ https://wreachavoconline.com/
sunwin ⇔ sunwin ⇔ hi88 ⇔ hi88
Shbet ⇔ hitclub ⇔ https://ww88.cruises/
F168 ⇔ v9bet ⇔ https://u8888.mobi/
Go88 ⇔ http://sunwinvn.live/ ⇔ Sunwin
RR88 ⇔ iWin ⇔ https://kuwin.education/
http://sunwinvn.me/ ⇔ https://geteconow.com/
https://springdalefurnishings.com/ ⇔ 789WIN
trang chủ 789bet ⇔ 79king ⇔ 188bet
https://abc8.education/ ⇔ 789BET
https://188bethn.com/ ⇔ https://33win.community/
https://thuocvienquany.com/ ⇔ https://shbet.pw/
https://ajjaaudio.com/ ⇔ https://88clb.fitness/
https://thoibaoso.net/ ⇔ https://hi88.report/
https://33winco.com/ ⇔ https://sunwin214.com/
88NN ⇔ U888 ⇔ http://sunwinvn.shop/
https://88clb.lawyer/ ⇔ https://olicn.com/
https://iwin.locker/ ⇔ https://wreachavoconline.com/
https://iwinvn.cc/ ⇔ https://iwinvn.app/
https://iwinvn.live/ ⇔ https://iwinvn.shop/
https://iwinvn.store/ ⇔ https://iwinvn.online/
https://789club60.com/ ⇔ https://betvisacom2.com/
https://margaretjeanlangstaff.com/ ⇔ 68gamebai
23win ⇔ https://789club24.com/
https://xaydungwebsite.com/ ⇔ qh 88
sunwin ⇔ 789win ⇔ https://69vnn.com/
https://bet88.football/ ⇔ https://j88com.app/
https://go88club13.com/ ⇔  https://8xbetj.net/
https://bk8link2.com/ ⇔  https://bk8link3.com/
https://bk8link4.com/ ⇔  https://bk8link5.com/
https://bk8link6.com/ ⇔  https://12betlink1.com/
https://vididong.com/ ⇔ j88 ⇔ SHBET
https://tp88.finance/ ⇔ https://hi88.gives/
33win ⇔ https://181bet.group/
https://juice-headquarters.com ⇔ w88
f8bet f8bet004.com ⇔ https://23win.build/
88clbz.store ⇔ https://shbet.wedding/
http://sunwinvn.site/ ⇔ New88 com ⇔ 79king
https://ww88.supply/ ⇔ https://fb88.voyage/
Link vào NEW88 ⇔ http://oole777.org/
https://sosliberty.com/ ⇔ 789club
https://f8bet0.tv/ ⇔
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây