Tải bản đầy đủ (.pdf) (8 trang)

Đồ án trò chơi đi tìm kho báu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (242.47 KB, 8 trang )

PROJECT 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,
Lê Ngọc Thành,
Võ Đình Phong,
Trần Ngọc Trung,
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


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





chỉ 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].


Hì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:



Hì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





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.


robot_<MSSV>.txt
[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],
[[m],
[[b],
].


[v,b],
[p], []],
[v],
[], []],
[v,g,s,b], [p], []],
[],
[], [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


tườ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 !



×