Pygame là một bộ công cụ tiện ích, là một phản của ngôn ngữ lập trình Python, có rát nhiều tựa game huyền thoại đời đầu đã được tạo nên từ ngôn ngữ Python, nên chúng em đã quyết định sử
Trang 1————=a->>«+:i†:zè<-=-+©——————
TRƯỜNG ĐẠI HỌC SÀI GÒN
KHOA CONG NGHE THONG TIN
BAO CAO DO AN MON LAP TRINH PYTHON TEN DE TAI: XÂY DỰNG ỨNG DUNG TRO CHOI XEP GACH VOI THU VIEN
Ậ
\
|
v
\
ị
\ Họ và tên thành viên trong nhóm: Nguyễn Chí Thiện — 3120410492
Chung Phát Tài — 3120410455
Lê Quang Trường — 3120410570 Phan Nhụt Hào - 3120410155
TP HCM tháng 4/2022
—————a-=>«}>`†2»—= ©=—
Trang 2
NHAN XET, DANH GIA CUA GIANG VIEN
Trang 3LOI CAM ON Chúng em xin chân thành cảm ơn Khoa Công nghệ thông tin, trường Dai học Sà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 đồ án bá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ời gian 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ực của từng thành viên trong nhóm, nhưng đồ án chắc chắn không tránh khỏi nhữmg thiếu sót nhát định, rất mong nhận được sự cảm thông, chia sẻ và tận tình đóng góp chi bao cua quy Thay Cé
Chúng em xin chân thành cảm ơn thay.
Trang 4A MO DAU
1 Ly do chon dé tai
Hiện nay, ngành Công nghệ thông tin đã và đang có những bước phát triển nhanh chóng ứng dụng của nó trong mọi lĩnh vực trong cuộc sóng trên thé giới nói chung và Việt Nam nói riêng Công nghệ thông tin là một phân không thẻ thiếu của cuộc sóng, góp phản đây mạnh công cuộc công nghiệp hóa, hiện đại hóa và quá trình phát triển của đát nước Việc ứng dụng những thành quả của khoa học công nghệ vào trong đời sống, trong công tác là hét sức thiết yéu Ung dụng của công nghệ thông tin két hợp với truyền thông hóa được xem là một trong những yéu tố mang tính quyét định trong mọi hoạt động của các công ty, tổ chức nó đóng vai trò quan trọng
và không thẻ thiếu Công nghệ thông tin và truyền thông hóa góp phản làm thay đối suy nghĩ, lồi mòn tư duy của mỗi con người, nó giúp con người năng động hơn, kết nói nhanh hơn ở moi lúc mọi nơi làm tăng hiệu quá và năng suất của công việc
Python là ngôn ngữ lập trình hướng đối tượng bậc cao, dùng để phát triển website và nhiều
ứng dụng khác nhau Python được tạo ra bởi Guido van Rossum và được phát triển trong một dự
án mã mở (open source) Với cú pháp cực kì đơn giản và thanh lịch, Python là lựa chọn hoàn hảo cho những ai lần đầu tiên học lập trình cho nên có thê được dùng để tạo ra các ứng dụng đẻ giải quyết các vấn đẻ về số, xử lý văn bản, tạo ra trò chơi, và nhiều thứ khác
Trong quá trình tìm hiểu chúng em thay rat hứng thú với các ứng dụng game được cài đặt
và lập trình bằng ngôn ngữ lập trình Python bằng thư viện Pygame Pygame là một bộ công cụ tiện ích, là một phản của ngôn ngữ lập trình Python, có rát nhiều tựa game huyền thoại đời đầu
đã được tạo nên từ ngôn ngữ Python, nên chúng em đã quyết định sử dụng thư viện Pygame của Python đề xây dựng game Tetreis đề thấy rõ được khả năng mạnh mẽ của nó
2 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 Tetreis
3 Bố cục của đề tài
Nội dung gồm 2 phan:
Trang 5Phan I: Mở đầu
Phan này bao gồm các thông tin về dé tài như: + Tên đề tài
+ Muc dich
+ Lý đo để xây dựng đè tài
Phản II: Nội dung
Phan này bao gồm các thông tin vẻ đẻ tai như: + Tìm hiểu về quy trình làm game + Xây dựng game
Trang 6B XAY DUNG UNG DUNG TRO CHOI XEP GACH VOI THU VIEN PYGAME
1 Giới thiệu về game xếp gạch(Tetreis)
Trò chơi xếp hình(Tetreis) ra đời ở Liên Xô vào năm 1984 Cha đé của nó là kỹ sư máy tính Alexey Pajitnov Được phát triên và được ông tung ra thị trường vào ngày 6-6-1984 khi đang
làm việc tại Trung tâm máy tính Dorodnicyn của Viện hàn lâm Khoa học Liên Xô ở Matxcơva
Tetris là trò chơi dạng xép hình khéo léo Là một trò chơi rất quen thuộc với mọi người, đặc biệt
là tuổi thơ của thé hé 8x 9x Day là một trò chơi giái trí, quen thuộc và háp dẫn với người chơi diện tử Loại trò chơi này phô biến trên các thiết bị như máy tính, diện thoại di dộng Nhiệm vụ của bạn trong game xép gạch này sắp xép các khói gạch lại với nhau xuất hiện trên màn hình thật chính xác và liên nhau Thời gian chơi xếp hình càng lâu thì diễm càng cao và tốc dộ rơi càng nhanh Thử thách xép gạch két thúc khi tất cá các viên gạch không thể xép dược một hình nào Với bẻ dày lịch sử phát triển lâu dài của mình có những thời điềm mà tựa game Tetreis xép thứ
ba, thậm chí có thời điểm còn vươn lên vi trí thứ hai những tựa game được bán chạy nhát Đinh cao nhát của tựa game này là thời điểm ngày 7-6-2014, Tetris đã bán được hơn 140 triệu bản bán lẻ,
bỏ xa bát cứ một trò chơi điện tử nào
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ương trình game giống (hoặc gàn gióng) như Tetreis trên dựa vào các phương pháp lập trình đã học Cụ thẻ là sử dụng phương pháp lập trình Python đ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à phân tích
3.1 Khảo sát
- Bồ cục chơi game gồm 1 panel chính
+Một panel chính:
- Kích thước: width = 400, columns = 15, row = 30(px)
- Được bồ trí như ma trận gồm 15 cột và 30 dòng
- Cau tạo của gạch: Cấu tạo gồm có 7 hình dạng (khói hình) I (thăng đứng), J, L, O (vuông), S, T, Z Ta thấy mỗi khói gạch được cáu tạo từ 4 hình vuông nhỏ xép lại với nhau
Hình 1: Minh họa 7 khối hình cửa game Tetris
Trang 73.2 Luật chơi
- Mục tiêu của trò chơi là di chuyển các khối gạch đang rơi từ từ xuống trong kích thước hình chữ nhật 30 hàng x 15 cột (trên màn hình) Chỗ nào có gạch rồi thì không di chuyên được tới vị trí đó Người chơi xếp những khối hình sao cho khối hình lấp đầy 1 hàng ngang đê ghi điểm và hàng ngang ấy sẽ biến mắt
- Một bảng chính gồm 40 dòng và 15 cột Ta sẽ chỉ thê hiện ra màn hình 30 dòng còn 10 dòng kia thì không Vì khi ta tạo 1 khối gạch mới để rơi xuống ta sẽ tạo ở khoảng 4 dòng trên cùng Và người chơi sẽ không thấy cho đến khi nó rơi xuống dân lộ ra
- Một nhóm 4 khối sẽ rơi từ phía trên cùng của màn hình, đi chuyên các khối và xoay
chúng cho đến khi chúng rơi xuống phía dưới cùng của màn hình, sau đó nhóm 4 khối tiếp theo
sẽ rơi xuống
- Nếu để cho những khối hình cao quá màn hinh, tro choi sé kết thúc
- Trò chơi kết thúc khi khối gạch không rơi xuống được nữa
- Tất cả các Tetriminos có khả năng hoàn thành một và hai dòng J, L có thể có ba Chỉ có
Tetrimino chữ I có khả năng để xóa bón dòng cùng một lúc, và điều này được gọi là một"Tetris"
Xóa nhiều nhất chỉ được 4 hang/1 lần
Phím tắt:
+ Phím mũi tên trái: di chuyển sang trái
+ Phím mũi tên phải: di chuyển sang phải
+ Phím mũi tên xuống: tăng tốc độ rơi
+ Phím cách: xoay chiều khói hình
3.3 Phân tích
- Các hàm trong Pygame sẽ được sử dụng trong Tro choi Tetris
Hàm Mô tả
Khởi tạo tắt cả các mô-đun Pygame da được
công và thất bại của quá trình khởi tạo) display.set_modeQ Lấy một tập hợp kiêu Tuple hoặc một danh
sách làm tham số để tạo một màn hình hiển
thị
update() Cập nhật màn hình
Trang 8
event.get() Trả về danh sách tất cá các sự kiện
appendQ Phương thức dùng để thêm một phản tử vào
cuối một list
font.SysFont() Tao font chữ cho Pygame từ các nguồn foi
chữ trên hệ thống
4 Môi trường cài đặt
- Visual Studio Code (64 bit)
- Điều đầu tiên cần làm để lập trình trò chơi trong Python la cài đặt mô-đun Pygame Đề thực hiện cài cho mô-đun này, có thể nhập câu lệnh như sau trong cdm:
pip install pygame
Hình 2: Cai dat m6-dun Pygame
5 Xây dựng game
Trang 95.1 Phan tich các đối tượng trong game
Y¥ Khéi hình (Người chơi điều khiển)
5.2 Tiến hành cài đặt
- Để cài đặt pygame, các bạn truy cập vào Commaand Promt và nhập lệnh:
pip install pygame
- Sau khi đã cài đặt xong, ta tiền hành khai báo những thư viện cản thiết
+ Đầu tiên ta khai báo thư viện pygame dé bat dau viée cai dat game, ta tiép tuc khai bao thém thu vién random dung dé random cac khối hình, ta sử dung thêm một thư vign import time dùng đê xử lý các tác vụ liên quan đền thời gian như tốc độ rơi, tốc độ
đi chuyển qua lại của các khối hình
- Tiếp theo, ta tao cửa sô trò chơi gồm 15 cột và 30 dòng
"1a _mode([wi
Code tạo của số trò chơi
Trang 10
Hình 3: Cửa số trị chơi sau khi thiết lập số hàng và số cột
- Sau khi tạo ra cửa số trị chơi, ta sẽ load các 7 hình mà ta đã tạo ra(mỗi hình vuơng
tương ứng với các màu khác nhau)
pidure = |]
{or n 1n rae|8):
pitture.apJentl(ps.ransforn.s(ale(ng Iàe l0ad(f'T {nÌ jpy `), (istanœ, distanre]))
mã
s(Feen = Jg,i3jlay,set #de([uidth, heipht])
Load các hình vuơng lên cửa số trị chơi
10
Trang 11
3 3 3 cI
Hình 4: 7 khối hình (khối gạch) chữ cái
- 'Tetroromino cho các chữ cái 0, L J, L, $, Z, T, mỗi chứ cái có 16 ô được đánh số từ 0 đến
15, ở những ô không có màu ta sẽ kí hiệu số 0, những ô có màu ta sẽ kí hiệu là 1 đối với khối chữ 0, 2 đối với khói chữ |, 3 đối với khói chữ J, 4 đối với khối chữ L, 5 đối với khói chữ S, 6 đối với khối chữ, 7 đối với khối chữ T Đơn giản, ta chỉ cần sử dụng các list để làm điều này một cách để dàng
Tetroromino cho các chữ cải 0, |, J,L,S, Z2, T
- Tiép tục, ta tạo các lớp và định nghĩa các hàm:
11
Trang 12+ Đầu tiên, ta tạo một lớp tetroromino, sau đó trong class tetroromino tạo một list tctro(dạng liệt kê), khởi tạo các biến row = 0 và column = 5 ( khdi tao bién column = 5 tức là vị trí xuất hiện của khối gạch lần đầu có tọa độ là (0,5))
+ Tiếp theo, ta tao mot ham show để hiển thị các khối hình lên giao diện trò chơi, cập nhật lại tọa độ hiện thị (x,y) của các khôi gạch Ta sử dụng hai dòng lệnh đê cập nhật lại vị trí
hiện thị của các khôi sạch:
x = (self.column + n % 4) * distance # chia 4 bởi vì mỗi chữ cái có 4 ô vuông
y = (self.row + n // 4) * distance # khi xuất hiện mỗi khối gạch sẽ hiện đầy đủ 4 ô vuông
+ Sau khi ta viết hàm cập nhật các khối hình lên giao diện trò chơi, ta sẽ viết thêm hàm cập nhật defupdate, hàm này giúp cập nhật lại vị trí của các khối gạch khi rơi xuống, giả sử điểm xuất phát của khối gạch có tọa độ là (0,5) thì khi rơi xuống khối gạch sẽ có tọa độ là (1,5) (2,5)
Để thực hiện điều này, ta sử dụng thuật toán cộng dồn tọa độ của row và column
+ Đến đây, ta sẽ bắt đầu tạo các sự kiện cho trò chơi như tốc độ rơi, tốc độ rơi nhanh hơn khi level của bạn được nâng lên hoặc khi bạn sử dụng phím mũi tên xuông
12
Trang 13et _timer(tetir set_timer(
repeat ( | ,
+ Chúng ta tiếp tục kiểm tra các sự kiện KEYDOWN, khi người chơi nhắn các phím trái,
phải, lên, xuông Sau khi kiếm tra các sự kiện KEY DOWN, ta cập nhật lại tọa độ của khôi sạch:
_ Ifevent.key ==pg.K_LEFT: # trường hợp người chơi nhắn phím mũi tên lên để di
chuyên khôi gạch sang trái
character.update(0, -1) # cập nhật lại tọa độ sau khi khối gạch được di chuyển sang trái
+ Khi đã cài đặt ôn định các sự kiện di chuyên, chúng ta tiếp tục đến với phần cài đặt
quan trọng nhất, có thê nói la then chốt và là phần đã tạo nên điều thú vị và hấp dẫn cho trò chơi
Tetris đó là phan cai dat dé xoay khối gạch Trước khi cal dat doan code dé có thể xoay khối
gạch, chúng ta cân phải hiệu rõ bản chật và cách thức đề có thê xoay đôi chiêu của khối gạch Xoay các khối gạch ở đây hiểu theo cách đơn gián là người chơi sẽ xoay các khối 360 độ sao cho người chơi có được hình đáng khối gạch phù hợp nhất để ghi điểm hoặc thuận lợi cho việc ghi điểm
13
Trang 14
color n
Hình 5: Minh họa cách thức xoay khối hình Thực té, có rất nhiều cách đề có thê thực hiện việc xoay các khối hình Dưới đây là một trong
nhiều cách đó,
tetro[ (2 - (n % 4))*4 + (n//4) ]= color (voi color la giá trị, n là chỉ số)
+ Để thực thi việc xoay các khói gạch, ta sử dụng hàm rotate Như thường lệ ta sẽ copy lại list
tetro, sau đó thì ta chỉ việc đơn giản đưa công thức ta đã nói ở trên để thực hiện
+ Đẳng thời ta se tạo thêm một hàm check để kiểm tra xem khối gạch đó tại vị trí đó có xoay được hay không, nếu không xoay được thì sẽ trả về hình dạng ban đầu (list tetro.copy) (một số chữ cái ở các tọa độ gần biên ngang lưới trò chơi sẽ không xoay được)
14
Trang 15+ Lúc này các khói gạch đã có hình dáng cụ thẻ, đã có thê xoay và di chuyên sang hai bên trái, phải, xuống, nhưng khi di chuyển các khói gạch sang trái hoặc sang phải thì các khói gạch lại đi chuyên vượt ra khỏi biên lưới trò chơi, tương tự đối với việc di chuyên xuống Vì vậy, ta cần sử dụng thêm một hàm def check() để kiểm tra và giới hạn khu vực biên phái, trái khi khối gạch di
chuyên sang hai bên cũng như khi khối gạch rơi xuống Ta sử dụng ¡f để giới hạn đường biên trái, biên phải và biên dưới
ior
Hình 6: Mô tở các ¿rzờng hợp khối gạch vượt biên ra ngoài
r
+ Cuối cùng cũng là một phần khá quan trọng đó là phần tính điểm trò chơi Người chơi được tính là ghi điểm khi Các khối hình bị đóng băng xếp lại thành một hàng ngang Lúc này hàng ngang đó sẽ biến mắt và các hàng ngang đứng sau nó được cộng dồn lên Người chơi sẽ tăng được điểm tùy thuộc vào số hàng ngang biến mắt trong mỗi lần khôi hình rơi xuống Ta sẽ hành xây dựng hàm để tạo sự kiện người chơi ghi điểm và tăng điểm số trong game xép hình cô điển
15