GIỚI THIỆU ĐỒ ÁN
Hoạt động game đã có mặt tại Việt Nam từ lâu, bắt đầu từ điện thoại và sau đó mở rộng sang máy tính Ngành công nghiệp game ngày càng phát triển, trở thành một hình thức giải trí và cơ hội kiếm thu nhập cho người chơi Hunting Snake là một ví dụ điển hình, phát triển thành công và nổi tiếng trên cả hai nền tảng với nhiều phiên bản hấp dẫn Trong môn Kỹ thuật lập trình của lớp 21CTT4, giảng viên Tiến đã hướng dẫn sinh viên khám phá lĩnh vực này.
Sĩ Trương Toàn Thịnh đã hướng dẫn rằng trò chơi này là một dự án thực hành quan trọng, giúp 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
Dưới sự hướng dẫn của giảng viên Trương Toàn Thịnh, nhóm 3-21CTT4 đã thành công trong việc phát triển phiên bản trò chơi Hunting Snake Game với các tính năng nổi bật như: 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; và khả năng lưu, tải game trong quá trình chơi, cùng với âm thanh phù hợp với các thao tác.
Bản 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 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ọ 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 để 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ác yếu tố liên quan Độ dài thân rắn chỉ được cài đặt trở lại theo mặc định khi người chơi hoàn thành 4 cấp độ và quay lại cấp 1 với tốc độ di chuyển nhanh hơn.
Khi con rắn thu thập đủ 8 vật phẩm, một cổng sẽ xuất hiện trên màn hình Console Để chuyển sang cấp độ tiếp theo, con rắn cần di chuyển hoàn toàn qua cổng này Màn hình Console chỉ chuyển đổi sang cấp độ mới khi con rắn đã vượt qua cổng.
- 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,
15 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 đối số là tọa độ củ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ỏ.
3 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
4 CONSOLE_CURSOR_INFO cursor = { 1, CursorVisibility };
Hàm SetColor()
Hàm này 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, sinh động và thu hút người chơi hơn.
3 HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
45 CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info;
6 GetConsoleScreenBufferInfo(hConsoleOutput, &screen_buffer_info);
78 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);
45 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 random; nếu trả về false, hàm sẽ tiếp tục thực hiện random Ngược lại, nếu trả về 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 phát triển dựa trên giao diện của cấp độ 1 Đối với các cấp độ tiếp theo, có sự xuất hiện của các chướng ngại vật; do đó, hàm này sẽ kiểm tra xem tọa độ ngẫu nhiên có trùng với các chướng ngại vật hay không, nhằm đảm bảo tính hợp lệ cho từng cấp độ.
Hàm GenerateFood()
8 for (int i = 0; i < MAX_SIZE_FOOD; i++)
19 for (int i = 0; i < MAX_SIZE_FOOD; i++)
30 for (int i = 0; i < MAX_SIZE_FOOD; i++)
41 for (int i = 0; i < MAX_SIZE_FOOD; i++)
Hàm GenerateFood() có chức năng tạo ra thức ăn trong trò chơi Tọa độ của thức ăn được xác định ngẫu nhiên và sẽ được kiểm tra xem có trùng với thân rắn hoặc cá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 game bao gồm việc xác định độ dài và tọa độ của các đốt 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 cho người 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