1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng game Cờ Cá Ngựa

18 12 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 18
Dung lượng 568,04 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

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 MSSV: 16004006

Lê Thanh Danh MSSV: 16004009

Võ Hoàng Phúc MSSV: 16004064

Lớp: ĐH CNTT 2016 Khóa: 41

Vĩnh Long năm 2019

Trang 2

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)

LỜI CẢM ƠN

Trang 3

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 game Cờ Cá Ngựa”

Đặ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ĩnh Long, khoa Công Nghệ Thông Tin đã trực tiếp và gián tiếp giúp đỡ chúng em trong suốt quá 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ày khô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, đóng gó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!

Sinh viên thực hiên:

Nguyễn Hoàng Mạnh Cường

Trang 4

MỤ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 5

LỜ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 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

Trang 6

CHƯƠ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à

“Cờ cá ngựa”.

Nguyên tắc chơi cờ cá ngựa:

Là di chuyển quân cờ của mình đủ một vòng (ngược chiều kim đồng

hồ) quanh bàn cờ để về đến đích (tức về chuồng) Khả năng di chuyển nhanh hay chậm đều phụ thuộc vào lượt gieo xúc xắc của mình Người nào có đủ bốn quân

cờ về đến đích đầu tiên và đã xếp đúng vào các ô số 6, 5, 4 và 3 trong chuồng là người chiến thắng Những người tiếp theo chơi tiếp để tranh vị trí hai và ba, cuối cùng

1.1 Luật chơi I

⮚ Gieo xúc xắc: đến lượt ai thì người đó tung Xúc xắc được tung vào một cái

khay hoặc cái chén để có độ nảy Tuy nhiên, không được làm rơi xúc xắc ra ngoài vật đựng đó, nếu ra ngoài, lập tức mất lượt và kết quả việc gieo xúc xắc không được công nhận (người chơi thường gọi việc này là "thúi") Ai tung được kết quả là lục (sáu) hoặc nhất (một) thì được đi thêm lượt nữa cho đến khi ngoài kết quả trên

⮚ Ra quân: là quyền đưa ra một quân cờ để tham gia di chuyển trên bàn cờ (khi

trên bàn cờ chưa có một quân cờ nào của mình) Để có được quyền này thì thì kết quả của việc tung xúc xắc phải là nhất hoặc lục mới được ra một quân và quân này phải đứng ngay vị trí bắt đầu

⮚ Di chuyển: một khi trên bàn cờ đã có ít nhất một quân cờ của mình được tham

gia di chuyển thì ta có thể căn cứ vào kết quả của việc gieo xúc xắc để di chuyển nó Kết quả bao nhiêu thì đó là số bước được/phải di chuyển (không di

1

Trang 7

chuyển nhiều hay ít hơn kết quả) Trong khi di chuyển có một số tình huống xảy ra:

● Bị cản: một quân cờ bị cản tức là có một quân cờ khác (của mình hoặc của

đối phương) đứng trước nó mà khoảng cách bước đi giữa hai quân nhỏ hơn kết quả việc gieo xúc xắc của mình Trường hợp này không được vượt qua mặt quân cờ đứng trước hoặc di chuyển ngược lại mà phải chọn quân khác

để đi Nếu không có quân nào có thể di chuyển hợp lệ thì xem như mất lượt (bị tịt)

● Đá: tức là làm cho quân cờ đối phương (đứng trước quân cờ mình) bị mất

quyền tham gia di chuyển trên bàn cờ Chỉ xảy ra khi khoảng cách giữa hai quân đúng bằng kết quả lượt gieo xúc xắc của mình, khi ấy, quân mình đến thế chỗ cho quân đối phương (không áp dụng để đá quân cờ của mình) Người chơi không bắt buộc phải đá khi có cơ hội mà có thể bỏ qua để đi con khác Trường hợp quân mình đứng ngay sát quân đối phương gọi là sát nút

⮚ Vào chuồng: Khi quân cờ của mình di chuyển được một vòng (chỉ một vòng

mà thôi) quanh bàn cờ thì về đến cửa chuồng và vào chuồng

⮚ Phân thắng bại: Ai có đủ bốn quân cờ đã vào chuồng và xếp vào đúng bốn ô

đầu là người chiến thắng

1.2 Hướng dẫn sử dụng

- Menu chính:

2

Trang 8

● 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 bàn cờ default , Load hình bàn cờ, Load hình xí ngầu + Vô hiệu hoá nút đổ xí ngầu

● Biến cố (1) xảy ra khi nhấn nút SapBanCo, bao gồm::

+ Đọc thông tin bàn cờ (tuỳ chọn ) và hiển thị các quân cờ lên màn hình

+ Vô hiệu hoá nút SapBanCo

● Biến cố (2): xảy ra khi nhấn nút TuyChọn , bao gồm:

+ Load màn hình tuỳ chọn ( chọn số người chơi, số xí ngầu, giá trị ra quân, giá trị về đích, đổi hình bàn cờ)

● Biến cố (3) xảy ra khi nhấn nút DoXiNgau, bao gồm:

+ Hiển thị hình xí ngầu tương ứng với mỗi lần đổ

● Biến cố(4) xảy ra khi nhấn nút Thoat, bao gồm:

+ Thoát khỏi màn hình Xử lý chính

- Giao diện TuyChon hình bàn cờ:

3

3 1

0 2 4

Trang 9

 Nội dung xử lý Màn hình chọn hình bàn cờ:

Biến cố (0) xảy ra khi màn hình sắp hiển thị, baogồm: + Load hình bàn cờ mặc định

Biến cố (1) xảy ra khi 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 ra khi chọn nút Ap Dung, bao gồm: + Lưu file hình đã chọn

- Giao diện TuyChon người chơi:

4

0

1

2

Trang 10

 Nội dung xử lý màn hình Tuy Chon người chơi:

Biến cố (0) xảy ra khi màn hình sắp hiển thị, baogồm:

+ Load dữ liệu vào cmbNguoiChoi,cmbSoQuan,checkbox, Biến cố (1) xảy ra khi check vào checkbox

Biến cố (2) xảy ra khi click vào cmbBox(chọn số người chơi,chọn số quân trong mỗi màu cờ

Biến cố (3) xảy ra khi chọn nút Ap Dung, bao gồm:

+ Lưu các lựa chọn

5

(0) (2)

(1)

(3)

Trang 11

CHƯƠNG 2 : Kỹ thuật lập trình

2.1 Sơ lược về ngôn ngữ trình C# và GDI

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 đầy triể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ên mô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ôi trườ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 đặc trư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ợ

b Giới thiệu về GDI+

Windows cung cấp một tính năng rất đặc sắc, đó là khả năng đồ họa độc lập

thiết bị được xây dựng trên kỹ thuật GDI (giao diện giao tiếp với các thiết bị đồ

họa khác nhau) GDI là thư viện đồ họa của Windows, cung cấp tất cả hàm phục

vụ cho các thao tác kết xuất hình ảnh và văn bản ra thiết bị

GDI có thể vẽ ra nhiều loại thiết bị khác nhau: màn hình, máy in, máy vẽ GDI có trách nhiệm giao tiếp và kết xuất các yêu cầu mà người dùng chuyển

ho nó đến đúng thiết bị đích Về cơ bản, nó giao tiếp với các trình điều khiển thiết

bị (các tập tin drv), thật ra các trình điều khiển thiết bị cũng là một giao diện do

Windows đưa ra, do đó trách nhiệm nặng nề không thật sự thuộc về GDI của Windows mà là của các 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 này nếu muốn bán được 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à chỉ cần quan tâm đến thư viện hàm GDI

GDI+ bao gồm 3 nhóm dịch vụ chính:

- 2D vector graphics: cho phép tạo hình từ các hình cơ bản (primitive): đường

thẳng, tròn, eclipse, đường cong,…

- Imaging: làm việc với các tập tin hình ảnh (bitmap, metafile).

- Typography: vẽ chữ.

Về mặt kỹ thuật, GDI+ vẫn còn dựa trên các hàm cấp thấp Windows API, mà

có thể trong quá khứ bạn đã dùng trong lập trình Windows Các hàm API này thường quen được gọi là GDI (Graphical Device Interface) Ý niệm chủ yếu nằm sau các hàm API là lập trình viên có thể viết văn bản và hình ảnh lên nhiều thiết bị (máy in, màn hình và 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 sự tương thích khá rộng lớn, tận dụng bất cứ

6

Trang 12

tối ưu hóa nào của phần cứng cung cấp được Rất tiếc là các hàm GDI đòi hỏi phải lập trình khá rắc rối, hiểm hóc

Các kiểu dữ liệu GDI+ trên NET FRAMEWORK là những lớp vỏ bọc thiên đối tượng bao quanh các hàm API cấp thấp, và thật tình mà nói chúng không thêm chức năng gì mới Tuy nhiên, các kiểu dữ liệu GDI+ .NET cung cấp 1 mức độ trừu tượng hóa cao cấp hơn với những hỗ trợ khá thuận lợi về biến đổi hình học,

kỹ thuật vuốt mịn các đường cong (antialiasing), và pha màu (pallete blending) Trong quá khứ, những kỹ thuật này đòi hỏi lập trình khá công phu và gian nan

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ên quan, xử lý Game, hiển thị lên màn hình đều nằm ở mỗi State Tất cả State đều được thừ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ính hướ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ây chuyề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)

b Singleton quản lý Resource

Class ResourceManager dùng để quản lý chặt chẽ các image sao cho mỗi image chỉ được load một lần nhằm tiết kiệm bộ nhớ tránh tình trạng một ảnh load

7

State

Init

Update Draw UpdateInput

Trang 13

nhiề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 được load 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ởi tạo

I.

8

Trang 14

CHƯƠNG 3 : THIẾT KẾ CHƯƠNG TRÌNH

3.1 Game flow

3.2 Cấu trúc chương trình

Toàn bộ chương trình được chia ra làm 3 phần bao gồm:

3.2.1 FrameworkGame

Đảm nhận nhiệm vụ tạo cửa sổ của game, thiết lập các cầu hình căn bản cho game như tạo vòng lặp xử lý trong game, khởi tạo GDI+ và đối tượng Graphics chính của ứng dụng

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:

9

Cờ Cá Ngựa

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

Trong khoảng

Trong khoảng

Dừng lại hoặc bắt đầu game mới

Trợ giúp

Trang 15

⮚ Lớp Form1 :Khởi tạo cửa sổ game, thiết lập cấu hình GDI+ cho graphics của cử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ại trong game, thây đổi state khi cần thiết, đồng thời cũng quản lý việc truyền input cho state hiện tại

Ư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ây khó 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ường minh 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ản chứ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ác screen 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úp ngườ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, win trong game Đây là lớp chứa các thành phần liên quan đến xử lý của từ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

10

Ngày đăng: 14/12/2021, 21:44

HÌNH ẢNH LIÊN QUAN

● Biến cố(0): xảy ra khi màn hình Xử lý chính sắp hiển thị, baogồm: - Xây dựng game Cờ Cá Ngựa
i ến cố(0): xảy ra khi màn hình Xử lý chính sắp hiển thị, baogồm: (Trang 8)
 Nội dung xử lý Màn hình chọn hình bàn cờ: - Xây dựng game Cờ Cá Ngựa
i dung xử lý Màn hình chọn hình bàn cờ: (Trang 9)
 Nội dung xử lý màn hình TuyChon người chơi: - Xây dựng game Cờ Cá Ngựa
i dung xử lý màn hình TuyChon người chơi: (Trang 10)
Đảm nhận nhiệm vụ tạo cửa sổ của game, thiết lập các cầu hình căn bản cho game như tạo vòng lặp xử lý trong game, khởi tạo GDI+ và đối tượng Graphics chính của  ứng dụng. - Xây dựng game Cờ Cá Ngựa
m nhận nhiệm vụ tạo cửa sổ của game, thiết lập các cầu hình căn bản cho game như tạo vòng lặp xử lý trong game, khởi tạo GDI+ và đối tượng Graphics chính của ứng dụng (Trang 14)

TỪ KHÓA LIÊN QUAN

w