Hạn nộp: 23h59' ngày 19/12/2010.
Nộp tại Bitbucket.
hg clone http://bitbucket.org/username/oop-asg02Chú ý thực hiện hướng dẫn một cách chính xác. Khác với Bài tập lớn số 1, lần này các bài nộp sai tên project hoặc chưa cấp quyền đọc sẽ không được thu bổ sung
Bài nộp gồm các file mã nguồn và một file dạng text có tên README. Trong file README cần có các thông tin cá nhân như tên, lớp, số sinh viên, và hướng dẫn biên dịch (nếu cần). Các file để nguyên trong thư mục project, không nén, không tạo các thư mục con.
Có ba loại máy bay: Máy bay trực thăng (helicopter), máy bay ném bom (bomber), và máy bay tiêm kích (fighter). Hình ảnh các loại máy bay trên màn tọa độ được minh họa trong hình dưới đây. Các ô chứa kí hiệu chữ cái (o, E, P, R,...) đại diện cho một phần của thân máy bay.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . P . . . .
. . . . . . . . . . . . . . o o . . . . . . . . o o o . . .
. . . o . . . . . . . . . o o o o o o . . . o E o o o E o .
. . o P o . . . . . . . . . o o . . . . . o o o . o . o o o
. o . o . o . . . . . . . . . . . . . . . . . . . o . . . .
. . o R o . . . . . . . . . . . . . . . . . . . . o . . . .
. . . . . . . . . . . . . . . . . . . . . . . . o E o . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
fighter helicopter bomber
Hình 1: Các loại máy bay.
Máy bay các loại được coi là bị diệt (killed) ngay khi một trong các tình huống sau xảy ra:
Tọa độ của lưới bản đồ được xác định là một cặp số nguyên không âm x,y, với dòng 0 là dòng trên cùng, cột 0 là cột đầu tiên bên trái. Dưới đây là ví dụ về bản đồ ở thời điểm một máy bay đã bị bắn cháy hoàn toàn khi hiển thị trên màn hình. Các ô 'x' là các tọa độ mà máy bay bị bắn trúng, '.' là các ô chưa hề bị bắn. ' ' là các ô đã bị bắn nhưng máy bay lại không nằm tại tọa độ đó (bắn trượt).
0 1 2 3 4 5 6 7 8 9
_____________________
0 | . . . . . . . . . .
1 | . . . . . . . . . .
2 | . . . x x . . . . .
3 | x x x x x x . . . .
4 | . . . x x .
5 | . . . . . . . . . .
6 | . . . . . . . . . .
7 | . . . . . . . . . .
8 | . . . . . . . . . .
9 | . . . . . . . . .
Hình 2: Hình một chiếc trực thăng tọa độ (3,5) đang quay về hướng Đông.
1. Cấu hình trò chơi được nạp từ một file text với định dạng như sau: Dòng đầu ghi 2 số nguyên m, n trong khoảng từ 1 đến 20 với mxn là kích thước bản đồ bầu trời. Từ dòng thứ 2 đến hết file, mỗi dòng ghi mô tả về 01 máy bay theo công thức
<type> x y <direction>trong đó, <type> có thể là một trong các chữ cái H (helicopter), F (fighter), B (bomber); x y là tọa độ (số nguyên) của điểm đầu máy bay (x là tọa độ dòng, y là tọa độ cột); <direction> có thể là một trong các chữ cái N (north - trên), S (south - dưới), E (east - phải), W (west - trái) là hướng của máy bay. Ví dụ mô tả về chiếc trực thăng ở hình 2 sẽ có dạng
H 3 5 ECuối và đầu mỗi dòng không có dấu trắng thừa. Trong file không chứa dòng trắng cuối cùng. Chương trình KHÔNG phải kiểm tra tính hợp lệ của file cấu hình. Tên file cấu hình được xác định bởi tham số đầu tiên trong lệnh chạy chương trình (xem chi tiết ở ví dụ bên dưới).
2. Tọa độ bắn (số nguyên) được người dùng nhập từ bàn phím dưới dạng x y (x là tọa độ dòng, y là tọa độ cột), hai số x, y được viết cách nhau ít nhất 1 kí tự trắng. Chương trình KHÔNG phải kiểm tra tình trạng người dùng có nhập số nguyên hay không (người dùng chắc chắn sẽ nhập các số nguyên).
Dữ liệu ra:
Có hai phần: giao diện với người dùng trên màn hình và file nhật trình.
1. Giao diện với người dùng, chẳng hạn vẽ bản đồ lên màn hình và lời mời nhập tọa độ bắn, cũng như thông báo trúng/trượt tại màn hình là do lập trình viên tự quyết định và thiết kế và KHÔNG có yêu cầu cụ thể.
2. Phần nhật trình (log) của mỗi ván chơi được ghi ra 1 file và phải tuân thủ CHÍNH XÁC quy định sau đây về định dạng dữ liệu trong file: với mỗi phát đạn của người chơi, chương trình cần ghi những nội dung sau vào file nhật trình:
- 01 dòng tọa độ bắn theo định dạng:
x<tab>y<tab>resulttrong đó x, y lần lượt là các tọa độ dòng và cột của phát đạn, <tab> là 01 kí tự tab, result là miss hay hit tùy theo kết quả là trượt hay trúng. Một phát đạn được coi là "trúng" nếu nó bắn vào một phần chưa bị bắn của một chiếc máy bay chưa rơi.
Ví dụ đoạn nhật trình của một phát bắn:
3 3 hit 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0
java <tên chương trình> <tên file cấu hình> <tên file nhật trình>hoặc
java <tên chương trình> <tên file cấu hình>Ví dụ,
java Game test1.in test1.outchương trình tại class Game sẽ nạp cấu hình bản đồ từ test1.in và ghi nhật trình ra test1.out
java Game test1.inchương trình tại class Game sẽ nạp cấu hình bản đồ từ test1.in và ghi nhật trình ra test1.in.log