GIỚI THIỆU ĐỒ ÁN
Ngành công nghiệp game đã có mặt tại Việt Nam từ lâu, bắt đầu từ điện thoại và dần mở rộng sang máy tính Game không chỉ mang lại niềm vui giải trí mà còn là cơ hội kiếm thêm thu nhập cho người chơi Trong số đó, Hunting Snake nổi bật với sự phát triển và phổ biến trên cả hai nền tảng, thu hút đông đảo người chơi với nhiều phiên bản khác nhau Trong môn Kỹ thuật lập trình của lớp 21CTT4, dưới sự hướng dẫn của Tiến Sĩ Trương Toàn Thịnh, trò chơi này được xem như một đồ án thực hành quan trọng, khuyến khích sinh viên ngành Công nghệ thông tin phát triển tư duy và kỹ năng lập trình.
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
Nhóm 3-21CTT4 do Trương Toàn Thịnh dẫn đầu đã phát triển thành công phiên bản trò chơi Hunting Snake Game với các chức năng nổi bật như: điều khiển 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, trong đó 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; đồng thời hỗ trợ lưu và tải game trong quá trình chơi, kèm theo âm thanh phù hợp với các thao tác.
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 các thông tin cụ thể được trình bày ở mục III.
Danh sách thành viên tham gia đồ á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
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ọ cung cấ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 nhập tên tập tin để 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à áp dụng các biện pháp để đảm bảo rằng độ dài này không bị cài đặt lại theo mặc định Chỉ khi vượt qua 4 cấp độ và quay trở lại cấp 1 với tốc độ di chuyển nhanh hơn, độ dài thân rắn mới được cài đặt lại.
Khi con rắn tiêu thụ đủ 8 vật phẩm, một cổng sẽ xuất hiện trên màn hình Console Con rắn cần di chuyển qua cổng này để tiến vào cấp độ tiếp theo.
2 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.
- 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 LOADGAME, INFORMATION, GAMEOVER, QUITGAME };
1 extern int HEIGH_CONSOLE, WIDTH_CONSOLE;
3 void SetColor(WORD color); 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 đối số là tọa độ vị trí mà lập trình viên muốn di chuyển đến và thực hiện các thao tá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ỏ một cách linh hoạt.
3 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
4 CONSOLE_CURSOR_INFO cursor = { 1, CursorVisibility };
Hàm SetColor()
Hàm có khả năng 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, bắt mắt và thu hút người chơi hơn.
3 HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
5 CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info;
6 GetConsoleScreenBufferInfo(hConsoleOutput, &screen_buffer_info);
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);
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 hai đối số là 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.
IsValidLevel1() được code dựa trên giao diện của level 1 Các level tiếp theo tồn
Để xử lý các chướng ngại vật trong trò chơi, cần sử dụng hàm IsValidLevel1() và 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 sự phù hợp cho từng cấp độ.
; case 3: for (int i = 0; i < MAX_SIZE_FOOD; i++) { do { x = rand() % (WIDTH_CONSOLE - 1) + 2; y = rand() % (HEIGH_CONSOLE - 1) + 2;
} break; case 4: for (int i = 0; i < MAX_SIZE_FOOD; i++) { do
Hàm GenerateFood() được sử dụng để tạo ra thức ăn trong trò chơi Tọa độ của thức ăn sẽ được tạo 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 tọa độ cho thức ăn.
3 CHAR_LOCK = 'A', MOVING = 'D', FOOD_INDEX = 0, WIDTH_CONSOLE = 90,
Hàm ResetDataLV1()
để tạo ra mảng thức ăn.
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.
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
2 { // Draw the save game screen
4 DrawBoard(1, 1, WIDTH_CONSOLE, HEIGH_CONSOLE);
20 cout