Ngoài ra, game còn giúp con người có thể tập trung cao độ hơn, rèn luyện tính quyết tâm, kiên trì, tích lũy kinh nghiệm xử lý vấn đề… Em chọn đề tài “Thiết kế một trò chơi trên PC” và s
Trang 1KHOA ĐIỆN TỬ
***** *****
BÁO CÁO ĐỒ ÁN I :
Thiết kế một trò chơi trên PC
Sản phẩm:
Game bắn máy bay bằng ngôn ngữ C++ và thư viện SDL
Mã lớp: 736219
Sinh viên: NguyễnMinh Phúc - 20203531
Giảng viên hướng dẫn: TS Trần Ngọc Tuấn
Hà Nội, 12/2023
Trang 2Lời nói đầu
Dưới đây là bài báo cáo đồ án I của em về chương trình game mà em đã tự mình thiết kế với ngôn ngữ C++ và thư viện SDL
Trong quá trình hoàn thiện báo cáo cũng như sản phẩm, em đã cố gắng tìm hiểu, tổng hợp kiến thức học hỏi và tìm tòi từ nhiều nguồn khác nhau, nhưng
do hạn chế về mặt thời gian và kiến thức nên vẫn còn có những thiếu sót, có những ý tưởng hay nhưng không đủ khả năng thực hiện Em mong nhận được lời nhận xét và góp ý, hỗ trợ từ thầy để em có thể hoàn thiện sản phẩm của mình hơn
Vì phần code khá dài nên em xin phép không đưa vào trong báo cáo mà sẽ đưa ra khi nộp sản phẩm
Em xin chân thành cảm ơn thầy Trần Ngọc Tuấn đã tạo điều kiện, định hướng
và dẫn dắt em trong suốt quá trình hoàn thành sản phẩm cũng như báo báo này
Trang 3MỤC LỤC
Nội dung
I Tổng quan về đề tài và sản phẩm 5
1.1 Lý do chọn đề tài : 5
1.2 Mục tiêu của đề tài : 6
II Cơ sở lý thuyết về công cụ của đề tài 6
2.1 Tổng quan về trò chơi máy tính : 6
2.2 Ngôn ngữ C++ và thư viện SDL: 6
2.2.1 Ngôn ngữ C++: 7
2.2.2 Thư viện SDL: 8
III Mô tả và các chức năng sản phẩm 9
3.1 Mô tả về sản phẩm: 9
3.2 Các chức năng chính và chi tiết: 9
3.2.1 Start, Exit ở màn hình menu: 9
3.2.2 Kẻ địch xuất hiện: 9
3.2.3 Di chuyển và tấn công: 9
3.2.4 Tiêu diệt kẻ thù: 9
3.2.5 Game Over: 9
3.2.6 Tính điểm: 10
3.2.7 You Win: 10
3.3 Các hạn chế của sản phẩm hiện tại: 10
Trang 4IV Lớp thành viên (Member Class) 10
4.1 Các lớp thành viên: 10
4.2 COMMON FUNCTION: 11
4.3 BASE OBJECT: 11
4.4 AMO OBJECT: 11
4.5 THREAT OBJECT: 11
4.6 MAIN OBJECT: 12
4.7 EXPLOSION OBJECT: 12
4.8 TEXT OBJECT: 12
4.9 MAIN: 12
V Giao diện game 13
5.1 Menu bắt đầu 13
5.2 Khi đang chơi 13
5.3 Khi thất bại 14
5.4 Khi chiến thắng 15
SƠ ĐỒ CHỨC NĂNG 16
VI Kết luận 17
6.1 Những vấn đề đạt được 17
6.2 Những vấn đề còn hạn chế 17
Trang 5I Tổng quan về đề tài và sản phẩm
1.1 Lý do chọn đề tài :
Trong những năm gần đây, trò chơi điện tử hay game là một thứ không thể không kể đến khi nói về lĩnh vực giải trí Game vừa là hình thức giúp ta giải trí, giúp chúng ta có khả năng tư duy, nhạy bén về đầu óc Ngoài ra, game còn giúp con người có thể tập trung cao độ hơn, rèn luyện tính quyết tâm, kiên trì, tích lũy kinh nghiệm xử lý vấn đề…
Em chọn đề tài “Thiết kế một trò chơi trên PC” và sản phẩm “Lập trình game bắn máy bay bằng ngôn ngữ C++ và thư viện SDL” vì đây là một dạng game
đã xuất hiện từ lâu trên thế giới , nhưng ưu điểm của game mà em thiết kế là tốc độ game nhanh, không yêu cầu cấu hình mạnh, không yêu cầu trình độ quá cao, rèn luyện khả năng phản xạ,…Chính vì vậy mà nó giải quyết được những vướng mắc gặp phải khi thiết kế theo phương pháp lập trình thủ tục thuần túy:
- Mã chương trình rõ ràng, dễ đọc, dễ hiểu
- Chương trình có tính linh hoạt, mềm dẻo cao
Trang 6- Có khả năng tái sử dụng tài nguyên
1.2 Mục tiêu của đề tài :
- Tìm hiểu ngôn ngữ C++ và thư viện SDL, đồng thời vận dụng để xây dựng
game bắn máy bay
- Nắm được các lớp, các phương thức cần thiết để xây dựng game
- Nâng cao trình độ, tự nghiên cứu, học hỏi, tư duy, rèn luyện khả năng chịu
áp lực thời gian, làm nền tảng vững chắc cho sinh viên sau khi ra trường
II Cơ sở lý thuyết về công cụ của đề tài
2.1 Tổng quan về trò chơi máy tính :
Trò chơi máy tính còn gọi là PC game, là thể loại trò chơi video được chơi trên các máy tính cá nhân (PC), thay vì chơi trên máy chơi trò chơi điện tử tại gia hoặc máy chơi trò chơi arcade Các đặc điểm cố định của nó bao gồm: phần cứng và phần mềm chơi game đa dạng hơn và do người dùng quyết định;
và nói chung là công suất lớn hơn trong đầu vào, xử lý, đầu ra video và âm thanh Hiện nay, về bản chất là do không có sự phối hợp nào rõ ràng trong thị trường trò chơi PC, và việc thiếu các phương tiện truyền thông vật lý, khiến việc đánh giá chính xác quy mô của nó trở nên khó khăn Năm 2018, thị trường game PC toàn cầu được định giá khoảng 27,7 tỷ USD
Các trò chơi trên máy tính gia đình trở nên phổ biến hơn sau sự cố trò chơi điện tử năm 1983, dẫn đến kỷ nguyên của "coder phòng ngủ" Vào thập niên
1990, các trò chơi trên PC đã đánh mất đi sức hút từ thị trường đại chúng vào tay máy chơi trò chơi điện tử, trước khi hồi sinh vào giữa thập niên 2000 thông qua phân phối kỹ thuật số
Ngày nay, phần lớn các trò chơi máy tính được thiết kế để chạy trên dòng
hệ điều hành Microsoft Windows Trong khi các trò chơi trước đây được viết cho DOS sẽ bao gồm mã để giao tiếp trực tiếp với phần cứng thì ngày nay giao diện lập trình ứng dụng (API) cung cấp giao diện giữa trò chơi và hệ điều hành, giúp đơn giản hóa việc thiết kế trò chơi DirectX của Microsoft là một API được các trò chơi máy tính ngày nay sử dụng rộng rãi để giao tiếp với phần cứng âm thanh và đồ họa OpenGL là một API đa nền tảng cũng được sử dụng để kết xuất đồ họa Phiên bản trình điều khiển của card đồ họa được cài đặt thường có thể ảnh hưởng đến hiệu suất trò chơi và cách chơi
2.2 Ngôn ngữ C++ và thư viện SDL:
Trang 72.2.1 Ngôn ngữ C++:
C++ là một ngôn ngữ lập trình được phát triển vào năm 1979 tại phòng thí nghiệm Bell bởi Bjarne Stroustrup Đây được gọi là ngôn ngữ bậc trung (middle-level) và là một phần mở rộng của ngôn ngữ lập trình C hoặc “C với các lớp Class” vì C++ là sự kết hợp các tính năng của ngôn ngữ cấp cao và cấp thấp
Ngôn ngữ lập trình này có thể chạy trên nhiều nền tảng khác nhau như: Windows, macOS và Unix Từ những thập niên 1990, C++ đã trở thành một trong những ngôn ngữ thương mại được ưa thích của các lập trình viên Theo thời gian nó đã mở rộng đáng kể và hiện nay có nhiều tính năng như: lập trình tổng quát, lập trình thủ tục, lập trình hướng đối tượng,
• Các đặc trưng cơ bản của C++ :
• C++ là một ngôn ngữ tầm trung, bạn hoàn toàn có thể sử dụng nó để phát triển các chương trình bậc thấp hay những chương trình bậc cao, mà vẫn hoạt động tốt trong phần cứng
• C++ là ngôn ngữ lập trình hướng đối tượng, sử dụng các Class và Object cùng các khái niệm như tính kế thừa, tính đa hình, tính đóng gói để tạo
ra các chương trình
• C++ được tạo ra dựa trên nền tảng ngôn ngữ C, nên nó có hầu hết mọi tính năng của C và được bổ sung thêm khái niệm functions trong quá trình thiết
kế chương trình
• Các chương trình được tạo ra bởi C++ đều có thể chạy được trên các hệ điều hành như Mac OS, Windows, hay một số biến thể của Unix
• Các điểm mạnh nổi bật của ngôn ngữ C++ là :
• Tính phổ biến: Lập trình viên C++ là một trong những công việc được các
nhà tuyển dụng trên toàn cầu tìm kiếm nhiều Điều này có thể cho thấy C++ là một trong những ngôn ngữ lập trình phổ biến nhất trên thế giới
• Dễ hiểu và dễ sử dụng: C++ được biết đến là ngôn ngữ lập trình đơn giản
nhất Lập trình này hoạt động theo nguyên tắc phân nhỏ các nhiệm vụ lớn thành các nhiệm vụ nhỏ cho bất kỳ dự án nào Cấu trúc câu lệnh dễ hiểu, ít
từ khóa nên khá dễ học và dễ sử dụng
Trang 8• Thư viện đa dạng, phong phú: có nhiều tài nguyên hỗ trợ cho ngôn ngữ
này như đồ họa API, 2D, 3D, vật lý các thiết bị âm… giúp cho các lập trình viên dễ thực thi
• Đa mô hình: C++ cũng cho phép bạn lập trình theo cấu trúc tuyến tính,
hướng chức năng, hướng đối tượng đa dạng tùy theo yêu cầu của người lập trình
• Tính di động cao: một đoạn mã code C++ có thể chuyển đổi dễ dàng khi
chạy trong macOS, Window hay Linux Nhờ đó mà lập trình viên không phải tốn thời gian viết lại chương trình khi sử dụng nó để chạy trên nhiều platform khác nhau
• Ngôn ngữ C++ trong mảng game :
C++ là lựa chọn ưu tiên để phát triển các trò chơi Nó cho phép tối ưu hóa các nguồn tài nguyên, hỗ trợ tùy chọn cho nhiều người chơi với mạng Bên cạnh đó, ngôn ngữ này còn cung cấp quyền kiểm soát phần cứng và can thiệp sâu vào CPU Đây là yếu tố quan trọng khi thiết kế các trò chơi Engines Một
số tựa games nổi tiếng có sự "góp mặt" của C++ là World Of Warcraft, Diablo Series, Dom 3, Team Fortress 2,
2.2.2 Thư viện SDL:
Quá trình xây dựng engine game cần một số thư viện cung cấp những hàm API để thao tác với hệ thống cấp thấp bên dưới như âm thanh, bàn phím, chuột và các hệ thống khác Thư viện SDL (Simple DirectMedia Layer) cung cấp đầu đủ những hàm API để làm được những việc đó
• SDL (Simple DirectMedia Layer) là 1 thư viện đa phương tiện, đa nền tảng, bao gồm các API để thao tác với âm thanh, bàn phím, chuột, joystick, 3D hardware thông qua OpenGL, and 2D video
• SDL hỗ trợ các nền tảng như Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX
• SDL được viết bằng C nhưng hỗ trợ tốt với C++ và hiện tại cũng đã hỗ trợ các ngôn ngữ khác như Ada, C#, Lua, Ocaml, Pascal và Python
• Các game sử dụng thư viện SDL như Syberia II, 7 Grands Step, Secret Maryo Chronicles,
Trang 9III Mô tả và các chức năng sản phẩm
3.1 Mô tả về sản phẩm:
Đây là một game cho phép bạn nhập vai vào một phi cơ, chiến đấu chống lại các thế lực phản diện ngoài hành tinh Nó được lập trình bằng ngôn ngữ C++ và thư viện SDL, chạy trên phần mềm Visual Code Studio, theo phương pháp hướng đối tượng Tuy đây là một dạng game khá cơ bản và phổ biến nhưng lại hay và có tính thử thách, đồng thời dễ tiếp cận và không yêu cầu cấu hình máy cao
3.2 Các chức năng chính và chi tiết:
3.2.1 Start, Exit ở màn hình menu:
Giải thích: Để có thể bắt đầu trò chơi, click chuột vào PLAY GAME
Để thoát game, click chuột vào EXIT
3.2.2 Kẻ địch xuất hiện:
Giải thích:
• Kẻ địch xuất hiện ngẫu nhiên và bắn đạn
• Kẻ địch khi bị tiêu diệt hoặc đi hết màn hình thì xuất hiện thêm
kẻ thù
3.2.3 Di chuyển và tấn công:
Giải thích:
• Di chuyển : Đây là chức năng cho phép ta điều khiển phi cơ chiến đấu di chuyển trên toàn màn hình game bằng các phím trên bàn phím như sau :
✓ Di chuyển sang trái: Bấm phím
✓ Di chuyển sang phải: Bấm phím
✓ Di chuyển lên trên: Bấm phím
✓ Di chuyển xuống dưới: Bấm phím
• Tấn công : Đây là chức năng cho phép ta bắn ra đạn từ phi cơ chiến đấu Ta click chuột trái/phải để bắn ra 2 loại đạn khác nhau
3.2.4 Tiêu diệt kẻ thù:
Giải thích: Kẻ thù bị tiêu diệt và phát nổ khi trúng đạn
3.2.5 Game Over:
Trang 10Giải thích: Phi cơ chiến đấu va chạm với kẻ thù hoặc đạn của kẻ thù và phát nổ, khi đó hiện cửa sổ GameOver thông báo thua và kết thúc trò chơi
3.2.6 Tính điểm:
Giải thích: Mỗi khi tiêu diệt được một kẻ thù được cộng 1 điểm
3.2.7 You Win:
Giải thích: Chiến thắng khi tiêu diệt thành công Boss ở cuối màn, khi
đó sẽ xuất hiện cửa sổ YouWin và kết thúc trò chơi
3.3 Các hạn chế của sản phẩm hiện tại:
• Chưa có nhiều màn chơi
• Chưa có chức năng Save Game, Pause Game
• Chưa có chức năng Multi-player
• Chưa tối ưu được Boss của game
IV Lớp thành viên (Member Class)
4.1 Các lớp thành viên:
BASE OBJECT COMMON FUNCTION
AMO OBJECT
ECT
EXPLOSION OBJECT
MAIN OBJECT TEXT OBJECT
THREAT OBJECT
Trang 11Với : Kế thừa
Mỗi lớp gồm một file header và một file cpp và file main.cpp kế thừa toàn bộ các lớp trên
4.2 COMMON FUNCTION:
Lớp này là lớp mang nhiệm vụ truy cập vào thư viện SDL nên tất cả các lớp khác đều cần kế thừa từ lớp Common Function Ngoài ra nó còn chứa các biến cố định và các hàm :
• Hàm tạo Background game
• Hàm load ảnh lên màn hình
• Hàm load clip lên màn hình
• Hàm thiết lập va chạm
• Hàm kiểm tra tọa độ vật thể
• Hàm thiết lập Menu
• Hàm giải phóng các đối tượng biến global
4.3 BASE OBJECT:
Đây là một lớp cơ sở chung dùng để chứa đựng các thuộc tính chung cho các lớp khác kế thừa Nó chứa các hàm và thuộc tính:
• Hàm load ảnh vật thể
• Hàm show vật thể
• Hàm xác định và thiết lập tọa độ vật thể và kích thước
• Thuộc tính bề mặt để apply
4.4 AMO OBJECT:
Đây là lớp quản lý các vấn đề về đạn của cả chính diện và phản diện trong game Nó chứa các hàm và thuộc tính:
• Chiều dài và rộng của đạn
• Hàm quỹ đạo và tốc độ đạn của nhân vật chính
• Hàm quỹ đạo và tốc độ đạn của kẻ thù
4.5 THREAT OBJECT:
Đây là lớp quản lý các vấn đề về các mối đe dọa, kẻ thù của người chơi Nó chứa các hàm và thuộc tính:
Trang 12• Chiều dài và chiều rộng của kẻ thù
• Hàm thiết lập di chuyển và vị trí xuất phát của kẻ thù
• Hàm tạo và thiết lập đạn của từng loại kẻ thù
• Hàm load hình ảnh đạn của từng loại đạn của từng loại kẻ thù
• Hàm reset lại kẻ thù và đạn của chúng khi bị tiêu diệt
4.6 MAIN OBJECT:
Đây là lớp xử lý các vấn đề xoay quanh nhân vật chính Nó chứa các hàm và thuộc tính:
• Tọa độ và kích thước nhân vật chính
• Hàm thiết lập sự kiện và hoạt động khi người chơi điều khiển bằng nút/chuột
• Các hàm thiết lập đạn của nhân vật chính
• Hàm thiết lập di chuyển của nhân vật chính
4.7 EXPLOSION OBJECT:
Đây là lớp xử lý các vụ nổ khi các vật thể có va chạm Nó chứa các hàm và thuộc tính:
• Hàm thiết lập clip nổ
• Hàm show vụ nổ
4.8 TEXT OBJECT:
Đây là lớp xử lý các văn bản trong game như điểm, tên game, lựa chọn
ở menu Nó chứa các hàm và thuộc tính:
• Màu văn bản
• Hàm thiết lập màu văn bản
• Hàm tạo văn bản
4.9 MAIN:
Đây là phần quan trọng nhất trong quá trình lập trình game này Main được phép kế thừa và sử dụng toàn bộ các thuộc tính cũng như các hàm của các lớp thành viên cũng như các thư viện mà nó truy cập Ngoài các hàm và thuộc tính được kế thừa và truy cập, main cũng có một số hàm và hoạt động khác như:
• Đọc file audio âm thanh va chạm
Trang 13• Hàm khởi tạo các thuộc tính ban đầu
• Load font text
• Hiển thị điểm người chơi
• Tạo phản diện
• Tạo nhân vật chính
• Cập nhật màn hình Window và giữ game chạy liên tục cho đến khi
có lệnh thoát
V Giao diện game
5.1 Menu bắt đầu
5.2 Khi đang chơi
Bắt đầu chơi
Thoát game
Tên game
Thoát game
Trang 145.3 Khi thất bại
Kẻ thù 2
Kẻ thù 1
Nhân vật
chính
Điểm
Đạn nhân vật chính
Đạn
kẻ thù
Trang 155.4 Khi chiến thắng
Vụ nổ va
Nhấn để thoát game
BOSS
Chiến thắng
Nhấn để thoát game
Trang 16SƠ ĐỒ CHỨC NĂNG
Play Game
Bắt đầu chơi
GAME
OVER
YOU WIN
Thoát game
Trúng đạn/
Va chạm
Bắn trúng địch
Cộng điểm
Tiêu diệt boss
Trang 17VI Kết luận
6.1 Những vấn đề đạt được
Với kiến thức được học tập trên trường cùng sự nỗ lực tìm tòi, tham khảo ở nhiều nguồn và tinh thần sáng tạo, mày mò, em đã hoàn thành đồ
án I với đề tài “Thiết kế một chương trình hoàn chỉnh chạy được” với sản phẩm là “Game bắn máy bay bằng ngôn ngữ C++ và thư viện SDL”
Báo cáo này là cái nhìn tổng quát về quá trình hoàn thành và về chính sản phẩm của em
6.2 Những vấn đề còn hạn chế
Do thời gian có hạn cũng như kiến thức vẫn còn hạn chế, nên đồ án của
em đã không thể hoàn thành hết các chức năng như dự định ban đầu đã đặt
ra Tuy nhiên, những chức năng chưa hoàn thiện em sẽ cố gắng bổ sung và hoàn chỉnh về sau
Trong quá trình thiết kế và thực hiện đồ án không tránh khỏi sai sót, mong thầy thông cảm và có những góp ý quý báu nhằm hoàn thiện hơn cho sản phẩm