Đồ án trò chơi đi tìm kho báu Đồ án trò chơi đi tìm kho báu Đồ án trò chơi đi tìm kho báu Đồ án trò chơi đi tìm kho báu Đồ án trò chơi đi tìm kho báu Đồ án trò chơi đi tìm kho báu Đồ án trò chơi đi tìm kho báu Đồ án trò chơi đi tìm kho báu Đồ án trò chơi đi tìm kho báu Đồ án trò chơi đi tìm kho báu Đồ án trò chơi đi tìm kho báu
Trang 1PROJECT 2
TRUY TÌM KHO BÁU
Giáo viên hướng dẫn thực hành:
Nguyễn Ngọc Thảo, nnthao@fit.hcmuns.edu.vn
Lê Ngọc Thành, lnthanh@fit.hcmuns.edu.vn
Võ Đình Phong, vdphong@fit.hcmuns.edu.vn Trần Ngọc Trung, tntrung@fit.hcmuns.edu.vn
MIÊU TẢ TRÒ CHƠI
Một nhà khảo cổ học vô tình khám phá được một kho báu được chôn bí mật trong một kim tự tháp Ai Cập Trong quá trình khảo sát ông biết được rằng có một con đường độc đạo duy nhất để đi vào kim tự tháp này Hơn nữa sau một thời gian nghiên cứu ông biết được cấu trúc bên trong Kim Tự Tháp như sau:
Hình 1: Một bản đồ mẫu trong kim tự tháp
Trang 2 Bảng đồ kim tự tháp là một lưới các hình vuông kích thước [N*N] như hình vẽ
Trong kim tự tháp này có một xác ướp (MUMMY) sẵn sàng ăn thịt người nếu ai đó đi lỡ đi nhầm vào quậy nơi nó ngủ
Không những thế bên trong còn có một số cạm bẫy nguy hiểm là các hố sâu và nếu ai rơi vào thì chết chắc
Tuy nhiên, nhà khảo cổ lại không biết chính xác: xác ướp, các cạm bẫy và kho báu đặt ở đâu
Biết tính nguy hiểm, nhà khảo cổ đã nhờ một người bạn ông là một chuyên gia lập trình tạo ra ROBOT thông minh giúp ông đi vào kim tự tháp để truy tìm kho báu Mục tiêu của con ROBOT này là đi vào kho báu lấy vàng và trở về an toàn Trong vai trò người bạn của nhà khảo cổ, bạn hãy xây dựng một ROBOT thông minh giúp ông tìm kho báu thành công
MỘT SỐ QUI ƯỚC
ROBOT luôn bắt đầu ở vị trí góc dưới ([1,1]) như trong hình vẽ 1, vị trí các ô được xác định bởi cặp giá trị (X,Y)
Nếu một ô vuông có chứa xác ướp (MUMMY) thì 4 ô vuông xung quanh nó sẽ có mùi hôi (STENCH)
Nếu một ô vuông là cạm bẫy (PIT) thì 4 ô xung quanh sẽ có tiếng gió hú (BREEZE)
Trong ô vuông có chứa kho báu (GOLD) thì ROBOT sẽ thấy ánh sáng lập lánh (GLITTER)
Khi ROBOT đâm vào tường (WALL) thì nó sẽ phát ra tiếng BUMP
Nếu xác ướp (MUMMY) bị giết thì nó sẽ thét tiếng hét hãi hùng (SCREAM) mà nếu ROBOT đứng ở đâu cũng có thể nghe thấy
ROBOT sẽ có khả năng cảm nhận thế giới xung quanh qua 5 kí hiệu Ví dụ, nếu có mùi hôi (STENCH), tiếng gió hú (BREEZE), có ánh sáng lấp lánh của vàng (GLITTER), không có tiếng BUMP và không có tiếng thét (SCREAM) thì giác quan cẩm nhận của ROBOT biểu diễn [STENCH, BREEZE, GLITTER, NONE, NONE]
Một khuyết điểm nữa của ROBOT là nó chỉ có thể đi thẳng (FORWARD), quay trái (TURN_LEFT) và quay phải (TURN_RIGHT) với mỗi góc quay là 90O
Ngoài ra, còn có hành động GRAB để lấy một vật gì đó trong cùng một ô với ROBOT (ví dụ vàng (GOLD) chẳng hạn) Trong quá trình đi tìm kho báu ROBOT
Trang 3chỉ có một mũi tên (ARROW) duy nhất để tự vệ, vì vậy ROBOT chỉ có thể bắn (SHOOT) một lần duy nhất
Hành động trèo (CLIMB) ra ngoài kim tự tháp chỉ thực hiện được khi ROBOT ở tại
vị trí cửa vào (vị trí xuất phát ban đầu) của nó
ROBOT chết nếu nó đi vào ô chứa cạm bẫy (PIT) hoặc có xác ướp (MUMMY) Tuy nhiên, nó vẫn an toàn nếu nó đi nhầm vào ô chứa xác ướp (MUMMY) nhưng xác ướp đó đã bị giết trước đó
MINH HỌA LUẬT SUY LUẬN
Trước khi bắt đầu minh họa quá trình suy luận tìm đường của ROBOT ta qui ước các viết tắt như sau:
• R: ROBOT
• B: BREEZE
• G: GLITTER, GOLD
• OK: Ô vuông an toàn.
• P: PIT
• S: STENCH
• V: VISITED
• M: MUMMY
• N: NONE
Ở vị trí ban đầu là an toàn (OK), không có STENCH và BREEZE ở ô vuông [1,1], ROBOT có thể suy ra 2 ô kề nó [1,2] và [2,1] là không nguy hiểm Chúng ta đánh dấu
OK cho các ô này Từ sự kiện ROBOT vẫn sống khi ở ô [1, 1] nên suy ra ô [1, 1] cũng
OK và ta đánh dấu các ô này Ở vị trí ô [1,1] ROBOT cảm nhận xung quanh với giá trị [N,N,N,N,N]
Trang 4Hình 2: Dự đoán các ô vuông an toàn.
Một ROBOT thông minh sẽ chỉ đi vào các ô vuông OK Giả sử ROBOT quyết định chuyển động lên phía trước (FORWARD) vào ô [2,1] như hình 3:
Hình 3: Di chuyển sang ô vuông [2, 1]
Khi di chuyển sang ô [2,1] nó cảm nhận giá trị [N,B,N,N,N] ROBOT phát hiện ra có BREEZE ở ô này, do đó ROBOT sẽ suy ra có một cái bẫy [PIT] nằm đâu đó xung quanh ô [2,1] (có thể là ô [2,2] hoặc ô [3,1]) Theo những ô ROBOT đã đi qua thì ô [1,1] không có bẫy PIT vì ROBOT đã ở đó và không bị rơi xuống hố Đến lúc này ROBOT nhận ra vẫn còn một ô được đánh dấu là OK là ô [1,2] chưa được đi qua Vì vậy nếu là một ROBOT khôn ngoan thì nó sẽ quay lại ô [1,1] và đi qua ô [1,2] như hình
vẽ sau:
Trang 5Hình 4: Quá trình các bước di chuyển tiếp theo.
ROBOT phát hiện có STENCH ở ô [1, 2] tức là phải có MUMMY ở đâu gần đó Nhưng MUMMY không nằm trong ô [1,1] cũng không nằm trong ô [2,2] (vì nếu nó nằm ở [2,2] thì ô [2,1] ROBOT đã phát hiện ra STENCH) Do đó có thể suy ra MUMMY nằm
ở ô [1,3] Vì ô [1,2] không có BREEZE nên chắc chắn rằng ô [2,2] không thể là PIT được vì vậy suy ra ô [2,2] là OK Do đó ta suy ra ô [3,1] là PIT Từ những suy luận trên thì ô [2,2] hiện tại là ô OK và chưa đi qua nên ROBOT sẽ chuyển sang ô từ ô [1,2] sang
ô [2,2] Từ vị trí [2,2] ta nhận được ô [2,3] là ô OK nên cho ROBOT di chuyển đến ô này Tại ô [3,2] nó nhận được [S,B,G,N,N] và nó nhận được vàng tại ô này, nên thực hiện hành động GRAB để lấy vàng và đi ngược lại những ô an toàn để trở về vị trí ban đầu và CLIMB ra khỏi kim tự tháp
Qua minh họa bài toán các bạn thấy rằng vấn đề khó nhất ở bài toán này là xây dựng một tập KB cho giúp cho ROBOT có thể suy luận ra những trường hợp như: “Có thể PIT ở các ô [2,2] hoặc [3,1]” hoặc “Không có MUMMY ở ô [2,2]” …
ĐỊNH DẠNG INPUT & OUTPUT
Qui ước kí hiệu khi thực hiện tạo bản đồ:
• b: BREEZE
• g: GLITTER, GOLD
• p: PIT
• s: STENCH
Trang 6• m: MUMMY
A TẬP TIN BẢN ĐỒ
Bản đồ kim tự tháp là một danh sách hai chiều mà mỗi phần tử là một danh sách chứa các kí hiệu đã mô tả ở trên Bản đồ này được lưu trong tập tập tin pyramid_map.txt Dưới đây là ví dụ tập tin đầu vào tương ứng với bản đồ Hình 1
pyramid_map.txt
[
[ [], [], [p], [] ], //dòng 1
[ [], [], [], [] ], //dòng 2
[ [m], [g], [p], [] ], //dòng 3
[ [], [], [], [p] ] //dòng 4
] // Chú ý có dấu chấm ngay sau dấu đóng ngoặc
Giải thích:
• Ký hiệu [ ] là kí hiệu bắt đầu và kết thúc giá trị phần tử của một ô vuông
• Các giá trị nằm giữa 2 cặp dấu ngoặc vuông “[ ]” chỉ thông tin đại diện cho mỗi ô
của bảng đồ (Các giá trị cách nhau bằng dấu phẩy “,”).
VD: [g]: Ô này có GOLD (GLITTER)…
• Trạng thái các ô còn lại như: BREEZE, STENCH, các bạn phải suy luận ra trong quá trình ROBOT di chuyển
• Cần module riêng để xác định trạng thái của ô hiện tại mà ROBOT đang đứng
• Ký hiệu [] là danh sách rỗng, tương ứng với các ô trống trong Hình 1
B. CÁC TẬP TIN OUTPUT
Kết quả xuất ra tập tin gồm 2 file robot_<MSSV>.txt và visited_<MSSV>.txt (Ví dụ sinh viên có mã số 0612333 sẽ xuất ra tập tin robot_0612333.txt và visited_0612333.txt)
• Nội dung tập tin robot_<MSSV>.txt là chuỗi hành động liên tục của ROBOT
• Nội dung tập tin visited_<MSSV>.txt là ma trận bản đồ chứa thông tin các đỉnh mà ROBOT suy luận ra trong quá trình tìm kho báu
Trang 7[1,1], FW[2,1], TL[2,1], TL[2,1], FW[1,1], TR[1,1], FW[2,1], TR[2,2], TL[2,2], FW[2,3], GRAB[2,3], , ,CLIMB[1,1]
visited_<MSSV>.txt
[
[[v], [v,b], [p], []],
[[v,b], [v], [], []],
[[m], [v,g,s,b], [p], []],
[[b], [], [], [p]]
]
Giải thích:
File xuất là một chuỗi hành động của ROBOT trong quá trình tìm kho báu có định dạng như sau:
• Chuỗi hành động cách nhau bằng dấu phẩy “,”
• [x,y]: Chỉ tọa độ mà ROBOT đi qua
• ACTION[x,y]: Là hành động của ROBOT và đích đến của hành động đó
Ví dụ:
FW[2,1]: từ vị trí hiện hành, đi thẳng (FORWARD) thì ROBOT đến được
ổ [2,1]
GRAB[2,3]: Lấy vàng ở ô [2,3]
• ROBOT có cách hành động sau:
FORWARD ( FW ): đi thẳng
TURN RIGHT (TR): quay phải 90 độ
TURN LEFT (TL): quay trái 90 độ
SHOOT: Bắn tên
GRAB: Lấy vàng
CLIMB: Trèo ra ngoài
• v: đỉnh mà ROBOT đã đi qua
Chú ý:
Trường hợp bắn tên và giết được MUMMY thì MUMMY sẽ thét lên ta miêu tả hành động trong file xuất như sau:
• SHOOT[x,y:SCREAM] /*x,y là tọa độ ô mà có MUMMY ngược lại thì cho nó vào
Trang 8tường có tọa độ (x,y)*/
Nếu ROBOT tông vào tường thi nó sẽ phát ra tiếng kêu BUMP
• FW[x,y:BUMP] /*x,y là tọa độ tường */
QUI ĐỊNH NỘP BÀI
A Hình thức làm bài
• Sinh viên có thể làm một mình hoặc làm nhóm (tối đa 2 người)
• Với các bạn làm nhóm thì trong bài báo cáo và source code cần ghi đầy đủ thông tin chi tiết cả 2 Ngoài ra, trong báo cáo cần phân chia công việc rõ ràng của mỗi người để giáo viên có thể đánh giá và cho điểm chính xác hơn
B. Cấu trúc thư mục
Bài tập nộp lên Moodle được nén có tên <MSSV>.zip và có cấu trúc như sau:
• BIN: chứa file thức thi (eg, EXE, ) nếu bạn có thể tạo được các file thực thi (Có thể bỏ qua nếu thấy không cần thiết)
• DOC: thư mực chứa file báo cáo
• SRC: chứa source code bài tập
• TEST: chứa các trường hợp test của bạn
Mỗi CASE sẽ chứa các file bản đồ và các file output như yêu cầu của đề bài.
Số lượng CASE trong thư mục TEST là tùy ý (Cái này để GV đánh giá số lượng trường hợp SV đã test thử)
• Ngoài ra cần có file hướng dẫn chẳng hạn như readme.txt để hướng dẫn cấu trúc thư mực, cũng cách chạy chương trình v.v
C. Cấu trúc bài báo cáo
• Cấu trúc tùy ý nhưng phải rõ ràng và dễ đọc
• Sinh viên nên trình bày chi tiết và “khoe” những gì mình làm được (Vì GV cũng
sẽ dựa vào bài báo cáo để đánh giá).
• Chuyển file báo cáo sang định dạng PDF và nộp cùng file DOC trong thư mục /
doc.
D Thời gian nộp bài
• Từ 29/10/2008 – 12/11/2008 chung cho cả 2 lớp TH2006/01 và TH2006/02
◆☆◆
J COME ON & GOOD LUCK !