Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 34 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
34
Dung lượng
249,05 KB
Nội dung
MỤC LỤC I LỜI CẢM ƠN II GIỚI THIỆU ĐỒ ÁN A Xác định yêu cầu B Yêu cầu chức .4 C Yêu cầu tin học .5 III MODULE SYSTEM: A File System.h B File System.cpp Hàm FixConsoleWindow() .6 Hàm GotoXY() Hàm ShowCur() Hàm SetColor() Hàm DisableSelection() Hàm ShowScrollbar() .8 Hàm resizeConsole() IV MODULE PREPARE A File Prepare.h .9 B File Prepare.cpp V Hàm IsValidLevel1() Hàm GenerateFood() 10 Hàm ResetDataLV1() 11 MODULE PROCESSGAME 12 A File ProcessGame.h 12 B File ProcessGame.cpp 12 Hàm StartGame() 12 Hàm PauseGame(HANDLE t) .14 Hàm SaveGame() 14 Hàm LoadGame() 16 Hàm Eat() .18 Hàm ProcessDead() 20 Hàm MoveLeft(), MoveRight(), MoveUp(), MoveDown() 21 Hàm ThreadFunc() 22 Hàm Menu() 23 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 Hàm DrawBoard(int x, int y, int width, int height, int curPosX = 0, int curPosY = 0) 25 Hàm SmallBoard() 26 Hàm DrawSnakeAndFood(const char str, int start_char = 0) .26 Hàm DrawWallLevel2(), DrawWallLevel3(), DrawWallLevel(4) 26 Hàm DrawGateLevel1(), DrawGateLevel2(), DrawGateLevel3(), DrawGateLevel4() 27 Hàm DrawContinueGame() 27 VII MODULE DEAD .28 A File Dead.h 28 B File Dead.cpp 29 Các hàm ReachBodyLeft(), ReachBodyRight(), ReachBodyUp(), ReachBodyDown() 29 Các hàm LeftDeadLevel1(), RightDeadLevel1(), UpDeadLevel1(), DownDeadLevel1() 29 VIII TẬP TIN MAIN.CPP 30 I LỜI CẢM ƠN Trong suốt q trình tìm hiểu hồn thành đồ án, nhóm nhận 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 đỡ hỗ trợ giảng viên phụ trách giảng dạy kiến thức lập trình - Những người bạn giúp nhóm có thêm nhiều ý tưởng trình thực đồ án - Những người ủng hộ hộ trợ tinh thần cho nhóm q trình thực đồ án Xin chân thành cảm ơn! II GIỚI THIỆU ĐỒ ÁN Hoạt động Game xuất từ lâu Việt Nam Game bắt nguồn từ điện thoại xuất máy tính Game ngày phát triển trở thành hình thức giải trí tảng để người chơi kiếm thêm thu nhập Hunting Snake không ngoại lệ phát triển thành công tiếng điện thoại lẫn máy tính với nhiều phiên khác thu hút người chơi Trong mơn học Ký thuật lập trình lớp 21CTT4, Giảng viên- Tiến Sĩ Trương Toàn Thịnh hướng dẫn, trò chơi đồ án thực hành cần thiết nhằm thúc đẩy tìm tịi tư kỹ lập trình cho sinh viên ngành Công nghệ thông tin A Xác định yêu cầu Trải qua trình tìm hiểu, học tập hướng dẫn giảng viên Trương Tồn Thịnh, nhóm 3- 21CTT4 xây dựng thành công phiên Hunting Snake Game có chức chính: Di chuyển rắn phím điều hướng W, A, S, D; tăng chiều dài ăn vật phẩm (Mỗi đốt thân rắn chữ số mã số sinh viên thành viên), lưu tải game chơi, âm phù hợp với thao tác Sự hoạt động chức hàm giải thích chi tiết báo cáo Các thơng tin 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ụ 21120492 Trần Mỹ Phú Lâm Nhóm trưởng 21120493 Nguyễn Ngọc Lan Thành viên 21120496 Chu Hải Linh Thành viên 21120423 Phạm Mạnh Cường Thành viên 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 hình Console B Yêu cầu chức - Di chuyển rắn: 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 nó: kết thúc trị chơi trường hợp xảy - 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 cài đặt lại theo mặc định Cần tìm hiểu xử lý cho độ dài thân rắn không đổi tới cấp tiếp theo, độ dài cài đặt trở lại theo mặc định người chơi vượt qua hết cấp độ quay trở lại cấp với tốc độ di chuyển nhanh - Xử lý cổng: Khi rắn ăn hết vật phẩm, hình Console cổng, rắn di chuyển qua cổng để đến cấp độ Tuy nhiên, rắn phải di chuyển qua cổng hồn tồn hình Console chuyển sang hình cấp - Cung cấp hiệu ứng: Khi rắn chạm vào tường, thân cổng, lập trình viên tạo hiệu ứng sống động cho trình - Tạo menu: Để người chơi dễ dàng việc chọn hoạt động mà họ muốn - Thân rắn: hình thành từ mã số sinh viên thành viên 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: 1 1 A File System.h #define MAX_SIZE_SNAKE 40 #define MAX_SIZE_FOOD const char Snake_Body[] = "2112049221120493211204962112042321120409"; extern POINT snake[40]; extern POINT food[8]; enum state { MENU, INGAME, SETTING, SETCOLOR, SETSPEED, SETSOUND, LOADGAME, INFORMATION, GAMEOVER, QUITGAME }; extern state interf; extern int CHAR_LOCK; extern int MOVING; extern int SPEED; 2 2 extern int HEIGH_CONSOLE, WIDTH_CONSOLE; extern int FOOD_INDEX; extern int SIZE_SNAKE; extern int STATE; extern int LEVEL; extern int LEVELUP; extern int temp; extern int SCORE; extern int start_char; extern int SOUND; extern int SNAKE_COLOR; 3 void FixConsoleWindow(); void DisableSelection(); void ShowScrollbar(BOOL Show); void GotoXY(int x, int y); void ShowCur(bool CursorVisibility); void SetColor(WORD color); void resizeConsole(int width, int height); - Khai báo biến toàn cục hàm xử lý thao tác hình Console sử dụng suốt Project - Dòng khai báo chuỗi kí tự, chữ số mã số sinh viên thành viên nhóm B File System.cpp Hàm FixConsoleWindow() Hàm dùng để cài đặt kích thước hình Console, khơng cho phép người chơi thay đổi kích thước hình Console void FixConsoleWindow() { HWND consoleWindow = GetConsoleWindow(); LONG style = GetWindowLong(consoleWindow, GWL_STYLE); style = style & ~(WS_MAXIMIZEBOX) & ~(WS_THICKFRAME); SetWindowLong(consoleWindow, GWL_STYLE, style); } Hàm GotoXY() Hàm có đối số đầu vào tọa độ vị trí mà Lập trình viên muốn di chuyển đến thực thao tác khác hình Console void GotoXY(int x, int y) { COORD coord{ x, y }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); } Hàm ShowCur() Trong hàm ShowCur() có gọi hàm SetConsoleCursorInfo() với chức cài đặt kích thước khả hiển thị trỏ chuột (ẩn hay hiển thị) hình Console void ShowCur(bool CursorVisibility) { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO cursor = { 1, CursorVisibility }; SetConsoleCursorInfo(handle, &cursor); } Hàm SetColor() Hàm có chức thay đổi màu sắc kí tự in hình giúp cho trị chơi trở nên thú vị, đẹp mắt thu hút người chơi 10 11 12 13 14 void SetColor(WORD color) { HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info; GetConsoleScreenBufferInfo(hConsoleOutput, &screen_buffer_info); WORD wAttributes = screen_buffer_info.wAttributes; color &= 0x000f; wAttributes &= 0xfff0; wAttributes |= color; SetConsoleTextAttribute(hConsoleOutput, wAttributes); } Hàm DisableSelection() Hàm ngăn chặn việc người chơi thao tác chuột lên phần tử hoạt động hình Console hạn chế gây khó chịu cho người chơi void DisableSelection() { HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); SetConsoleMode(hStdin, ~ENABLE_QUICK_EDIT_MODE); } Hàm ShowScrollbar() Hàm thao tác ẩn kéo Scrollbar góp phần cải thiện giao diện trị chơi void ShowScrollbar(BOOL Show) { HWND hWnd = GetConsoleWindow(); ShowScrollBar(hWnd, SB_BOTH, Show); } Hàm resizeConsole() Hàm có chức thay đổi kích thước hình Console tùy theo ý tưởng sáng tạo Lập trình viên void resizeConsole(int width, int height) { HWND console = GetConsoleWindow(); RECT r; GetWindowRect(console, &r); MoveWindow(console, r.left, r.top, width, height, TRUE); } IV MODULE PREPARE A File Prepare.h File Prepare.h chứa khai báo hàm hỗ trợ cho trình chuẩn bị hình thành thức ăn khởi động lại liệu level 1 #pragma once #include "System.h" bool IsValidLevel1(int x, int y); bool IsValidLevel2(int x, int y); bool IsValidLevel3(int x, int y); bool IsValidLevel4(int x, int y); void GenerateFood(); void ResetDataLV1(); void ResetDataLV2(); void ResetDataLV3(); void ResetDataLV4(); B 10 11 File Prepare.cpp Hàm IsValidLevel1() bool IsValidLevel1(int x, int y) { for (int i = 0; i < SIZE_SNAKE; i++) { if (snake[i].x == x && snake[i].y == y) { return false; } } return true; } Hàm nhận vào đối số tọa độ random, false tiếp tục random, true tọa độ thức ăn đối số hàm Hàm IsValidLevel1() code dựa giao diện level Các level tồn 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 fscanf_s(file, "%d %d %d %d %d %d %d %d %d\n", &CHAR_LOCK, &MOVING, &SPEED, &STATE, &LEVEL, &LEVELUP, &temp, &SCORE, &SNAKE_COLOR); fscanf_s(file, "%d ", &SIZE_SNAKE); for (int i = 0; i < SIZE_SNAKE; i++) { fscanf_s(file, "%d %d ", &snake[i].x, &snake[i].y); } fscanf_s(file, "\n%d ", &FOOD_INDEX); for (int i = 0; i < 8; i++) { fscanf_s(file, "%d %d ", &food[i].x, &food[i].y); } fclose(file); } ShowCur(0); GotoXY(49, 15); cout