Trong bài báo cáo này, chúng em xin trình bày về quá trình phát triển và thực hiện trò chơi SpaceShooter - một trò chơi thú vị mà chúng em đã xây dựng trong môn học "Hệ Nhúng".. Sau đó,
Trang 1ĐẠI HỌC BÁCH KHOA HÀ NỘI
BÀI TẬP LỚN HỆ NHÚNG
Đề tài: Trò chơi bắn máy bay
SpaceShooter
Nhóm: 3
Trần Văn Báu 20204813
Phạm Mạnh Cường 20204819
Nguyễn Huy Toàn 20204796
Giảng viên hướng
dẫn: TS Ngô Lam Trung
Trường: Công nghệ thông tin và truyền thông
HÀ NỘI, 10/8/2023
Ch ký c a GVHDữ ủ
Trang 2MỤC LỤC
L I C M N Ờ Ả Ơ 4
M ĐẦẦU Ở 5
DANH M C HÌNH NH Ụ Ả 6
PHẦN CHIA CÔNG VI C Ệ 7
CH ƯƠ NG I: T NG QUAN ĐỀẦ TÀI Ổ 8
1 Mô tả đề tài 8
2 Mục tiêu 8
CH ƯƠ NG II: N I DUNG Ộ 9
1 Tìm hi u phầần c ng ể ứ 9
1.1 Chip STM32F429 9
1.2 Kit stm32f429i-discovery 9
1.3 Bảng nút bấm 10
1.4 Dây nốối 10
1.5 Cáp n p ch ạ ươ ng trình 10
2 Tìm hi u các công c l p trình ể ụ ậ 10
2.1 STM32Cube IDE 10
2.2 TouchGFX 11
3 Tìm hi u h điềầu hành FreeRTOS ể ệ 11
4 Tìm hi u c chềế trò ch i ể ơ ơ 12
5 L p trình trò ch i và ki m th ậ ơ ể ử 12
CH ƯƠ NG III: THIỀẾT KỀẾ, XẦY D NG S N PH M Ự Ả Ẩ 14
1 Ghép nôếi phầần c ng ứ 14
1.1 S đốồ khốối ơ 14
1.2 Ghép nốối hoàn ch nh ỉ 14
2 Thiềết kềế giao di n trò ch i ệ ơ 14
2.1 Màn hình bắốt đâồu trò ch i ơ 14
2.2 Màn th nhâốt ứ 14
2.3 Màn th hai ứ 14
2.4 Màn th ba ứ 14
2.5 Màn quái kh ng (Boss cuốối) ủ 15
2.6 Màn hình thua cu c ộ 15
2.7 Màn hình thắống cu c ộ 15
3 Thiềết kềế mã nguôần 15
ậ ự ệ ừ
Trang 3TÀI LI U THAM KH O Ệ Ả 16
Trang 4LỜI CẢM ƠN
Chúng em xin dành những dòng này để bày tỏ lòng biết ơn chân thành đến thầy TS Ngô Lam Trung - người đã vô cùng tận tâm và hướng dẫn chúng em trong suốt quá trình thực hiện bài tập lớn môn Hệ Nhúng Thầy là nguồn động viên quý báu, luôn tạo điều kiện thuận lợi cho chúng
em để tiếp cận kiến thức một cách sâu sắc hơn và hiểu rõ hơn về lý thuyết cũng như thực tiễn của hệ nhúng Sự chia sẻ từ thầy đã giúp chúng em vượt qua những khó khăn, đồng thời khám phá ra nhiều hướng đi mới mẻ Chúng em xin bày tỏ lòng biết ơn sâu sắc và chân thành về tất cả những kiến thức mà thầy đã truyền đạt Những bài học và lời khuyên của thầy giúp chúng em không chỉ hiểu sâu về môn học mà còn xây dựng cho chúng em một nền tảng lý thuyết và thực hành vững chắc cho tương lai Một lần nữa, chúng em xin gửi lời cảm ơn chân thành đến thầy Ngô Lam Trung vì tất cả những gì thầy đã làm cho chúng em Chúng em xin kính chúc thầy dồi dào sức khỏe và thành công trong công việc
Trang 5MỞ ĐẦU
Trong thời đại công nghệ hiện đại, trò chơi điện tử không chỉ là một hình thức giải trí, mà còn là một nền văn hoá, nơi con người có thể tương tác, khám phá và thách thức bản thân thông qua những trải nghiệm ảo đầy sáng tạo Trong bối cảnh đó, việc phát triển trò chơi không chỉ đòi hỏi kiến thức về lập trình và thiết kế, mà còn yêu cầu sự hiểu biết về hệ nhúng - một lĩnh vực quan trọng để tạo ra những trải nghiệm trò chơi tương tác và mượt mà
Trong bài báo cáo này, chúng em xin trình bày về quá trình phát triển và thực hiện trò chơi SpaceShooter - một trò chơi thú vị mà chúng
em đã xây dựng trong môn học "Hệ Nhúng" Trò chơi SpaceShooter không chỉ là sản phẩm của sự sáng tạo và đam mê của chúng em, mà còn là kết quả của những kiến thức và kỹ thuật mà chúng em đã học được từ môn học này Chúng em sẽ bắt đầu bằng việc giới thiệu tổng quan về trò chơi SpaceShooter và mục tiêu của dự án Sau đó, chúng em sẽ trình bày về quá trình thiết kế và phát triển trò chơi, bao gồm việc áp dụng các nguyên tắc hệ nhúng vào việc tạo ra trải nghiệm chơi game mượt mà và thú vị Chúng em cũng sẽ trình bày về các thử nghiệm và kiểm tra hiệu năng của trò chơi Cuối cùng, chúng em sẽ tổng kết những kết quả đạt được và những học thức đã học được trong quá trình phát triển trò chơi này Bài báo cáo hy vọng sẽ là một cái nhìn tổng quan về quá trình phát triển trò chơi SpaceShooter và cách chúng em đã ứng dụng kiến thức về
hệ nhúng vào dự án này Chúng em mong rằng thông qua bài báo cáo này, chúng em sẽ truyền tải được đầy đủ kiến thức mà chúng em đã học được ở kì vừa rồi
Trang 6DANH MỤC HÌNH ẢNH
Figure 1: Kit STM32F429 10
dfdsfsdf dfdfds
Trang 7PHÂN CHIA CÔNG VIỆC
Trang 8CHƯƠNG I: TỔNG QUAN ĐỀ TÀI
1 Mô tả đề tài
Đề tài tập trung vào việc phát triển trò chơi SpaceShooter trên kit STM32F429i
Thể loại game: PvE (Người với máy)
Mô tả trò chơi: Người chơi có thể điều khiển máy bay lên, xuống, trái, phải, đồng thời máy bay bắn ra những tia đạn tiêu diệt địch Sau khi tiêu diệt địch, người chơi sẽ được thưởng điểm để nâng độ khó trò chơi sau mỗi 5 điểm Độ khó đạt tối đa là 3, sau đó người chơi sẽ chiến đấu với Boss cuối để dành chiến thắng chung cuộc Trong quá trình chiến đấu, người chơi sẽ có 3 mạng, và mất một với mỗi lần trúng đạn của
kẻ địch Nếu người chơi đã hết 3 mạng mà chưa thể hạ gục Boss cuối, người chơi sẽ thất bại, người chơi có thể bấm màn hình để chơi lại
2 Mục tiêu
Nhóm chúng em tập trung vào việc phát triển trò chơi "SpaceShooter" trên kit STM32F429 với những mục tiêu cụ thể sau:
Mục tiêu chính là phát triển một trò chơi SpaceShooter với giao diện tương tác phù hợp với màn hình và các nút điều khiển của kit
STM32F429i
Làm quen với các công cụ lập trình mới như STM32Cube IDE,
TouchGFX, …
Sử dụng các tính năng của hệ điều hành FreeRTOS áp dụng vào lập trình trò chơi
Sử dụng kiến thức về lập trình hệ nhúng để tối ưu hóa mã nguồn trò chơi, bao gồm việc quản lý tài nguyên hệ thống như bộ nhớ và xử lý,
để đảm bảo trò chơi hoạt động mượt mà và không gây tốn nhiều nguồn tài nguyên
Làm quen với các công cụ lập trình mới như STM32CubeIDE, TouchGFX,
…
Với những mục tiêu trên, chúng em mong muốn tạo ra một trò chơi SpaceShooter hoàn chỉnh và thú vị, đồng thời áp dụng kiến thức hệ nhúng vào việc phát triển trò chơi trên kit STM32F429i
Trang 9CHƯƠNG II: NỘI DUNG
1 Tìm hiểu phần cứng
1.1 Chip STM32F429
Chip STM32F429 thuộc dòng STM32 của STMicroelectronics, là một dòng
vi xử lý nhúng phổ biến dựa trên kiến trúc ARM Cortex-M4 STM32F429 là một trong các mẫu chip điều khiển STM32 mạnh và phù hợp với nhiều chương trình
Một số đặc điểm nổi bật của STM32F429:
Bộ nhớ và Flash lớn: STM32F429 đi kèm với bộ nhớ Flash lên đến vài trăm KB và RAM lên đến vài chục KB, cho phép lưu trữ mã chương trình
và dữ liệu một cách dễ dàng
Giao tiếp đa dạng: STM32F429 hỗ trợ nhiều giao tiếp như SPI, I2C, UART, USB và nhiều giao tiếp khác, làm cho nó phù hợp cho nhiều ứng dụng
Màn hình cảm ứng: Một số phiên bản của STM32F429 có khả năng điều khiển màn hình cảm ứng, cho phép xây dựng các ứng dụng giao diện người dùng tương tác
Hỗ trợ peripherial phong phú: Chip điều khiển này đi kèm với nhiều peripherial như GPIO, ADC, DAC, PWM và nhiều tính năng khác
1.2 Kit stm32f429i-discovery
Kit STM32F429I-DISCO là một bộ phát triển (development board) dành cho
vi điều khiển STM32F429 của STMicroelectronics Bộ kit này được thiết kế
để giúp các nhà phát triển dễ dàng thử nghiệm và phát triển ứng dụng nhúng trên nền tảng vi điều khiển STM32F429
Một số đặc điểm và tính năng của kit STM32F429I-DISCO:
Vi điều khiển STM32F429: Kit được trang bị vi điều khiển STM32F429IGT6, với lõi xử lý Cortex-M4 tốc độ cao, bộ nhớ Flash lên đến 1MB và RAM lên đến 256KB
Màn hình cảm ứng TFT LCD: Kit đi kèm với một màn hình TFT LCD màu 2.4 inch, có khả năng cảm ứng, giúp bạn xây dựng các ứng dụng giao diện người dùng đa dạng
Giao tiếp đa dạng: Kit hỗ trợ nhiều giao tiếp như USB OTG, UART, SPI, I2C, CAN và nhiều giao tiếp khác, giúp bạn kết nối với các thiết bị và module khác
Trang 10Phím bấm và LED: Kit có các phím bấm và LED để thử nghiệm và kiểm tra các chức năng cơ bản của vi điều khiển
Nút nhấn Reset và User: Có các nút nhấn để thực hiện việc khởi động lại vi điều khiển (Reset) hoặc thao tác theo dõi từ người dùng (User) Nguồn cung cấp: Kit có thể được cấp nguồn từ USB hoặc nguồn ngoài, cho phép bạn lựa chọn nguồn cung cấp phù hợp với ứng dụng của mình
Figure 1: Kit STM32F429
1.3 Bảng nút bấm
Bao gồm 4 nút bấm: trái, phải, lên, xuống được hàn sao cho các chân nốt đất nối với nhau, các chân còn lại sẽ được kết nốt với các chân khác nhau của kit
1.4 Dây nối
Sử dụng các dây nối cái-cái để kết nối kit với bảng nút bấm Các dây nối này có thể có đầu đực ở một đầu và đầu cái ở đầu còn lại để dễ dàng kết nối với chân cắm của bảng nút bấm và bộ kit
1.5 Cáp nạp chương trình
Cáp nạp chương trình là một phụ kiện quan trọng khi làm việc với vi điều khiển STM32F429I-DISCO hoặc bất kỳ vi điều khiển STM32 nào Nó cho phép nạp chương trình vào vi điều khiển từ máy tính của bạn thông qua cổng USB Cáp nạp chương trình thường đi kèm với một đầu USB và một đầu micro USB, giúp kết nối vi điều khiển với máy tính để nạp mã chương trình hoặc thực hiện các thao tác khác như gỡ lỗi và theo dõi hoạt động của chip
Trang 112 Tìm hiểu các công cụ lập trình
2.1 STM32Cube IDE
STM32Cube IDE là một môi trường phát triển tích hợp (IDE) được cung cấp bởi STMicroelectronics cho việc lập trình và phát triển ứng dụng trên các vi điều khiển STM32 Nó cung cấp một loạt các công cụ và tích hợp giúp dễ dàng viết mã, nạp chương trình và gỡ lỗi trên các vi điều khiển STM32 Các đặc điểm và tính năng chính của STM32Cube IDE:
Dựa trên Eclipse: STM32Cube IDE được xây dựng trên nền tảng Eclipse, cung cấp môi trường lập trình quen thuộc và linh hoạt
Tích hợp STM32CubeMX: STM32Cube IDE tích hợp sẵn công cụ STM32CubeMX, giúp dễ dàng cấu hình vi điều khiển và tạo mã mẫu Nạp chương trình và gỡ lỗi dễ dàng: IDE hỗ trợ nạp chương trình và gỡ lỗi trực tiếp từ giao diện người dùng, giúp tiết kiệm thời gian và tối ưu hóa quy trình phát triển
Hỗ trợ lập trình nhiều ngôn ngữ: STM32Cube IDE hỗ trợ nhiều ngôn ngữ lập trình như C và C++, cho phép viết mã theo phong cách ưa thích
Hỗ trợ thư viện HAL và LL: IDE tích hợp các thư viện phần cứng HAL (Hardware Abstraction Layer) và LL (Low-Level) giúp quản lý phần cứng dễ dàng hơn
2.2 TouchGFX
TouchGFX là một nền tảng giao diện người dùng (UI) dựa trên đồ họa được cung cấp bởi STMicroelectronics Nó cho phép xây dựng các giao diện người dùng đẹp và tương tác cho các ứng dụng nhúng trên vi điều khiển STM32
Các đặc điểm và tính năng chính của TouchGFX:
Giao diện người dùng đồ họa: TouchGFX cho phép tạo giao diện người dùng đẹp, với các chức năng tương tác như cảm ứng và điều khiển Thư viện đồ họa: TouchGFX cung cấp nhiều thư viện đồ họa sẵn có, giúp người dùng tạo ra các hiệu ứng và đối tượng đa dạng trong giao diện người dùng
Tùy chỉnh linh hoạt: Người dùng có thể tùy chỉnh giao diện người dùng
dễ dàng thông qua việc chỉnh sửa mã và sử dụng công cụ thiết kế
Trang 12Hỗ trợ phần cứng tùy chỉnh: TouchGFX hỗ trợ việc tùy chỉnh giao diện cho các màn hình có độ phân giải và kích thước khác nhau
3 Tìm hiểu hệ điều hành FreeRTOS
FreeRTOS (Free Real-Time Operating System) là một hệ điều hành thời gian thực mã nguồn mở phát triển dựa trên mô hình tuần tự và hoạt động trên các vi điều khiển nhúng và hệ thống nhúng Nó cung cấp một giải pháp hệ điều hành nhẹ và hiệu quả cho các ứng dụng yêu cầu độ tin cậy
và thời gian thực
Một số điểm quan trọng về FreeRTOS:
Tuần tự hóa: FreeRTOS hoạt động trên mô hình tuần tự, nghĩa là nhiều nhiệm vụ (tasks) có thể chạy song song nhau, tạo ra sự đa nhiệm nhẹ
Quản lý nguồn tài nguyên: FreeRTOS quản lý nguồn tài nguyên như
bộ nhớ và xử lý của vi điều khiển, giúp tối ưu hóa hiệu suất hệ thống
Thời gian thực: FreeRTOS thiết kế để hỗ trợ thời gian thực và các ứng dụng yêu cầu đáp ứng nhanh chóng trong môi trường nhúng Task và Scheduler: Các nhiệm vụ được thực hiện trong FreeRTOS được gọi là tasks FreeRTOS có một bộ lập lịch (scheduler) quản lý thứ tự thực hiện các tasks theo thời gian và ưu tiên cài đặt
Sự kiện và Semaphore: FreeRTOS cung cấp cơ chế sự kiện và
semaphore để đồng bộ và chia sẻ dữ liệu giữa các tasks
Kiến trúc đa nền tảng: FreeRTOS hỗ trợ nhiều kiến trúc vi điều khiển và
hệ thống khác nhau, giúp dễ dàng sử dụng trong nhiều dự án
4 Tìm hiểu cơ chế trò chơi
Cơ chế trò chơi là phần quan trọng trong việc hiểu cách trò chơi Space Shooter hoạt động Space Shooter là một thể loại trò chơi mà người chơi thường đóng vai trò của một máy bay chiến đấu và chiến đấu chống lại đợt tấn công của các kẻ thù không gian Nhóm em tìm hiểu được một số
cơ chế quan trọng của trò chơi:
Di chuyển và Điều khiển: Trong trò chơi Space Shooter, người chơi có khả năng di chuyển máy bay hoặc tàu vũ trụ theo các hướng: lên, xuống, trái và phải Điều này thường được thực hiện bằng cách sử dụng các phím bấm trong bảng nút bấm Việc điều khiển tàu vũ trụ
Trang 13một cách linh hoạt để tránh đạn và tấn công địch là quan trọng để sống sót
Bắn và Tấn công: Một phần quan trọng của cơ chế trò chơi Space Shooter là khả năng bắn hạ kẻ thù Người chơi có một loạt đạn để tấn công Việc định vị và tấn công kẻ thù để tránh bị tấn công ngược lại là điểm mấu chốt để chiến thắng
Kẻ địch: Trò chơi Space Shooter thường có nhiều loại kẻ địch với độ khó
và cách tấn công khác nhau Một số kẻ địch có sức sát thương và chống chịu cao hơn, trong khi các kẻ thù khác có chiến thuật tấn công
đa dạng Điều này tạo ra sự thách thức và đa dạng trong trò chơi Nâng cấp: Trong trò chơi Space Shooter, người chơi thường có cơ hội thu thập các vật phẩm power-up để cải thiện vũ khí hoặc khả năng tấn công của họ Những power-up này có thể cung cấp vũ khí mạnh hơn, tốc độ tấn công nhanh hơn, bảo vệ thêm và các tính năng khác giúp người chơi dễ dàng hơn trong việc đối phó với kẻ thù
Màn chơi và Cấp độ: Trò chơi Space Shooter thường chia thành các màn chơi và cấp độ khác nhau Mỗi cấp độ thường có độ khó tăng dần, với số lượng và tốc độ của kẻ thù tăng lên Điều này tạo ra sự tiến bộ
và thách thức liên tục cho người chơi
5 Lập trình trò chơi và kiểm thử
Xác định yêu cầu: Trước hết, nhóm xác định các yêu cầu cơ bản cho trò chơi Điều này bao gồm quyết định về cơ chế trò chơi, đồ họa, và các tính năng chính khác
Chọn công cụ lập trình: Nhóm sử dụng công cụ lập trình STM32Cube IDE kết hợp với TouchGFX
Thiết kế cấu trúc trò chơi: Thiết kế cấu trúc và logic của trò chơi, bao gồm các chức năng, lớp, và quản lý trạng thái trò chơi
Xây dựng đồ họa: Tạo các hình ảnh nhân vật, hoạt cảnh và cho trò chơi
Lập trình gameplay: Bắt đầu viết mã cho các cơ chế gameplay như di chuyển, tấn công, xử lý va chạm, và các tính năng đặc biệt khác Kiểm thử liên tục: Trong quá trình lập trình, thường xuyên kiểm thử để đảm bảo các tính năng hoạt động đúng và không có lỗi
Kiểm thử trò chơi:
Trang 14Kiểm tra chức năng: Thử nghiệm các chức năng trò chơi như di chuyển, tấn công, va chạm và tính năng đặc biệt để đảm bảo chúng hoạt động đúng theo thiết kế
Kiểm tra độ khó: Đảm bảo độ khó của trò chơi tăng dần theo cấp độ và tạo ra sự thách thức thích hợp cho người chơi
Kiểm tra hiệu năng: Đảm bảo trò chơi chạy mượt mà và không có sự trễ hẹn không mong muốn trên các thiết bị khác nhau
Trang 15CHƯƠNG III: THIẾT KẾ, XÂY DỰNG SẢN PHẨM
1 Ghép nối phần cứng
1.1 Sơ đồ khối
Điều khiển Cấp điện
Bảng nút bấm -> KIT < - PIN
1.2 Ghép nối hoàn chỉnh
2 Thiết kế giao diện trò chơi
2.1 Màn hình bắt đầu trò chơi
Khi ấn vào màn hình cảm ứng, tự độ bắt đầu trò chơi
2.2 Màn thứ nhất
Các máy bay địch cấp độ đầu tiên sẽ lần lượt bay từ trên xuống rồi sang phải cuối cùng bay ngược lên
Sau mỗi khoảng thời gian cố định ngẫu nhiên 1 máy bay sẽ bắn đạn từ từ rơi xuống vị trí máy bay của người chơi
Mỗi khi người chơi bắn trúng 1 chiếc máy bay 3 lần chúng sẽ biến mất và cộng cho người chơi một điểm
Khi người chơi đủ 5 điểm sẽ chuyển sang màn thứ 2
2.3 Màn thứ hai
Các máy bay địch cấp độ 2 sẽ lần lượt bay từ trên xuống rồi sang phải cuối cùng bay ngược lên
Sau mỗi khoảng thời gian cố định ngẫu nhiên 1 máy bay sẽ bắn đạn từ từ rơi xuống vị trí máy bay của người chơi
Mỗi khi người chơi bắn trúng 1 chiếc máy bay 3 lần chúng sẽ biến mất và cộng cho người chơi một điểm
Khi người chơi đủ 10 điểm sẽ chuyển sang màn thứ 3
2.4 Màn thứ ba
Các máy bay địch cấp độ 3 sẽ lần lượt bay từ trên xuống rồi sang phải cuối cùng bay ngược lên
Sau mỗi khoảng thời gian cố định ngẫu nhiên 1 máy bay sẽ bắn đạn từ từ rơi xuống vị trí máy bay của người chơi