Xác định yêu cầu
Nhóm 3-21CTT4, dưới sự hướng dẫn của giảng viên Trương Toàn Thịnh, đã thành công trong việc phát triển phiên bản game Hunting Snake Game cho phép người chơi di chuyển con rắn bằng các phím W, A, S, D, tăng chiều dài khi ăn vật phẩm, với mỗi đốt thân rắn tương ứng với một chữ số trong mã số sinh viên của các thành viên Ngoài ra, game còn có chức năng lưu và tải tiến trình chơi, cùng với âm thanh phù hợp với các thao tác trong game.
Báo cáo này sẽ giải thích chi tiết về hoạt động và chức năng của từng hàm, với thông tin cụ thể được trình bày ở mục III sau.
Danh sách thành viên tham gia đồ án:
STT MSSV Họ tên Chức vụ
1 21120492 Trần Mỹ Phú Lâm Nhóm trưởng
2 21120493 Nguyễn Ngọc Lan Thành viên
3 21120496 Chu Hải Linh Thành viên
4 21120423 Phạm Mạnh Cường Thành viên
5 21120409 Nguyễn Đức Duy Anh Thà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.
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.
Khi người chơi nhấn phím ‘T’, hệ thống sẽ yêu cầu họ nhập tên tệp để lưu trò chơi Ngược lại, khi nhấn phím ‘L’, người chơi sẽ được yêu cầu cung cấp tên tệp để tải trò chơi.
Để giữ độ dài thân rắn không đổi khi di chuyển tới cấp tiếp theo, người chơi cần tìm hiểu và xử lý cách thức để duy trì độ dài này Độ dài chỉ được cài đặt lại theo mặc định khi người chơi hoàn thành 4 cấp độ và trở lại cấp 1 với tốc độ di chuyển nhanh hơn.
Khi con rắn ăn đủ 8 vật phẩm, một cổng sẽ xuất hiện trên màn hình Console Để tiến tới cấp độ tiếp theo, con rắn cần di chuyển hoàn toàn qua cổng này Chỉ khi con rắn vượt qua cổng, màn hình Console mới chuyển sang cấp độ mới.
- 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.
- 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.
Yêu cầu tin học
File System.h
9 enum state { MENU, INGAME, SETTING, SETCOLOR, SETSPEED, SETSOUND,
1 5 extern int HEIGH_CONSOLE, WIDTH_CONSOLE;
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.
File System.cpp
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.
4 LONG style = GetWindowLong(consoleWindow, GWL_STYLE);
5 style = style & ~(WS_MAXIMIZEBOX) & ~(WS_THICKFRAME);
6 SetWindowLong(consoleWindow, GWL_STYLE, style);
Hàm GotoXY()
Hàm nhận vào tọa độ của vị trí mà lập trình viên muốn di chuyển đến, cho phép thực hiện các thao tác khác trên màn hình Console.
4 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
Hàm ShowCur()
Hàm ShowCur() sử dụng hàm SetConsoleCursorInfo() để thiết lập kích thước và khả năng hiển thị của con trỏ chuột trên màn hình Console, cho phép ẩn hoặc hiển thị con trỏ.
3 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
4 CONSOLE_CURSOR_INFO cursor = { 1, CursorVisibility };
Hàm SetColor()
Hàm giúp thay đổi màu sắc của các ký tự khi hiển thị trên màn hình, làm cho trò chơi trở nên hấp dẫn, đẹp mắt và thu hút người chơi hơn.
3 HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
4 5 CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info;
6 GetConsoleScreenBufferInfo(hConsoleOutput, &screen_buffer_info);
7 8 WORD wAttributes = screen_buffer_info.wAttributes;
Hàm DisableSelection()
Hàm ngăn chặn việc người chơi thao tác chuột lên các phần tử đang hoạt động trên màn hình Console và hạn chế gây khó chịu cho người chơi.
3 HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
4 5 SetConsoleMode(hStdin, ~ENABLE_QUICK_EDIT_MODE);
Hàm ShowScrollbar()
Hàm thao tác ẩn thanh kéo Scrollbar góp phần cải thiện giao diện trò chơi.
4 ShowScrollBar(hWnd, SB_BOTH, Show);
Hàm resizeConsole()
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.
1 void resizeConsole(int width, int height)
6 MoveWindow(console, r.left, r.top, width, height, TRUE);
File Prepare.h
File Prepare.h chứa khai báo các hàm hỗ trợ cho quá trình chuẩn bị hình thành thức ăn và khởi động lại dữ liệu ở từng level.
File Prepare.cpp
Hàm IsValidLevel1()
Hàm nhận vào hai đối số tọa độ được tạo ngẫu nhiên Nếu kết quả là false, hàm sẽ tiếp tục tạo tọa độ mới Ngược lại, nếu kết quả là true, tọa độ của thức ăn tiếp theo sẽ được xác định bởi hai đối số của hàm.
Hàm IsValidLevel1() được lập trình dựa trên giao diện của cấp độ 1 Ở các cấp độ tiếp theo, các chướng ngại vật được thêm vào, và hàm này sẽ kiểm tra xem tọa độ ngẫu nhiên có trùng với chướng ngại vật hay không, nhằm đảm bảo tính phù hợp cho từng cấp độ.
Hàm GenerateFood()
8 for (int i = 0; i < MAX_SIZE_FOOD; i++)
1 9 for (int i = 0; i < MAX_SIZE_FOOD; i++)
3 0 for (int i = 0; i < MAX_SIZE_FOOD; i++)
4 1 for (int i = 0; i < MAX_SIZE_FOOD; i++)
Hàm GenerateFood() được sử dụng để tạo thức ăn trong trò chơi Tọa độ của thức ăn sẽ được chọn ngẫu nhiên và được kiểm tra xem có trùng với thân rắn hoặc chướng ngại vật hay không Nếu tọa độ hợp lệ, nó sẽ được sử dụng làm vị trí cho thức ăn.
Hàm ResetDataLV1()
3 CHAR_LOCK = 'A', MOVING = 'D', FOOD_INDEX = 0, WIDTH_CONSOLE = 90,
Khởi động lại dữ liệu trong trò chơi bao gồm việc thiết lập độ dài và tọa độ các đốt của thân rắn khi bắt đầu một cấp độ mới Hàm ResetDataLV1() sẽ gọi hàm GenerateFood() để tạo ra mảng thức ăn cần thiết cho trò chơi.
File ProcessGame.h
File ProcessGame.h chứa khai báo các hàm hỗ trợ cho việc xử lí con rắn và tạo ra các luồng thực hiện chương trình.
File ProcessGame.cpp
Hàm StartGame()
Hàm StartGame() bao gồm các nhiệm vụ cần làm trước khi vào game chính thức.
25 DrawBoard(1, 1, WIDTH_CONSOLE, HEIGH_CONSOLE); // Draw game
28 LEVELUP = 0; // Not levelup when starting new
- 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
Hàm PauseGame(HANDLE t)
Hàm để người dùng dừng game khi đang chơi
Hàm SaveGame()
Hàm để lưu dữ liệu về game đang chơi
2 { // Draw the save game screen
4 DrawBoard(1, 1, WIDTH_CONSOLE, HEIGH_CONSOLE);
20 cout