Lập trình trò chơi bốc sỏi trong Pascal
Thư Viện Sách
2020-08-09T10:13:10-04:00
2020-08-09T10:13:10-04:00
https://sachthuvien.com/tin-hoc/lap-trinh-tro-choi-boc-soi-trong-pascal-13464.html
https://sachthuvien.com/uploads/news/2020_07/lap-trinh-pascal.jpg
Sách thư viện
https://sachthuvien.com/uploads/sach-thu-vien-logo.png
Chủ nhật - 09/08/2020 09:55
Cho n đống sỏi với số lượng là a1, an. Có 2 đối thủ tham dự 1 trò chơi như sau:
- Mỗi người lần lượt bốc ra từ 1 đống tùy ý một số sỏi tùy ý.
- Ai bốc hết sỏi trước thì thắng.
Hãy xây dựng chương trình cho phép thể hiện trò chơi trên với một đối thủ là máy tính và chương trình thể hiện chiến thuật thắng của máy tính.
■ Hướng dẫn:
• Thuật toán của máy tính như sau:
- Đổi các số a1, a2, an ra số nhị phân.
- Cộng không nhớ các số nhị phân đó vào biến T.
- T chính là số sỏi cần phải bốc (từ một đống tùy ý).
• Chiến lược chơi của máy tính là khi bốc:
- Nếu T = 0 (tình huống xấu) thì bốc thăm dò (tùy ý).
- T < > 0 (tình huống tốt) thì bốc như đã nói ở trên.
Chú ý rằng đây là một trò chơi căn bản; rất nhiều trò chơi khác được đưa về nó.
Sau đây là các procedure cần thiết để thể hiện chơi trên bằng PASCAL với n = 4.
CONST d=10;
VAR
x,y,z,t,l,i,j,k,w,e,g,s : byte;
a: array[1..4,1..10] of byte;
b: array[1..10] of byte;
c: array[1..10] ofbyte;
u1,u2,ch : string[10];
PROCEDURE DOIHE(n: bety);
VAR p: type;
BEGIN
p : = 0
for i : = 1 to 10 do
c[i] : = 0;
Repeat
inc(p);
c[p] : = n mod 2;
n : = n div 2;
Until n=0;
END;
FUNCTION TAOLAPMANG(m,n,p,q: byte): byte;
BEGIN
If(m+n+p+q) mod 2 = 0 then taolapmang : = 0
Else taolapmang: = 1;
END;
PROCEDURE CONGMANG(x,y,z,t: byte);
VAR p: byte;
BEGIN
p: = 10;
doihe(x);
For k : = 1 to p do
a[1,110-k+1] : = c[k];
doihe(y);
For k : = 1 to p do
a[2,10-k+l] : = c[k];
doihe(z);
For k : = 1 to p do
a[3,10-k+1] : = c[k];
doihe(t);
For k : = 1 to p do
a[4,10-k+1] : = c[k];
{da thanh lap 4 mang}
For k : = 1 to 10 do
b[10-k+1]: = Taolapmang(a[1,10-k+1J), a[2,10-k+l|, a[3,10-k+l], a[4,10-k+l];
END;
PROCEDURE MACHINEPLAY;
BEGIN
Congmang(x,y,z,t);
w: = 0;
Repeat
inc(w);
Until (b[w]=1) or (w=10);
If b[w]=1 then
Begin
e : = 0;
e : = 0;
Repeat
inc(e);
Until a[e,w]=l
{đa phat hien ra mang can giam}
f : = 0;
Repeat
inc(f);
If b[f]=1 then
begin
If a[e,f]=0 then a[e,f] : = 1
Esle s[e,f] : = 0;
end;
Until f=10;
{da co mang noi}
{doi tro lai}
u2 : = “ ;
For s: = 1 to 10 do
begin
str(a[e,s],ch];
u2: = u2+ch;
end;
g : = 0;
Repeat
inc(g);
Doihe(g);
u1 : =“ ;
For s: - 1 to 10 do
begin
str(c[10-s+1],ch);
u1 : = u1+ch;
end;
Until u1 = u2
end;
END;
END.