Đặc biệt, Pygame, một thư viện đa nền tảng được thiết kế để hỗ trợ đồ họa và âm thanh, đã cung cấp cho nhà pháttriển game một công cụ mạnh mẽ để tạo ra những trò chơi đua xe thú
Trang 1UỶ BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC SÀI GÒN
KHOA CÔNG NGHỆ THÔNG TIN
- -TIỀU LUẬN: NGÔN NGỮ LẬP TRÌNH PYTHON
TÊN ĐỀ TÀI: Xây dựng trò đua xe
Họ tên thành viên trong nhóm
Ngô Minh Hiếu - 3120560026 Pham Diễm Hương - 3120410026 Vũ Đoàn Khang - 3120410240 Võ Ngọc Huy - 3120410215
GIÁO VIÊN HƯỚNG DẪN: TRỊNH TẤN ĐẠT
TP HCM, tháng 5 / 2023
Trang 2NHẬN XÉT, ĐÁNH GIÁ CỦA GIẢNG VIÊN
…
Trang 3
MỤC LỤC
Phần I MỞ ĐẦU 1
1 Giới thiệu đề tài 1
2 Lý do chọn đề tài 1
3 Mục đích - mục tiêu của đề tài 2
Phần II NỘI DUNG 3
1 Giới thiệu về game đua xe kinh điển 3
2 Giới thiệu vấn đề 3
3 Tổng quan về game 3
3.1 Luật chơi 3
3.2 Cách chơi 4
4 Phân tích 4
5 Môi trường cài đặt 5
6 Xây dựng game: 7
6.1 Phân tích các đối tượng trong game 7
6.2 Tiến hành cài đặt 7
7 Demo:
8 Kết luận:
Tài liệu tham khảo
Trang 4LỜI CẢM ƠN
Chúng em xin chân thành cảm ơn Khoa Công nghệ thông tin, trường Đại họcSài Gòn đã tạo điều kiện cho chúng em được thực hiện đồ án môn học "Ngôn ngữlập trình Python" Chúng em cũng xin chân thành cảm ơn thầy Trịnh Tấn Đạt,thầy đã giảng dạy cho chúng em những kiến thức cần thiết cho môn học này.Những kiến thức đó đã giúp cho chúng em rất nhiều trong quá trình làm đồ ánbáo cáo môn học Chúng em xin chân thành cám ơn quý Thầy cô trong Khoa đãtận tình giảng dạy và trang bị cho chúng em những kiến thức cần thiết trong thờigian qua Mặc dù nhóm đã cố gắng hoàn thành đồ án môn học với tất cả nổ lựccủa từng thành viên trong nhóm, nhưng đồ án chắc chắn không tránh khỏi nhữmgthiếu sót nhất định, rất mong nhận được sự cảm thông, chia sẻ và tận tình đónggóp chỉ bảo của quý Thầy Cô
Chúng em xin chân thành cảm ơn thầy
Trang 5xe độc đáo và hấp dẫn.
Python, với cú pháp đơn giản và dễ hiểu, là một ngôn ngữ lập trình lý tưởngcho những người mới bắt đầu trong lĩnh vực này Đặc biệt, Pygame, một thư viện
đa nền tảng được thiết kế để hỗ trợ đồ họa và âm thanh, đã cung cấp cho nhà pháttriển game một công cụ mạnh mẽ để tạo ra những trò chơi đua xe thú vị
Xây dựng một trò chơi đua xe đòi hỏi sự sáng tạo và kiến thức về lập trình.Việc làm việc trong một dự án game đua xe cũng giúp người tham gia rèn kỹnăng làm việc nhóm, quản lý dự án và giải quyết vấn đề
Trò chơi đua xe không chỉ mang lại niềm vui và giải trí cho người chơi, mà còntạo ra một cộng đồng đam mê xung quanh nó Người chơi có thể tham gia vào cáccuộc đua trực tuyến, tranh tài và chia sẻ thành tựu với nhau Đồng thời, việc pháttriển trò chơi đua xe cũng mang lại những cơ hội kinh doanh và nghề nghiệptrong lĩnh vực game
Với sự phát triển không ngừng của công nghệ thông tin, chúng ta có thể kỳvọng thêm nhiều trò chơi đua xe độc đáo và sáng tạo trong tương lai Sự kết hợpgiữa công nghệ và trò chơi đua xe sẽ mang lại những trải nghiệm tuyệt vời vàgiúp chúng ta khám phá những giới hạn mới của sự sáng tạo và thú vị trong thếgiới game
Trang 63 Mục đích - mục tiêu của đề tài.
- Mục đích:
+ Nắm chắc được được kỹ năng và kiến thức về lập trình
+ Tìm hiều về thư viện Pygame trong ngôn ngữ lập trình Python.+ Cũng cố, áp dụng, nâng cao kiến thức đã được học
+ Nắm bắt được quy trình làm game cơ bản
- Mục tiêu:
+ Vận dụng được tính chất của lập trình hướng đối tượng
+ Sử dụng thư viện Pygame vào việc xây dựng game đua xe
Trang 7Phần II NỘI DUNG
1 Giới thiệu về game đua xe kinh điển
Ngày nay, game đua xe kinh điển đã trở thành một thể loại trò chơi điện tử phổbiến và được yêu thích trên toàn thế giới Tuy nhiên, nguồn gốc của game đua xekinh điển có thể được truy vết ngược lại từ những thập kỷ trước
Ngay từ những năm 1970, khi ngành công nghiệp game đang mới nổi lên, cácnhà phát triển đã sáng tạo ra những trò chơi đua xe đầu tiên Với hình ảnh đơngiản và đồ họa pixel, những trò chơi như "Gran Trak 10" (1974) và "NightDriver" (1976) đã mở ra con đường cho sự phát triển của thể loại đua xe trongngành game
Trong những năm 1980, công nghệ và đồ họa game tiếp tục tiến bộ, cho phép
ra đời nhiều tựa game đua xe kinh điển nổi tiếng "Pole Position" (1982) của hãngAtari đã trở thành một biểu tượng trong lĩnh vực này, với chất lượng đồ họa tốt vàtrải nghiệm đua xe chân thực Cùng thời điểm, "Out Run" (1986) của Sega cũngtạo nên sức hút đặc biệt với đồ họa màu sắc tươi sáng và các quốc lộ đồ sộ đểkhám phá
Trong những năm 1990 và 2000, sự phát triển của công nghệ 3D đã đem đếnmột bước đột phá lớn cho thể loại đua xe Những tựa game như "Need for Speed"series (1994-nay), "Gran Turismo" series (1997-nay) và "Mario Kart" series(1992-nay) đã thu hút hàng triệu người chơi trên khắp thế giới bằng đồ họa sốngđộng, gameplay sôi động và lựa chọn đa dạng về xe và đường đua
2 Giới thiệu vấn đề
Yêu cầu chương trình của chúng ta ở đây là làm sao thiết kế được một chươngtrình game giống (hoặc gần giống) như Game Đua Xe Kinh Điển trên dựa vàocác phương pháp lập trình đã học Cụ thể là sử dụng phương pháp lập trìnhPython đang học kết hợp với các mẫu thiết kế và các giải thuật toán học
3 Tổng quan về game
3.1.Luật chơi
Người chơi khi bắt đầu chơi sẽ điều khiển ô tô của mình Đường đua sẽ có 4làn đua, mục tiêu của người chơi sẽ phải né những trướng ngại vật (phương tiện
Trang 8khác) và ăn những xu được đặt trên đường đua để tìm kiếm điểm tích lũy nhiều
nhất có thể
Người chơi sẽ có 3 mạng khi chơi, nếu đụng phải những trướng ngại vật
(phương tiện khác) thì sẽ bị trừ 1 mạng cho tới khi hết 3 mạng
Độ khó của trò chơi sẽ tùy thuộc vào người chơi vượt qua càng nhiều trướng
ngại vật tốc độ chạy của xe sẽ càng tăng
3.2.Cách chơi
+ Phím mũi tên trái: chuyển làn sang trái
+ Phím mũi tên phải: chuyển làn sang phải
pygame.image.load() Tải một hình ảnh từ tệp tin và tạo ra một đối
tượng hình ảnh (image object)
blit() Vẽ một đối tượng hình ảnh lên một bề mặt
(surface)
update() Cập nhật màn hình
quit() Được sử dụng để hủy khởi tạo mọi thứ
append() Phương thức dùng để thêm một phần tử vào cuối
một list
draw Vẽ đối tượng
kill() Đối tượng đó sẽ bị xóa khỏi Group mà nó thuộc
về
render() Vẽ văn bản trên bề mặt mới
get_rect() Trả về đối tượng ‘Rect’ đại diện cho kích thước
và vị trí của hình ảnh hoặc bề mặt
time.clock() Theo dõi thời gian
Trang 95 Môi trường cài đặt
- Pycharm 2023.1.1
- Điều đầu tiên cần làm để lập trình trò chơi trong Python là cài đặt mô-đunPygame Để thực hiện cài cho mô-đun này, ta có thể install trực tiếp bên trongứng dụng Pycharm 2023.1.1 phần Settings
- Các bước cài đặt mô-đun Pygame được thể hiện qua:
+ B1: Vào mục file → Settings
Trang 10+ B2: Ta chọn mục Project:pythonProject → Python Interpreter → và nhấn vào biểu tượng (+) như trong hình.
+ B3: Ta nhập vào thanh tìm kiếm, tìm từ khóa “pygame” → Chọn pygame → Click vào Install Package
6 Xây dựng game:
6.1.Các đối tượng trong game
- Xe chính (xe người chơi điều khiển)
- Loại xe khác (vật cản mà người chơi cần tránh)
Trang 11- Đồng xu (ăn xu để có điểm tích lũy)
- Khởi tạo màn hình game:
+ Gọi hàm init() để sử dụng các hàm của pygame
+ Để tạo cửa số game, ta dùng pygame.display.set_mode() và truyền vàomột tuple là chiều rộng và dài của cửa sổ game, nó trả về dạng surface, dùngbiến screen để lưu lại
+ Dùng pygame.dispay.set_caption() để gán tiêu đề cửa sổ game là “Cargame”
*Tạo FPS của trò chơi: giá trị là 120
*Tạo đối tượng đồng hồ giúp theo dõi thời gian
*Khởi tạo biến cần có : Tốc độ (speed), điểm(score), mạng(lives), …
Trang 12*Tạo ra vị trí bắt đầu của người chơi:
*Dùng pygame.mixer.Sound() để chèn thêm âm thanh vào game để game
thêm sống động, hấp dẫn hơn
*Tạo lớp đối tượng xe người chơi cần tránh:
Trang 13*Tạo lớp đối tượng xe của người chơi:
*Tạo lớp đối tượng đồng xu:
*Dùng pygame.sprite.group() để quản lý các đối tượng chung một nhóm:
*Thêm thông tin ban đầu về xe người chơi vào player_group:
*Load hình ảnh những xe cầm tránh:
Trang 14*Load hình ảnh va chạm khi 2 xe chạm nhau lúc kết thúc trò chơi:
Sau đó chúng ta tạo ra màn hình chính của game:
- Sẽ có 2 biến làm cờ của game:
+ biến running: thể hiện game có đang được chơi hay không
*) running = true (người chơi đang chơi game)
*) running = false (người chơi đã thoát ra ngoài)
+ biến btn: thể hiện game có đang ở màn hình chính hay không
*) btn = true (màn hình chính đang hiện hành)
*) btn = false (không còn hiện hành ở màn hình chính)
Khi vào màn hình chính sẽ bao gồm:
- Tải ảnh, xác định vị trí của hình ảnh chính của game
- Tải ảnh, xác định vị trí của hình ảnh chính nút Play và nút Exit
- Cập nhật lại màn hình
- Kiểm tra các sự kiện xảy ra, bao gồm:
+ Kiểm tra người dùng có nhấn nút tắt màn hình game hay không, nếu có thì dừng chương trình
+ Xác định vị trí chuột và kiểm tra xem người dùng có chọn nút Play hay nút Exit để có hành động tương xứng
Trang 16Hình 1: Màn hình chính của game đua xeSau khi người chơi nhấn vào nút Play biến cờ running chuyển về true sẽ tiếp tụcvòng lặp while để bắt đầu trò chơi.
Khi bắt đầu trò chơi, vòng lặp while bao gồm:
+ Hàm clock.tick(fps): hàm này sẽ giới hạn số khung hình được thực hiện trongmột giây với biến “fps” được khai báo ở trên với giá trị 120, đại diện cho sốkhung hình tối đa được hiển thị trong một giây
+ Ở đây đối tượng clock được sử dụng để giới hạn tốc độ khung hình của trò chơi
+ Sau đó là dòng lệnh lặp để kiểm tra sự kiện, khi người chơi di chuyển xe quabên trái bằng nút “ mũi tên qua trái “ hoặc nút “ a “, và di chuyển xe qua phải bằng
Trang 17nút “ mũi tên qua phải “ hoặc nút “ d “ và không cho xe không di chuyển qua ranhgiới của lane đường
+ Kiểm tra xem khi người chơi di chuyển xe thì có va chạm giữa xe người chơivới các xe cần tránh không Bằng cách sử dụng hàm pygame.sprite.collide.rect(),nếu va chạm các xe thì số lượt của người chơi sẽ giảm đi 1 và kèm âm thanh vachạm tại vị trí tai nạn, Nếu số lượt chơi của người chơi còn lại bằng 0 thì trò chơikết thúc
+ Khi người chơi không di chuyển xe thì nếu xe bị va chạm với các xe khác, số
lượt chơi của người chơi sẽ giảm đi 1 và kèm theo âm thanh khi va chạm Nếu
số lượt chơi của người chơi bằng 0 thì trò chơi sẽ kết thúc và kèm theo 1 âm thành, biến “ running “ này được thiết lập thành False nếu như lượt chơi bằng 0thì sẽ kết thúc vòng lặp của trò chơi
Trang 18+ Khi xe chạm vào các đồng xu trên lane thì điểm sẽ được tăng lên là 1 với mỗi
lần va chạm, và kèm theo âm thanh khi chạm đồng xu
+ Sau mỗi lần chơi thì điểm của người chơi sẽ được lưu lại và khi người chơi
có số điểm cao hơn lúc trước thì sẽ lưu điểm cao nhất
Tiếp theo là vẽ các đối tượng có trong trò chơi:
+ Vẽ lane đường: Ở đây biến “ lane_move_y ” được sử dụng để di chuyển các làn đường dọc theo trục y để tạo hiệu ứng di chuyển cho trò chơi, bằng cách thêm vào “ speed * 2 “ Khi xe di chuyển vượt quá lane đường thì sẽ reset lại bằng 0 để bắt đầu di chuyển lại từ đầu Tiếp theo sử dụng vòng lặp để vẽ ra cáclàn đường dọc theo trục y trên màn hình, kết quả là đượuc các hình chữ nhật trắng tương ứng di chuyển liên tục từ trên xuống dưới màn hình
Trang 19+ Vẽ xe người chơi:
+ Vẽ phương tiện xe cần tránh: Ở đây đảm bảo rằng trò chơi đang được chạy,
nếu trò chơi đang chạy thì biến “ add_vehicle” thành true để thêm phương tiện vào và chọn ra ngẫu nhiên một phương tiện, dùng vòng lặp để kiểm tra nếu như
có phương tiện thì biến “ add_vehicle” này thành False để ngăn không cho thêm phương tiện mới cho đến khi phương tiện di chuyển đủ xa
Trang 20+ Vẽ đồng xu: Khi trò chơi chạy, đồng xu được thêm vào ngẫu nhiên vào lane, sau đó dùng vòng lặp để kiểm tra nếu như đồng xu được thêm vào thì sẽ ngăn không cho thêm đồng xu vào nữa cho đến khi đồng xu biến mất, kiểm tra xem nếu xe của người chơi va chạm với đồng xu hoặc phương tiện xe khác thì sẽ loại bor xe đó.
7 Demo:
Hình 2: Màn hình chính của game
Trang 21Hình 3: Màn hình bắt đầu game
Hình 4: Màn hình khi thua game
Trang 228 Kết luận:
Sau một thời gian tìm hiểu đồ án, thu thập các kiến thức liên quan và thamkhảo cách làm một số nơi trên Internet, em đã hoàn thành đồ án game đua xe.Mặc dù rất cố gắng, nhưng vẫn không tránh khỏi thiếu sót và hạn chế Chúng em rất mong có được những ý kiến đánh giá, đóng góp của thầy để đồ án thêm hoànthiện
Trang 23Tài liệu tham khảo
[1] Slide bài giảng Ngôn ngữ lập trình Python của thầy Trịnh Tấn Đạt[2] https://www.w3schools.com