Tải bản đầy đủ

BTL Kỹ thuật lập trình C++ ĐHBK 2016 Cờ caro

TP. HỒ CHÍ MINH – THÁNG 03 NĂM 2016

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH

BÁO CÁO KỸ THUẬT LẬP TRÌNH:
ĐỀ TÀI: THIẾT KẾ CHƯƠNG TRÌNH CHƠI TRÒ CHƠI CARO TRÊN
GIAO DIỆN CONSOLE

Sinh viên thực hiện:

Nhóm/Lớp :

Đỗ Tuấn Anh

MSSV: 21300057

Trần Minh Chiến

MSSV: 21300382


Doãn Hoàng

MSSV: 21301311

Trần Minh Hoàng

MSSV: 21301340

Nhóm 06 / TNMT-A

Giảng viên hướng dẫn: NGUYỄN ĐỨC DŨNG
NGUYỄN HOÀNG MINH


BÀI TẬP LỚN LẦN 2 - KỸ THUẬT LẬP TRÌNH

MỤC LỤC

LỜI NÓI ĐẦU

Trong bài tập lớn này, nhóm được thực hành khả năng hiểu và vận dụng các cấu
trúc điều khiển cơ bản cũng như quy trình giải quyết bài toán dùng ngôn ngữ C+
+ trên phần mềm Visual Studio.
Mô tả chung về đề tài:
Thiết kế chương trình chơi trò chơi caro (tic-tac-toe) trên giao diện console.
Trò chơi được thiết kế cho 2 người chơi.
Luật của trò chơi:
o Trò chơi được tiến hành trên một bàn cờ với kích thước do người
dùng nhập vào.
o Người chơi thắng khi có được N-quân nằm trên đường
ngang/dọc/chéo với N là số liệu nhập vào từ người dùng.
- Từng người chơi sẽ tiến hành nhập tọa độ cảu nước cờ để định vị trí cờ
trên màn hình.
-

NHÓM 6 – TNMT


BÀI TẬP LỚN LẦN 2 - KỸ THUẬT LẬP TRÌNH


Để hoàn thành được bài tập lớn này, nhóm chúng em xin được gửi lời cảm ơn
chân thành đến thầy hướng dẫn đề tài Thầy Nguyễn Đức Dũng, Giảng viên
Khoa Khoa học và Kỹ thuật máy tính Trường Đại học Bách Khoa TP.HCM - đã
hết lòng giúp đỡ, hướng dẫn, chỉ dạy tận tình để nhóm em hoàn thành được đề
tài này. Đồng thời, chúng em cũng tỏ lòng biết ơn đến …

TP.HCM, ngày 04 tháng 05 năm 2016
Nhóm 06, Lớp TNMT

Đỗ Tuấn Anh
Trần Minh Chiến
Doãn Hoàng
Nguyễn Minh Hoàng

NHÓM 6 – TNMT


BÀI TẬP LỚN LẦN 2 - KỸ THUẬT LẬP TRÌNH

PHÂN CÔNG THÀNH VIÊN TRONG NHÓM

Bảng phân công công việc:
STT

Tên

1

Đỗ Tuấn Anh

2

Trần Minh Chiến

3

Doãn Hoàng

-

Nguyễn Minh Hoàng

-

4

Công việc thực hiện
Nghiên cứu giải thuật xác định kết quả.
Lập trình và kiểm tra trên Visual Studio.
Nghiên cứu giải thuật nhập xuất.
Lập trình và kiểm tra trên Visual Studio.
Thiết kế giao diện chương trình.
Tính toán và kiểm tra các trường hợp đặc
biệt.
Nghiên cứu giải thuật.
Tính toán các trường hợp đặc biệt và kiểm
tra lỗi.

Tiến độ thực hiện:
Thời gian
Tuần 12
(18/4 –
24/04/2016)
Tuần 13
(25/4 –
1/5/2016)
Tuần 14
(2 – 8/5/2016)

Công việc
- Cải tiến lại giải thuật.
- Sử dụng con trỏ và cấp phát động thay
cho các mảng.

Đánh giá
Hoàn
thành

- Tạo các hàm riêng cho các tác vụ.
- Nhập/xuất tập tin trong trò chơi.

Hoàn
thành

- Khắc phục các lỗi có thể có.
- Hoàn thiện chương trình.
- Tổng hợp kết quả và báo cáo.

Hoàn
thành

NHÓM 6 – TNMT


BÀI TẬP LỚN LẦN 2 - KỸ THUẬT LẬP TRÌNH

I.

PHÂN TÍCH YÊU CẦU

I.1.

Giới thiệu về trò chơi.

Cờ ca-rô là một trò chơi bàn cờ theo chiến thuật trừu tượng. Cờ ca-rô trong tiếng
Triều Tiên phát âm là omok, trong tiếng Nhật là gomoku narabe; tiếng Anh, sử
dụng lại tiếng Nhật, gọi là gomoku.
Ban đầu loại cờ này được chơi bằng các con cờ vây (viên cờ màu trắng và đen)
trên một bàn cờ vây (19x19). Quân đen đi trước và người chơi lần lượt đặt một
viên đá của họ trên đường chéo còn trống. Người thắng là người đầu tiên có
được một chuỗi liên tục gồm 5 quân hàng ngang, hoặc dọc, hoặc chéo. Tuy
nhiên, vì một khi đã đặt xuống, các quân cờ không thể di chuyển hoặc bỏ ra khỏi
bàn, do đó loại cờ này có thể chơi bằng giấy bút. Ở Việt Nam, cờ này thường
chơi trên giấy tập học sinh (đã có sẵn các ô ca-rô), dùng bút đánh dấu hình tròn
(O) và chữ thập (X) để đại diện cho 2 quân cờ.
Ở các nước châu Âu người ta có trò chơi gọi là Tic-tac-toe, một trò chơi phổ
biến dùng viết trên bàn cờ giấy có chín ô, 3x3. Hai người chơi, người dùng ký
hiệu O, người kia dùng ký hiệu X, lần lượt điền ký hiệu của mình vào các ô.
Người thắng là người thể tạo được đầu tiên một dãy ba ký hiệu của mình, ngang
dọc hay chéo đều được.
Người Việt thường chơi Cờ ca-rô trên bàn cờ không giới hạn, kích thước bàn cờ
có thể kéo rộng ra (vẽ thêm ô) cho đến khi người nào đạt được một dãy 5 thì
thắng cuộc.
I.2.
-

Dữ liệu nhập:

Dữ liệu nhập chứa trong file cấu hình “conf.txt” như sau:
BTL-CK-Assignment02

(r0,c0)
(r1,c1)


-

Trong đó:
Dòng 1 là header.
Dòng 2: thông tin chiều rộng/cao cảu ván cờ.
Dòng 3 trở đi: Các ô không cho người chơi nhập vào.
Các file không có định dạng như trên chương trình tự load caau61 hình mặc
dịnh.

I.3.
-

Giao diện trò chơi.

Giao diện khi khởi động trò chơi như sau:

NHÓM 6 – TNMT


BÀI TẬP LỚN LẦN 2 - KỸ THUẬT LẬP TRÌNH

Ở màn hình bắt đầu, khi người dùng nhập vào giá trị “1”, chương trình sẽ
load file cấu hình, kiểm tra các ràng buộc và bắt đầu game mới. Chọn “2”
để xem thông tin và hướng dẫn. Chọn “3” để thoát.
Trong khi đang chơi nếu người dùng gõ “~” hoặc “!” chương trình tự
động dừng và thoát ra.
-

Giao diện trò chơi khi chơi:

Các quân cờ ký hiệu là “O” (Player 1) và “X” (Player 2), ô không được phép
đánh vào cp1 giá trị “#”.
 Các thông số cấu hình trò chơi:
- Kích thước ván cờ được nhập và từ bàn phím:
• Chiều rộng : số nguyên dương với W < 26.
• Chiều cao : số nguyên dương với H < 25.

Chương trình báo lỗi và yêu cầu nhập lại khi nhập sai giá trị W, H.
- Số quân cờ để chiến thắng: được nhập vào với giá trị là số
nguyên dương không quá 5.
Chương trình báo lỗi khi nhập vào N không đúng yêu cầu, hoặc N lớn
hơn giá trị W, H.

 Cách đánh cờ:
• Tọa độ quân cơ được từng người chơi lần lượt nhập vào từ bàn phím sau

khi cấu hình trò chơi. Người thứ nhất “O” và người thứ hai là “X”.
• Tọa độ quân cờ có giá trị và X là vị trí hàng, Y là vị trí cột. X và
Y nằm trong giới hạn bàn cờ (nhập vào ban đầu).
• Người chơi không được đánh cờ trùng tọa độ với vị trí cờ đã có và phải
nằm trong phạm vi bàn cờ.
Chương trình báo lỗi khi nhập sai giá trị ô cờ. Khi nhập sai quá 5 lần
người chơi bị xử thua.
NHÓM 6 – TNMT


BÀI TẬP LỚN LẦN 2 - KỸ THUẬT LẬP TRÌNH

I.4.

Yêu cầu về chương trình.

Trong bài này yêu cầu sinh viên thực hiện các công việc sau:
• Cải tiến chương trình đã hiện thực trong bài tập lớn 01 sử dụng các thao





tácn hập/xuất trên file.
Kiểm tra điều kiện thắng thua ở mỗi lượt chơi.
Lưu lại các nước đi của game, xuất ra file gameTrace.txt
Tái cấu trúc các phần code xử lý thành tập hợp hàm, module.
Sử dụng con trỏ và cấp phát động cho bàn cờ và dữ liệu các nước đi trong
game.

II.

Ý TƯỞNG GIẢI QUYẾT PHẦN CHƠI GAME.
-

-

Các thông số được cấu hình bởi file “conf.txt” trong thư mục chương
trình:
• Kích thước bàn cờ: .
• Số quân để thắng: .
• Vị trí không cho người chơi nhập vào: (r0,c0), (r1,c1), (r2,c2) …
Các nước đi được lưu lại và ghi vào file “gameTrace.txt” trong thư
mục chương trình.
Trong từng lượt chơi ta kiểm tra giá trị nhập vào nếu không thỏa phải
yêu cầu nhập lại.
Sau mỗi lượt đánh cờ xóa màn hình và vẽ lại theo các tọa độ mới.
Kiểm tra các tọa độ mới với điều kiện thắng, nếu có người chơi chiến
thằng phải trông báo trên màn hình.
Các lượt chơi được lưu lại trong file, khi người chơi thu hồi nước đi ta
xóa bỏ các giá trị trong file đã lưu và vẽ lại bàn cờ.
Sử dụng con trỏ và cấp phát động cho bàn cờ và dữ liệu các nước đi
trong game để quản lý các giá trị lưu trữ và phục hồi dữ liệu.

NHÓM 6 – TNMT


BÀI TẬP LỚN LẦN 2 - KỸ THUẬT LẬP TRÌNH

III. CÁC CÔNG VIỆC CẦN THỰC HIỆN.
-

-

Tối ưu giả thuật đã có trên nền Bài tập lớn số 1.
Sử dụng các file nhập/xuất để định dạng cấu hình trò chơi và xuất file
lưu các nước đi của người chơi.
Sử dụng các hàm riêng để nhập/xuất, định dạng cấu hình, vẽ bàn cờ,
kiểm tra người thắng, kiểm tra lỗi…
Thay đổi việc nhập giá trị từng lượt chơi bằng cấp phát động sử dụng
biến con trỏ.
Định dạng file cấu hình “conf.txt” dùng header “ BTL-CKAssignment02” và file cấu hình mặc định “Default.txt” cấu hình cho trò
chơi.
Định dạng file xuất “gameTrace.txt” để lưu lại các nước đi của 2 người
chơi.

NHÓM 6 – TNMT


BÀI TẬP LỚN LẦN 2 - KỸ THUẬT LẬP TRÌNH

IV.

LƯU ĐỒ CỦA CHƯƠNG TRÌNH

NHÓM 6 – TNMT


BÀI TẬP LỚN LẦN 2 - KỸ THUẬT LẬP TRÌNH

V.

Ý NGHĨA CÁC HÀM, LỆNH DÙNG TRONG CHƯƠNG
TRÌNH.

 Các hàm:
- gamePlaying(): Xữ lý các thao tác của trò chơi, sữ dụng các hàm khác
-

để nhập xuất, kiểm tra, xuất kết quả.
introdution(): Xuất ra các hướng dẫn và ví dụ về trò chơi trên màn
hình.
checkInput(): kiểm tra thông số trò chơi được nhập.
checkWinner(): kiểm tra, xác định người chiến thắng dựa vào dữ liệu.
drawBoard(): Vẽ bàn cờ trên màn hình sau mỗi lượt nhập tọa độ.
boardUnit(): Cấp phát bộ nhớ cho con trỏ.
fileInput(): Lấy cấu hình game từ file.

 Các lệnh:
- enum Marker {player1,player2,none}: tạo kiểu dữ liệu mới với các giá

trị là player1, player2 và none.
- struct board_t {
int width, height;
int numWin;
Marker board [30][30];
}
Tạo kiểu dữ liệu cấu trúc gồm các thông số width, height, numWin là kiểu
số nguyên, mảng hai chiều 30x30 kiểu Marker.
-

switch statement: cấu trúc điều kiện rẻ nhánh.
while loop: thực hiện vòng lặp khi điều kiện vẫn còn đúng, kiểm tra
điều kiện trước khi thực hiện vòng lặp.
do...while loop: thực hiện như vòng lặp while nhưng điều kiện được
kiểm tra sau vòng lặp.
for loop: thực hiện vòng lặp với số lần xác định trước.
if...else statement: cầu trúc điều kiện thực hiện các lệnh với điều kiện
true hoặc false.
cout: hiển thị trên màn hình.
cin: nhận các giá trị nhập vào bàn phím trước phím “space” và “enter”,
độ dài không quá 50 kí tự.
cin.getline(pos,50): nhận chuổi nhập từ bàn phím gán vào giá trị biến
pos trước phím “enter”.
system(“cls”): xóa màn hình.

NHÓM 6 – TNMT


BÀI TẬP LỚN LẦN 2 - KỸ THUẬT LẬP TRÌNH

VI. KẾT QUẢ LÀM VIỆC
 Các công việc đã hoàn thành:
-

Khởi chạy chương trình từ Project trong Visual Studio.
Nhập cấu hình từ file, Load cấu hình Default khi trong thể nhập từ file
cấu hình.
Sử dụng con trỏ và cấp phát động để xữ lý tọa độ nhập vào.
Sử dụng các hàm riêng cho mỗi tác vụ.
Kiểm tra giá trị nhập, xác định người thắng, vã lại vấn cờ, ghi vào file
cấu hình sau mỗi lượt chơi.
Xữ hòa khi bàn cở đầy nhưng vẫn chưa có người thắng.
Khi điều kiện thắng được thoả, xuất ra màn hình người thắng cuộc.
Hồi lại các lượt đi của người chơi.
Xuất file lưu các nước đi của từng người chơi.

 Khó khăn:

Trong suốt quá trình thực hiện bài tập lớn này, nhóm thường xuyên gặp
các vấn đề nảy sinh do phần code lập trình vẫn còn nhiều kẽ hở.
Tuy nhiên với sự cố gắng, các thành viên đã hoàn thành nhiệm vụ được
giao qua đó hoàn thành trọn vẹn yêu cầu của Bài tập lớn này.
Mặc dù phương án giải quyết của nhóm không phải là cách tối ưu nhất
nhưng đó là minh chứng cho sự nỗ lực của cá nhóm.
 Hướng phát triển chương trình:

Phát triển khả năng di chuyển và đánh cờ trực tiếp trên màn hình,
không cần nhập tọa độ.
- Chức năng xin thua/hòa.
- Đồng hồ đếm thời gian trên màn hình.
- Bảng tổng kết kết quả (tỉ số, số trận thắng, thời gian trân đấu…)
-

NHÓM 6 – TNMT


BÀI TẬP LỚN LẦN 2 - KỸ THUẬT LẬP TRÌNH

VII. CẢI TIẾN CỦA CHƯƠNG TRÌNH SO VỚI BTL-1
-

Các hàm và chương trình được đóng gói thành bộ thư viện riêng giúp nâng
cấp, sửa chữa.
Sử dụng cấp phát động và con trỏ.
Sử dụng các thao tác nhập xuất trên file. (Nhập cấu hình, xuất các nước đi).
Hỗ trợ chức năng hồi nước đi (Undo).

VIII. TỔNG KẾT VÀ ĐÁNH GIÁ
Nhìn chung nhóm đã giải quyết khá trọn vẹn các yêu cầu mà nhóm đặt ra khi
bắt đầu thực hiện bài tập lớn này. Bố cục chương trình rõ ràng dễ đọc, dễ
hiểu, dễ kiểm tra.
Nhóm có sự phân chia công việc cụ thể cho từng thành viên. Do vậy các
thành viên đã hoàn thành tốt các nhiệm vụ được giao, ngoài ra còn giải quyết
được các vấn đề nảy sinh trong quá trình thực hiện.
Các tiêu chí đánh giá mà nhóm đề ra:
Chỉ tiêu
Thái độ

Giải
quyết
vấn đề
Sự
chuẩn bị

Làm
việc
nhóm

Chất
lượng
công

Tuyệt vời (A)
Không chỉ trích
công việc của
người khác, luôn tỏ
thái độ tích cực khi
đối mặt với các vấn
đề

Tốt (B)
Hiếm khi chỉ
trích công việc
của người khác,
thường tỏ thái
độ tích cực khi
đối mặt với các
vấn đề
Tích cực tìm và đề Chọn lọc các đề
nghị các giải pháp
nghị giải quyết
để giải quyết vấn
vấn đề cảu
đề
người khác
Luôn đem những
Gần như luôn
tài liệu cần thiết và đem những tài
luôn sẵn sàng để
liệu cần thiết và
làm việc
luôn sẵn sàng để
làm việc
Luôn lắng nghe,
Thường xuyên
chia sẻ và ủng hộ
lắng nghe, chia
nỗ lực của mọi
sẻ và ủng hộ
người, cố gắng
những sự nỗ lực
giúp mọi người làm của mọi người.
việc tốt với nhau
Thực hiện công
Thực hiện công
việc ở chất lượng
việc ở chất
cao nhất có thể
lượng cao

NHÓM 6 – TNMT

Bình thường (C)
Thỉnh thoảng chỉ
trích công việc của
người khác.
Thường tỏ thái độ
tích cực khi đối
mặt với các vấn đề
Không đề xuất hay
chọn lọc, nhưng
sẵn sàng thử các ý
tưởng
Gần như luôn đem
tài liệu nhưng
thường phải ổn
định mới bắt đầu
công việc được
Thỉnh thoảng lắng
nghe, chia sẻ và
ủng hộ những sự
nỗ lực của mọi
người
Thực hiện công
việc nhưng còn
thiếu sót

Kém (D)
Thường chỉ trích
công việc của
người khác.
Thường tỏ thái độ
tích cực khi đối
mặt với các vấn
đề
Không tham gia
vào công việc
chung của nhóm
Thường quên đem
theo tài liệu hoặc
ít khi có sự chuẩn
bị
Ít khi lắng nghe,
chia sẻ và ủng hộ
những sự nỗ lực
của mọi người.
Thực hiện công
việc cẩu thả


BÀI TẬP LỚN LẦN 2 - KỸ THUẬT LẬP TRÌNH
việc

Bảng đánh giá thành viên nhóm:
Tiêu chí
Thái độ

Giải quyết
vấn đề

Chuẩn bị

Làm việc
nhóm

Chất lượng
công việc

Đánh giá
chung

Tuấn Anh

A

A

A

B

A

A

Minh Chiến

A

B

A

A

A

A

Doãn Hoàng

A

A

B

A

A

A

Minh Hoàng

A

A

A

B

A

A

Thành viên

Nhóm đã tiến hành chấm kín các thành viên và kết quả là các thành viên trong
nhóm đều ở mức tuyệt vời. Như vậy, với tinh thần trách nhiệm cao, ý thức tự
giác tốt của các thành viên đã đem lại hiệu quả tuyệt vời cho nhóm.
-

NHÓM 6 – TNMT


BÀI TẬP LỚN LẦN 2 - KỸ THUẬT LẬP TRÌNH

TÀI LIỆU THAM KHẢO
[1] Bài giảng Kỹ thuật lập trình, TS. Nguyễn Đức Dũng, Đại học Bách Khoa
thành phố Hồ Chí Minh.
[2] Fundamentals of C++ Programing - 2015, Richard L. Halterman, School of
Computing Southern Adventist University.

NHÓM 6 – TNMT



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

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

×