Trong cuộc sống, nhu cầu giải trí là rất lớn.Và nhu cầu giải trí bằng trò chơi điện tử (game ) chiếm tỉ lệ rất cao. Với xu hướng và thị yếu người dùng luôn đòi hỏi mới mẻ, đẹp, lạ mắt và cái không thể thiếu là gần với thực tế. Sự thay đổi và phát triển của thế giới game diễn ra mạnh mẽ và liên tục, từ giai đoạn 2D đơn giản , game còn đơn giản và sinh động với các nhân vật hoạt hình, dần dần phát triển lên 3D với những mô phỏng xuất sắc về con người cũng như bối cảnh. Cùng với đó, các thư viện đồ họa liên tục ra đời và phát triển tạo sự tiện ích tối đa cho người lập trình. Giai đoạn hiện đại ngày nay. Một số trò chơi điện tử đa phần phong phú và đồ họa đỉnh cao, nhưng vẫn có những tín đồ đam mê một thời với các tự game huyền thoại thời 8x 9x. Chúng em cũng không ngoại lệ. Theo tham khảo được biêt thời đó các tựa game này chỉ viết bằng các ngôn ngữ cổ điển phức tạp, điển hình là Java. Dựa vào nền tảng cổ điển nhưng rất mạnh mẽ đó, nhóm đã xây dựng một game dựa trên một trò chơi rất quen thuộc trong ký ức đối với hầu hết mọi người, đó là trò chơi Bắn Xe Tăng ( Battle Tank 1989). Với đồ họa hấp dẫn, sinh động, dựa vào nền tảng Java điển hình để phát triển trên nền tảng C# hiện đại, cải tiến lại số ít trong trò chơi nhưng vẫn giữ cách thức chơi lôi cuốn, hấp dẫn, không kém phần gợi nhớ ký ức. Nhóm hy vọng mang lại trải nghiệm tốt nhất cho người chơi khi đến với tựa game một thời đi vào lòng người này
BỘ LAO ĐỘNG THƯƠNG BINH VÀ XÃ HỘI TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT VĨNH LONG KHOA CÔNG NGHỆ THƠNG TIN - - XÂY DỰNG TRỊ CHƠI BẮN XE TANK CHẾ ĐỘ MULTIPLAYER ( CLIENT – SERVER ) Giảng viên hướng dẫn : Nguyễn Thị Hồng Yến Sinh viên thực hiên: Nguyễn Phong Nhã Phạm Xuân Lộc Huỳnh Trung Hiếu MSSV: 16004053 MSSV: 160040-MSSV: 16004024 Lớp: ĐH CNTT 2016 Khóa: 41 Vĩnh Long năm 2019 Nhận xét đánh giá điểm người hướng dẫn Ý thức thực hiện: Nội dung thực hiện: Hình thức trình bày: Tổng hợp kết quả: Tổ chức báo cáo trước hội động Tổ chức chấm thuyết minh Vĩnh Long, ngày…….tháng……năm…… Người hướng dẫn (Ký ghi rõ họ tên) LỜI CẢM ƠN Trước hết chúng em xin gửi tới thầy cô khoa Công Nghệ Thông Tin trường Đại học Sư Phạm Kỹ Thuật lời cảm ơn sâu sắc chân thành Với dạy tận tình chu đáo thầy cơ, đến chúng em hồn thành đề tài : “Xây dựng trò chơi Bắn xe tăng mơ hình Client Server” Đặc biệt chúng em xin gửi lời cảm ơn chân thành tới cô: Nguyễn Thị Hồng Yến quan tâm giúp đỡ, hướng dẫn chúng em hoàn thành đồ án thời gian qua Chúng em xin bày tỏ biết ơn đến lãnh đạo Trường Đại học Sư Phạm Kỹ Thuật Vĩnh Long, khoa Công Nghệ Thông Tin trực tiếp gián tiếp giúp đỡ chúng em suốt trình học tập nghiên cứu đề tài Với điều kiện thời gian kinh nghiệm hạn chế chúng em, đồ án tránh thiếu sót Chúng em mong nhận bảo, đóng góp ý kiến thầy để tơi có điều kiện bổ sung, nâng cao kiến thức mình, phục vụ tốt cơng tác thực tế sau Chúng em xin chân thành cảm ơn! Nhóm thực hiên: Nguyễn Phong Nhã Phạm Xuân Lộc Huỳnh Trung Hiếu MỤC LỤC CHƯƠNG : GIỚI THIỆU ĐỀ TÀI 1.1 Giới thiệu chương trình 1.1 Luật chơi 1.2 Hướng dẫn sử dụng .2 CHƯƠNG : Kỹ thuật lập trình 2.1 Sơ lược ngơn ngữ trình C# GDI a Giới thiệu ngôn ngữ lập trình C# .5 b Giới thiệu GDI+ 2.2 Design Pattern a State Pattern b Singleton quản lý Resource CHƯƠNG : THIẾT KẾ CHƯƠNG TRÌNH 3.1 Game flow 3.2 Cấu trúc chương trình 3.2.1 FrameworkGame a Lớp Form1 Gameplay b Lớp GameState 3.2.2 Các lớp quản lý state game .9 3.2.3 Các lớp hỗ trợ khác CHƯƠNG : ĐÁNH GIÁ 10 CHƯƠNG : Mục Lục .11 LỜI NÓI ĐẦU Trong sống, nhu cầu giải trí lớn.Và nhu cầu giải trí trò chơi điện tử (game ) chiếm tỉ lệ cao Với xu hướng thị yếu người dùng ln địi hỏi mẻ, đẹp, lạ mắt thiếu gần với thực tế Sự thay đổi phát triển giới game diễn mạnh mẽ liên tục, từ giai đoạn 2D đơn giản , game đơn giản sinh động với nhân vật hoạt hình, phát triển lên 3D với mô xuất sắc người bối cảnh Cùng với đó, thư viện đồ họa liên tục đời phát triển tạo tiện ích tối đa cho người lập trình Giai đoạn đại ngày Một số trò chơi điện tử đa phần phong phú đồ họa đỉnh cao, có tín đồ đam mê thời với tự game huyền thoại thời 8x 9x Chúng em không ngoại lệ Theo tham khảo biêt thời tựa game viết ngơn ngữ cổ điển phức tạp, điển hình Java Dựa vào tảng cổ điển mạnh mẽ đó, nhóm xây dựng game dựa trò chơi quen thuộc ký ức hầu hết người, trị chơi Bắn Xe Tăng ( Battle Tank 1989) Với đồ họa hấp dẫn, sinh động, dựa vào tảng Java điển hình để phát triển tảng C# đại, cải tiến lại số trị chơi giữ cách thức chơi lôi cuốn, hấp dẫn, không phần gợi nhớ ký ức Nhóm hy vọng mang lại trải nghiệm tốt cho người chơi đến với tựa game thời vào lòng người CHƯƠNG : GIỚI THIỆU ĐỀ TÀI 1.1 Giới thiệu chương trình Đến với môn “Ngôn ngữ C#” chúng em làm game mơ theo trị chơi phổ biến “Bắn xe tăng ( Battle Tank 1989 ) ” Nguyên tắc chơi bắn xe tăng: Đơn giản việc điều khiển phím di chuyển cho Player ( bên trái ) phím lên xuống trái phải (W.S.A.D) để luồng lách né tránh tiêu diệt địch ( Boss ) Hỗ trợ lẫn diệt hết địch nhận điểm thưởng qua kết thúc trị chơi Mỗi vịng tăng độ khó gấp đôi số mạng chơi người chơi Khi hết mạng trò chơi Thua kết thúc 1.1 Luật chơi ⮚ Bảo vệ pháo đài: Khi bắt đầu khởi tạo pháo đài đồng minh, công việc ngăn cản quân địch tiến phá tiêu diệt hết địch tầm nhắm ⮚ Di chuyển: Có thể phá số địa hình mềm để vượt xun địa hình ( Khối gạch, Bụi cỏ…) Có thể nấp phía sau địa hình cứng để tránh đạn địch ( Khối đá ) Có thể dứng phía địa hình ẩn thân để bắn địch bên phía bên ( Dịng sơng , Cây cối ) ⮚ Thắng Cuộc: Khi người chơi hỗ trợ vượt qua tất chơi Boss cuối để phá đảo trò chơi với số lượng mạng lớn pháo đài cịn ● Thua cuộc: Một người chơi hết mạng pháo đài bị địch phá hủy 1.2 Hướng dẫn sử dụng - Menu chính: ● Biến cố(0): xảy hình Xử lý hiển thị, bao gồm: + Load thơng tin chọn chế độ chơi , Một người người chọn đồ vòng chơi tùy chỉnh + Nút thoát hiển thị ● Biến cố (1) xảy nhấn nút Chơi ( người ), bao gồm:: + Đọc thông tin khởi tạo đồ theo chế độ hiển thị quân địch lên hình + Vơ hiệu hố ẩn form Menu Khởi tạo form mở trò chơi ● Biến cố (2): xảy nhấn nút Chơi người , bao gồm: + Đọc thông tin khởi tạo đồ theo chế độ hiển thị quân địch lên hình + Khởi tạo người chơi load hàm di chuyển + Gọi lên luật tương tác người chơi với ● Biến cố (3) xảy nhấn nút Bản đồ, bao gồm: + Hiển thị form sử dụng image để tạo đồ tùy chọn ● Biến cố(4) xảy nhấn nút Chọn vòng chơi, bao gồm: + Hiển thị form chọn vòng muốn chơi lại đến vòng vượt qua gần ● Biến cố(5) xảy nhấn nút Thoát, bao gồm: + Gọi hàm tồn trị chơi - Giao diện Chơi người : Giao diện người chơi Giao diện người chơi - Giao diện Tạo đồ người chơi: Giao diện tạo đồ tùy chọn - Giao diện chọn chơi : Giao diện chọn chơi tùy chọn CHƯƠNG : Kỹ thuật lập trình 2.1 Sơ lược ngơn ngữ trình C# mơ hình Client Server NET FRAMEWORK a Giới thiệu ngôn ngữ lập trình C# C# ngơn ngữ lập trình hướng đối tượng, cấu trúc lập luận C# có đầy đủ đặc tính ngơn ngữ lập trình hướng đối tượng trước (C++, Java) C# thiết kế cho tảng NET Framework, công nghệ đầy triển vọng việc phát triển ứng dụng hệ thống mạng internet C# trình biên dịch hướng NET, nghĩa tất mã C# luôn chạy môi trường NET Framework C# ngơn ngữ lập trình mới: - Nó thiết kế riêng để dùng cho Microshoft’s Framework - Nó ngơn ngữ hồn tồn hướng đối tượng thiết kế dựa sở ngôn ngữ hướng đối tượng khác C# ngôn ngữ độc lập, thiết kế đê sinh mã đích môi trường NET phần NET, có vài đặc trưng hỗ trợ NET khơng hỗ trợ C#, có đặc trưng C# hỗ trợ mà NET không hỗ trợ Giới thiệu NET FRAMEWORK Socket không hướng kết nối (UDP Socket) Socket giao diện lập trình ứng dụng (API) mạng Thông qua giao diện lập trình điều khiển việc truyền thơng hai máy sử dụng giao thức mức thấp TCP, UDP… Các loại socket o Socket hướng kết nối (TCP ) o Socket không hướng kết nối (UDP) o Raw Socket Đặc điểm Socket khơng hướng kết nối (UDP) o Hai tiến trình liên lạc với không kết nối trực tiếp o Thông điệp gửi phải kèm theo địa người nhận o Thơng điệp gửi nhiều lần o Người gửi không chắn thông điệp tới tay người nhận o Thơng điệp gửi sau đến đích trước thơng điệp gửi trước Số hiệu cổng Socket o Để thực giao tiếp, hai q trình phải cơng bố số hiệu cổng socket mà sử dụng o Mỗi cổng giao tiếp thể địa xác định hệ thống Khi trình gán số hiệu cổng, nhận liệu gửi đến cổng từ trình khác o Q trình cịn lại u cầu tạo socket Rất nhiều ứng dụng Internet sử dụng UDP Dựa ưu nhược điểm UDP kết luận UDP có ích khi: Sử dụng cho phương thức truyền broadcasting multicasting muốn truyền tin với nhiều host Kích thước datagram nhỏ Không cần thiết lập liên kết Khơng cần truyền lại gói tin Ứng dụng không gửi liệu quan trọng Băng thơng mạng đóng vai trị quan trọng Lớp UDPClient Giao thức UDP (User Datagram Protocol hat User Define Protocol) giao thức phi kết nối (Connectionless) có nghĩa bên gửi liệu cho bên mà khơng cần biết bên sẵn sang hay chưa? (Nói cách khác khơng cần thiết lập kết nối hai bên tiến hành trao đổi thông tin) Giao thức không tin cậy giao thức TCP tốc độ lại nhanh dễ cài đặt Ngoài ra, với giao thức UDP ta cịn gửi gói tin quảng bá (Broadcast) cho đồng thời nhiều máy Trong NET, lớp UDPClient(nằm System.Net.Sockets) đóng gói chức giao thức UDP 2.2 Design Pattern a State Pattern State chơi độc lập với nhau, State chứa toàn đối tượng liên quan, xử lý Game, hiển thị lên hình nằm State Tất State thừa kế từ lớp ảo State Lợi ích State xây dựng theo cấu trúc chuẩn, nên Game có tính hướng đối tượng cao Quản lý nhớ tốt, phát triển chơi độc lập, tránh bị lỗi dây chuyền thích hợp với dự án lớn nhiều người tham gia ⮚ ⮚ ⮚ ⮚ Mỗi state chứa số hàm public void Init () public void UpdateInput() public void Update () public void Draw (Graphics g) State Init UpdateInput Update Draw State MenuState PlayState AboutState v.v.v b Singleton quản lý Resource Class ResourceManager dùng để quản lý chặt chẽ image cho image load lần nhằm tiết kiệm nhớ tránh tình trạng ảnh load nhiều lần Ngồi cịn làm tăng tốc độ xử lý game tất resource load trước Ưu điểm: Khi sử dụng singleton việcquản lý resource tập trung dễ truy xuất xử lý sau này, resource mang tính nhất, khơng sợ trường hợp ảnh hay file nhạc load nhiều lần Nhược điểm: Vì resource load lần nên tốn nhớ, quản lý resource không linh động, có trường hợp resource khơng sử dụng tới load, hủy resource không sử dụng Chú ý: Sử dụng singleton dễ nhầm lẫn với sử dụng biến static Về chất singleton ln có static thể đại diện cho lớp (instance ) sử dụng lớp tất thực thông qua thể Để đảm bảo tính qn phương thức constructor class phải private gọi lần instance chưa khởi tạo I 10 CHƯƠNG : THIẾT KẾ CHƯƠNG TRÌNH 3.1 Game flow Bắn Xe Tank Bắt đầu ứng dụng Chơi Menu Tùy chọn Trợ giúp Dừng lại bắt đầu game Trị chơi Thốt Đóng ứng dụng Thắng Kết thúc trò chơi 3.2 Cấu trúc chương trình Tồn chương trình chia làm phần bao gồm: 3.2.1 FrameworkGame Đảm nhận nhiệm vụ tạo cửa sổ game, thiết lập cầu hình cho game tạo vòng lặp xử lý game, khởi tạo game đối tượng Graphics ứng dụng Trong phần đảm nhận việc quản lý State (Screen ) game, xác định state xử dụng thay đổi Screen có tín hiệu a Lớp Form1 Gameplay Có nhiệm vụ chính: 11 ⮚ Lớp Form1 :Khởi tạo cửa sổ game, thiết lập cấu hình game cho graphics cửa sổ ứng dụng kích thước số, thiết lập double buffer, thiết lập quản lý time cho game, khởi tạo đối tượng Graphics cho game ⮚ Lớp Gameplay : Đảm nhận nhiệm vụ handle state để quản lý state game, thây đổi state cần thiết, đồng thời quản lý việc truyền input cho state 12 Ưu điểm: Dễ sử dụng, code đơn giản dễ thay đổi cài đặt ban đầu tốc độ FPS, Screen v.v.v… Vì tất tập trung class Nhược điểm: Vì tích hợp xử lý cửa sổ với quản lý screen chung nên gây khó khăn cho việc port game sang tảng khác, gây rắc rối không tường minh đổi platform b Lớp GameState Đây class ảo State khác thừa kế sử dụng State lớp chứa số hàm như: ⮚ Init (): Khởi tạo screen ⮚ Draw (): Render screen ⮚ Update (): Xử lý logic game ⮚ UpdateInput() : Xử lý Input(Mouse Keyboard) cho screen Kết hợp State lớp Gameplay thiết kế theo State pattern, đôi đảm nhận công việc quản lý screen game 3.2.2 Các lớp quản lý state game Các screen game thiết kế đây, đảm bảo cho việc quản lý screen dễ dàng hơn, tập trung, giúp cho việc thay đổi screen cách dễ dàng a) Menu: Được thừa kế từ State có nhiệm vụ quản lý Screen Menu chọn play, options ,about, exit,… b) Options: Cũng thừa kế từi State Có nhiệm vụ đưa lựa chọn bật/tắt hiệu ứng âm game, nhạc Giúp người chơi tùy chỉnh, giúp thoải mái chơi game c) Main Game: Nhiệm vụ nơi xử lý game Điền kiển input, thực render, hay xử lý logic Xác định win lose, win game Đây lớp chứa thành phần liên quan đến xử lý đối tượng object game Là lớp quan trọng d) Pause Game: Hỗ trợ người chơi dừng game bận quay lại menu muốn chơi lại từ đầu e) Win Game: Thông báo chúc mừng người chơi chiến thắng trận có ngựa vào chuồng f) Credit: Giới thiệu thơng tin nhóm làm game, phiên game tại… 3.2.3 Các lớp hỗ trợ khác a) Quản lý resources: ResourceManager : quản lý hình ảnh cho khối cube game, việt dựa cấu trúc singleton CSoundManager: quản lý âm cho game, viết dựa singleton b) Define: Là nơi lưu trữ giá trị cố định biến game Giúp dễ dàng chỉnh sửa , theo dõi sau 13 c) Board: Là class xử lý logic cho game d) Net Framework: Khởi tạo hàm để tạo giao thức TCP UDP kết nối máy tính khác qua cổng Port IP Để truyền liệu tương tác game qua lại CHƯƠNG : ĐÁNH GIÁ Ưu điểm: Giao diện đẹp, đơn giản mà hấp dẫn, thân thiện với người dùng, âm sống động Dung lượng nhỏ Chạy tốt hệ điều hành windows Nhược điểm: Còn số lỗi nhỏ, hiệu ứng chưa thực tốt Chưa hỗ trợ tốt Lan + Online Chế độ chơi với máy tính (AI) cịn sơ xài , Hướng phát triển: Cải thiện tương tác với người chơi (Giao diện, Thơng báo có lỗi ) Cải thiện hình ảnh, hiệu ứng, chuyển động mượt hơn, hấp dẫn Thêm chế độ chơi với AI khó hơn, hỗ trợ bug lỗi qua LAN , Online Nâng cấp chế độ chơi từ cổ điển sang đại phong phú lôi giữ đồ họa truyền thống Đưa lên tảng Mobile IOS, Android, Windows phone… 14 CHƯƠNG : MỤC LỤC Bảng phân công công việc Tên thành viên Công việc Lê Thanh Danh Phân công công việc cho thành viên giám sát tiến độ, viết framework lõi cho hoạt động game, liên kết screen , xử lý logic cho game Võ Hồng Phúc Design hình ảnh, âm thanh, viết screen flow, code lớp GamePlay, quản lý state game chuyển đổi state Nguyễn Hồng Tìm hiểu thơng tin game, viết báo cáo, code screen Mạnh Cường About + Helps, xử lý object game (vị trí, hình ảnh, trạng thái) Võ Hoàng Phúc Viết state "Pause Game", state "Options", Test game fix bug (nếu có), code lớp Define (quản lý giá trị cố định game) TÀI LIỆU THAM KHẢO [1] Adam Ward, Dragos Brezoi, Iulian Serban,Tiberiu Radu - GDI+ Application Custom Controls with Visual C# 2012 [2] Ian Griffiths - Programming C# 5.0 2012 15 [3] Christian Nagel, Bill Evjen, Jay Glynn, Karli Watson, Morgan Skinner Professional C# 4.0 and NET 2010 [4] Lập trình C# – Nhất Nghệ 16 ... theo trị chơi phổ biến ? ?Bắn xe tăng ( Battle Tank 1989 ) ” Nguyên tắc chơi bắn xe tăng: Đơn giản việc điều khiển phím di chuyển cho Player ( bên trái ) phím lên xuống trái phải (W.S.A.D) để luồng... vào tảng cổ điển mạnh mẽ đó, nhóm xây dựng game dựa trò chơi quen thuộc ký ức hầu hết người, trò chơi Bắn Xe Tăng ( Battle Tank 198 9) Với đồ họa hấp dẫn, sinh động, dựa vào tảng Java điển hình... Biến c? ?(0 ): xảy hình Xử lý hiển thị, bao gồm: + Load thông tin chọn chế độ chơi , Một người người chọn đồ vòng chơi tùy chỉnh + Nút thoát hiển thị ● Biến cố (1 ) xảy nhấn nút Chơi ( người ), bao