You are on page 1of 24

Báo cáo đồ án game cuối kỳ

Môn học: Kỹ năng nghề nghiệp

Lớp: SS004.M210.CLC

1
HỢP ĐỒNG NHÓM

1 Thời gian thành lập nhóm


Thứ 3, ngày 03, tháng 05, năm 2022

2 Tên nhóm
DEV PYTHON

3 Tên thành viên


STT Họ và tên MSSV
1 Trần minh Quang 20521812
2 Hoàng Văn Phúc 20521760
3 Lê Hoàng Phúc 20521761
4 Nguyễn Hoàng Phúc 20521767
5 Nguyễn Thanh Sang 20521833

4 Mục tiêu của nhóm


• Hoàn thành đồ án cuối kỳ môn Kỹ năng nghề nghiệp.

• Nâng cao kỹ năng làm việc nhóm của từng thành viên trong nhóm.

• Phát triển khả năng tìm tòi, sử dụng các công nghệ và phần mềm mà môn học yêu
cầu.

2
• Cùng nhau hỗ trợ, giúp đỡ nhau xây dựng và phát triển nhóm để hoàn thành đồ án
đạt kết quả tốt nhất.

5 Hiệp định
• Ra quyết định theo nguyên tắc đồng thuận dựa trên 5/5 phiếu đồng ý từ các thành
viên.

• Tất cả các thành viên phải tuân thủ:

– Đi học, đi họp đầy đủ và đúng thời gian đề ra.

– Nghiêm túc trong các giờ làm việc và họp nhóm.

– Có trách nhiệm hoàn thành mọi công việc được giao.

– Tích cực, chủ động xây dựng, đóng góp ý kiến.

– Tôn trọng tất cả các thành viên trong nhóm.

– Thông cảm, lắng nghe, hỗ trợ khi có thành viên gặp khó khăn.

– Giữ tinh thần làm việc nhóm đoàn kết, không gây chia rẽ, mất đoàn kết giữa
các thành viên.

3
6 Vai trò của các thành viên
Vai trò / Thành Viên Trần Hoàng Lê Hoàng Nguyễn Nguyễn
Minh Văn Phúc Phúc Hoàng Thanh
Quang Phúc Sang
Tạo màu, hình dạng con X
rắn và thức ăn và Tạo
màu nền
Demo di chuyển cơ bản X
cho con rắn

Tạo kết thúc game lần X


thứ 1

Nhận input các phím di X


chuyển từ bàn phím

Tăng độ dài con rắn và X


Random thức ăn

Rắn chết khi chạm vào X


chính nó

Hiển thị điểm số X

Hiển thị kết quả khi kết X


thúc

Merge code X

Soạn báo cáo LaTeX X

4
7 Chỉ tiêu đánh giá
Đặc điểm Xuất sắc Tốt Bình thường Kém
Thái độ làm việc Sẵn sàng nhận Hoàn thành Hoàn thành Không hoàn
nhiệm và hoàn nhiệm vụ. nhiệm vụ dưới thành nhiệm
thành tốt sự nhắc nhở. vụ.
nhiệm vụ.
Tiến độ Hoàn thành Hoàn Thành Hoàn thành Không hoàn
nhiệm vụ nhiệm vụ đúng đúng thời hạn thành nhiệm
trước thời hạn. thời hạn với sự nhắc vụ được giao
nhở
Đi họp Có mặt đúng Đi trễ không Đi trễ 5 đến 10 Trễ quá 10
giờ họp quá 5p hoặc có phút phút hoặc
xin phép không tham
gia.
Giải quyết vấn đề Tích cực tìm Nhờ sự hỗ trợ Cố gắng giải Không tham
phát sinh kiếm mọi biện từ người khác quyết nhưng gia giải quyết
pháp để giải để giải quyết không tìm vấn đề.
quyết vấn đề được giải pháp
Đóng góp ý kiến Chủ động đóng Có đóng góp ý Đóng góp ý Không bao giờ
góp một cách kiến kiến chỉ khi đóng góp ý
tích cực cho được hỏi tới kiến
nhóm
Giữ liên lạc Luôn giữ liên Phải liên lạc Hiếm khi liên Không liên lạc
lạc từ 2-3 lần mới lạc được được
được

5
8 Cam kết hợp đồng
• Sau khi thông qua tất cả các nội dung được nêu ở hợp đồng nhóm, tất cả các thành
viên trong nhóm cam kết thực hiện đúng và nghiêm túc các yêu cầu đặt ra.

• Chữ ký các thành viên:


Hoàng Văn Phúc Trần Minh Quang Nguyễn Thanh Sang

Lê Hoàng Phúc Nguyễn Hoàng Phúc

6
NỘI DUNG

1 Đường dẫn Trello và Github


• Link Trello: https://trello.com/invite/b/tSZnQwkL/6c7734a8d1e2e10f193a235f4065435b
gameconran.

• Link Github: https://github.com/quang-20521812/Game_Con_Ran.git.

2 Giới thiệu và hướng dẫn chơi game


• Giới thiệu:

Trò chơi rắn săn mồi là một trò chơi cổ điển, nó xuất hiện vào năm
1997 trên chiếc điện thoại Nokia 6610 với giao diện cơ bản là các ô vuông
sắp xếp liên tiếp nhau trên màn hình xanh đơn giản cũng chính là tựa
game nổi đình đám một thời trên khắp các diễn đàn game trên thế giới
với bốn trăm triệu bản được xuất xưởng. Trò chơi với luật chơi đơn giản
giúp người chơi dễ dàng nắm bắt và thao tác.

Dựa trên nền ý tưởng trò chơi rắn săn mồi đã có, nhóm chúng em
muốn xây dựng và đem đến một phiên bản tương tự trò chơi rắn săn mồi
trên màn hình máy tính với giao diện nhiều màu sắc và cập nhật thêm
một số tính năng cho trò chơi.

• Hướng dẫn chơi Game:

7
– Sau khi khởi động trò chơi, màn hình chính của game như sau:

Hình 2.1.Giao diện màn hình chính của game.

– Rắn ban đầu sẽ được khởi tạo với một độ dài cố định và sẽ được tăng dần theo
thời gian và kỹ năng của người chơi.

– Số điểm hiện tại của người chơi được hiển thị trên góc trái màn hình.

– Thao tác của người chơi đơn giản chỉ là thao tác trên các phím của bàn phím
máy tính để điều hướng di chuyển của con rắn với các phím UP để di chuyển
lên phía trên, DOWN để di chuyển xuống và LEFT, RIGHT tương ứng di
chuyển sang trái và phải.

8
Hình 2.2.Điều hướng di chuyển của rắn.

– Trên màn hình sẽ luôn xuất hiện một thức ăn cho rắn, thức ăn sẽ được xuất
hiện với vị trí ngẫu nhiên trên màn hình và cho đến khi bị ăn mất sẽ được
phân bố với một vị trí mới trên màn hình.

9
Hình 2.3.Thức ăn của rắn trên màn hình.

– Mục tiêu của người chơi chính là điều khiển chú rắn đi đến các vị trí khác nhau
trên màn hình và ăn thức ăn để tăng được chiều dài và ghi điểm số cao.

– Người chơi cần tránh cho rắn va chạm vào khung của màn hình hoặc va chạm
vào chính thân của rắn. Nếu va chạm, trò chơi sẽ kết thúc.

10
Hình 2.4. Rắn khi va chạm vào màn hình.

Hình 2.5.Rắn khi va chạm vào thân rắn.

11
– Khi trò chơi kết thúc, màn hình chúc mừng và thông báo điểm số xuất hiện và
kết thúc trò chơi.

Hình 2.6.Màn hình kết thúc.

3 Tài liệu kỹ thuật trò chơi


• Các chức năng chính của trò chơi:

– Điều khiển con rắn thu thập thức ăn xuất hiện ngẫu nhiên trên màn hình.

– Mỗi thức ăn thu thập được sẽ nhận được 10 điểm và làm rắn dài ra.

– Hiển thị điểm số lên màn hình.

– Xuất hiện thông báo khi kết thúc game (Các trường hợp kết thúc game: Rắn
chạm vào chính nó hoặc chạm vào viền màn hình).

• Cấu trúc chính của trò chơi:

12
Hình 3.1.Cấu trúc chính của game

– Khởi tạo giao diện game:

Hình 3.2.Khởi tạo giao diện

∗ Khởi tạo cửa sổ: Thiết lập tiêu đề cũng như chế độ hiển thị của cửa sổ.

∗ Khởi tạo rắn: Màu sắc, hình dáng, hướng di chuyển ban đầu, tốc độ di
chuyển.

∗ Vị trí mặc định của rắn là x = 70, y = 270

13
snake_position = [70 , 270]

∗ Khởi tạo điểm số: Điểm số ban đầu là 0.

– Điều khiển rắn:

Hình 3.3.Xử lý điều khiển con rắn

∗ Thiết lập các phím điều khiển: Thiết lập các phím mũi tên làm phím di
chuyển rắn.

f o r e v e n t i n pygame . e v e n t . g e t ( ) :
i f e v e n t . type == pygame .KEYDOWN:
i f e v e n t . key == pygame .K_UP:
change_to = ’UP’
i f e v e n t . key == pygame .K_DOWN:
change_to = ’DOWN’
i f e v e n t . key == pygame .K_LEFT:
change_to = ’LEFT’
i f e v e n t . key == pygame .K_RIGHT:
change_to = ’RIGHT’

∗ Xử lý vị trí rắn khi nhấn các phím điều khiển: Khi nhấn phím di chuyển,
tọa độ của rắn (snake_position) sẽ thay đổi tương ứng với phím.

∗ Chiều dài của rắn là một mảng các ô hình vuông có cạnh = 10 trên một
trục tọa độ Oxy.

14
∗ Vì vậy để thay đổi vị trí rắn, chúng ta chỉ cần thay đổi giá trị tọa độ của
các ô vuông trong mảng (cộng thêm hoặc bớt đi 10) sao cho rắn di chuyển
đúng theo hướng đã chỉ định.
# Hướng di chuyển ứng với vị trí mới của rắn

i f d i r e c t i o n == ’UP’ :
s n a k e _ p o s i t i o n [ 1 ] −= 10
i f d i r e c t i o n == ’DOWN’ :
s n a k e _ p o s i t i o n [ 1 ] += 10
i f d i r e c t i o n == ’LEFT ’ :
s n a k e _ p o s i t i o n [ 0 ] −= 10
i f d i r e c t i o n == ’RIGHT ’ :
s n a k e _ p o s i t i o n [ 0 ] += 10

– Thu thập thức ăn:

Hình 3.4.Xử lý thu thập thức ăn

∗ Random vị trí thức ăn: Vị trí của thức ăn được xuất hiện ngẫu nhiên trên
màn hình bằng hàm randrange.

# Vị trí thức ăn

f o o d _ p o s i t i o n = [ random . randrange ( 1 2 , ( window_x / / 1 0 ) ) ∗ 1 0 ,


random . randrange ( 3 , ( window_y / / 1 0 ) ) ∗ 1 0 ]

15
∗ Rắn sẽ dài ra nếu chạm vào thức ăn: Nếu tọa độ của ô vuông đầu tiên của
rắn bằng với tọa độ của thức ăn, 1 ô hình vuông sẽ được thêm vào mảng
snake_body, đồng thời biến produce_food sẽ được set thành False (False
có nghĩa là không có thức ăn trên màn hình).
# Rắn sẽ lớn thêm 1 khi ăn thức ăn

snake_body . i n s e r t ( 0 , l i s t ( s n a k e _ p o s i t i o n ) )
i f s n a k e _ p o s i t i o n [ 0 ] == f o o d _ p o s i t i o n [ 0 ] and s n a k e _ p o s i t i o n [ 1 ]
s c o r e += 10
produce_food = F a l s e

else :
snake_body . pop ( )

∗ Nếu product_food = False (rắn đã ăn thức ăn), thức ăn sẽ được random


lại trên màn hình.

i f not produce_food :
w h i l e True :
f o o d _ p o s i t i o n = [ random . randrange ( 1 2 , ( window_x / / 1 0 ) )
random . randrange ( 3 , ( window_y / / 1 0 ) ) ∗ 1 0 ]
break

– Tích điểm:

Hình 3.5.Xử lý tích lũy điểm số

16
∗ Nếu rắn thu thập thức ăn thành công, biến score tăng 10 đơn vị.

∗ Sau đó biến score được ép kiểu string và được viết thành 1 dòng thông
báo, sau đó hiện ra màn hình.

score_surface = score_font . render (


’ S c o r e : ’ + s t r ( s c o r e ) , True , c o l o r )

– Kết thúc game:

Hình 3.6.Xử lý game kết thúc

∗ Nếu rắn chạm vào cửa sổ: nếu vị trí của rắn (snake_position[0], snake_position[1])
nằm ngoài phạm vi màn hình thì hàm game_over() được gọi thực hiện.

∗ Nếu rắn chạm vào chính nó: nếu rắn chạm vào trong các ô vuông (block)
trong mảng snake_body (mảng các ô vuông của rắn) hàm game_over()
cũng được gọi thực hiện.

4 Quá trình làm việc nhóm


Bước đầu tiên sau khi nhận được đề tài là nhóm chúng em đã họp mặt
nhau ở trên Microsoft Teams để có thể bàn về đề tài và hướng đi trong quá
trình làm đồ án.

17
Sau buổi họp đó, chúng em đã quyết định tìm hiểu về một ngôn ngữ mà
chúng em chưa từng làm qua đó là Python, cùng với thư viện Pygame, lý do
tụi em chọn Python để thực hiện đồ án lần này chính là vừa để thử thách bản
thân tụi em khi tiếp xúc với một kiến thức mới và cũng là vì python hỗ trợ
các nhà phát triển rất nhiều thông qua các thư viện có sẵn như Pygame nên
việc tạo ra trò chơi con rắn sẽ đơn giản hơn rất nhiều so với việc sử dụng các
ngôn ngữ khác.

Sau đó, mỗi người chúng em tự tìm hiểu về kiến thức mới mà bọn em đã
chọn. Sau khoảng gần 1 tuần, chúng em lại có một buổi họp thứ hai. Ở buổi
họp này chúng em đã chia sẻ kiến thức chúng em tìm hiểu được. Và ngay
trong buổi họp đó chúng em đã tạo ra một bảng ở trên Trello để có thể quản
lý công việc của từng thành viên trong nhóm một cách dễ dàng hơn. Tụi em
đã có bảng phân chia công việc như sau:

Hình 4.1.Phân công nhiệm vụ với trello

Sau khi phân chia công việc hoàn tất, thì tụi em lại tiếp tục tìm hiểu về
thư viện Pygame để có thể thực hiện nhiệm vụ được giao của mình.

18
Sau buổi họp thứ hai tụi em đã tạo ra một group Zalo của nhóm để có thể
tiện trao đổi về các vấn đề liên quan đến đồ án. Ngoài ra chúng em còn tạo
thêm một Repository trên Git Hub để có thể quản lý source code một cách
có tổ chức nhất.

Ở trên Trello đã được bạn Quang tạo ra các thẻ nhiệm vụ và gán cho thành
viên làm nhiệm vụ đấy. Các thành viên sẽ lên Trello để xem trình tự làm việc
của mình cũng như các tài liệu liên quan đến phần việc của mình.

Theo trình tự được phân công trên Trello thì từng bạn sẽ làm phần việc
của mình. Tới phần việc của bạn nào thì bạn đấy sẽ kéo thẻ công việc của
mình từ bảng “To Do” sang bảng “Doing” ở trên Trello, và khi làm xong thì sẽ
kéo thẻ nhiệm vụ của mình sang bảng cuối đó là bảng “Done”, rồi thông báo
vào group Zalo của tụi em để bạn có phân công nhiệm vụ ngay sau đó bạn đó
có thể biết đã tới phần việc của mình và bắt đầu pull code về từ Git Hub để
làm thực hiện nhiệm vụ.

Mỗi bạn trong nhóm khi làm xong phần của mình sẽ tạo một branch
và push code của mình lên đấy, sau đó thông báo vào group Zalo để bạn
Quang sẽ là người merge code từ branch mới được tạo vào branch master trên
Repository.

Sau khi hoàn thành hết tất cả công việc, chúng em đã có một buổi họp
thứ ba. Trong buổi họp này chúng em đã bàn về việc đồ án có cần điều gì cần
phải chỉnh sửa không. Tiếp theo đó là bàn về việc viết báo cáo như là viết
báo cáo như thế nào, ai là người viết ?... Sau đó chúng em đã tổ chức đánh
giá từng thành viên theo cá tiêu chí như: Tinh thần làm việc nhóm, có giúp
đỡ người khác khi cần không, . . .

Sau buổi họp đó chúng em đã quyết định được về việc đồ án không cần
phải chỉnh sửa gì cả, đã có được bản đánh giá các thành viên theo từng tiêu
chí và cuối cũng là thông nhất được việc viết báo cáo như nào và việc còn lại
duy nhất của đồ án chính là viết báo cáo và hoàn thành hợp đồng nhóm.

19
5 Các kỹ năng áp dụng cho đồ án
• Kỹ năng tổ chức làm việc nhóm: thông qua đồ án này, các thành viên trong nhóm
đã sử dụng một số kỹ năng làm việc nhóm như:

– Kỹ năng giao tiếp, trình bày với các thành viên trong nhóm: giao tiếp là chìa
khóa quan trọng để làm việc nhóm hiệu quả, nhờ việc vận dụng kỹ năng giao
tiếp các thành viên đã có thể nhanh chóng hợp tác, làm việc trôi chảy.

– Kỹ năng giải quyết xung đột: trong quá trình thực hiện dự án khó tránh khỏi
những xung đột, nhờ phát hiện xung đột và giải quyết sớm nhóm đã tránh
được các xung đột không đáng có.

– Kỹ năng quản lý thời gian, sắp xếp và phân chia công việc hợp lý: mọi người
đã quản lý thời gian hoàn thành công việc được giao một cách hợp lý để không
làm ảnh hưởng đến công việc chung của cả nhóm.

– Kỹ năng phản biện: vì mỗi người đều sẽ có những quan điểm, ý tưởng hay sáng
kiến riêng và mong muốn được công nhận, kỹ năng phản biện đã giúp nhóm
chọn lọc những phương án tối ưu nhất.

– Kỹ năng tổ chức, lập kế hoạch, xây dựng quy trình làm đồ án: Khi mọi ý kiến
đã được thống nhất thì cả nhóm phải lên một kế hoạch triển khai và phân chia
nhiệm vụ. Kế hoạch đưa ra đã được các thành viên cố gắng hoàn thiện và việc
phân chia, sắp xếp công việc cho mỗi người cũng khá hợp lý, logic.

• Học hỏi và tìm hiểu các nguồn kiến thức mới: có thêm kiến thức về ngôn ngữ python,
công cụ pygame, đồng thời hiểu thêm về cách cài đặt các ngôn ngữ trên visual studio
code và pycharm.

• Sử dụng các công cụ và phần mềm quản lý dự án (github, trello): github và trello
là những công cụ rất hiệu quả để quản lí và nâng cấp dự án, chia sẻ mã nguồn, việc
có hiểu biết về các công cụ này chắc chắn sẽ rất quan trọng trong quá trình học tập
và làm việc sau này.

• Kỹ năng sử dụng hệ thống phần mềm soạn thảo LaTeX: nhóm đã sử dụng trình
soạn thảo LaTex - một trình soạn thảo văn bản cho các áo cáo khoa học.

20
• Đọc và tìm kiếm tài liệu từ các nguồn trên internet: với việc tìm kiếm các thông tin
hữu ích trên mạng để hoàn thiện đồ án, các thành viên trong nhóm đã sử dụng khả
năng tìm kiếm, sàn lọc các thông tin trên mạng

• Kỹ năng đọc hiểu tài liệu tiếng anh: với sự phát triển liên tục của thế giới hiện đại,
việc chỉ tìm kiếm các nguồn thông tin tiếng việt là không đủ, thông qua việc tìm
hiểu các giải thuật và mã nguồn cho dự án, các thành viên đã dùng thêm tài liệu
tiếng anh.

• Kỹ năng thiết kế và trình bày cơ sở dữ liệu: việc thiết kế cơ sở dữ liệu tốt luôn là
vấn đề quan trọng và khó khăn trong thiết kế phần mềm, kỹ năng thiết kế và trình
bày cơ sở dữ liệu chắc chắn là kỹ năng quan trọng và cần thiết cho sự nghiệp sau
này.

• Kỹ năng phân tích và lọc các test case cần thiết: kỹ thuật viết test case cũng là một
kỹ thuật quan trọng và cần thiết trong giai đoạn kiểm thử phần mềm.

• Kỹ năng sửa lỗi, debug: sửa lỗi là kỹ năng không thể thiếu của lập trình viên, trong
quá trình thực hiện đồ án này cũng luôn có những lỗi phát sinh, việc sửa lỗi là công
việc cần thực hiện liên tục.

• Kỹ năng thiết kế giao diện người dùng, sáng tạo giao diện với figma,.. : đối với người
dùng giao diện đẹp và dễ sử dụng là yêu cầu đầu tiên, vì vậy nhóm chúng em đã cố
gắng tìm hiểu để thiết kế giao diện dễ dàng sử dụng đặc biệt là sử dụng figma để
thiết kế giao diện.

• Suy luận và giải quyết vấn đề: trong quá trình thực hiện dự án luôn luôn có những
vấn đề phát sinh, kỹ năng suy luận và giải quyết vấn đề đã giúp nhóm chúng em
giải quyết nhanh chóng những vấn đề xuất hiện như các lỗi của IDE, các bug trong
quá trình thực hiện, ...

• Khả năng linh hoạt, thích nghi nhanh với thay đổi: nhóm đã nhanh chóng làm quen
và sử dụng ngôn ngữ python.

21
• Kỹ năng làm việc dưới áp lực: kỹ năng làm việc dưới áp lực deadline các môn khác
là một kỹ năng quan trọng.

22
ĐÁNH GIÁ LÀM VIỆC NHÓM

Đánh giá Trần Minh Hoàng Văn Lê Hoàng Nguyễn Nguyễn


Quang Phúc Phúc Hoàng Phúc Thanh Sang
Thái độ làm Xuất sắc Xuất sắc Xuất sắc Xuất sắc Xuất sắc
việc
Tiến độ Xuất sắc Xuất sắc Xuất sắc Xuất sắc Xuất sắc

Đi họp Xuất sắc Xuất sắc Xuất sắc Xuất sắc Xuất sắc

Giải quyết Xuất sắc Xuất sắc Xuất sắc Xuất sắc Xuất sắc
vấn đề phát
sinh
Đóng góp ý Tốt Tốt Tốt Tốt Xuất sắc
kiến
Giữ liên lạc Tốt Tốt Tốt Tốt Bình thường

• Cam kết: Đánh giá trung thực và tôn trọng ý kiến của các thành viên.

• Chữ ký các thành viên:

23
Hoàng Văn Phúc Trần Minh Quang Nguyễn Thanh Sang

Lê Hoàng Phúc Nguyễn Hoàng Phúc

24

You might also like