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

(TIỂU LUẬN) báo cáo bài tập lớn PYTHON đề tài GAME FLAPPY CAT

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 (440.29 KB, 18 trang )

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG

KHOA CƠNG NGHÊ THÔNG TIN

Báo Cáo Bài Tập Lớn PYTHON

Đề tài:

GAME FLAPPY_CAT

Giảng viên: Cô Võ Hà Thư

Sinh viên tham gia:
STT

Họ tên
1

2

MSSV

Phan Duy Thái

Phạm Hồng Đại

B19DCCN162

HÀ NỘI, 11/2021
1



MỤC LỤC

MỤC LỤC.....................................................................................1
I.

GIỚI THIỆU................................................................................................................ 2

II. Ý TƯỞNG THUẬT TOÁN............................................................................ 2
III. Ý TƯỞNG HOÀN THIỆN GIAI ĐOẠN 3....................................... 3
IV. CÁC HÀM XỬ LÝ CHÍNH............................................................................. 5
V.

BẢNG TĨM TẮT CHỨC NĂNG............................................................ 6

VI. MỘT SỐ HÌNH ẢNH TRONG GAME............................................... 7
VII. TÀI LIỆU THAM KHẢO............................................................................ 19

1


I. GIỚI THIỆU
Game FLAPPY_CAT là một game giải trí trị chơi được trình bày theo phong
cách side-scroller(phong cách game với các đối tượng được nhìn thấy
ở mặt bên (side-view) và di chuyển từ cạnh trái sang cạnh phải của màn
hình), trong đó người chơi điều khiển một chú mèo, cố gắng vượt qua
các hàng ống mà không va chạm vào chúng.
Luật chơi:

- Luật chơi rất đơn giản, người chơi chỉ cần click chuột vào màn hình, mỗi

lần click như vậy sẽ giúp cho chú mèo của chúng ta bay lên. Người chơi sẽ
cố gắng điều khiển làm sao cho mèo khơng chạm vào các ống.
Trị chơi kết thúc trong 2 trường hợp sau:
+Chú mèo chạm vào các ống
+Bị rơi khỏi khu vực bay
Yêu cầu
Giai đoạn 1: Tạo danh sách các vị trí đặt quân hợp lệ của một người chơi
Sinh viên được cung cấp 2 file “Assignment.c” chứa prototype các hàm cần
hiện thực, “Main.c” dùng để test chương trình.
Trong đó hàm generate_list_valid_moves nhận input là trạng thái hiện tại
của bàn cờ, và người chơi cần đặt quân là người nào, output là danh sách
các vị trí hợp lệ.
Quy định:
1-người chơi quân đen, 2-người chơi quân trắng.
output theo thứ tự các dòng từ nhỏ tới lớn và ứng với mỗi dòng, các cột
cũng từ nhỏ tới lớn
Giai đoạn 2: Cập nhật trạng thái bàn cờ sau một bước đi
Giai đoạn 3: Hồn thiện game 2 người chơi

II.

Ý TƯỞNG THUẬT TỐN

- Giai đoạn 1 :
+

Tạo nhân vật mèo ở

+ Quét dọc và ngang bàn cờ, ở mỗi vị trí có qn cờ (giá trị X) đối
với người chơi là 1(biến đầu vào), hoặc giá trị O đối với người chơi 2

(biến đầu vào) thì bắt đầu làm các bước sau :

1


Xét theo hàng dọc, từ giá trị đang xét cộng thêm 1 đơn vị , nếu
giá trị ô bàn cờ kế tiếp là quân ta thì bỏ qua, nếu là quân địch thì
xét tiếp cho tới khi hết bàn cờ. Nếu cuối bàn cờ hoặc cuối dãy
qn địch khơng có quân ta thì đưa tọa độ điểm cuối cùng vào ma
trận gợi ý. Làm tương tự xét từ giá trị đang xét trừ đi 1 đơn vị.
Xét theo hàng ngang, từ giá trị đang xét cộng thêm 1 đơn vị , nếu
giá trị ô bàn cờ kế tiếp là quân ta thì bỏ qua, nếu là quân địch thì
xét tiếp cho tới khi hết bàn cờ. Nếu cuối bàn cờ hoặc cuối dãy qn
địch khơng có qn ta thì đưa tọa độ điểm cuối cùng vào ma trận
gợi ý. Làm tương tự xét từ giá trị đang xét trừ đi 1 đơn vị.
Xét theo đường chéo, từ giá trị đang xét cộng thêm 1 đơn vị , nếu
giá trị ô bàn cờ kế tiếp là quân ta thì bỏ qua, nếu là quân địch thì
xét tiếp cho tới khi hết bàn cờ. Nếu cuối bàn cờ hoặc cuối dãy quân
địch khơng có qn ta thì đưa tọa độ điểm cuối cùng vào ma trận
gợi ý. Làm tương tự xét từ giá trị đang xét trừ đi 1 đơn vị.

- Giai đoạn 2 :

- Giai đoạn 3 : Tạo các vòng lặp để hoàn thiện menu game và các bước
ở giai đoạn 1, giai đoạn 2 liên tục cho đến khi kết thúc game.

III. Ý TƯỞNG HOÀN THIỆN GIAI ĐOẠN 3 :
- Thiết kế giao diện người dùng và thuật toán của game trên nền tảng
của Pygame với các tùy chỉnh và điều khiển trực quan.
- Sau khi khởi động game, menu chính của game xuất hiện với các

tính năng
- + Game mới : Tạo game mới, bàn cờ 8x8

2


Các vị trí quân cờ ban đầu được tạo ra trên bàn cờ, các vị trí gợi ý
được hiển thị. Người chơi điều khiển con trỏ và đánh vào vị trí
mong muốn(dịng, cột). Nếu khơng đánh đúng vị trí gợi ý, hoặc vị
trí khơng hợp lệ thì màn hình báo lỗi “Bạn khơng được phép đi
ngồi gợi ý” và u cầu nhập lại.
Khi bàn cờ đã đầy hoặc một trong 2 bên đạt điều kiện thắng thì
xuất thơng báo người chiến thắng. Trường hợp không đi trong thời
gian quy định sẽ bị xử thua.
Trong q trình chơi có thể bấm ESC để quay lại menu.
+Lưu game : Chương trình lưu bàn cờ dưới dạng một tập tin có phần
mở rộng *CR, lưu tại thư mục cài đặt game với phần tên là thời gian
hiện tại của hệ thống.
+Tải game : Chương trình hiển thị danh sách các ván cờ đã lưu. Sau khi
người chơi chọn ván cờ cần tải thì chương trình sẽ tái hiện ván cờ như thời
điểm đã lưu.
+Giới thiệu : Hiển thị thông tin game và mssv nhóm.
+Thốt : Nếu chọn chức năng này khi đang chơi thì chương trình sẽ hiển
thị thơng báo “bạn có muốn lưu ván cờ trước khi thốt khơng?” Nếu chọn
có thì chương trình sẽ lưu.
- Điều khiển các chức năng trên menu bằng các phím mũi tên, phím
enter để chọn chức năng tương ứng.
- Điều khiển trực quan :
+


Người chơi 1 dùng các phím mũi tên để di chuyển, enter để đánh.

+ Người chơi 2 dùng các phím a,w,s,d để di chuyển ( tương tự các game
fps ) , phím space để đánh.
+ Các quân cờ của 2 người chơi có màu sắc khác nhau, chuyển từ các số
1-2 thành X,O, các ô gợi ý chuyển thành dấu “-“ ở giữa ô bàn cờ.
- Gián đoạn trong lúc chơi : trong lúc đang chơi, người chơi có thể
thực hiện các phím tắt để gọi các chức năng trong menu :
3


+ F2 : hiển thị giúp đỡ
+F3 : lưu game
+F4 : tải game
+F5 : hiển thị thông tin game
+ESC : quay lại menu chính
- ViẾt chương trình đánh với máy.

IV. CÁC HÀM XỬ LÝ CHÍNH
- TrongfilecoRVS.cpp:chứacáchàmđểvẽơbàncờvàcácơthơngtin
tronglúcchơi.
-

HàmveMenu:thựchiệnhiểnthịvàchọnMENUGAME,khichạychươ

ng trìnhthìhàmnàysẽđượcgọiđầutiêntrongmain();Trongkhichơihay
đangtrongcácthaotáckhác,nếutanhấnphímESCthì hàmnàysẽ được gọi>trởvềMENUGAME.
-

HàmveGioiThieu:inrathơngtin nhóm, mssv.


- HàmgiupDo:inrathơngtinhướngdẫnphímbấmcũngnhưluậtchơicủa
GAME.
-

Càiđặt:

-

HàmveCaiDatđểinragiaodiệnkhingườichơichọnphầntùy

chọntrongMENU GAME. TronghàmveCaiDatlạigọi hàmcaiDatđểthực
hiệnthayđổicácthơngsố(cácbiến).
-

Hàm luuGame:thựchiệnchứcnăngLƯUGAMEđangchơi.

- Tải game và lưu game :khingườichơichọnchứcnăngtảiGAMEthìsẽ
gọihàmmenuTaiGameđểhiệnthịradanhsáchcácGAMEĐÃLƯU,khi chọn một
GAMEĐÃLƯUthìgọi hàmtaiGameđểthựchiệnchứcnăngTẢI GAME.
-

Hàmcatch_keys1&hàmcatch_keys2:bắtsựkiện phímdichuyểncontrỏ

khichơi. Trongkhichơithìđọcvàomộtphím, nếukhơngphảilàphímdi
chuyểnthìgọi hàmbamPhimKhiChoiđểthựchiệncácphímchứcnăngF1, F2,…
-

Hàmkiemtrasoquan:kiểmtra xembàn cờ đầy qn chưa.


V.

BẢNG TĨM TẮT CHỨC NĂNG


4


Stt

Chức năng

1

MENU GAME

2

GIÚP ĐỠ

3

TÙY CHỌN

4

GAME MỚI

5



5

LƯU GAME

6

TẢI GAME

7

THƠNG TIN

8

THỐT

*Đề tài vẫn chưa viết được chương trình chơi game
với máy.
VI. MỘT SỐ HÌNH ẢNH TRONG GAME

6


7


8



9


VII. TÀI LIỆU THAM KHẢO
-

Website :
10


http:/ /dtv t.org/ f oru m_posts .a sp?T I D=13162 &tit le= mt -s -hm- m- rng- trn-c -

c(ThamkhảocáchàmmởrộngtrongC/C++:hàmthayđổikíchthướccửasổ
console,hàmSleep(),hàmtạomàuchotext.)
-

Wikipedia.

-

Tài liệu :

+Slide bài giảng kỹ thuật lập trình.
+Tài liệu thực hành kỹ thuật lập trình.
Game mẫu : Tap Reversi Free

VIII. PHỤ LỤC

1. Luật chơi
- Mỗi mặt của quân cờ đại diện cho một bên chơi. Ta có thể gọi cờ hai bên là

đen và trắng, nhưng cũng có thể gọi là sấp và ngửa, bởi vì mỗi qn cờ có 2
mặt riêng biệt.
-Trước kia, cờ Othello khơng quy định vị trí đặt quân cờ đầu tiên. Sau đó, nó
đã chấp nhận luật chơi mới với điều khoản là phải có 4 điểm đặt đầu tiên vào
vị trí 4 hình vng ở trung tâm bàn cờ, hai quân sẫm và hai quân nhạt. Quân
màu sẫm được đi đầu tiên.

Quân màu sẫm cần phải được đặt ở vị trí tồn tại ít nhất một hàng ngang hoặc
dọc, hoặc chéo giữa quân mới và quân cũ và ở giữa hai quân này có một hay
11


nhiều qn nhạt. Trong hình dưới, qn sẫm có thể được đặt ở những vị trí
gợi ý.

Sau khi đặt một quân, quân sẫm sẽ lật tất cả những quân nhạt nằm trên đường
dóng giữa quân sẫm mới được đi và quân sẫm cũ. Những quân sáng màu đó bây
giờ trở thành màu sẫm và quân sẫm có thể sử dụng chúng trong lượt đi tiếp theo,
trừ phi quân nhạt lại lật chúng lại trong một nước đi nào đó.
Nếu quân sẫm quyết định đi ở vị trí d6 (theo hình dưới), một quân nhạt sẽ bị
lật mặt và bàn cờ bây giờ có dạng như hình dưới đây.

Bây giờ đến lượt quân nhạt đi cũng nước tương tự như vậy để tìm cơ
hội lật mặt quân sẫm. Các khả năng có thể như sau:

12


Quân nhạt đi vào c4 và lật được một quân sẫm:


Người chơi thay phiên nhau lần lượt đi quân. Nếu một bên khơng đi được tiếp thì
sẽ tiếp tục đến lượt người kia cho đến khi cả hai bên đều không đi được nước nào
nữa. Điều này xảy ra khi các ơ cờ đã kín hết qn hay khi một bên chơi khơng
cịn qn nào trên bàn cờ. Người chơi có nhiều quân trên bàn cờ hơn là người
thắng cuộc.
Một điều khác giữa Reversi và cờ Othello về ciệc sử dụng quân. Ở Reversi mỗi
người chơi được chia đều 32 quân từ lúc bắt đầu và chỉ được đi 32 quân đó (bao
gồm cả hai quân trên bàn cờ lúc bắt đầu chơi) cho đến khi khơng cịn qn nào
đi được nữa. Họ không được sử dụng quân cờ của đối thủ. Ở cờ Othello tất cả
quân cờ đều thuộc sở hữu chung của hai người chơi; các quân cờ được để chung
trong một hộp, hai bên đều có cơ hội dùng quân ngang nhau.

2.
-

Chiến thuật

Các quân cờ thay đổi màu rất nhanh, dễ dàng và thường xuyên, do vậy,

đó là một ưu điểm nhưng cũng có thể là nhược điểm nếu cố gắng có được
nhiều quân từ lúc bắt đầu. Chiếm góc, cạnh, mobility, parity, tàn cuộc và dự
đốn trước mọi việc là chìa khóa của thành cơng trong cờ Othello.
13


-

Chiếm góc

Nếu có một quân đã được đặt tại góc thì qn đó sẽ khơng bị đổi cho đến

hết trận cờ. Do đó, người chơi có thể sử dụng quân cờ tại góc để chốt giữ
nhóm quân cùng với cạnh ngay sát nó làm thành một hệ thống chắc chắn.
Do vậy việc chiếm giữ góc là một chiến lược có hiệu quả khi có cơ hội đến.
Nói chung, một quân cờ được ổn định khi nó được nằm trong 4 hướng ranh
giới, trong một hàng đã kín các quân, trong đó có các quân cùng màu nằm
cạnh liên tiếp và bị chặn hai đầu bởi quân màu khác.
-

Mobility

Một người chơi có chiến thuật sẽ khơng dễ dàng từ bỏ việc chiếm góc hay bất
kỳ nước đi tốt nào. Do vậy, để đoạt được những nước đi tốt này bạn cần phải
ép đối thủ đi những nước từ bỏ cách đi tốt đó. Cách tốt nhất để làm việc đó là
làm giảm số lượng nước đi có thể cho đối thủ của bạn. Nếu bạn nhất định tìm
cách hạn chế số nước đi hợp lý của đối thủ thì sớm hay muộn họ sẽ phải đi
nước đi mà họ không mong muốn. Một ví trí cần thực hiện được đó là tất cả
các quân của bạn đứng cạnh nhau, bao vây xung quanh là quân của đối thủ.
Với vị trí như vậy, bạn có thể đọc ra được các nước đi của đối thủ
-

Tại biên

Các quân cờ được đặt ở phía biên bàn cờ dường như chắc chắn (bởi vì chúng
khơng bị lật mặt dễ dàng) . Bốn ô vuông ở mỗi góc bàn cờ được gọi là X-vng.
Lúc bắt đầu hay giữa ván cờ, nếu các ơ đó được chiếm giữ, sẽ đảm bảo chắc chắn
cho việc sở hữu chúng.
-

Đoán trước


Như trong bất kỳ chiến thuật nào của cờ vua hay checkers, người chơi không
nên chỉ xem xét về thế cờ hiện tại. Đối với mỗi nước đi, bạn cần phải cân nhắc
các diễn biến có thể có từ phía đối thủ, sau đó là khả năng phản ứng lại của bạn
với các nước đi đó và tiếp theo nữa là như thế nào. Tình thế hiện tại cũng có thể
không liên quan đến các nước đi sau. Do vậy, khi phân tích các khả năng đi,
chiếm góc hoặc bất cứ khả năng nào khác, bạn nên xem xét cách

14


tốt nhất để thực hiện chiến lược trong một thời gian dài hơn là chỉ quan
tâm đến nước đi hiện tại.

3.
-

Các chương trình chơi game trên máy tính

Chương trình chơi cờ Othello tốt nhất có thể dễ dàng đánh bại người

chơi cờ giỏi nhất. Vào đầu năm 1980, chương trình Moor đã thắng đương
kim vơ địch lúc đó và vào năm 1997, chương trình Logistello đã đánh bại
nhà vơ địch Takeshi Murakami với tỷ số 6:0. Sự nổi trội hơn này khơng có
ở những trị chơi như cờ vua, nơi mà máy tính chơi giỏi nhất cũng ngang
ngửa với người hay ở cờ vây, nơi thậm chí một người chơi trung bình cũng
thắng được máy tính giỏi nhất.
-

Nói chung, lồi người khơng thể thắng được trí thơng minh của máy tính


trong cờ Othello bởi vì máy tính có thể tính toán được rất nhiều nước đi tiếp
theo, việc này con người khơng thể bằng được. Các nhà phân tích đã ước

tính số lượng vị trí hợp lệ ở cờ Othello nhiều nhất là 1028 và nó có độ
phức tạp xấp xỉ 1058.

15



×