Tải bản đầy đủ (.docx) (18 trang)

Báo_cáo_Game_Pikachu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (474.43 KB, 18 trang )

BÁO CÁO ĐỀ TÀI GAME PIKACHU
Sử dụng ngôn ngữ Python
Môn
Giáo viên
Lớp

: Lập trình nâng cao
: Ngơ Thế Quyền
: MAT3376 2 + 3 CLCMTKHTT

THÀNH VIÊN CỦA NHÓM 17
MSV

Họ và tên

19000418

Đinh Thị Hà

19000427

Lê Thị Hoa

19000490

Đặng Thị Phương Thúy

Hà Nội 2021


Báo cáo project game Pikachu bằng Python



MỤC LỤC

2|Page


Báo cáo project game Pikachu bằng Python

Lời nói đầu
Python là ngơn ngữ lập trình hướng đối tượng thơng dụng dùng để viết các tiện
ích hệ thống. Nó cũng được sử dụng như ngơn ngữ kết dính đóng vai trị tích hợp
C và C++. Python là một ngơn ngữ lập trình dễ học, dễ đọc. Python tăng cường
sử dụng từ khóa tiếng Anh, hạn chế các ký hiệu và cấu trúc cú pháp so với các
ngôn ngữ khác.
Các nền tảng xã hội và các loại game 4.0 ngày càng phát triển. Tính cởi mở và
dễ dàng tương tác với các giao diện đẹp mắt từ cả máy tính để bàn và thiết bị
cầm tay cho phép người chơi trải nghiệm game với chi phí rất thấp. Điều này có
cả mặt tích cực và tiêu cực. Những trò chơi cổ điển thời xưa đã bị qn lãng thay
vào đó là những trị bạo lực dần trở nên phổ biến. Bên cạnh đó việc lập trình
game bằng ngơn ngữ Python ngày càng phổ biến và được ứng dụng nhiều. Với
mục đích học tập và sáng tạo nên bọn em đã dựa trên gợi ý nhiệt tình, bổ ích của
thầy nên đề tài game Pikachu là lựa chọn giúp bọn em tìm hiểu và nâng cao hơn
về kĩ năng lập trình của mình cũng như phát triển tính sáng tạo thơng qua mơn
học lập trình nâng cao.
Trong quá trình làm bài tập lớn dù đã cố gắng tìm hiểu nhưng cũng khơng tránh
khỏi những sai sót mong thầy góp ý để nhóm em có thể hoàn thành bài tập lớn
tốt hơn.
Để hoàn thành được báo cáo này, nhóm chúng em xin được gửi lời cảm ơn chân
thành đến Thầy giáo hướng dẫn đề tài – ThS. Ngơ Thế Quyền , giảng viên Khoa
Tốn – Cơ – Tin học Trường Đại học Khoa Học Tự Nhiên Hà Nội - đã hết lòng

giúp đỡ, hướng dẫn, góp ý tận tình để nhóm em hồn thành được đề tài này.

3|Page


Báo cáo project game Pikachu bằng Python

1. Tổng quan về đề tài
1.1 Thông tin đề tài
 Đặc tả đề tài :
 Sử dụng ngơn ngữ lập trình Python làm game Pikachu
 Nội dung game: Nhiệm vụ của người chơi là tìm ra những hình cặp

Pokemon giống nhau để nối chúng lại, cứ mỗi lần nối thành cơng thì
sẽ nhận được 100 điểm, thời gian cho mỗi lần thử thách là 3 phút.
STT

Tên mục

Nội dung

1

Tên đề tài

Game Pikachu

2

Mô tả đề tài


Sử dụng ngôn ngữ Python làm game
Pikachu

3

Mô tả game

Game Pikachu xếp hình với luật chơi
người chơi làm nhiệm vụ tìm những cặp
Pokemon giống nhau và nối chúng lại bởi
tối đa 3 đường thẳng mà không bị cản trở
bởi con vật khác.

4

Mục tiêu đề tài

Xây dựng Game Pikachu

5

Dữ liệu đầu vào




Hình ảnh các Pokemon
Ngơn ngữ Python


6

Dữ liệu đầu ra




Game Pikachu
Xây dựng được giao diện chương trình

Pikachu
• Tính điểm cho người chơi

1.2 Phạm vi nghiên cứu, phạm vi ứng dụng
 Phạm vi nghiên cứu: tự nghiên cứu
 Phạm vi ứng dụng: cá nhân

4|Page


Báo cáo project game Pikachu bằng Python

1.3 Các vấn đề cần phải giải quyết
 Hệ thống phải đáp ứng các chức năng sau:
o

Giao diện thân thiện: giao diện thân thiện, dễ dử dụng, hình ảnh bắt mắt

o


Chức năng tính điểm: sẽ tính tổng số điểm cho người chơi.

o

Chức năng âm thanh sinh động: âm thanh sau khi kết thúc trò chơi, nối
đúng hay nối sai, âm thanh chúc mừng người chơi khi đạt điểm cao

o

Vẽ đường bao quanh thẻ được chọn: hiển thị rõ thẻ được chọn giúp
người chơi dễ phân biệt hơn so với những thẻ khác.

o

Vẽ đường ăn cho các thẻ: Ở màn hình hiển thị đường nối của 2 thẻ với
vị trí đường đi tương ứng.

2. Phương pháp thực hiện
2.1 Các cách giải quyết vấn đề của bài toán
a. Hiển thị các ảnh pokemon
 Tạo ra một mảng PIKACHUIMGS = [] để lưu trữ ảnh các pokemon.
 Dùng vòng lặp for chạy từ 1 - > số ảnh pokemon + 1. Trong vòng lặp

này, sẽ tạo một biến để gán từng ảnh tương ứng như sau:
o pikachuImage = pygame.image.load('%s.jpg' % i)
o Dùng pygame.transform.smoothscale() để scale lại tất cả các
o

ảnh pokemon với kích thước width & height là 50 x 50
Sau đó sẽ append tất cả các ảnh vào mảng PIKACHUIMGS


b. Xác định 2 con pokemon giống nhau
 Coi mỗi hình pokemon là 1 số nguyên dương tương ứng và random

các hình để tạo ra một ma trận 2 chiếu có tọa độ x,y với x, y là số
hàng và cột của các hình pokemon được tạo ra. Mỗi con pokemon sẽ
chứa địa chỉ là số nguyên dương của nó, tọa độ x và tọa độ y. Bằng
việc tạo ra ma trận này, chúng ta có thể xử lý những thuật toán của
game gián tiếp qua các con số và vị trí của chúng trong ma trận.
5|Page


Báo cáo project game Pikachu bằng Python
 Để xác định 2 pokemon có giống nhau. Đầu tiên, tùy chọn 1 ví trí tọa

độ x,y chứa 1 con pokemon bất kỳ. Nếu khơng có bất kỳ pokemon
nào đc chọn thì tọa độ sẽ mặc định x = y = -1.
 Hàm selectPikachu(x,y) sẽ kiểm tra x, y có phải là một cặp giống
nhau với pokemon phía trên hay khơng.
o Nếu tọa độ pokemon thứ 1 với x = y = -1
o Pokemon thứ 1 khác id với pokemon 2
o Đường nối giữa 2 con pokemon quá 3 đoạn
o chương trình sẽ trả về False. Ngược lại trả về True.
c. Thuật toán game Pikachu
 Toàn bộ các pokemon được sắp xếp theo mơ hình của một ma trận.

Ở đây game Pikachu chúng em sẽ xét trên ma trận vuông 10*10.
 Để thực hiện giải thuật của game Pikachu bọn em sẽ chia làm các
trường hợp từ đơn giản đến phức tạp để tìm đường đi (đường mà có
thể ăn) 2 con pokemon.

 Tổng quan thì có 3 trường hợp chính và mỗi trường hợp sẽ có 2
nhánh nhỏ là xét theo chiều ngang, chiều đọc.
o Trường hợp cùng nằm trên một hàng hoặc cột
 TH1: Xem xét hai điểm nằm trên cùng 1 hàng ngang (x1 = x2))
 TH2: Xem xét hai điểm nằm trên cùng 1 hàng dọc (y1 = y2).
• Xét trường hợp 2 hình pokemon nằm trên cùng 1 hàng
ngang (x1 = x2), chúng em xét 2 tọa độ cịn lại
là y1 và y2 để tìm ra điểm có hoành độ nhỏ hơn (giả sử trả
về y1 < y2), rồi xét liên tục các ô theo hàng ngang x1 từ vị
trí y1 đến y2, nếu các ơ được xét đều là ơ trống (có giá trị
là 0), thì đây là 2 hình pokemon nằm ở vị trí thỏa mãn.


Tương tự ta xét như vậy đối với hàng dọc.
Hai cặp pokemon theo chiều ngang và chiều dọc giống
nhau được tô đỏ và tơ đen như hình: hai con pokemon
giống nhau và nằm cùng hàng dọc hoặc cùng hàng ngang
khơng có con pokemon nào chen giữa.

6|Page


Báo cáo project game Pikachu bằng Python


o

Phương án code:
 Đối với hai tình huống này cơ bản, chúng em dùng vòng lặp for từ
điểm đầu đến điểm cuối và kiểm tra xem đường thẳng đó có thơng

với nhau được khơng. Nếu đúng, coi như hoàn thành, nếu chưa đúng,
chúng ta tiếp tục sử dụng khai thác theo chiều ngang hoặc chiều dọc.
Xem xét này hai trường hợp, hai hàm này sử dụng hai lần lượt là
checkLineX (y1, y2, x) và checkLineY (x1, x2, y) tương ứng là xét
về hàng và cột. Nếu đi được giữa 2 điểm, hàm return true, ngược lại,
nó trả về false.
 Xét duyệt các đường đi theo chiều ngang và dọc bên trong chữ nhật
 Xét 2 điểm chỉ trong phạm vi được bọc bởi giới hạn từ 2 tọa độ của 2
hình pokemon ứng với 2 đầu của hình chữ nhật. Với trường hợp này,
chúng em cũng chia làm 2 trường hợp nhỏ: xét đường đi theo chiều
ngang và chiều dọc
 Trước tiên chúng ta sẽ xem bên trong chữ nhật được tạo bởi 2 điểm
này, đây là TH kiểm tra đường đi theo hình chữ Z.
 2 trường hợp dùng để có thể bao quát toàn bộ các con đường với các
hướng đi khác nhau. Chúng ta có 4 hướng đi, và muốn biết hướng đi
nào dẫn đến đích, chúng ta cần bao quát được con đường từ cả 4
hướng.
 TH3: Xét duyệt các đường đi theo chiều ngang trong phạm vi
hình chữ nhật
• Lấy ra 2 hoành độ của 2 điểm: y1 và y2. Sau đó so sánh 2
hồnh độ, tìm ra hồnh độ nhỏ hơn, và bắt đầu tịnh tiến từ
ơ có hồnh độ nhỏ hơn sang phía ơ có hồnh độ lớn hơn
với vòng for và giá trị tăng là 1. Với mỗi lần tịnh
tiến y thêm 1 đơn vị ấy, ta liên tục kiểm tra xem ơ nằm tại
vị trí kiểm tra có phải là ơ trống khơng. Nếu đó là ô trống,
7|Page


Báo cáo project game Pikachu bằng Python


mình sẽ kiểm tra thêm 2 đoạn thẳng còn lại để nối 2 điểm
ấy có thỏa mãn khơng. Nếu được sẽ nối hình.
• Như hình minh họa 2 con pokemon giống nhau có đường
đi nối với nhau tối đa là 3 đường và đường nối không gặp
con pikachu khác:

o

Phương án code :
 Xây dựng hàm checkRectX (p1, p2) dùng để kiểm tra bên trong chữ
nhật có dạng ngang được tạo bởi 2 điểm p1 và p2.
 Với p1 , p2 là tọa độ của 2 hình pokemon (vị trí pokemon)
 Đầu tiên chúng ta sẽ tìm điểm nào có cột nhỏ hơn (y) (pMinY) và
điểm nào lớn hơn (pMaxY). Tiếp theo, chúng em cho y chạy từ nhỏ
nhất đến lớn nhất (từ trái sang phải), với mỗi cột (y), chúng ta sẽ sử
dụng checkLineX và checkLineY để xem 3 đường nhỏ được xây
dựng liền mạch hay khơng. Nếu có một cơng cụ cột có thể kết nối 3
dịng này, thì chúng ta sẽ có một đường đi giữa 2 điểm và sẽ trả về
giá trị của y của cột đó. Nếu khơng, nó trả về -1.




TH4: Xét duyệt các đường đi theo chiều dọc
8|Page


Báo cáo project game Pikachu bằng Python



Xây dựng hàm checkRectY(p1,p2) tuơng tự như TH3 đã

làm nhưng xét theo chiều dọc.
• Hàm checkRectY(p1, p2) được xây dựng tương tự như
những gì TH3 thực hiện, nhưng theo chiều dọc. Kiểm tra
bên trong chữ nhật hình dạng ngang được tạo bởi 2 điểm
p1 và p2.
• Đầu tiên chúng ta sẽ tìm ra các điểm có tọa độ hàng (y)
nhỏ hơn (pMinY) và điểm nào lớn hơn (pMaxY). Tiếp
theo, chúng tôi cho y chạy từ nhỏ nhất đến lớn nhất (từ trái
sang phải), với mỗi cột (y), chúng ta sẽ sử dụng
checkLineX và checkLineY để xem 3 đường nhỏ được xây
dựng liền mạch hay khơng. Nếu có một cơng cụ cột có thể
kết nối 3 dịng này, thì chúng ta sẽ có một đường đi giữa 2
điểm và sẽ trả về giá trị của y của cột đó. Nếu khơng, nó
trả về -1.
Xem xét mở rộng theo chiều ngang và chiều dọc
 Cuối cùng, nếu 4 TH không thành công, sẽ xem xét 2 TH mở rộng.


Đó là trường hợp được nối bằng tối đa 3 đoạn thẳng vượt ra ngồi
phạm vi hình chữ nhật hình thành từ tọa độ của 2 hình pokemon.Tức
là chúng ta phải xét đến trường hợp đường đi có hình dạng chữ U
hoặc chữ L. Như hình minh họa 2con pokemon giống nhau ở vị trí
hình chữ L đường nối với nhau không gặp phải con pokemon khác.

9|Page


Báo cáo project game Pikachu bằng Python




TH5: Xét mở rộng theo chiều ngang
• Đối với trường hợp này, chúng ta sẽ xét mở rộng chiều
ngang về phía bên trái hoặc bên phải bằng hàm
checkMoreLineX(p1,p2, type) để giải quyết vấn đề đoạn
thẳng vượt ra ngồi hình chữ nhật hình thành từ đọa độ
của 2 hình pokemon, tạo ra biến type trong tham số truyền
vào của hàm checkMoreLineX()
• Trong đó p1, p2 là 2 điểm cần kiểm tra, tìm đường đi, type
là loại, type sẽ nhận 2 giá trị là 1 (đi về phải) hoặc -1 (đi
về trái).
• So sánh 2 hình pokemon rồi tìm ra hình pokemon có
hồnh độ nhỏ hơn tương ứng là pMinY và pMaxY.
• Vì khi xét trong phạm vi hình chữ nhật hoặc trên đường
thẳng thì 2 điểm đều khơng đến được với nhau, do đó
chúng ta mở rộng nó ra bằng cách xét về bên trái từ cột
pMaxY[1] (cột của điểm chứa cột lớn hơn) và về bên phải
từ cột pMinY. Và cứ tăng hoặc giảm dần chỉ số cột lên khi
2 điểm (pMinY[0], y) và (pMaxY[0], y) không phải
chướng ngại vật. Nếu gặp giá trị y nào mà làm cho đường
thẳng đứng được thơng thì chứng tỏ đã tìm thấy đường đi.
10 | P a g e


Báo cáo project game Pikachu bằng Python

Khi đó hàm trả về giá trị là cột y tìm được, nếu khơng thì
trả về -1. Tuy nhiên trước khi xét từng cột như vậy chúng

ta cần xét đoạn từ pMinY đến pMaxY (doạn màu xanh lá)
có thơng khơng đã.




TH6: Xét mở rộng theo chiều dọc
• Thực hiện hàm checkMoreLineY(p1,p2, type) tương tự
như trên nhưng duyệt theo từng hàng.


Cuối cùng chúng ta sẽ viết hàm checkTwoPoint(p1, p2) để
kiểm tra và tìm đường đi gữa 2 điểm p1, p2 bất kỳ. Hàm
sẽ trả về đối tượng là MyLine gồm 2 điểm p1 và p2. Trong
TH đường thẳng giữa 2 điểm p1, p2 được thông thì trả về
MyLine gồm p1 và p2, trong TH đường đi là gấp khúc thì
trả về MyLine gồm 2 điểm ở đoạn gấp khúc.

d. Vẽ đường nối hai con pokemon giống nhau
 Sau khi xác định được 2 con pokemon giống nhau và tìm đc

đường đi hợp lí thì ta sẽ dùng pygame.draw.rect để vẽ đường đi
nối 2 con với nhau.
2.2 Các thư viện, kĩ thuật, công nghệ được lựa chọn sử dụng
STT

Tên ứng dụng

Nội dung/Note


1

Visual Studio Code

chỉnh sửa và chạy code

2

Word

Báo cáo công việc

3

Github

Báo cáo công việc hàng tuần và trao đổi code với
11 | P a g e


Báo cáo project game Pikachu bằng Python

thành viên trong nhóm
4

Development language

Python

5


Thư viện :

Công dụng :

random
Chứa các hàm tạo số nguyên ngẫu nhiên, tạo ra
Pygame

số float giữa 0,0 và 1,0.
Dùng để lập trình video games

Time

Xử lý các tác vụ liên quan đến thời gian

os

Làm việc với các tập tin và thư mục

cv2

Xử lí ảnh và video trong game

sys

Truy cập các tham số và chức năng cụ thể của hệ
thống.

2.3 Xây dựng dữ liệu







Dữ liệu trong game pikachu:
Có 10 hàng x 10 cột gồm 25 con pokemon khác nhau tạo thành ma trận vng
Có âm nhạc sơi động tạo cảm hứng cho người chơi
Có các hiệu ứng ơ vng khi chọn
Xây dựng hàm tính đểm cho người chơi: mỗi lần đúng được 100đ
o Dữ liệu của một pokemon:
o Mỗi hình pokemon có kích cỡ : 50*50

12 | P a g e


Báo cáo project game Pikachu bằng Python

 Xây dựng source code:

13 | P a g e


Báo cáo project game Pikachu bằng Python

Giao diện trò chơi demo:

 Để có giao diện pikachu như màn hình, chúng em tạo ra một packpage images


gồm các hình pokemon được đặt tên rõ ràng từ 1đến 25 ( có 25 hình pokemon
khác nhau).Và những con pokemon đều được chọn ngẫu nhiên.
14 | P a g e


Báo cáo project game Pikachu bằng Python

Tạo file cfg.py lưu các biến mặc định được sử dụng xuyên suốt trong project:

 File game.py là file chứa tồn bộ thuật tốn và các hàm hiển thị những hình

pokemon:

15 | P a g e


Báo cáo project game Pikachu bằng Python

 File Pikachu.py là file gọi hàm main.

2.4 Một số sơ đồ mô tả hoạt động
 Sơ đồ hệ thống mỗi khi nhận được lệnh ghép 2 pokemon

Sơ đồ tác vụ người chơi với hệ thống

16 | P a g e


Báo cáo project game Pikachu bằng Python


3. Tài liệu tham khảo
 Các bài giảng, tài liệu colab trên lớp học của giáo viên
 Tham khảo thuật toán và code ở nhiều tài liệu nguồn trên google
o />o /> Một số nguồn tham khảo thuật toán và source code:
o />o />
game-pokemon-pikachu/
 Do tài liệu về code pikachu bằng python còn khá ít nên toàn bộ tham khảo
của bọn em đều dựa trên code java và những kiến thức tìm hiểu và học
tập trên mạng.

4. Làm việc nhóm
 Tất cả mọi người trong nhóm đều tự tìm hiểu trước, nghiêm cứu về đề tài được

cho và họp trực tuyến thông qua meet. Cùng nhau nhận nhiệm vụ phù hợp với
từng khả năng của mỗi bạn:
o Đinh Thị Hà: Nghiên cứu tài liệu, thuật toán, code.
o Lê Thị Hoa: Nghiên cứu tài liệu, thuật toán, làm báo cáo, code.
o Đặng Thị Phương Thúy: Nghiên cứu tài liệu, thuật toán, code.
 Một tuần 3 buổi họp online trực tuyến code với nhau ghép code:
17 | P a g e


Báo cáo project game Pikachu bằng Python
 Xây dựng thuật toán: Chia nhỏ các hàm với nhiệm vụ của từng thành viên

trong nhóm
 Các thành viên cùng nhau code và phân chia rõ ràng công việc nhiệm của từng
người theo từng buổi họp.
 Đưa ra những hạn dealine phù hợp với từng thời gian thầy đã đề.
 Luôn đảm bảo các bạn đều phải làm công việc như nhau và đầy đủ.


18 | P a g e



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×