Tải bản đầy đủ (.docx) (17 trang)

Đồ án game cờ cá ngựa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (838.12 KB, 17 trang )

ĐẠI HỌC QUỐC GIA TP.HCM
ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
NGÔN NGỮ C#
LẬP TRÌNH GAME 2D “CỜ CÁ NGỰA”
BẰNG NGÔN NGỮ C# VÀ GDI+
Giáo viên hướng dẫn: Th.s Nguyễn Thị Quý
Sinh viên thực hiện: Đặng Vũ Hải Long – 10520386
Nguyễn Quốc Dũng – 10520368
Bùi Hoàng Khánh Duy – 10520379
Nguyễn Thanh Hiền - 10520064
Trần Anh Nguyên - 1052032
Môn : Ngôn ngữ C#
LỜI CẢM ƠN
Chúng em xin được chân thành cảm ơn cô Nguyễn Thị Quý. Nhờ sự giúp đỡ tận
tình và những chỉ bảo của Cô trong suốt quá trình học, chúng em đã hoàn thành đúng
thời hạn quy định và tích lũy được cho mình một lượng nền tảng kiến thức quý báu.
Xin chân thành cảm ơn tất cả tác giả của những cuốn sách, các tài liệu mà
chúng tôi đã sử dụng trong quá trình tìm hiểu vấn đề. Những kiến thức các tác giả trình
bày trong các tác phẩm đó đã giúp chúng tôi rất nhiều để hoàn thành đồ án này.
Mặc dù đã cố gắng hoàn thành đề tài tốt nhất nhưng do thời gian và kiến thức
còn có hạn nên chúng em sẽ không thể tránh khỏi những thiếu sót nhất định, rất mong
nhận được sự cảm thông, chia sẻ và tận tình đóng góp chỉ bảo của Cô cũng như các
bạn.
Trang 2
Môn : Ngôn ngữ C#
MỤC LỤC
Trang 3
Môn : Ngôn ngữ C#
LỜI MỞ ĐẦ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 4
Môn : Ngôn ngữ C#
I. 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 2D với thư viện GDI+ - “Ludo 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.2. Luật chơ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 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).
Trang 5
Môn : Ngôn ngữ C#
• Đá: 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.3. Hướng dẫn sử dụng

- Menu chính:
Gồm các nút
• Play: vào game
• Option: điều
chỉnh các chức
năng game như
âm thanh, nhạc
nền.
• Help: hướng dẫn
sử dụng
• Credit: thông tin
nhóm tác giả.
Trang 6
Môn : Ngôn ngữ C#
- Play game
Nhấn vào ô vuông giữa bàn cờ để lắc xúc xắc, nhấn vào quân cờ để di
chuyển nó theo điểm xúc xắc vừa đổ được. Nếu lượt đầu tiên lắc xúc xắc mà
không được 1 hoặc 6 điểm thì nhấn nút “end turn” để kết thúc lượt chơi.
- Options
Có hai nút trong màn hình này:
“Sound On/Off” dùng để bật/tắt
âm thanh.
“Music on/off” dùng để bật/tắt
nhạc nền.
Nhấn phím “ESC” để về menu
chính.
Trang 7
Môn : Ngôn ngữ C#
Credit Help
Nhấn phím “ESC” để về menu chính.

II. Kỹ thuật lập trình
2.1. Sơ lược về ngôn ngữ lập 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.
Trang 8
Môn : Ngôn ngữ C#
- 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
Trang 9
Môn : Ngôn ngữ C#
dụng bất cứ 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.
Trang 10
State
Init
Update
Draw
UpdateInput
Môn : Ngôn ngữ C#
Mỗi state đều chứa một số hàm
 public void Init ()
 public void UpdateInput()
 public void Update ()
State
MenuState
PlayState
v.v.v.
AboutState
 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 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.
Trang 11
Môn : Ngôn ngữ C#
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.
Trang 12
Môn : Ngôn ngữ C#
III. THIẾT KẾ CHƯƠNG TRÌNH
Ludo Game
Start
Application
Menu
Play (Item)
Credit(Item)
Exit(command)
Close
Application
Main Game
Game Finish
Win
About (Item)
Pause/New
game
Helps (Item)
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
Trang 13
Môn : Ngôn ngữ C#
Đả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:
 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,…
Trang 14
Môn : Ngôn ngữ C#
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.
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ựa trê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.
c) Board: Là class xử lý logic chính cho game
IV. ĐÁ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ợ 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 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, qua LAN , Online
 Đưa lên các nền tảng Mobile như IOS, Android, Windows
phone…
Trang 15
Môn : Ngôn ngữ C#
V. PHỤ LỤC
Bảng phân công công việc
Tên thành viên Công việc
Đặng vũ Hải Long
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.
Nguyễn Quốc Dũng
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 state
Bùi Hoàng Khánh Duy
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)
Nguyễn Thanh Hiền
Viết lớp win game, thay đổi tên người chơi, load resource

hình ảnh,âm thanh
Trần Anh Nguyên
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)
VI. TÀI LIỆU THAM KHẢO
[1] Adam Ward, Dragos Brezoi, Iulian Serban,Tiberiu Radu - GDI+ Application
Custom Controls with Visual C# 2005
[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 4 2010
[4] Lập trình C# cơ bản – Nhất Nghệ
Trang 16
Môn : Ngôn ngữ C#

Trang 17

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×