You are on page 1of 23

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN


KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO
ĐỒ ÁN MÔN NHẬP MÔN LẬP TRÌNH
ĐỀ TÀI

GAME CARO

GV HƯỚNG DẪN: TRƯƠNG TOÀN THỊNH


Lớp: 20CTT3
Sinh viên thực hiện (Nhóm 10):
Tên MSSV
1. Lê Xuân Huy 20120494
2. Nguyễn Thị Ánh Tuyết 20120422
3. Nguyễn Huỳnh Ngọc Trâm 20120388
4. Võ Quang Công 20120445
5.Hồ Sĩ Đức 20120458
Thành phố Hồ Chí Minh - 2020
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO
ĐỒ ÁN MÔN NHẬP MÔN LẬP TRÌNH
ĐỀ TÀI

GAME CARO

GV HƯỚNG DẪN: TRƯƠNG TOÀN THỊNH


Lớp: 20CTT3
Sinh viên thực hiện (Nhóm 10):
Tên MSSV
1. Lê Xuân Huy 20120494
2. Nguyễn Thị Ánh Tuyết 20120422
3. Nguyễn Huỳnh Ngọc Trâm 20120388
4. Võ Quang Công 20120445
5.Hồ Sĩ Đức 20120458
Thành phố Hồ Chí Minh - 2020
LỜI CẢM ƠN

Để hoàn thành được đồ án và tài liệu báo cáo này, nhóm sinh viên thực hiện xin
được chân thành cảm ơn sự giúp đỡ của:
o Các giáo viên phụ trách giảng dạy các kiến thức lập trình.
o Những người bạn đã giúp nhóm có thêm nhiều ý tưởng cho việc thực hiện
đồ án.
o Tất cả mọi người đã ủng hộ tinh thần cho nhóm trong quá trình thực hiện đồ
án.
Xin được chân thành cảm ơn!

Trang 3/23
MỤC LỤC

LỜI CẢM ƠN............................................................................................................3


MỞ ĐẦU...................................................................................................................6
CHƯƠNG 1: PHÂN TÍCH VÀ ĐẶC TẢ YÊU CẦU..............................................7
1.1. Xác định yêu cầu:.....................................................................................7
1.1.1. Yêu cầu chức năng:........................................................................7
1.1.2. Yêu cầu tin học:.............................................................................7
1.2. Phân tích:..................................................................................................7
1.2.1. Kịch bản trò chơi:..........................................................................7
1.2.2. Mô hình xử lí:................................................................................8
1.2.3. Mô hình dữ liệu:.............................................................................8
1.2.4. Phân tích cài đặt:............................................................................8
CHƯƠNG 2: CHI TIẾT CÀI ĐẶT...........................................................................9
2.1. Các hàm trong file Menu.cpp (được định nghĩa trong file Menu.h):.......9
2.1.1. Hàm SelectMenu: khi người dùng ấn phím Enter để chọn 1 menu
nào đó thì sẽ chuyển tới phần đó................................................................9
2.1.2. Hàm MenuHeader: đọc dữ liệu trong file CARO.txt, xử lí và in ra
màn hình.....................................................................................................9
2.1.3. Hàm printMenu: in ra các sự lựa chọn (New game, Load game,
Help, About, Exit)....................................................................................10
2.1.4. Hiển thị hiệu ứng khi người chơi điều khiển bàn phím để chọn
các xử lí....................................................................................................10
2.1.5. Hàm MenuHelp: Hiển thị hướng dẫn và các phím tắt.................11
2.1.6. Hàm MenuAbout: Hiển thị tên và MSSV của tác giả..................11
2.1.7. Hàm MenuExit: khi người chơi bấm ESC thì sẽ hỏi lại xem có
chắc chắn muốn thoát không, nếu có thì thoát.........................................12
2.1.8. Hàm MenuLoad: có chức năng để lấy tên file cần mở lại...........12
2.2. Các hàm trong file Caro.cpp (được định nghĩa trong file Caro.h):.........12
2.2.1. Khai báo các biến hệ thống:.........................................................12
2.2.2. Hàm StartGame: vẽ giao diện màn hình chơi game....................13
2.2.3. Hàm LoadGame: xử lí khi người chơi chọn Load Game............13

Trang 4/23
2.2.4. Hàm input: Xử lí hiệu ứng âm thanh, xử lí khi người chơi ấn các
phím tắt....................................................................................................14
2.2.5. Hàm CheckBoard: kiểm tra xem ô cờ đã được đánh hay chưa....15
2.2.6. Hàm NhapDuLieu: Lấy dữ liệu quân cờ từ người đánh và xử lí
hiệu ứng âm thanh khi có người chiến thắng hoặc hoà............................15
2.2.7. Hàm resetData: đặt lại dữ liệu ván mới.......................................15
2.2.8. Hàm TableResult: Xử lí màu chữ và hiển thị các số liệu như số
lượt đánh, số trận thắng của cả 2 người chơi...........................................15
2.2.9. Hàm SaveGame: Xử lí và lưu file khi người chơi chọn Save
Game. ......................................................................................................16
2.2.10. Hàm printData: Xử lí màu, hiển thị quân cờ, số lượt đánh, số trận
thắng sau mỗi lần người chơi chọn Load Game......................................16
2.2.11. Hàm Turn: Hiển thị ra màn hình chơi lượt đánh của người tiếp
theo. ......................................................................................................17
2.2.12. Hàm Result: Hiển thị hiệu ứng khi có người thắng hoặc hoà......17
2.2.13. Hàm checkthangthua: kiểm tra thắng thua sau mỗi lượt đi:........18
2.3. Xử lí đồ hoạ và các hàm trong file view.cpp (được định nghĩa trong file
view.h): .........................................................................................................18
2.3.1. Hàm FixConsoleWindow: Đặt kích thước mặc định cho màn hình
console.....................................................................................................18
2.3.2. Hàm GotoXY: Đưa con trỏ đến một vị trí trên màn hình............18
2.3.3. Hàm DrawBoard: Dùng để vẽ bàn cờ Caro.................................19
2.3.4. Hàm drawTableResult: vẽ bảng kết quả, thể hiện các thông số
lượt đánh, trận thắng................................................................................19
2.3.5. Hàm Game_Footer: vẽ Menu con trong màn hình chơi game.....20
2.3.6. Hàm txtColor: dùng để hiển thị hiệu ứng màu sắc......................21
2.3.7. Hàm clear:....................................................................................21
KẾT LUẬN.............................................................................................................22
TÀI LIỆU THAM KHẢO.......................................................................................23

Trang 5/23
MỞ ĐẦU
Trong học kì 1 năm đầu tiên của ngành Công nghệ thông tin, khoa Công nghệ
thông tin - trường Đại học Khoa học Tự nhiên ĐHQG TP.HCM, sinh viên được
làm quen với bộ môn Nhập môn lập trình. Bộ môn giảng dạy các kiến thức nền
tảng và thiết yếu đối với một lập trình viên. Tuy nhiên, việc tiếp thu các kiến thức
ấy chỉ với các bài giảng, một số ví dụ và bài tập trên lớp là chưa đủ. Do đó, việc
thực hiện đồ án cuối kì và các buổi seminar để sinh viên có cơ hội ôn lại kiến thức
cũng như tìm hiểu sâu và rộng hơn những gì đã học là vô cùng quan trọng. Từ đó,
với đề tài cho đồ án học phần là xây dựng trò chơi caro trên màn hình console,
nhóm với 5 thành viên đã bắt tay vào thực hiện và thu được những kết quả nhất
định. Sau khi kết thúc đồ án, kết quả được tổng hợp và báo cáo chi tiết trong tài
liệu này gồm: mô hình hoạt động chương trình, phân tích thành phần chương trình,
chi tiết các cài đặt các hàm, các kĩ thuật được dùng trong chương trình, ưu nhược
điểm của chương trình, các khó khăn trong quá trình thực hiện, …
Tài liệu là tâm huyết của nhóm sinh viên thực hiện. Nếu trích dẫn tài liệu vui lòng
kèm theo nguồn!

Trang 6/23
CHƯƠNG 1: PHÂN TÍCH VÀ ĐẶC TẢ YÊU CẦU
1.1. Xác định yêu cầu:
Xây dựng trò chơi caro đơn giản với đồ họa là màn hình console.
1.1.1. Yêu cầu chức năng:
- Hoạt động được với các phím ‘A’, ‘W’, ‘S’, ‘D’ để di chuyển và phím Enter để thực
hiện nước đi.
- Có thể lưu/tải (save/load) các ván chơi.
- Nhận biết được kết quả thắng/thua/hòa của ván chơi với luật chơi:
+ 5 quân giống nhau liên tiếp không bị chặn 2 đầu => Thắng;
+ 5 quân giống nhau liên tiếp không bị chặn 1 đầu => Thắng;
+ 5 quân giống nhau liên tiếp bị chặn ngay ở 2 đầu => Không thắng;
+ 6 quân giống nhau liên tiếp trở lên => Thắng.
- Có các hiệu ứng sinh động hiển thị kết quả ván chơi.
- Tổ chức, xử lý giao diện màn hình khi chơi rõ ràng sinh động.
- Cài đặt danh sách menu trên giao diện màn hình chính của trò chơi.
1.1.2. Yêu cầu tin học:
- Ngôn ngữ lập trình: C/C++
- Môi trường lập trình: Visual Studio
- Đối tượng lập trình: màn hình Console
1.2. Phân tích:
1.2.1. Kịch bản trò chơi:
Khi vào trò chơi sẽ xuất hiện màn hình chờ tải trò chơi, sau màn hình chờ sẽ là màn
hình chính của trò chơi với menu chức năng bao gồm:
- New game: Tạo một ván chơi mới;
- Load game: Tải một ván chơi đã lưu;
- Help: Hướng dẫn các thao tác với trò chơi;
- About: Thông tin nhóm phát triển trò chơi;
- Exit: Thoát khỏi trò chơi;
Người chơi thao tác bằng các phím ‘W’, ‘S’ để di chuyển và Enter để chọn hoặc
nhấn Esc để thoát khỏi trò chơi. Khi tạo một ván chơi mới hay tải một ván chơi đã
lưu sẽ hiển thị giao diện màn hình chơi, người chơi thao tác bằng các phím ‘A’,
‘W’, ‘S’, ‘D’ để di chuyển và Enter để thực hiện nước đi. Nếu có người chơi thắng
theo luật caro thì hiển thị hiệu ứng kết quả thắng hay khi bàn cờ caro được điền kín
thì hiển thị hiệu ứng kết quả hòa. Hoặc nhấn các phím tắt: ‘L’ để mở menu lưu trò
chơi, ‘T’ để mở menu tải trò chơi; sau khi kết thúc một ván chơi, người chơi có thẻ
bấm một phím bất kì để chơi ván mới. người chơi nhấn Esc và chọn Enter để thoát
khỏi game.

Trang 7/23
1.2.2. Mô hình xử lí:
Dựa trên kịch bản trò chơi, nhóm nhận thấy có thể chia hoạt động của trò chơi thành 3
phần chính:
- Giao diện màn hình chính: Xử lý các thao tác với menu ở màn hình chính. Được
hiển thị khi bắt đầu trò chơi hoặc sau khi kết thúc giao diện màn hình chơi. Kết thúc
khi bắt đầu giao diện màn hình chơi hoặc thoát khỏi trò chơi;
- Giao diện màn hình chơi: Xử lý các thao tác với bàn cờ và các thao tác bằng phím
tắt. Được hiển thị khi người chơi chọn “New game” hoặc “Load game” tại giao diện
màn hình chính. Kết thúc khi trở về giao diện màn hình chính hoặc thoát khỏi trò
chơi;
- Giao diện menu trong màn hình chơi: Xử lý các thao tác với menu trong màn hình
chơi. Được hiển thị khi người chơi chọn “New game” hoặc “Load game” tại giao
diện màn hình chính. Kết thúc khi người chơi nhấn Esc và chọn Enter;

1.2.3. Mô hình dữ liệu:


Dữ liệu của trò chơi được chia làm 4 phần:
- Dữ liệu hệ thống: bao gồm các biến lưu các giá trị hệ thống trong quá trình vận hành trò
chơi,…;
- Dữ liệu ván chơi: bao gồm các biến lưu các giá trị thể hiện ván chơi đang hiện hành:
trạng thái bàn cờ, tọa độ con trỏ trên bàn cờ, lượt chơi, vị trí của dòng quân cờ thắng;
- Dữ liệu người chơi: bao gồm các thông tin của người chơi: tên, số lượt thắng, số nước
đi của người chơi;
- Dữ liệu lưu trữ: bao gồm các biến lưu các thông tin liên quan đến việc lưu trữ dữ liệu
của ván chơi bằng các files; mảnh 2 chiều lưu lại dữ liệu ván chơi; các dữ liệu trên được
khai báo dưới dạng các biến toàn cục.
Một số biến trong các hàm được truyền dưới dạng tham trị hoặc tham chiếu để đảm bảo
tính linh hoạt trong việc lập trình.
1.2.4. Phân tích cài đặt:
Chi tiết cài đặt của chương trình được chia thành 3 nhóm hàm chính:
+ Nhóm hàm Model (trong file Caro.cpp và được định nghĩa trong file Caro.h) bao
gồm các hàm có chức năng xử lý dữ liệu; khởi tạo dữ liệu hệ thống; nhập, xuất bằng
file lưu trữ và xử lý các dữ liệu người chơi, dữ liệu ván chơi và dữ liệu lưu trữ; kiểm
tra kết quả trò chơi dựa trên dữ liệu ván chơi;
+ Nhóm hàm Control (trong trong file Control.cpp và được định nghĩa trong file
Control.h) bao gồm các hàm có chức năng điều khiển các thao tác của trò chơi, điều
khiểu hiển thị trên màn hình console, nhận lệnh từ bàn phím và thực thi các tính
năng của trò chơi;
+ Nhóm hàm View (trong trong file view.cpp và được định nghĩa trong file view.h)
bao gồm các hàm có chức năng điều chỉnh màn hình console, in các đối tượng hoặc
các hiệu ứng của các chức năng trong trò chơi ra màn hình console.
- Hàm main() được lập trình trong tập tin Source.cpp gọi các hàm thực thi theo trình
tự của trò chơi.

Trang 8/23
CHƯƠNG 2: CHI TIẾT CÀI ĐẶT
2.1. Các hàm trong file Menu.cpp (được định nghĩa trong file Menu.h):
2.1.1. Hàm SelectMenu: khi người dùng ấn phím Enter để chọn 1 menu nào đó thì sẽ
chuyển tới phần đó.

2.1.2. Hàm MenuHeader: đọc dữ liệu trong file CARO.txt, xử lí và in ra màn hình.

Trang 9/23
2.1.3. Hàm printMenu: in ra các sự lựa chọn (New game, Load game, Help, About,
Exit)

2.1.4. Hiển thị hiệu ứng khi người chơi điều khiển bàn phím để chọn các xử lí.

Trang 10/23
2.1.5. Hàm MenuHelp: Hiển thị hướng dẫn và các phím tắt.

2.1.6. Hàm MenuAbout: Hiển thị tên và MSSV của tác giả.

Trang 11/23
2.1.7. Hàm MenuExit: khi người chơi bấm ESC thì sẽ hỏi lại xem có chắc chắn muốn
thoát không, nếu có thì thoát.

2.1.8. Hàm MenuLoad: có chức năng để lấy tên file cần mở lại.

2.2. Các hàm trong file Caro.cpp (được định nghĩa trong file Caro.h):
2.2.1. Khai báo các biến hệ thống:

Trang 12/23
2.2.2. Hàm StartGame: vẽ giao diện màn hình chơi game

2.2.3. Hàm LoadGame: xử lí khi người chơi chọn Load Game.

Trang 13/23
2.2.4. Hàm input: Xử lí hiệu ứng âm thanh, xử lí khi người chơi ấn các phím tắt.

Trang 14/23
2.2.5. Hàm CheckBoard: kiểm tra xem ô cờ đã được đánh hay chưa.

2.2.6. Hàm NhapDuLieu: Lấy dữ liệu quân cờ từ người đánh và xử lí hiệu ứng âm thanh
khi có người chiến thắng hoặc hoà.

2.2.7. Hàm resetData: đặt lại dữ liệu ván mới.

2.2.8. Hàm TableResult: Xử lí màu chữ và hiển thị các số liệu như số lượt đánh, số trận
thắng của cả 2 người chơi.

Trang 15/23
2.2.9. Hàm SaveGame: Xử lí và lưu file khi người chơi chọn Save Game.

2.2.10. Hàm printData: Xử lí màu, hiển thị quân cờ, số lượt đánh, số trận thắng sau mỗi
lần người chơi chọn Load Game.

Trang 16/23
2.2.11. Hàm Turn: Hiển thị ra màn hình chơi lượt đánh của người tiếp theo.

2.2.12. Hàm Result: Hiển thị hiệu ứng khi có người thắng hoặc hoà.

Trang 17/23
2.2.13. Hàm checkthangthua: kiểm tra thắng thua sau mỗi lượt đi:

2.3. Xử lí đồ hoạ và các hàm trong file view.cpp (được định nghĩa trong file view.h):
2.3.1. Hàm FixConsoleWindow: Đặt kích thước mặc định cho màn hình console

Trong đoạn mã này, kiểu HWND là một con trỏ trỏ tới chính cửa sổ Console. Để làm việc với
các đối tượng đồ họa này, ta cần có những kiểu như thế. Cờ GWL_STYLE được xem là dấu hiệu
để hàm GetWindowLong lấy các đặc tính mà cửa sổ Console đang có. Kết quả trả về của hàm
GetWindowLong là một số kiểu long, ta sẽ hiệu chỉnh tại dòng số 4. Ý nghĩa là để làm mờ đi nút
maximize và không cho người dùng thay đổi kích thước cửa sổ hiện hành. Sau khi đã hiệu chỉnh
xong, ta dùng hàm SetWindowLong để gán kết quả hiệu chỉnh trở lại.
2.3.2. Hàm GotoXY: Đưa con trỏ đến một vị trí trên màn hình

Trong đoạn mã này ta sử dụng struct _COORD (COORD), đây là một cấu trúc dành xử lý cho
tọa độ trên màn hình console. Ta gán hoành độ và tung độ cho biến coord sau đó thiết lập vị trí
lên màn hình bằng hàm SetConsoleCursorPosition.

Trang 18/23
2.3.3. Hàm DrawBoard: Dùng để vẽ bàn cờ Caro.

2.3.4. Hàm drawTableResult: Vẽ bảng kết quả, thể hiện các thông số lượt đánh, lượt
thắng.

Trang 19/23
2.3.5. Hàm Game_Footer: vẽ Menu con trong màn hình chơi game.

Trang 20/23
2.3.6. Hàm txtColor: dùng để hiển thị hiệu ứng màu sắc.

2.3.7. Hàm clear: Lấp đầy một vùng hình chữ nhật của màn hình bắt đầu từ một tọa độ
nào đó và bằng một kí tự nào đó.

Trang 21/23
KẾT LUẬN

Sau khi thực hiện đồ án cuối kì, sản phầm là trò chơi có thể hoạt động được và đảm bảo được các
yêu cầu về chức năng đã đề ra. Các chức năng của trò chơi tương đối hoàn chỉnh và thực hiện
chính xác. Thuật toán kiểm tra kết quả trò chơi hoạt động chuẩn xác đáp ứng các luật chơi đã đặt
ra. Đồ họa bằng màn hình console hiển thị tương đối rõ ràng, dễ nhìn. Các hiệu ứng hình ảnh và
âm thanh giúp trò chơi thêm phần sinh động hơn. Do đó, đồ án được đánh giá hoàn thành.
Ngoài ra, đồ án đã gần như bao quát kiến thức giảng dạy của môn học, giúp sinh viên ôn tập đầy
đủ kiến thức căn bản và cốt lõi đã học, rèn luyện kĩ năng lập trình cũng như sự thành thạo đối với
ngôn ngữ lập trình C/C++. Đồng thời đồ án cũng là cơ hội giúp sinh viên tìm hiểu mở rộng kiến
thức lập trình với việc xử lý giao diện màn hình console, xử lý hiệu ứng âm thanh và hình ảnh
cho trò chơi.
Tuy nhiên, trò chơi còn nhiều nhược điểm và còn có thể phát triển được. Việc hiển thị trên màn
hình console còn thô và chưa đủ bắt mắt có thể được thay thế bởi việc xử lý màn hình bằng các
thư viện đồ họa được hỗ trợ trong ngôn ngữ lập trình C/C++. Các menu chức năng của trò chơi
còn đơn giản và ít chức năng. Do đó, các chức năng của trò chơi có thể được bổ sung hoặc nâng
cấp trở nên đầy đủ hơn, giúp trò chơi hay hơn. Bên cạnh đó, trò chơi vẫn là chương trình chạy
trong môi trường Visual Studio nên các máy tính khác nếu không cài đặt môi trường sẽ không
thể chạy được trò chơi. Vì thế, trò chơi có thể được phát triển bằng việc đóng gói trò chơi để
khắc phục nhược điểm trên.

Trang 22/23
TÀI LIỆU THAM KHẢO

https://nguyenvanhieu.vn/
https://daynhauhoc.com/
https://www.youtube.com/
https://stackoverrun.com/
https://stackoverflow.com/
Tài liệu hướng dẫn của giảng viên

Trang 23/23

You might also like