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

BÁO cáo đồ án môn NHẬP môn lập TRÌNH đề tài GAME CARO

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 (588.07 KB, 23 trang )

ĐẠ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 TỒN THỊNH
Lớp: 20CTT3
Sinh viên thực hiện (Nhóm 10):
Tên
1. Lê Xuân Huy
2. Nguyễn Thị Ánh Tuyết
3. Nguyễn Huỳnh Ngọc Trâm
4. Võ Quang Cơng
5.Hồ Sĩ Đức

MSSV
20120494
20120422
20120388
20120445
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 TỒN THỊNH
Lớp: 20CTT3
Sinh viên thực hiện (Nhóm 10):
Tên
1. Lê Xuân Huy
2. Nguyễn Thị Ánh Tuyết
3. Nguyễn Huỳnh Ngọc Trâm
4. Võ Quang Cơng
5.Hồ Sĩ Đức

MSSV
20120494
20120422
20120388
20120445
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 q 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. 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 thốt khơng, nếu có thì thố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. 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: Thố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 để thố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 thố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 thố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 q 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 qn 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
thốt khơng, nếu có thì thố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 hồ.

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 hồ.

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 hồn chỉnh và thực hiện
chính xác. Thuật tố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
/> /> /> /> />Tài liệu hướng dẫn của giảng viên

Trang 23/23



×