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 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, 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. Một trong số đó là GDI++ mạnh mẽ trong ngôn ngữ C#. Dựa vào nền tảng 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 đối với hầu hết mọi người, đó là trò chơi Cờ Cá Ngựa. Với đồ họa hấp dẫn, sinh động, cách thức chơi lôi cuốn, hấp dẫn, 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 game 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 GAME CỜ CÁ NGỰA Giảng viên hướng dẫn : Nguyễn Thị Hồng Yến Sinh viên thực hiên: Nguyễn Hoàng Mạnh Cường Lê Thanh Danh Võ Hoàng Phúc MSSV: 16004006 MSSV: 16004009 MSSV: 16004064 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 hoàn thành đề tài : “Xây dựng game Cờ Cá Ngựa” Đặ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! Sinh viên thực hiên: Nguyễn Hoàng Mạnh Cường 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 nhu cầu giải trí game chiếm tỉ lệ cao Với xu hướng thị yếu người dùng địi hỏi mẻ, đẹp, lạ mắt khơng thể 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, 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 Một số GDI++ mạnh mẽ ngôn ngữ C# Dựa vào tảng mạnh mẽ đó, nhóm xây dựng game dựa trò chơi quen thuộc hầu hết người, trị chơi Cờ Cá Ngựa Với đồ họa hấp dẫn, sinh động, cách thức chơi lơi cuốn, hấp dẫn, nhóm hy vọng mang lại trải nghiệm tốt cho người chơi đến với game 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 “Cờ cá ngựa” Nguyên tắc chơi cờ cá ngựa: Là di chuyển quân cờ đủ vòng (ngược chiều kim đồng hồ) quanh bàn cờ để đến đích (tức chuồng) Khả di chuyển nhanh hay chậm phụ thuộc vào lượt gieo xúc xắc Người có đủ bốn quân cờ đến đích xếp vào ô số 6, 5, chuồng người chiến thắng Những người chơi tiếp để tranh vị trí hai ba, cuối 1.1 Luật chơi I ⮚ Gieo xúc xắc: đến lượt người tung Xúc xắc tung vào khay chén để có độ nảy Tuy nhiên, không làm rơi xúc xắc ngồi vật đựng đó, ngồi, lượt kết việc gieo xúc xắc không công nhận (người chơi thường gọi việc "thúi") Ai tung kết lục (sáu) (một) thêm lượt kết ⮚ Ra quân: quyền đưa quân cờ để tham gia di chuyển bàn cờ (khi bàn cờ chưa có quân cờ mình) Để có quyền thì kết việc tung xúc xắc phải lục quân quân phải đứng vị trí bắt đầu ⮚ Di chuyển: bàn cờ có quân cờ tham gia di chuyển ta vào kết việc gieo xúc xắc để di chuyển Kết số bước được/phải di chuyển (khơng di chuyển nhiều hay kết quả) Trong di chuyển có số tình xảy ra: ● Bị cản: quân cờ bị cản tức có qn cờ khác (của đối phương) đứng trước mà khoảng cách bước hai quân nhỏ kết việc gieo xúc xắc Trường hợp khơng vượt qua mặt quân cờ đứng trước di chuyển ngược lại mà phải chọn qn khác để Nếu khơng có qn di chuyển hợp lệ xem lượt (bị tịt) ● Đá: tức làm cho quân cờ đối phương (đứng trước quân cờ mình) bị quyền tham gia di chuyển bàn cờ Chỉ xảy khoảng cách hai quân kết lượt gieo xúc xắc mình, ấy, quân đến chỗ cho quân đối phương (khơng áp dụng để đá qn cờ mình) Người chơi khơng bắt buộc phải đá có hội mà bỏ qua để khác Trường hợp quân đứng sát quân đối phương gọi sát nút ⮚ Vào chuồng: Khi quân cờ di chuyển vịng (chỉ vịng mà thơi) quanh bàn cờ đến cửa chuồng vào chuồng ⮚ Phân thắng bại: Ai có đủ bốn quân cờ vào chuồng xếp vào bốn ô đầu người chiến thắng 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 bàn cờ default , Load hình bàn cờ, Load hình xí ngầu + Vơ hiệu hố nút đổ xí ngầu ● Biến cố (1) xảy nhấn nút SapBanCo, bao gồm:: + Đọc thông tin bàn cờ (tuỳ chọn ) hiển thị quân cờ lên hình + Vơ hiệu hố nút SapBanCo ● Biến cố (2): xảy nhấn nút TuyChọn , bao gồm: + Load hình tuỳ chọn ( chọn số người chơi, số xí ngầu, giá trị quân, giá trị đích, đổi hình bàn cờ) ● Biến cố (3) xảy nhấn nút DoXiNgau, bao gồm: + Hiển thị hình xí ngầu tương ứng với lần đổ ● Biến cố(4) xảy nhấn nút Thoat, bao gồm: + Thốt khỏi hình Xử lý - Giao diện TuyChon hình bàn cờ: Nội dung xử lý Màn hình chọn hình bàn cờ: Biến cố (0) xảy hình hiển thị, baogồm: + Load hình bàn cờ mặc định Biến cố (1) xảy chọn nút Thay Doi, bao gồm: + Mở hộp thoại chọn file hình Biến cố (2) xảy chọn nút Ap Dung, bao gồm: + Lưu file hình chọn - Giao diện TuyChon người chơi: (2) (0) (1) (3) Nội dung xử lý hình Tuy Chon người chơi: Biến cố (0) xảy hình hiển thị, baogồm: + Load liệu vào cmbNguoiChoi,cmbSoQuan,checkbox, Biến cố (1) xảy check vào checkbox Biến cố (2) xảy click vào cmbBox(chọn số người chơi,chọn số quân màu cờ Biến cố (3) xảy chọn nút Ap Dung, bao gồm: + Lưu lựa chọn 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# 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 khơng phải 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ợ b Giới thiệu GDI+ Windows cung cấp tính đặc sắc, khả đồ họa độc lập thiết bị xây dựng kỹ thuật GDI (giao diện giao tiếp với thiết bị đồ họa khác nhau) GDI thư viện đồ họa Windows, cung cấp tất hàm phục vụ cho thao tác kết xuất hình ảnh văn thiết bị GDI vẽ nhiều loại thiết bị khác nhau: hình, máy in, máy vẽ GDI có trách nhiệm giao tiếp kết xuất yêu cầu mà người dùng chuyển ho đến thiết bị đích Về bản, giao tiếp với trình điều khiển thiết bị (các tập tin drv), thật trình điều khiển thiết bị giao diện Windows đưa ra, trách nhiệm nặng nề khơng thật thuộc GDI Windows mà nhà sản xuất thiết bị phần cứng, họ buộc phải cung cấp trình điều khiển theo giao diện muốn bán sản phẩm cho người dùng Windows Như vậy, người lập trình khơng cần quan tâm đến việc điều khiển trực tiếp thiết bị xuất mà cần quan tâm đến thư viện hàm GDI GDI+ bao gồm nhóm dịch vụ chính: - 2D vector graphics: cho phép tạo hình từ hình (primitive): đường thẳng, tròn, eclipse, đường cong,… - Imaging: làm việc với tập tin hình ảnh (bitmap, metafile) - Typography: vẽ chữ Về mặt kỹ thuật, GDI+ dựa hàm cấp thấp Windows API, mà khứ bạn dùng lập trình Windows Các hàm API thường quen gọi GDI (Graphical Device Interface) Ý niệm chủ yếu nằm sau hàm API lập trình viên viết văn hình ảnh lên nhiều thiết bị (máy in, hình video card), khơng cần hiểu sâu phần cứng nằm đằng sau Đến phiên mình, Windows bảo đảm tương thích rộng lớn, tận dụng tối ưu hóa phần cứng cung cấp Rất tiếc hàm GDI đòi hỏi phải lập trình rắc rối, hiểm hóc Các kiểu liệu GDI+ NET FRAMEWORK lớp vỏ bọc thiên đối tượng bao quanh hàm API cấp thấp, thật tình mà nói chúng khơng thêm chức Tuy nhiên, kiểu liệu GDI+ .NET cung cấp mức độ trừu tượng hóa cao cấp với hỗ trợ thuận lợi biến đổi hình học, kỹ thuật vuốt mịn đường cong (antialiasing), pha màu (pallete blending) Trong khứ, kỹ thuật địi hỏi lập trình cơng phu gian nan 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 quán phương thức constructor class phải private gọi lần instance chưa khởi tạo I CHƯƠNG : THIẾT KẾ CHƯƠNG TRÌNH 3.1 Game flow Cờ Cá Ngựa Bắt đầu ứng dụng Chơi Menu Trong khoảng 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 GDI+ đố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: ⮚ Lớp Form1 :Khởi tạo cửa sổ game, thiết lập cấu hình GDI+ 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 Ư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 10 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 c) Board: Là class xử lý logic cho game 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ợ Lan + Online Chưa có chế độ chơi với máy tính (AI) 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, qua LAN , Online Đưa lên tảng Mobile IOS, Android, Windows phone… 11 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 12 [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 [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ệ 13 ... game 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 ? ?Cờ cá ngựa? ?? Nguyên tắc chơi cờ cá ngựa: Là di chuyển quân cờ. .. mẽ ngôn ngữ C# Dựa vào tảng mạnh mẽ đó, nhóm xây dựng game dựa trò chơi quen thuộc hầu hết người, trị chơi Cờ Cá Ngựa Với đồ họa hấp dẫn, sinh động, cách thức chơi lôi cuốn, hấp dẫn, nhóm hy vọng... 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 game Cờ Cá Ngựa? ?? Đặ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