1. Trang chủ
  2. » Công Nghệ Thông Tin

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

5 168 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 395,37 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 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 2

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

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 3

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 N-1) 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:

X Y T

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 4

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 5

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!

Ngày đăng: 07/06/2016, 20:55

HÌNH ẢNH LIÊN QUAN

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 - Bài tập Lớn V1 BK TPHCM
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 (Trang 2)

TỪ KHÓA LIÊN QUAN

w