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

Bài tập Lớn V1 BK TPHCM

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 (395.37 KB, 5 trang )

Khoa khoa học và kỹ thuật máy tính
Bộ môn Khoa học máy tính

Môn học: Kỹ thuật lập trình
Bài tập lớn 1

Bài Tập Lớn 1
Phiên bản v1.00

1. Giới thiệu
Game trên máy tính hay thiết bị di động là trò chơi giải trí đang được ưu chuộng
mạnh, nhất là trong những năm gần đây, khi mà các thiết bị di dộng thông minh phát
triển mạnh. Tổng giá trị thị trường game ở Hàn Quốc là 9.16 tỷ USD (tương đương
180 ngàn tỷ đồng), và ở Nhật Bản, ước tính giá trị đó gấp 7 lần. Việt Nam có thị
trường game khá non trẻ, tuy nhiên đã bắt đầu hội nhập với một số hãng game lớn đã
xuất khẩu game ra thị trường thế giới, VinaGame là một ví dụ. Ngoài ra, với sự tìm
tòi, các cá nhân cũng đã tự viết game và bán ra thế giới. Flappy Bird vừa tạo một cú
hích mạnh mẽ trên làng game thế giới. Với giao diện đơn giản, tác giả tiết lộ chỉ hoàn
thành game trong một buổi, đã hấp dẫn người chơi và đứng đầu nhiều Store trong
nhiều tháng liền, với doanh thu quảng cáo được tiết lộ tương đương 1 tỷ mỗi ngày.

2. Yêu cầu:
Jewel là một trò chơi giải trí phổ biến trên nhiều thiết bị điện thoại, máy tính bảng
và máy tính. Đây là một trò chơi mang tính giải trí, tuy nhiên cũng rất hấp dẫn người
chơi.
Trong bài tập lớn này, sinh viên sẽ lập trình giả lập trò chơi trên với trạng thái
game cho sẵn và một số thao tác của người chơi. Từ đó, chương trình sẽ tính điểm đạt
được của người chơi cũng như trạng thái game tới thời điểm xác định.
Một số kiến thức sinh viên được rèn luyện trong bài tập lớn này:
- Cách sử dụng vòng lặp, for, while,…
- Cách sử dụng phân nhánh if


- Mảng, bao gồm mảng một chiều và nhiều chiều
- Một số kiến thức liên quan khác

3. Mô tả game
Game Jewel có nhiều biến thể, cũng như nhiều quy ước khác nhau. Trong bài tập
lớn này, chúng ta sẽ sử dụng một dạng đơn giản của game này. Hình 1 mô tả bản đồ
trạng thái của game với kích thước 8x8. Theo hình vẽ, chúng ta sẽ đánh số hàng từ
dưới lên trên, và đánh số cột từ trái sang phải như hình vẽ; các số hàng dưới cùng và
bên trái là chỉ số cột và hàng, các. Các chữ cái bên trong là chữ cái đại diện cho mỗi ô
tương ứng của trạng thái game.
Với phiên bản đơn giản trong bài tập lớn này, người chơi sẽ cố gắng ăn được càng
nhiều điểm càng tốt. Luật chơi như sau:
- Người chơi sẽ đổi chỗ 2 viên chữ kề nhau (kề cạnh) để cố gắng ăn điểm.

Trang 1

Học kỳ II / 2013- 2014


Khoa khoa học và kỹ thuật máy tính
Bộ môn Khoa học máy tính

Môn học: Kỹ thuật lập trình
Bài tập lớn 1

- Tình trạng ăn viên chữ, cộng điểm được cho theo thứ tự ưu tiên từ cao tới thấp
như sau:
7

A


A

B

D

F

E

F

C

6

E

C

E

G

C

E

E


D

5

E

G

F

E

G

A

E

A

4

A

D

C

F


D

B

F

F

3

E

C

D

E

D

E

G

B

2

D


A

G

B

G

G

A

F

1

F

F

A

B

E

C

A


D

0

C

B

D

E

F

B

D

B

0

1

2

3

4


5

6

7

Hình 1: Ví dụ bản đồ game
+ Trong trường hợp có đồng thời 2 cách ăn điểm khác nhau cho cùng một viên
màu (chỉ xảy ra khi 1 trường hợp ăn theo chiều ngang, một trường hợp ăn theo chiều
dọc) thì được cộng điểm theo trường hợp mỗi viên được 4 điểm. Ví dụ: ăn hàng
ngang 3 viên nhưng đồng thời hàng dọc 5 viên thì tổng cộng 7 viên được tính mỗi
viên 4 điểm tổng cộng được 28 điểm.
+ Nếu 5 viên kề nhau thẳng hàng (ngang/dọc) cùng chữ thì 5 viên đó bị ăn, mỗi
viên được tính 4 điểm, tổng cộng 20 điểm.
+ Nếu 4 viên kề nhau thẳng hàng ngang/dọc cùng chữ, thì 4 viên đó bị ăn, mỗi
viên tính 2 điểm
+ Nếu 3 viên kề nhau thẳng hàng (ngang hay dọc) cùng chữ, thì 3 viên đó biến
mất, đồng thời được cộng 3 điểm, tương ứng với mỗi viên được tính 1 điểm
- Khi các viên bị ăn, biến mất, thì các viên theo cột sẽ bị rơi xuống để lấp đầy
khoảng trống, khi đã rơi xuống ổn định, nếu xảy ra trạng thái ăn điểm thì vẫn tiếp tục
ăn điểm (dù không có tác động của người chơi)
- Người chơi có thể di chuyển không hợp lệ (di chuyển không ăn được điểm nào),
trong trường hợp đó, 2 viên đổi chỗ sẽ bị đưa lại về vị trí cũ.
- Giả sử rằng không có trường hợp 6 viên thẳng hàng (ngang hay dọc) có cùng
chữ và tại thời điểm ban đầu lúc mới load game lên thì chưa xảy ra trường hợp ăn
điểm (không có hàng, cột nào thỏa mãn các điều kiện ăn điểm mô tả ở trên).

Mỗi khi có viên bị ăn, các viên cùng cột sẽ rơi xuống để lấp đầy khoảng trống,
trong một game thực sự những viên chữ rơi xuống sẽ được sinh ra ngẫu nhiên khi

người dùng chơi thực tế. Tuy nhiên, để đơn giản, trong bài tập lớn này, chúng ta sẽ
sinh ra những viên sẽ rơi xuống trong tương lai và lưu vào mảng (được nhập từ file).

Trang 2

Học kỳ II / 2013- 2014


Khoa khoa học và kỹ thuật máy tính
Bộ môn Khoa học máy tính

Môn học: Kỹ thuật lập trình
Bài tập lớn 1

Chúng ta sẽ sử dụng bản đồ hình vuông NxN (các dòng và cột được đánh số từ 0..N1) là màn hình chơi hiện tại của người chơi, và để thuận tiện chúng ta sẽ thêm nhiều
hàng, đánh số từ N tới M để sinh ra sẵn những viên sẽ rơi xuống. Trong bài tập lớn
này, chúng ta giả sử rằng, cho đến lúc kết thúc chơi thì bất kỳ cột nào cũng còn viên
chữ để rơi xuống, không gặp tình trạng đã hết viên chữ ở một cột C nào đó.

4. Dữ liệu nhập/xuất
4.1 Dữ liệu nhập
Dữ liệu nhập vào bao gồm nhập từ file (input.txt) và nhập từ bàn phím.
Dữ liệu nhập từ file bao gồm một số thông tin như sau:
- Kích thước N mô tả kích thước NxN của game
- M: kích thước chiều cao (M > N)
- Mảng hai chiều MxN mô tả trạng thái ban đầu của game cũng như những hạt
chữ sẽ rơi xuống từng cột trong tương lai, mỗi chữ là một chữ cái in hoa ABC...Z, các
chữ cái này viết cách nhau đúng 1 khoảng trắng ở giữa. Để thuận lợi trong lưu trữ,
đọc dữ liệu từ file, mảng này trong file sẽ lưu ngược theo chỉ số dòng, cụ thể dòng đầu
lưu cho hàng 0, dòng tiếp theo lưu hàng 1, …

Dữ liệu nhập trực tiếp từ bàn phím bao gồm như sau:
Thao tác của người dùng, mỗi thao tác được mô tả như sau:
XYT
X, Y, T cách nhau bằng đúng 1 ký tự trống. Trong đó, X, Y là tọa độ dòng, cột
của viên chữ được đổi, T là viên chữ kề viên chữ tọa độ (X, Y) được tráo đổi với T
thuộc tập các chữ cái (T, L, B, R) tương ứng với ô bên trên, trái, dưới hay phải của ô
(X, Y). Giả sử rằng dữ liệu nhập với giá trị X, Y, T thỏa mãn thao tác hợp lệ (không
ra khỏi viền NxN).
Người dùng nhập -1 -1 A để kết thúc chơi. Lúc này kết quả sẽ được xuất ra file
bao gồm điểm cũng như trạng thái game hiện tại theo mô tả phần tiếp theo.
4.2 Dữ liệu xuất
Sau mỗi thao tác chơi, trạng thái game sẽ được xuất ra màn hình để người dùng
chơi tiếp. Để dễ nhìn, trạng thái game nên xuất ra đúng như hình 1, tức là dòng 7
trước, rồi tới dòng 6,… Chú ý rằng, cách xuất này ngược so với đọc dữ liệu từ file, và
2 cách này hoàn toàn không ảnh hưởng gì tới nhau. Khi kết thúc chơi, chương trình sẽ
xuất ra file output.txt một số thông tin sau:
Dòng đầu: 1 số nguyên là số điểm mà người chơi đạt được
Ma trận NxN: mô tả trạng thái game hiện tại, sau dòng cuối cùng của ma trận là
một ký tự xuống dòng

Trang 3

Học kỳ II / 2013- 2014


Khoa khoa học và kỹ thuật máy tính
Bộ môn Khoa học máy tính

Môn học: Kỹ thuật lập trình
Bài tập lớn 1


5. Mã ban đầu
Sinh viên download file assigment1.zip từ trang Web của môn học. Khi giải nén
file này, sẽ có được các file sau:
input.txt

Một file input ví dụ.

output.txt

Một file mô tả kết quả trả về theo file input.txt

jewel.cpp

Chương trình khởi tạo.

Assignmen1.pdf

File mô tả nội dung bài tập lớn.

File input.txt là file nhập mẫu như được mô tả ở phần 2. File jewel.cpp là
chương trình khởi tạo, trong đó có một số hàm, thành phần đã được viết sẵn để hỗ trợ
sinh viên hoàn thiện bài tập lớn.
Sinh viên có thể thêm code ở hàm main, viết thêm một số hàm cần thiết để hoàn
thành bài tập lớn, tuy nhiên, không được phép chỉnh sửa, thay đổi tất cả các hàm đã
được đặc tả và viết sẵn, cũng như thêm bớt các thư viện.
Để bắt đầu viết chương trình trên Visual Studio, sinh viên nên tạo một Empty
project và add file jewel.cpp vào để bắt đầu lập trình.

6. Nộp bài

Khi nộp bài, sinh viên sử dụng account đã được cấp phát để nộp bài qua hệ
thống Sakai. Sinh viên chỉ nộp đúng một file jewel.cpp (tên file phải được viết
thường).File được nộp phải là file chương trình gốc, SINH VIÊN KHÔNG ĐƯỢC
NÉN FILE KHI NỘP BÀI. Sinh viên phải kiểm tra chương trình của mình trên
Microsoft Studio 10.0 trước khi nộp.
Thời hạn chót để nộp bài là 16:00 thứ sáu ngày 04/04/2014. KHÔNG nhận
bài được gửi qua mail hoặc bất kỳ hình thức nào khác. Bài nộp trễ sẽ KHÔNG được
nhận. Để tạo điều kiện cho sinh viên, trước thời điểm nộp bài chính thức đúng 1 tuần
tức 16:00 thứ sáu ngày 28/03/2014, các bài nộp của sinh viên tại thời điểm đó sẽ
được chấm thử sơ bộ bằng chính bộ testcases lúc chấm bài chính thức và kết quả sẽ
được công bố vào đầu tuần tiếp theo, sinh viên có thể dựa vào kết quả chấm thử để
điều chỉnh bài làm sao cho được kết quả tốt nhất lúc chấm thực sự. Lưu ý:
1)

Kết quả chấm sơ bộ không tính vào điểm cuối cùng, nên dù kết quả chấm sơ bộ cao
nhưng nếu điểm cuối cùng có thấp hơn thì vẫn chỉ tính kết quả điểm cuối cùng.

2)

Đây là cơ hội tốt cho sinh viên nhằm hoàn thiện bài làm của mình, vì vậy không nên
bỏ quả, từ đó, sinh viên cũng nên lập kế hoạch để làm bài từ sớm, không nên để tới
tuần cuối cùng rồi mới bắt đầu
Đối với bài tập lớn này, thời gian chạy tối đa cho mỗi testcase là 5 giây, các

Trang 4

Học kỳ II / 2013- 2014


Khoa khoa học và kỹ thuật máy tính

Bộ môn Khoa học máy tính

Môn học: Kỹ thuật lập trình
Bài tập lớn 1

testcase bảo đảm nếu sinh viên làm đúng quy trình thì thừa thời gian cho chương trình thực
thi testcase đó.

7. Xử lý gian lận
Bài tập lớn phải được sinh viên TỰ LÀM. Sinh viên sẽ bị coi là gian lận nếu:
- Có sự giống nhau bất thường giữa mã nguồn của các bài nộp. Trong
trường hợp này, TẤT CẢ các bài nộp đều bị coi là gian lận. Do vậy sinh
viên phải bảo vệ mã nguồn bài tập lớn của mình.
- Sinh viên không hiểu mã nguồn do chính mình viết, trừ những phần mã
được cung cấp sẵn trong chương trình khởi tạo. Sinh viên có thể tham
khảo từ bất kỳ nguồn tài liệu nào, tuy nhiên phải đảm bảo rằng mình hiểu
rõ ý nghĩa của tất cả những dòng lệnh mà mình viết.
KHÔNG CHẤP NHẬN BẤT KỲ GIẢI THÍCH NÀO VÀ KHÔNG CÓ BẤT KỲ
NGOẠI LỆ NÀO!

Trang 5

Học kỳ II / 2013- 2014



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×