Lập trình trò chơi đổi màu bi trong Pascal
Thư Viện Sách
2023-12-13T05:01:36-05:00
2023-12-13T05:01:36-05:00
https://sachthuvien.com/tin-hoc/lap-trinh-tro-choi-doi-mau-bi-trong-pascal-13467.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 10:15
Trên bàn có n1 hòn bi xanh, n2 hòn bi đỏ, n3 hòn bi vàng. Một người tham gia vào một trò chơi sau:- Cứ 2 viên bi khác màu chạm vào sẽ biến thành màu thứ 3.- Người thắng cuộc là người biến được tất cả các hòn bi đó về màu đỏ. Hãy lập trình để máy chơi được trò chơi trên với khả năng cao nhất.
■ Hướng dẫn:
- Ta có thể giải bài toán tổng quát hơn là biến số bi ban đầu là (g,y,r) thành số bi cuối cùng là (new,newg,newr).
- Để ý rằng tổng số là không đổi /à sau mỗi nước đi hiệu số của hai đống bi khác màu phải chia hết cho 3.
Sau đây là chương trình chi tiết thể hiện bằng PASCAL.
PROGRAM BAI39
USES CRT;
VAR r, g, y, newr, newg, newy, cl, c2, c3, ml, m2, m3:
Integer, i, min: Byte;
PROCEDURE XUAT;
BEGIN
Textcolor(Green);Gotoxy(3,5);Write(g);
Textcolor(Yellow);Gotoxy(13,5);Write(y);
Textcolor(Red);Gotoxy(23,5);Write(r);
c1 : = g-y;
c2 : = y-r;
c3 : = r-g;
Delay(100);
Readln;
END;
PROCEDURE RA_DO;
BEGIN
{Xuat ra Man Hinh}
Clrscr;
Gotoxy(20,20);
Writeln(‘Lay bi xanh chap voi bi vang');
Dec(y);
Dec(g);
r : = r+2;
xuat;
END;
PROCEDURE RA_VANG;
BEGIN
Clrscr
Gotoxy(20,20);
WriteIn(‘Lay bi xanh chap voi bi do’);
Dec(g);
Dec(r);
y: = y+2;
Xuat;
END;
PROCEDURE RA_XANH;
BEGIN
Clrscr
Gotoxy(20,20);
Writeln(‘Lay bi vang chap voi bi do’);
Dec(y);
Dec(r);
g : = g+2;
Xuat;
END;
FUNCTION OK_TEST : Boolean;
BEGIN
Ok_Test : = true;
If (((m1 mod 3)+3) mod 3 < > ((c1 mod 3)+3) mod 3) then
Ok_Test : = false;
If (((m2 mod 3)+3) mod 3 < > ((c2 mod 3)+3) mod 3) then
Ok_test: = false;
If (((m3 mod 3)+3) mod 3 < > ((c3 mod 3)+3) mod 3) then
Ok_test : = false;
{Phai kiem tra nhu the nay boi vi (-1 mod 3 = -1 < > 2)}
END;
PROCEDURE CA_KHEO;
BEGIN
Repeat
Ra_Xanh;
Ra_Vang;
Until g=Newg;
END
BEGIN
Clrscr;
Writeln(‘Nhap so bi xanh, vang, do');
Readln(g,y,r);
Writeln(‘Can bien ra nhu the nao’):
Readln(new,newy,newr);
Xuat;
m1: = newg-newy;
mw: - newy-newr;
m3,: - newr-newg;
If Ok_test then
Begin
Repeat
If c1 < m1 then Ra_Xanh;
If c1 > m1 then Ra_Vang;
Until c1 = m1;
If g > newg then
Repeat
Ra_Do;
Until g=newg;
If g < newg then Ca_kheo;
End;
Else
Writeln(‘Khong lam duoc’);
Readln;
END.