Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 51 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
51
Dung lượng
186,54 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 VI 10 Hàm InGame(int oldgame=0) 11 Hàm GameOver() 12 Hàm QuitGame() 13 Hàm Information() 14 Hàm SetSnakeColor() 15 Hàm SetSpeed() 16 Hàm SetSound() 17 Hàm Setting() MODULE DRAW A File Draw.h B File Draw.cpp Hàm DrawBoard(int x, int y, int width, int height, int curP Hàm SmallBoard() Hàm DrawSnakeAndFood(const char str, int start_char = Hàm DrawWallLevel2(), DrawWallLevel3(), DrawWallLev Hàm DrawGateLevel1(), DrawGateLevel2(), DrawGateLe Hàm DrawContinueGame() VII MODULE DEAD A File Dead.h B File Dead.cpp VIII Các hàm ReachBodyLeft(), ReachBodyRight(), ReachBod Các hàm LeftDeadLevel1(), RightDeadLevel1(), UpDeadL TẬP TIN MAIN.CPP I LỜI CẢM ƠN Trong suốt 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 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ênTiến Sĩ Trương Tồ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 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: 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]; 1 1 enum state { MENU, INGAME, SETTING, SETCOLOR, SETSPEED, SETSOU 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; 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 1{ 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 DrawWallLevel2(), DrawWallLevel3(), DrawWallLevel(4) Hàm thiết kế chướng ngại vật cho 2, 3, Mỗi level thiết kế với chướng ngại vật khác độ khó tăng dần Các hàm sử dụng hàm GotoXY(int x, int y) để đến tọa độ hình in kí tự để làm chướng ngại vật Hàm DrawGateLevel1(), DrawGateLevel2(), DrawGateLevel3(), DrawGateLevel4() Hàm thiết kế cổng để qua xuất người chơi điều khiển rắn ăn đủ lượng thức ăn level Các hàm sử dụng hàm GotoXY(int x, int y) để in kí tự tạo thành cổng hình Console Hàm DrawContinueGame() Hàm thiết lập để vẽ bảng sau người chơi tải lại game lưu 10 11 12 13 14 15 16 17 18 19 20 21 22 23 void DrawContinueGame() { system("cls"); SetColor(2); DrawBoard(1, 1, WIDTH_CONSOLE, HEIGH_CONSOLE); SmallBoard(); SetColor(2); switch (LEVEL) { case 2: DrawWallLevel2(); break; case 3: DrawWallLevel3(); break; case 4: DrawWallLevel4(); break; } if (LEVELUP == 1) { SetColor(3); if (LEVEL == 1) 31 32 33 } DrawSnakeAndFood(3); } VII MODULE DEAD A File Dead.h File chứa khai báo hàm kiểm tra việc di chuyển rắn có hợp lệ hay khơng (khơng đụng vào thân hay vào tường chướng ngại vật chơi) #pragma once bool ReachBodyLeft(); #include "System.h" bool ReachBodyRight(); bool ReachBodyUp(); bool ReachBodyDown(); 1 1 1 bool LeftDeadLevel1(); bool RightDeadLevel1(); bool UpDeadLevel1(); bool DownDeadLevel1(); bool LeftDeadLevel2(); bool RightDeadLevel2(); bool UpDeadLevel2(); bool DownDeadLevel2(); 2 bool LeftDeadLevel3(); bool RightDeadLevel3(); bool UpDeadLevel3(); bool DownDeadLevel3(); bool LeftDeadLevel4(); bool RightDeadLevel4(); bool UpDeadLevel4(); bool DownDeadLevel4(); B File Dead.cpp Các hàm ReachBodyLeft(), ReachBodyRight(), ReachBodyUp(), ReachBodyDown() Các hàm kiểm tra rắn di chuyển trái, phải lên, xuống có chạm vào thân khơng Nếu có, hàm trả giá trị “true”, cịn khơng, hàm trả giá trị “false” Ví dụ: hàm ReachBodyLeft() kiểm tra việc di ch rắn trình người chơi điều 10 11 bool ReachBodyLeft() { int headX = snake[0].x - 1; int headY = snake[0].y; for (int i = 0; i < SIZE_SNAKE - 1; i++) { if (snake[i].x == headX && snake[i].y == headY) return true; } return false; } 2 Các hàm LeftDeadLevel1(), RightDeadLevel1(), UpDeadLevel1(), DownDeadLevel1() Các hàm kiểm tra việc di chuyển trái, phải, lên xuống rắn 1; hàm trả giá trị “true” rắn đụng vào chướng ngại vật, trả “false” cho trường hợp di chuyển hợp lệ Ví dụ: hàm LeftDeadLevel1() bool LeftDeadLevel1() { // Processing hit walls if (snake[0].x - == 1) if (LEVELUP == 1) 23 24 25 } { // Processing hit the gate } 10 11 12 13 14 15 16 17 18 19 20 21 22 return false; Tương tự vậy, level có hàm kiểm tra việc di chuyển rắn tương ứng với chướng ngại vật cổng thiết kế VIII.TẬP TIN MAIN.CPP Sau thiết lập xong hàm cần thiết cho trò chơi, ta cần hàm Main để liên kết hàm trên, tạo thành trò chơi “Rắn săn mồi” hoàn chỉnh Mã nguồn hàm Main() khai báo sau: 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include "ProcessGame.h" int main() { interf = MENU; resizeConsole(950, 540); FixConsoleWindow(); DisableSelection(); ShowScrollbar(0); StartGame(); ShowCur(0); SetColor(2); Menu(); while (1) { switch (interf) { case MENU: Menu(); break; case INGAME: InGame(); break; case SETTING: Setting(); break; case SETCOLOR: SetSnakeColor(); break; case SETSPEED: SetSpeed(); break; case SETSOUND: SetSound(); 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 break; case INFORMATION: Information(); break; case LOADGAME: LoadGame(); // Pause the snake after loading game MOVING = ' '; InGame(1); break; case GAMEOVER: GameOver(); break; case QUITGAME: QuitGame(); break; } } return 0; } ... 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 Xây dựng trò chơi Rắn săn mồi đơn. .. 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... 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