1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Xây dựng trò chơi rắn săn mồi đơn giản với đồ họa là màn hình console

33 9 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Xây Dựng Trò Chơi Rắn Săn Mồi Đơn Giản Với Đồ Họa Là Màn Hình Console
Định dạng
Số trang 33
Dung lượng 116,85 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Xác định yêu cầu Trải qua quá trình tìm hiểu, học tập dưới sự hướng dẫn của giảng viên Trương Toàn Thịnh, nhóm 3- 21CTT4 đã xây dựng thành công một phiên bản của Hunting Snake Game có c

Trang 1

MỤC LỤC

I LỜI CẢM ƠN 3

II GIỚI THIỆU ĐỒ ÁN 3

A Xác định yêu cầu 3

B Yêu cầu chức năng 4

C Yêu cầu tin học 5

III MODULE SYSTEM: 5

A File System.h 5

B File System.cpp 6

1 Hàm FixConsoleWindow() 6

2 Hàm GotoXY() 7

3 Hàm ShowCur() 7

4 Hàm SetColor() 7

5 Hàm DisableSelection() 8

6 Hàm ShowScrollbar() 8

7 Hàm resizeConsole() 8

IV MODULE PREPARE 9

A File Prepare.h 9

B File Prepare.cpp 9

1 Hàm IsValidLevel1() 9

2 Hàm GenerateFood() 10

3 Hàm ResetDataLV1() 11

V MODULE PROCESSGAME 12

A File ProcessGame.h 12

B File ProcessGame.cpp 12

1 Hàm StartGame() 12

2 Hàm PauseGame(HANDLE t) 14

3 Hàm SaveGame() 14

4 Hàm LoadGame() 16

5 Hàm Eat() 18

6 Hàm ProcessDead() 20

7 Hàm MoveLeft(), MoveRight(), MoveUp(), MoveDown() 21

8 Hàm ThreadFunc() 22

9 Hàm Menu() 23

Trang 2

10 Hàm InGame(int oldgame=0) 23

11 Hàm GameOver() 23

12 Hàm QuitGame() 23

13 Hàm Information() 24

14 Hàm SetSnakeColor() 24

15 Hàm SetSpeed() 24

16 Hàm SetSound() 24

17 Hàm Setting() 24

VI MODULE DRAW 24

A File Draw.h 24

B File Draw.cpp 25

1 Hàm DrawBoard(int x, int y, int width, int height, int curPosX = 0, int curPosY = 0) 25

2 Hàm SmallBoard() 26

3 Hàm DrawSnakeAndFood(const char str, int start_char = 0) 26

4 Hàm DrawWallLevel2(), DrawWallLevel3(), DrawWallLevel(4) 26

5 Hàm DrawGateLevel1(), DrawGateLevel2(), DrawGateLevel3(), DrawGateLevel4() 27

6 Hàm DrawContinueGame() 27

VII MODULE DEAD 28

A File Dead.h 28

B File Dead.cpp 29

1 Các hàm ReachBodyLeft(), ReachBodyRight(), ReachBodyUp(), ReachBodyDown() 29

2 Các hàm LeftDeadLevel1(), RightDeadLevel1(), UpDeadLevel1(), DownDeadLevel1() 29

VIII TẬP TIN MAIN.CPP 30

Trang 3

I LỜI CẢM ƠN

Trong suốt quá trình tìm hiểu và hoàn thành đồ án, nhóm 3 đã nhận được sự

hỗ trợ từ nhiều phía, nhóm xin gửi lời cảm ơn chân thành đến:

- Sự giúp đỡ và hỗ trợ của các giảng viên phụ trách giảng dạy về kiến thức

Xin chân thành cảm ơn!

Hoạt động về Game đã xuất hiện từ lâu tại Việt Nam Game bắt nguồn từ điện thoại và dần dần xuất hiện cả trên máy tính Game ngày càng phát triển và trở thành một hình thức giải trí cũng như một nền tảng để người chơi kiếm thêm thu nhập Hunting Snake cũng không ngoại lệ khi phát triển thành công và nổi tiếng trên điện thoại lẫn máy tính với nhiều phiên bản khác nhau thu hút người chơi Trong môn học Ký thuật lập trình của lớp 21CTT4, do Giảng viên- Tiến Sĩ Trương Toàn Thịnh hướng dẫn, trò chơi này là một đồ án thực hành cần thiết nhằm thúc đẩy sự tìm tòi và tư duy về kỹ năng lập trình cho các sinh viên ngành Công nghệ thông tin.

A Xác định yêu cầu

Trải qua quá trình tìm hiểu, học tập dưới sự hướng dẫn của giảng viên

Trương Toàn Thịnh, nhóm 3- 21CTT4 đã xây dựng thành công một phiên bản của Hunting Snake Game có các chức năng chính: Di chuyển con rắn bằng các phím điều hướng W, A, S, D; tăng chiều dài khi ăn được vật phẩm (Mỗi đốt thân rắn là một chữ số trong mã số sinh viên của các thành viên), lưu và tải game khi đang chơi, âm thanh phù hợp với các thao tác.

Trang 4

Sự hoạt động và chức năng của từng hàm sẽ được giải thích chi tiết trong bản báo cáo này Các thông tin trên sẽ được trình bày ở mục III sau.

Danh sách thành viên tham gia đồ án:

ST

T

Xây dựng trò chơi Rắn săn mồi đơn giản với đồ họa là màn hình Console.

B Yêu cầu chức năng

- Di chuyển con rắn: bằng các phím ‘A’, ‘W’, ‘S’, ‘D’ để ăn vật phẩm

- Xử lý trường hợp đầu rắn chạm vào thân của nó: kết thúc trò chơi khi

trường hợp này xảy ra.

- Lưu/Tải (Save/ Load) trò chơi: Khi người chơi nhấn phím ‘T’, yêu cầu

người chơi cung cấp tên tệp để lưu Khi người chơi nhấn phím ‘L’, yêu cầu người chơi cung cấp tên tập để tải.

- Giữ độ dài thân rắn không đổi: Khi di chuyển tới cấp tiếp theo, độ dài

thân rắn sẽ được cài đặt lại theo mặc định Cần tìm hiểu và xử lý sao cho

độ dài thân rắn không đổi khi tới cấp tiếp theo, độ dài chỉ được cài đặt trở lại theo mặc định khi người chơi vượt qua hết 4 cấp độ và quay trở lại cấp 1 với tốc độ di chuyển nhanh hơn.

- Xử lý cổng: Khi con rắn ăn hết 8 vật phẩm, trên màn hình Console sẽ

hiện ra một cái cổng, con rắn sẽ di chuyển qua cổng này để đến cấp độ tiếp theo Tuy nhiên, con rắn phải di chuyển qua cổng hoàn toàn thì màn hình Console mới chuyển sang màn hình của cấp tiếp theo.

- Cung cấp hiệu ứng: Khi con rắn chạm vào tường, thân của nó hoặc

cổng, lập trình viên tạo các hiệu ứng sống động cho các quá trình này.

- Tạo menu: Để người chơi dễ dàng hơn trong việc chọn hoạt động tiếp

theo mà họ muốn.

Trang 5

- Thân rắn: được hình thành từ mã số sinh viên của các thành viên trong

nhóm

C Yêu cầu tin học

- Ngôn ngữ lập trình: C/C++

- Môi trường lập trình: Visual Studio

- Đối tượng lập trình: Màn hình Console

III MODULE SYSTEM:

6 extern POINT snake[40];

7 extern POINT food[8];

Trang 6

3 void resizeConsole(int width, int height);

- Khai báo các biến toàn cục và các hàm xử lý thao tác trên màn hình Console được sử dụng trong suốt Project.

- Dòng 4 khai báo một chuỗi kí tự, đó là các chữ số trong mã số sinh viên của các thành viên trong nhóm.

Trang 7

B File System.cpp

1 Hàm FixConsoleWindow()

Hàm này được dùng để cài đặt kích thước của màn hình Console, không cho phép người chơi thay đổi kích thước màn hình Console.

1 void FixConsoleWindow()

2 {

3 HWND consoleWindow = GetConsoleWindow();

4 LONG style = GetWindowLong(consoleWindow, GWL_STYLE);

5 style = style & ~(WS_MAXIMIZEBOX) & ~(WS_THICKFRAME);

7 }

2 Hàm GotoXY()

Hàm có đối số đầu vào là tọa độ một vị trí bất kỳ mà Lập trình viên muốn di chuyển đến đó và thực hiện các thao tác khác trên màn hình Console

1 void GotoXY(int x, int y)

Trong hàm ShowCur() có gọi hàm SetConsoleCursorInfo() với

chức năng cài đặt kích thước và khả năng hiển thị của con trỏ chuột (ẩn hay hiển thị) trên màn hình Console

1 void ShowCur(bool CursorVisibility)

2 {

3 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);

4 CONSOLE_CURSOR_INFO cursor = { 1, CursorVisibility };

5 SetConsoleCursorInfo(handle, &cursor);

6 }

Trang 8

4 Hàm SetColor()

Hàm có chức năng thay đổi màu sắc của các kí tự khi in ra màn hình giúp cho trò chơi trở nên thú vị, đẹp mắt và thu hút người chơi hơn

1 void SetColor(WORD color)

Trang 9

4 bool IsValidLevel1(int x int y);

5 bool IsValidLevel2(int x int y);

6 bool IsValidLevel3(int x int y);

7 bool IsValidLevel4(int x int y);

9 void GenerateFood();

11 void ResetDataLV1();

1

2 void ResetDataLV2();

Trang 13

Hàm GenerateFood() tạo thức ăn Tọa độ sẽ được random và kiểm tra có

trùng với thân rắn hay chướng ngại vật hay không, nếu hợp lệ tọa độ đó sẽ là tọa

Khởi động lại dữ liệu bao gồm độ dài thân rắn và tọa độ của các đốt thân rắn

khi bắt đầu một level mới Trong hàm ResetDataLV1() gọi hàm GenerateFood()

Trang 15

27 STATE = 1; // Start running Thread

28 LEVELUP = 0; // Not levelup when starting new

29 }

- system("cls" ) được dùng để làm sạch màn hình

- Hàm SetColor(2) được dùng để thiết lập màu cho giao diện.

- Mỗi level khác nhau sẽ được gọi hàm ResetData() để khởi động lại

dữ liệu và hàm DrawWallLevel() để vẽ chướng ngại vật tương ứng.

- Hàm DrawBoard(1, 1, WIDTH_CONSOLE, HEIGH_CONSOLE)

dùng để vẽ khung hình chữ nhật cho trò chơi.

- Hàm GenerateFood() dùng để khởi tạo thức ăn.

- Khi STATE = 1, con rắn sẽ được vẽ lên màn hình.

- LEVELUP = 0: Thiết lập level khi bắt đầu game mới

Trang 16

8 for (int i = 0; i < 53; i++)

24 cout << " Enter file name: ";

25 // Print the filenames were saved

47 fopen_s(&file, "namesaved.txt", "at");

Trang 17

57 MOVING, SPEED, STATE, LEVEL, LEVELUP,fprintf(file, "%d %d %d %d %d %d %d %d %d\n", CHAR_LOCK,

- Từ dòng 26 đến dòng 40: in ra màn hình danh sách tên các file game

cũ đã được lưu trước đó

- Từ dòng 42 đến dòng 76: lưu game đang chơi, màn hình trò chơi lúc này

sẽ dừng lại.

4 Hàm LoadGame()

Hàm dùng để tải dữ liệu game đã lưu trước đó.

Trang 18

24 cout << " Enter file name: ";

25 // Print the filenames were saved

Trang 19

41 // Load old game

51 &CHAR_LOCK, &MOVING, &SPEED, &STATE, &LEVEL, fscanf_s(file, "%d %d %d %d %d %d %d %d %d\n",

52 &LEVELUP, &temp, &SCORE, &SNAKE_COLOR);

- Từ dòng 3 đến dòng 24: vẽ giao diện khi người chơi chọn mục

LOADGAME, bao gồm khung màn hình chính – DrawBoard(), khung màn hình phụ - SmallBoard() và các dòng lệnh để người chơi chọn và

nhập tên file đã lưu trước đó.

- Từ dòng 26 đến dòng 40: in ra tên các file đã được lưu trước đó lên

màn hình.

Trang 20

- Từ dòng 42 đến dòng 69: tải dữ liệu của tên file game cũ người chơi đã

nhập và vẽ lên màn hình hình ảnh lúc người chơi lưu game bằng hàm

Trang 21

- Hàm PlaySound(L("tenfile.wav"), NULL, SND_SYNC): tạo

thêm âm thanh cho trò chơi.

- Dòng 5: Mỗi lần rắn ăn mồi là điểm số của người chơi được cộng thêm 5.

- Dòng 7 đến dòng 15: Khi rắn ăn đủ số thức ăn quy định của

mỗi màn (8 miếng), LEVELUP = 1 và rắn sẽ không thể ăn

thêm thức ăn Nếu chưa đủ số lượng yêu cầu, thức ăn sẽ tiếp tục in ra màn hình với vị trí ngẫu nhiên.

- Dòng 18 đến dòng 31: Khi LEVELUP=1, các hàm vẽ cổng tương

ứng của mỗi màn chơi sẽ được gọi Cổng qua màn chơi kế tiếp sẽ xuất hiện kèm theo âm thanh.

6 Hàm ProcessDead()

Hàm tạo hiệu ứng chết cho con rắn khi người chơi điều khiển con rắn đụng vào tường, đụng vào thành cổng hay đụng vào thân rắn.

Trang 22

- SetColor(SNAKE_COLOR + 1): thay đổi màu của rắn.

- PlaySound(L"die.wav", NULL, SND_SYNC) tạo âm

thanh khi rắn chết.

- Từ dòng 13 đến dòng 26: tạo hiệu ứng rắn chết (toàn thân

lần lượt biến mất)

7 Hàm MoveLeft(), MoveRight(), MoveUp(), MoveDown()

Các hàm quản lí việc di chuyển sang trái, phải, lên xuống của con rắn.

7 LeftDeadLevel2()) || (LEVEL == 3 && LeftDeadLevel3())elseif ((LEVEL == 1 && LeftDeadLevel1()) || (LEVEL == 2 &&

8 || (LEVEL == 4 && LeftDeadLevel4()))

Trang 23

- Dòng 3 đến dòng 11: kiểm tra xem con rắn có chạm vào thân

không bằng hàm ReachBodyLeft() hoặc đụng vào tường trong các màn chơi bằng các hàm LeftDeadLevel (), nếu có thì rắn chết (xử lí bằng hàm ProcessDead())

- Dòng 14 đến dòng 27: nếu tọa độ của đầu rắn trùng với tọa độ

thức ăn thì gọi hàm Eat() để thực hiện việc ăn mồi Đồng thời

thân rắn sẽ tăng lên một đơn vị.

Trang 24

 New Game (bắt đầu vào trò chơi mới)

 Load Game (Tải lại game đã được lưu)

 Setting (Cài đặt màu sắc, âm thanh, tốc độ)

 Introdution (Thông tin giảng viên và nhóm lập trình, hướng dẫn các phím điều khiển trong trò chơi)

 Quit game (Thoát khỏi trò chơi).

Trang 25

Hàm để thiết lập tổng thể trò chơi, trong đó bao gồm các hàm

SetSnakeColor(), SetSpeed(), SetSound().

VI MODULE DRAW

A File Draw.h

File Draw.h chứa khai báo các hàm dùng để vẽ giao diện, nhân vật chính (con rắn), thức ăn, chướng ngại vật và cổng ở mỗi level trong game.

Trang 26

= 0); // Function to draw the board of game

5 void SmallBoard();// Function to draw board of score and length while playing

6 voiddraw snake and food DrawSnakeAndFood(constchar str, int start_char = 0); // Function to

7 void DrawWallLevel2();// Function to draw obstacles in level 2

8 void DrawWallLevel3();// Function to draw obstacles in level 3

9 void DrawWallLevel4();// Function to draw obstacles in level 4

10 void DrawGateLv1();// Function to draw gate in level 1

11 void DrawGateLv2();// Function to draw gate in level 2

12 void DrawGateLv3();// Function to draw gate in level 3

13 void DrawGateLv4();// Function to draw gate in level 4

14 void DrawContinueGame();// Function to draw board after saving and loading

B File Draw.cpp

1 Hàm DrawBoard(int x, int y, int width, int height, int curPosX = 0, int curPosY = 0)

Hàm vẽ khung chính của trò chơi.

1 void DrawBoard(int x, int y, int width, int height, int curPosX, int curPosY)

6 GotoXY(x y); cout << b;

7 for (int i = 1; i < width; i++)

8 cout << b;

9 cout << b;

10 GotoXY(x height + y); cout << a;

11 for (int i = 1; i < width; i++)

12 cout << a;

13 cout << a;

14 for (int i = y + 1; i < height + y; i++)

16 GotoXY(x, i); cout << c;

17 GotoXY(x + width, i); cout << c;

19

20 GotoXY(x + width + 2, y);

21 for (int i = 0; i < 30; i++)

22 cout << b;

Trang 27

23 GotoXY(x + width + 2, y + height);

24 for (int i = 0; i < 30; i++)

Trang 28

- Hàm kiểm tra xem con rắn đã ăn đủ lượng thức ăn chưa, nếu chưa, thức ăn (là một kí tự đặc biệt) sẽ được in ra màn hình với tọa độ ngẫu nhiên.

- Màu của con rắn sẽ được người chơi chọn trong phần Setting,

hàm sẽ in từng kí tự của con rắn lên trên màn hình.

4 Hàm DrawWallLevel2(), DrawWallLevel3(), DrawWallLevel(4)

Hàm thiết kế chướng ngại vật cho màn 2, 3, 4 Mỗi level sẽ được thiết kế với các chướng ngại vật khác nhau và độ khó tăng

dần Các hàm trên sử dụng hàm GotoXY(int x, int y) để đi đến

các tọa độ trên màn hình và in ra kí tự để làm chướng ngại vật.

5 Hàm DrawGateLevel1(), DrawGateLevel2(), DrawGateLevel3(), DrawGateLevel4()

Hàm thiết kế các cổng để qua màn kế tiếp xuất hiện khi người chơi điều khiển con rắn ăn đủ lượng thức ăn ở mỗi level Các

hàm sử dụng hàm GotoXY(int x, int y) để in ra kí tự tạo thành

Trang 29

File chứa khai báo các hàm kiểm tra việc di chuyển của con rắn có

hợp lệ hay không (không đụng vào thân hay vào tường và các chướng

ngại vật trong màn chơi).

Trang 30

Các hàm kiểm tra khi con rắn di chuyển trái, phải lên, xuống có chạm vào thân nó không Nếu có, hàm trả về giá trị “true”, còn không, hàm trả về giá trị “false”.

Ví dụ: hàm ReachBodyLeft() kiểm tra việc di chuyển sang trái

của con rắn trong quá trình người chơi điều khiển.

1 bool ReachBodyLeft()

3 int headX = snake[0].x - 1;

4 int headY = snake[0].y;

5 for (int i = 0; i < SIZE_SNAKE - 1; i++)

Trang 31

7 if (snake[i].x == headX && snake[i].y == headY)

Các hàm kiểm tra việc di chuyển trái, phải, lên xuống của con rắn trong màn 1; hàm trả về giá trị “true” khi con rắn đụng vào chướng ngại vật, trả về “false” cho các trường hợp di chuyển hợp lệ.

6 { // Processing hit the gate

7 for (int i = 14; i < 17; i++)

Trang 32

Tương tự như vậy, mỗi level sẽ có các hàm kiểm tra việc di chuyển của con rắn tương ứng với các chướng ngại vật và cổng được thiết kế.

VIII TẬP TIN MAIN.CPP

Sau khi đã thiết lập xong các hàm cần thiết cho trò chơi, ta cần hàm Main

để liên kết các hàm ở trên, tạo thành một trò chơi “Rắn săn mồi” hoàn chỉnh

Mã nguồn của hàm Main() được khai báo như sau:

Ngày đăng: 29/11/2022, 00:16

HÌNH ẢNH LIÊN QUAN

Xây dựng trò chơi Rắn săn mồi đơn giản với đồ họa là màn hình Console. - Xây dựng trò chơi rắn săn mồi đơn giản với đồ họa là màn hình console
y dựng trò chơi Rắn săn mồi đơn giản với đồ họa là màn hình Console (Trang 4)
- Thân rắn: được hình thành từ mã số sinh viên của các thành viên trong - Xây dựng trò chơi rắn săn mồi đơn giản với đồ họa là màn hình console
h ân rắn: được hình thành từ mã số sinh viên của các thành viên trong (Trang 5)
- Khai báo các biến toàn cục và các hàm xử lý thao tác trên màn hình Console được sử dụng trong suốt Project. - Xây dựng trò chơi rắn săn mồi đơn giản với đồ họa là màn hình console
hai báo các biến toàn cục và các hàm xử lý thao tác trên màn hình Console được sử dụng trong suốt Project (Trang 6)
Hàm này được dùng để cài đặt kích thước của màn hình Console, khơng cho phép người chơi thay đổi kích thước màn hình  Console. - Xây dựng trò chơi rắn săn mồi đơn giản với đồ họa là màn hình console
m này được dùng để cài đặt kích thước của màn hình Console, khơng cho phép người chơi thay đổi kích thước màn hình Console (Trang 7)
Hàm có chức năng thay đổi kích thước màn hình Console tùy theo ý tưởng và sự sáng tạo của Lập trình viên. - Xây dựng trò chơi rắn săn mồi đơn giản với đồ họa là màn hình console
m có chức năng thay đổi kích thước màn hình Console tùy theo ý tưởng và sự sáng tạo của Lập trình viên (Trang 9)
- system(&#34;cls&#34;) được dùng để làm sạch màn hình. - Xây dựng trò chơi rắn săn mồi đơn giản với đồ họa là màn hình console
system (&#34;cls&#34;) được dùng để làm sạch màn hình (Trang 15)
- Khi STATE =1, con rắn sẽ được vẽ lên màn hình. - Xây dựng trò chơi rắn săn mồi đơn giản với đồ họa là màn hình console
hi STATE =1, con rắn sẽ được vẽ lên màn hình (Trang 15)
- Từ dòng 26 đến dòng 40: in ra màn hình danh sách tên các file game cũ đã được lưu trước đó - Xây dựng trò chơi rắn săn mồi đơn giản với đồ họa là màn hình console
d òng 26 đến dòng 40: in ra màn hình danh sách tên các file game cũ đã được lưu trước đó (Trang 17)
LOADGAME, bao gồm khung màn hình chính – DrawBoard(), khung - Xây dựng trò chơi rắn săn mồi đơn giản với đồ họa là màn hình console
bao gồm khung màn hình chính – DrawBoard(), khung (Trang 19)
Hàm Menu() có chức năng vẽ màn hình menu sau khi bắt đầu chương trình. Menu gồm 5 phần: - Xây dựng trò chơi rắn săn mồi đơn giản với đồ họa là màn hình console
m Menu() có chức năng vẽ màn hình menu sau khi bắt đầu chương trình. Menu gồm 5 phần: (Trang 24)
Hàm thiết lập để vẽ các bảng sau khi người chơi tải lại game đã lưu. - Xây dựng trò chơi rắn săn mồi đơn giản với đồ họa là màn hình console
m thiết lập để vẽ các bảng sau khi người chơi tải lại game đã lưu (Trang 28)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w