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
Trang 1BỘ 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 :
Trang 2Vĩnh Long năm 2019
Nhận xét và đánh giá điểm của 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ý và ghi rõ họ tên)
Trang 3LỜI CẢM ƠN
Trước hết chúng em xin gửi tới các 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 và chân thành nhất Với sự chỉ dạy tận tình chuđáo của thầy cô, đến nay chúng em đã có thể hoàn thành đề tài : “Xây dựng trò chơi Bắn
xe tăng trên mô hình Client Server”
Đặc biệt chúng em xin gửi lời cảm ơn chân thành nhất 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 này trong thời gian qua
Chúng em xin bày tỏ sự biết ơn đến lãnh đạo Trường Đại học Sư Phạm Kỹ Thuật VĩnhLong, khoa Công Nghệ Thông Tin đã trực tiếp và gián tiếp giúp đỡ chúng em trong suốtquá trình học tập và nghiên cứu đề tài
Với điều kiện và thời gian cũng như kinh nghiệm còn hạn chế của chúng em, đồ án nàykhông thể tránh được những sự thiếu sót Chúng em rất mong nhận được sự chỉ bảo, đónggóp ý kiến của các thầy cô để tôi có điều kiện bổ sung, nâng cao kiến thức của mình,phục vụ tốt hơn công tác thực tế sau này
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
Trang 4MỤC LỤC
CHƯƠNG 1 : GIỚI THIỆU ĐỀ TÀI 1
1.1 Giới thiệu chương trình 1
1.1 Luật chơi 1
1.2 Hướng dẫn sử dụng 2
CHƯƠNG 2 : Kỹ thuật lập trình 5
2.1 Sơ lược về ngôn ngữ trình C# và GDI 5
a Giới thiệu về ngôn ngữ lập trình C# 5
b Giới thiệu về GDI+ 5
2.2 Design Pattern 6
a State Pattern 6
b Singleton quản lý Resource 7
CHƯƠNG 3 : THIẾT KẾ CHƯƠNG TRÌNH 8
3.1 Game flow 8
3.2 Cấu trúc chương trình 8
3.2.1 FrameworkGame 8
a Lớp Form1 và Gameplay 8
b Lớp GameState 9
3.2.2 Các lớp quản lý từng state trong game 9
3.2.3 Các lớp hỗ trợ khác 9
CHƯƠNG 4 : ĐÁNH GIÁ 10
CHƯƠNG 5 : Mục Lục 11
Trang 5LỜI NÓI ĐẦU
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ấtsắ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ểnphứ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ố íttrong 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 gamemột thời đi vào lòng người này
Trang 6CHƯƠNG 1 : 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 một game mô phỏng theo trò
chơi rất phổ biến là “Bắn xe tăng ( Battle Tank 1989 ) ”.
Nguyên tắc chơi bắn xe tăng: Đơn giản chỉ việc điều khiển các phím dichuyển cho Player 1 ( bên trái ) bằng các phím lên xuống trái phải (W.S.A.D) đểluồng lách né tránh và tiêu diệt địch ( Boss ) Hỗ trợ lẫn nhau diệt hết địch nhậnđiểm thưởng và qua màn tiếp theo cho đến khi kết thúc trò chơi Mỗi vòng sẽ tăng
độ khó gấp đôi và số mạng chơi cơ bản của 2 người chơi là 5 Khi 1 trong 2 hếtmạng trò chơi Thua cuộc và kết thúc ngay lập tức
1.1 Luật chơi
⮚ Bảo vệ pháo đài: Khi bắt đầu sẽ khởi tạo một pháo đài đồng minh, công việc
của chúng ta là ngăn cản quân địch tiến phá và tiêu diệt hết địch trong tầmnhắm
⮚ Di chuyển: Có thể phá 1 số địa hình mềm để vượt xuyên đị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 của địch ( Khối
Trang 7đá ) Có thể dứng phía trên địa hình hoặc ẩn thân để bắn địch bên phía bên kia( Dòng sông , Cây cối )
⮚ Thắng Cuộc: Khi 1 hoặc 2 người chơi hỗ trợ nhau vượt qua tất cả các màn
chơi và màn Boss cuối cùng để phá đảo trò chơi với số lượng mạng của cả 2 lớn hơn hoặc bằng 1 và pháo đài chính vẫn còn
● Thua cuộc: Một trong 2 người chơi mất hết mạng hoặc pháo đài chính bị
địch phá hủy
1.2Hướng dẫn sử dụng
- Menu chính:
● Biến cố(0): xảy ra khi màn hình Xử lý chính sắp hiển thị, bao gồm:
+ Load thông tin chọn chế độ chơi , Một người hoặc 2 người chọn bản
đồ và vòng chơi tùy chỉnh+ Nút thoát cũng được hiển thị
● Biến cố (1) xảy ra khi nhấn nút Chơi ngay ( 1 người ), bao gồm::
+ Đọc thông tin và khởi tạo bản đồ theo chế độ và hiển thị các quân địch lên màn hình
+ Vô hiệu hoá và ẩn form Menu Khởi tạo form mới mở trò chơi
● Biến cố (2): xảy ra khi nhấn nút Chơi 2 người , bao gồm:
2
1
5
4 3 2
Trang 8+ Đọc thông tin và khởi tạo bản đồ theo chế độ và hiển thị các quân địch lên màn hình.
+ Khởi tạo 2 người chơi và load 2 hàm di chuyển+ Gọi lên các luật cơ bản tương tác giữa 2 người chơi với nhau
● Biến cố (3) xảy ra khi nhấn nút Bản đồ, bao gồm:
+ Hiển thị form sử dụng các image để tạo bản đồ tùy chọn
● Biến cố(4) xảy ra khi nhấn nút Chọn vòng chơi, bao gồm:
+ Hiển thị form chọn các vòng muốn chơi lại hoặc đi đến vòng đã vượt qua gần nhất
● Biến cố(5) xảy ra khi nhấn nút Thoát, bao gồm:
+ Gọi hàm thoát toàn bộ trò chơi
- Giao diện Chơi một và 2 người :
Giao diện 1 người chơi
Trang 9Giao diện 2 người chơi
4
Trang 10- Giao diện Tạo bản đồ người chơi:
Giao diện tạo bản đồ tùy chọn
- Giao diện chọn màn chơi :
Giao diện chọn màn chơi tùy chọn
Trang 11CHƯƠNG 2 : Kỹ thuật lập trình
2.1 Sơ lược về ngôn ngữ trình C# và mô hình Client Server NET FRAMEWORK
a Giới thiệu về ngôn ngữ lập trình C#
C# là một ngôn ngữ lập trình hướng đối tượng, cấu trúc và lập luận của C#
có đầy đủ đặc tính của một ngôn ngữ lập trình hướng đối tượng trước đó (C++,Java) C# được thiết kế cho nền tảng NET Framework, một công nghệ mới đầytriển vọng trong việc phát triển các ứng dụng hệ thống và mạng internet C# làmột trình biên dịch hướng NET, nghĩa là tất cả các mã C# luôn luôn chạy trênmôi trường NET Framework C# là một ngôn ngữ lập trình mới:
- Nó được thiết kế riêng để dùng cho Microshoft’s Framework
- Nó là một ngôn ngữ hoàn toàn hướng đối tượng được thiết kế dựa trên cơ sởcủa các ngôn ngữ hướng đối tượng khác
C# là một ngôn ngữ độc lập, nó được thiết kế đê sinh ra mã đích trong môitrường NET nhưng không phải là một phần của NET, bởi vậy có một vài đặctrưng được hỗ trợ bởi NET nhưng không hỗ trợ C#, và có những đặc trưng C# hỗtrợ mà NET không hỗ trợ
Giới thiệu về NET FRAMEWORK
Socket không hướng kết nối (UDP Socket)
Socket là một giao diện lập trình ứng dụng (API) mạng Thông qua giao diện này chúng ta
có thể lập trình điều khiển việc truyền thông giữa hai máy sử dụng các giao thức mức thấp
là 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
6
Trang 13 Đặc điểm của Socket không hướng kết nối (UDP)
o Hai tiến trình liên lạc với nhau không kết nối trực tiếp
o Thông điệp gửi đi phải kèm theo địa chỉ của người nhận
o Thông điệp có thể gửi nhiều lần
o Người gửi không chắc chắn thông điệp tới tay người nhận
o Thông điệp gửi sau có thể đến đích trước thông điệp gửi trước đó
Số hiệu của cổng Socket
o Để có thể thực hiện các cuộc giao tiếp, một trong hai quá trình phải công bố
số hiệu cổng của socket mà mình sử dụng
o Mỗi cổng giao tiếp thể hiện một địa chỉ xác định trong hệ thống Khi quá trình được gán một số hiệu cổng, nó có thể nhận dữ liệu gửi đến cổng này
từ các quá trình khác
o Quá trình còn lại cũng yêu cầu tạo ra một socket
Rất nhiều ứng dụng trên Internet sử dụng UDP Dựa trên các ưu và nhược điểm của UDP chúng ta có thể kết luận UDP có ích khi: Sử dụng cho các phương thức truyền
broadcasting và multicasting khi chúng ta 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 các gói tin
Ứng dụng không gửi các dữ liệu quan trọng
8
Trang 14 Băng thông của mạng đóng vai trò quan trọng Lớp UDPClient Giao thức UDP (User Datagram Protocol hat User Define Protocol) là một giao thức phi kết nối (Connectionless) có nghĩa là một bên có thể gửi dữ liệu cho bên kia mà không cần biết là bên đó đã sẵn sang hay chưa? (Nói cách khác là không cần thiết lập kết nối giữa hai bên khi tiến hành trao đổi thông tin) Giao thức này không tin cậy bằng giao thức TCP nhưng tốc độ lại nhanh và dễ cài đặt Ngoài ra, với giao thức UDP
ta còn có thể gửi các gói tin quảng bá (Broadcast) cho đồng thời nhiều máy
Trong NET, lớp UDPClient(nằm trong System.Net.Sockets) đóng gói các chức năng của giao thức UDP
2.2 Design Pattern
a State Pattern
State là những màn chơi độc lập với nhau, State chứa toàn bộ các đối tượng liênquan, xử lý Game, hiển thị lên màn hình đều nằm ở mỗi State Tất cả State đều đượcthừa kế từ một lớp thuần ảo là State
Lợi ích là các State được xây dựng theo một cấu trúc chuẩn, nên Game có tínhhướng đối tượng cao Quản lý bộ nhớ tốt, phát triển các màn chơi độc lập, tránh bị lỗi dâychuyền thích hợp với các dự án lớn nhiều người tham gia
Mỗi state đều chứa một số hàm
⮚ public void Init ()
⮚ public void UpdateInput()
⮚ public void Update ()
⮚ public void Draw (Graphics g)
Trang 15b Singleton quản lý Resource
Class ResourceManager dùng để quản lý chặt chẽ các image sao cho mỗiimage chỉ được load một lần nhằm tiết kiệm bộ nhớ tránh tình trạng một ảnh loadnhiều lần Ngoài ra còn làm tăng tốc độ xử lý của game vì tất cả resource đều đượcload trước
Ưu điểm: Khi sử dụng singleton thì việcquản lý resource tập trung dễ truy
xuất xử lý sau này, resource mang tính duy nhất, không sợ trường hợp một tấmảnh hay file nhạc được load nhiều lần
Nhược điểm: Vì resource đều được load một lần nên sẽ tốn bộ nhớ, quản
lý resource không linh động, có trường hợp resource đó không sử dụng tới vẫnđược load, sẽ không thể hủy resource khi không sử dụng
Chú ý: Sử dụng singleton rất dễ nhầm lẫn với sử dụng các biến static
Về bản chất singleton luôn có một static thể hiện đại diện cho cả lớp(instance ) khi sử dụng lớp đó tất cả đều được thực hiện thông qua thể hiện này
Để đảm bảo tính nhất quán này thì phương thức constructor của class đóphải private và chỉ được gọi một lần duy nhất nếu như instance chưa được khởitạo
I.
10
Trang 16CHƯƠNG 3 : THIẾT KẾ CHƯƠNG TRÌNH
Trong phần này cũng đảm nhận việc quản lý các State (Screen ) trong game, xácđịnh state hiện tại đang xử dụng và thay đổi Screen khi có tín hiệu
a Lớp Form1 và Gameplay
Có 2 nhiệm vụ chính:
Bắn Xe Tank
Bắt đầu ứng dụng
Bắt đầu
Đóng ứng dụng
Đóng ứng dụng
Trò chơi chính
Trò chơi chính Kết thúc trò chơi
Kết thúc trò chơi Thắng
Tùy chọn
Dừng lại hoặc bắt đầu game mới
Trợ giúp
Trang 17⮚ Lớp Form1 :Khởi tạo cửa sổ game, thiết lập cấu hình game cho graphics củacửa sổ ứng dụng như kích thước của số, thiết lập double buffer, thiết lập quản
lý time cho game, và khởi tạo đối tượng Graphics chính cho game
⮚ Lớp Gameplay : Đảm nhận nhiệm vụ như handle state để quản lý state hiện tạitrong game, thây đổi state khi cần thiết, đồng thời cũng quản lý việc truyềninput cho state hiện tại
12
Trang 18Ưu điểm: Dễ sử dụng, code đơn giản dễ thay đổi các cài đặt ban đầu nhưtốc độ FPS, Screen đầu tiên v.v.v… Vì tất cả đều được tập trung trong một class.
Nhược điểm: Vì tích hợp xử lý cửa sổ với quản lý screen chung nên sẽ gâykhó khăn cho việc port game sang các nền tảng khác, gây rắc rối không tườngminh khi đổi platform
b Lớp GameState
Đây là class thuần ảo để cho các State khác thừa kế sử dụng State là lớp căn bảnchứa một số hàm như:
⮚ Init (): Khởi tạo của từng screen
⮚ Draw (): Render của từng screen
⮚ Update (): Xử lý logic trong game
⮚ UpdateInput() : Xử lý Input(Mouse và Keyboard) cho screen
Kết hợp giữa State và lớp Gameplay được thiết kế theo State pattern, bộ đôi này
sẽ đảm nhận các công việc quản lý screen trong game
3.2.2 Các lớp quản lý từng state trong game
Các screen trong game sẽ được thiết kế tại đây, đảm bảo cho việc quản lý cácscreen dễ dàng hơn, tập trung, giúp cho việc thay đổi các screen một cách dễ dàng hơn
a) Menu: Được thừa kế từ State có nhiệm vụ quản lý Screen Menu như
chọn play, options ,about, exit,…
b) Options: Cũng được thừa kế từi State Có nhiệm vụ là đưa ra các
lựa chọn bật/tắt hiệu ứng âm thanh trong game, nhạc nền Giúpngười chơi có thể tùy chỉnh, giúp thoải mái trong khi chơi game
c) Main Game: Nhiệm vụ là nơi xử lý chính trong game Điền kiển
input, thực hiện render, hay xử lý logic Xác định win lose, wintrong game Đây là lớp chứa các thành phần liên quan đến xử lý củatừng đối tượng object trong game Là lớp quan trọng nhất
d) Pause Game: Hỗ trợ người chơi dừng game khi bận hoặc quay lại
menu khi 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 trong
trận hiện tại khi có 4 con ngựa vào chuồng
f) Credit: Giới thiệu các thông tin về nhóm làm game, phiên bản game
hiện 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 các
khối cube trong game, được việt dựa trên cấu trúc của singleton.CSoundManager: quản lý âm thanh cho game, cũng được viết dựatrên singleton
b) Define: Là nơi lưu trữ các giá trị cố định của các biến trong game.
Giúp dễ dàng chỉnh sửa , theo dõi sau này
Trang 19c) Board: Là class xử lý logic chính cho game
d) Net Framework: Khởi tạo các hàm để tạo giao thức TCP UDP kết
nối 2 máy tính khác nhau qua 1 cổng Port trong 1 IP Để truyền dữliệu và tương tác game qua lại
CHƯƠNG 4 : ĐÁ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
thanh sống động Dung lượng nhỏ Chạy tốt trên mọi hệ điều hành windows
Nhược điểm: Còn một số lỗi nhỏ, hiệu ứng chưa thực sự 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 , cơ bản
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 khi có lỗi )
Cải thiện hình ảnh, hiệu ứng, chuyển động mượt hơn, hấp dẫn hơn
Thêm các 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 hiện đại phong phú lôi cuốn hơn nhưng vẫngiữ được đồ họa cơ bản truyền thống
Đưa lên các nền tảng Mobile như IOS, Android, Windows phone…
14
Trang 20CHƯƠNG 5 : 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 các thành viên và giám sát tiến
độ, viết framework lõi cho hoạt động của game, liên kết các screen , xử lý logic cho game
Võ Hoàng Phúc Design hình ảnh, âm thanh, viết screen flow, code lớp
GamePlay, quản lý các state của game và chuyển đổi stateNguyễn Hoàng
Mạnh Cường
Tìm hiểu thông tin về game, viết báo cáo, code screen About + Helps, xử lý các object trong game (vị trí, hình ảnh, trạng thái)
Võ Hoàng Phúc Viết state "Pause Game", state "Options", Test game và
fix bug (nếu có), code lớp Define (quản lý các giá trị cố định trong game)
TÀI LIỆU THAM KHẢO
[1] Adam Ward, Dragos Brezoi, Iulian Serban,Tiberiu Radu - GDI+ Application
[2] Ian Griffiths - Programming C# 5.0 2012