Tải bản đầy đủ (.pdf) (69 trang)

Nghiên cứu các kỹ thuật thiết kế trò chơi và ứng dụng thiết kế trò chơi breakout

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 (1.96 MB, 69 trang )

MỤC LỤC
MỤC LỤC...............................................................................................................1
LỜI NÓI ĐẦU ........................................................................................................4
CHƯƠNG 1: TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH C#..........................5
1.1 Sự ra đời của ngôn ngữ lập trình C# ................................................................5
1.2 Những đặc điểm của ngôn ngữ C# ..................................................................5
1.3 So sánh ngôn ngữ C# và những ngôn ngữ khác ...............................................7
1.4 Cấu trúc chương trình .....................................................................................8
1.5 Câu lệnh rẽ nhánh có điều kiện .......................................................................9
1.6 Các lệnh lặp ..................................................................................................10
1.6.1 Vòng lặp for ...........................................................................................10
1.6.2 Vòng lặp While ......................................................................................11
1.6.3 Vòng lặp do…while................................................................................11
1.6.4 Vòng lặp foreach ....................................................................................11
1.6.5 Câu lệnh goto ........................................................................................11
1.6.6 Câu lệnh break, continue và return..........................................................12
1.7 Lớp và cấu trúc ............................................................................................12
1.7.1 Lớp.........................................................................................................12
1.7.2 Định nghĩa cấu trúc................................................................................13
1.8 Phương thức và thuộc tính.............................................................................13
1.8.1 Phương thức ...........................................................................................13
1.8.2 Thuộc tính ..............................................................................................14
1.9 Đón bắt lỗi với try và catch ...........................................................................14
1.10 Cách sử dụng DirectX trong C# ..................................................................15
CHƯƠNG 2: KỸ THUẬT THIẾT KẾ TRÒ CHƠI ...........................................18
2.1 Lý thuyết trò chơi..........................................................................................18
2.1.1 Giới thiệu về lý thuyết trò chơi ...............................................................18

1



2.1.2 Biểu diễn trò chơi ...................................................................................18
2.2 Các loại trò chơi............................................................................................19
2.2.1 Trò chơi đối xứng và bất đối xứng..........................................................19
2.2.2 Trò chơi tổng bằng không và trò chơi tổng khác không ..........................19
2.2.3 Trò chơi đồng thời và trò chơi tuần tự.....................................................20
2.2.4 Trò chơi thông tin hoàn hảo và trò chơi thông tin không hoàn hảo..........21
2.2.5 Các trò chơi dài vô tận............................................................................21
2.3 Các kỹ thuật thiết kế trò chơi.........................................................................21
2.3.1 Tổng quan về thiết kế trò chơi ................................................................21
2.3.2 Quy trình khi thiết kế một game .............................................................22
2.3.3 Một số thuật toán thường được áp dụng khi thiết kế trò chơi ..................25
2.3.3.1 Các thuật toán tìm đường đi ngắn nhất .............................................25
2.3.3.2 Các thuật toán về trí tuệ nhân tạo .....................................................32
2.3.4 Một số bước cơ bản trong thiết kế trò chơi..............................................32
2.3.4.1 Thiết kế tổng quan............................................................................32
2.3.4.2 Thiết kế giao diện cho trò chơi .........................................................33
2.3.4.3 Thiết kế các chức năng của trò chơi .................................................33
2.3.4.4 Đóng gói và bảo mật ........................................................................33
2.3.5 Một số kỹ thuật thiết kế đồ họa ...............................................................34
2.3.5.1 OpenGL ...........................................................................................34
2.3.5.2 GDI..................................................................................................35
2.3.5.3 DirectX ............................................................................................35
CHƯƠNG 3: CÀI ĐẶT CHƯƠNG TRÌNH ỨNG DỤNG .................................58
3.1 Cách chơi game Breakout. ............................................................................58
3.2 Luật chơi của trò chơi ...................................................................................58
3.3 Cách xây dựng trò chơi .................................................................................58
3.4 Cài đặt hệ thống ............................................................................................65
3.4.1 Cấu hình hệ thống...................................................................................65

2



3.4.2 Lựa chọn công nghệ ...............................................................................66
3.5 Giao diện chính của chương trình..................................................................67
KẾT LUẬN...........................................................................................................68
TÀI LIỆU THAM KHẢO ....................................................................................69

3


LỜI NÓI ĐẦU
Mặc dù mới ra đời trong những năm 50 của thế kỷ XX và thực sự phát triển
mạnh mẽ trong những năm gần đây. Nhưng tin học đã đóng góp một vai trò không
thể thiếu trong cuộc sống hiện nay của con người. Công nghệ thông tin ngày nay, đã
có những sự phát triển vượt bậc về nhiều loại hình dịch vụ: các hệ viễn thông hiện
đại, các máy tính cá nhân, các mạng máy tính quốc gia, Internet, thương mại điện
tử... đáp ứng hầu hết nhu cầu của con người, trên hầu hết các lĩnh vực thông tin,
kinh tế, đời sống, văn hóa – xã hội và nhất là trong lĩnh vực giải trí. Trong lĩnh vực
này, việc giải trí bằng Game máy tính ngày càng phát triển nhanh và lan rộng ra do
sự lôi cuốn rất mạnh mẽ của nó. Hầu như ai sử dụng máy tính đều giải trí bằng một
số game nào đó trên mày tính. Có thể nói Game là một thể loại phong phú nhất trong
tất cả các chương trính trên máy tính và lập trình game luôn là một lĩnh vực thú vị
có sức hấp dẫn với các lập trình viên. Tất cả chúng ta đều muốn tạo ra những
chương trình game cho riêng mình tuy nhiên viết game không phải là công việc dễ
dàng, nhưng với niềm đam mê về game em rất muốn tiếp cần công nghệ này.
Mong muốn sử dụng vốn kiến thức đã tích lũy và học tập tại khoa Công Nghệ
Thông Tin - Đại học Thái Nguyên, được sự đồng ý của thầy giáo Trần Hải Thanh
em đã chọn đề tài: “Nghiên cứu các kỹ thuật thiết kế trò chơi và ứng dụng thiết kế
trò chơi Breakout” - làm đồ án tốt nghiệp của mình.
Nội dung của đồ án được trình bày trong 3 chương

Chương 1: Nêu vấn đề tổng quan về ngôn ngữ lập trình C# (sự ra đời, các đặc điểm
, so sánh ngôn ngữ C# với các ngôn ngữ lập trình khác…).
Chương 2: Giới thiệu về các kỹ thuật thiết kế trò chơi bao gồm các phần lý thuyết
trò chơi, các loại trò chơi, các kỹ thuật thiết kế trò chơi…
Chương 3: Cài đặt chương trình ứng dụng
.

Em xin chân thành cảm ơn !

4


CHƯƠNG 1: TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH C#
1.1 Sự ra đời của ngôn ngữ lập trình C#
Với mục tiêu đem lại cho dân lập trình một ngôn ngữ lập trình đơn giản, an
toàn, tiên tiến, mang tính hướng đối tượng cao, đặt trọng tâm vào internet, có khả
năng thực thi cao cho môi trường .NET. Microsoft đã đi nghiên cứu và xây dựng
một ngôn ngữ lập trình mới. Và đến tháng 7/2000 thì C#(C Sharp) ra đời. C# là một
ngôn ngữ lập trình mới, đơn giản, trong sáng được xây dựng, đúc kết từ những bài
học kinh nghiệm trong suốt 3 thập kỷ phát triển của ngôn ngữ lập trình. Có thể dễ
dàng nhận thấy trong C# có những đặc trưng quen thuộc của Java, C++, Visual
Basic,…
1.2 Những đặc điểm của ngôn ngữ C#
Ngôn ngữ C# khá đơn giản, chỉ khoảng 80 từ khóa và hơn mười kiểu dữ liệu
được xây dựng sẵn. Tuy nhiên, ngôn ngữ C# có ý nghĩa cao khi nó thực thi những
khái niệm lập trình hiện đại. C# bao gồm tất cả những hỗ trợ cho cấu trúc, thành
phần component, lập trình hướng đối tượng. Những tính chất đó hiện diện trong một
ngôn ngữ lập trình hiện đại. Và ngôn ngữ C# hội đủ những điều kiện như vậy, hơn
nữa nó được xây dựng trên nền tảng của hai ngôn ngữ mạnh nhất là C++ và Java.
Ngôn ngữ C# được phát triển bởi đội ngũ kỹ sư của Microsoft, trong đó

người dẫn đầu là Anders Hejlsberg và Scott Wiltamuth. Cả hai người này đều là
những người nổi tiếng, trong đó Anders Hejlsberg được biết đến là tác giả của Turbo
Pascal, một ngôn ngữ lập trình PC phổ biến. Và ông đứng đầu nhóm thiết kế
Borland Delphi, một trong những thành công đầu tiên của việc xây dựng môi trường
phát triển tích hợp (IDE) cho lập trình client/server.
Phần cốt lõi hay còn gọi là trái tim của bất cứ ngôn ngữ lập trình hướng đối
tượng là sự hỗ trợ của nó cho việc định nghĩa và làm việc với những lớp. Những lớp
thì định nghĩa những kiểu dữ liệu mới, cho phép người phát triển mở rộng ngôn ngữ
để tạo mô hình tốt hơn để giải quyết vấn đề. Ngôn ngữ C# chứa những từ khóa cho

5


việc khai báo những kiểu lớp đối tượng mới và những phương thức hay thuộc tính
của lớp, cho việc thực thi đóng gói, kế thừa, và đa hình, ba thuộc tính cơ bản của bất
cứ ngôn ngữ lập trình hướng đối tượng.
Trong ngôn ngữ C# mọi thứ liên quan đến khai báo lớp điều được tìm thấy
trong phần khai báo của nó. Định nghĩa một lớp trong ngôn ngữ C# không đòi hỏi
phải chia ra tập tin header và tập tin nguồn giống như trong ngôn ngữ C++. Hơn thế
nữa, ngôn ngữ C# hỗ trợ kiểu XML, cho phép chèn các tag XML để phát sinh tự
động các document cho lớp.
C# cũng hỗ trợ giao diện interface, nó được xem như một cam kết với một
lớp cho những dịch vụ mà giao diện quy định. Trong ngôn ngữ C#, một lớp chỉ có
thể kế thừa từ duy nhất một lớp cha, tức là không cho đa kế thừa như trong ngôn
ngữ C++, tuy nhiên một lớp có thể thực thi nhiều giao diện. Khi một lớp thực thi
một giao diện thì nó sẽ hứa là nó sẽ cung cấp chức năng thực thi giao diện.
Trong ngôn ngữ C#, những cấu trúc cũng được hỗ trợ, nhưng khái niệm về
ngữ nghĩa của nó thay đổi khác với C++. Trong C#, một cấu trúc được giới hạn, là
kiểu dữ liệu nhỏ gọn, và khi tạo thể hiện thì nó yêu cầu ít hơn về hệ điều hành và bộ
nhớ so với một lớp. Một cấu trúc thì không thể kế thừa từ một lớp hay được kế thừa

nhưng một cấu trúc có thể thực thi một giao diện
Ngôn ngữ C# cung cấp những đặc tính hướng thành phần (componentoriented) như là những thuộc tính, những sự kiện. Lập trình hướng thành phần được
hỗ trợ bởi CLR cho phép lưu trữ metadata với mã nguồn cho một lớp. Metadata mô
tả cho một lớp, bao gồm những phương thức và những thuộc tính của nó, cũng như
những sự bảo mật cần thiết và những thuộc tính khác. Mã nguồn chứa đựng những
logic cần thiết để thực hiện những chức năng của nó. Do vậy, một lớp được biên
dịch như là một khối self-contained, nên môi trường hosting biết được cách đọc
metadata của một lớp và mã nguồn cần thiết mà không cần những thông tin khác để
sử dụng nó.

6


Ngôn ngữ C# là ngôn ngữ này cũng hỗ trợ việc truy cập bộ nhớ trực tiếp sử
dụng kiểu con trỏ của C++ và từ khóa cho dấu ngoặc [] trong toán tử. Các mã nguồn
này là không an toàn. Và bộ giải phóng bộ nhớ tự động của CLR sẽ không thực hiện
việc giải phóng những đối tượng được tham chiếu bằng sử dụng con trỏ cho đến khi
chúng được giải phóng.
1.3 So sánh ngôn ngữ C# và những ngôn ngữ khác
Chúng ta đã từng nghe đến những ngôn ngữ khác như Visual Basic, C++ và
Java. Có lẽ chúng ta cũng tự hỏi sự khác nhau giữa ngôn ngữ C# và những ngôn ngữ
đó. Và cũng tự hỏi tại sao lại chọn ngôn ngữ này để lập sử dụng mà không chọn một
trong những ngôn ngữ kia. Có rất nhiều lý do và chúng ta hãy xem một số sự so
sánh giữa ngôn ngữ C# với những ngôn ngữ khác giúp chúng ta phần nào trả lời
được những thắc mắc.
Microsoft nói rằng C# mang đến sức mạnh của ngôn ngữ C++ với sự dễ dàng
của ngôn ngữ Visual Basic. Có thể nó không dễ như Visual Basic, nhưng với phiên
bản Visual Basic.NET (Version 7) thì ngang nhau. Bởi vì chúng được viết lại từ một
nền tảng. Chúng ta có thể viết nhiều chương trình với ít mã nguồn hơn nếu dùng C#.
Mặc dù C# loại bỏ một vài các đặc tính của C++, nhưng bù lại nó tránh được

những lỗi mà thường gặp trong ngôn ngữ C++. Điều này có thể tiết kiệm được hàng
giờ hay thậm chí hàng ngày trong việc hoàn tất một chương trình.
Một điều quan trọng khác với C++ là mã nguồn C# không đòi hỏi phải có tập
tin header. Tất cả mã nguồn được viết trong khai báo một lớp. Chúng ta đã biết
.NET runtime trong C# thực hiện việc thu gom bộ nhớ tự động. Do điều này nên
việc sử dụng con trỏ trong C# ít quan trọng hơn trong C++. Những con trỏ cũng có
thể được sử dụng trong C#, khi đó những đoạn mã nguồn này sẽ được đánh dấu là
không an toàn (unsafe code).
C# cũng từ bỏ ý tưởng đa kế thừa như trong C++. Và sự khác nhau khác là
C# đưa thêm thuộc tính vào trong một lớp giống như trong Visual Basic. Và những
thành viên của lớp được gọi duy nhất bằng toán tử “.” khác với C++ có nhiều cách

7


gọi trong các tình huống khác nhau. Một ngôn ngữ khác rất mạnh và phổ biến là
Java, giống như C++ và C# được phát triển dựa trên C. Nếu chúng ta quyết định sẽ
học Java sau này, chúng ta sẽ tìm được nhiều cái mà học từ C# có thể được áp dụng.
Điểm giống nhau C# và Java là cả hai cùng biên dịch ra mã trung gian: C#
biên dịch ra MSIL còn Java biên dịch ra bytecode. Sau đó chúng được thực hiện
bằng cách thông dịch hoặc biên dịch just-in-time trong từng máy ảo tương ứng. Tuy
nhiên, trong ngôn ngữ C# nhiều hỗ trợ được đưa ra để biên dịch mã ngôn ngữ trung
gian sang mã máy. C# chứa nhiều kiểu dữ liệu cơ bản hơn Java và cũng cho phép
nhiều sự mở rộng với kiểu dữ liệu giá trị. Ví dụ, ngôn ngữ C# hỗ trợ kiểu liệt kệ
(enumerator), kiểu này được giới hạn đến một tập hằng được định nghĩa trước, và
kiểu dữ liệu cấu trúc đây là kiểu dữ liệu giá trị do người dùng định nghĩa.
Tương tự như Java, C# cũng từ bỏ tính đa kế thừa trong một lớp, tuy nhiên
mô hình kế thừa đơn này được mở rộng bởi tính đa kế thừa nhiều giao diện.
1.4 Cấu trúc chương trình
Cấu trúc một chương trình sẽ được thể hiện qua ví dụ sau: viết chương trình

hiển thị dòng chữ trên màn hình “Hello World” bằng ngôn ngữ C#.
Ví dụ: Chương trình Hello World
using system;
namespace HuyenAnh
{
class HelloWorld
{
static void Main()
{
// Sử dụng đối tượng console của hệ thống
System.Console.WriteLine (“ Hello World “);
System.Console.readline();
}

8


}
}
1.5 Câu lệnh rẽ nhánh có điều kiện
1.5.1 Câu lệnh if-else
Cú pháp như sau:
if ( Biểu thức logic )
Khối lệnh;
Hoặc
if ( Biểu thức logic)
Khối lệnh 1 ;
else
Khối lệnh 2 ;
Khối lệnh là một tập các câu lệnh trong cặp dấu ngoặc “{…}”. Bất kỳ nơi

đâu có câu lệnh thì ở đó có thể viết bằng một khối lệnh.
Biểu thức logic là biểu thức cho giá trị đúng hoặc sai (true hoặc false). Nếu
“biểu thức logic” cho giá trị đúng thì khối lệnh hay khối lệnh 1 sẽ được thực thi,
ngược lại khối lệnh 2 sẽ được thực thi. Trong C# biểu thức trong câu lệnh if phải là
biểu thức logic, không thể là biểu thức số.
1.5.2 Câu lệnh switch
Cú pháp như sau:
switch (biểu thức lựa chon)
{
casce biểu thức hằng:
câu lệnh ;
câu lệnh nhảy ;
[default: câu lệnh mặc định]
}

9


Biểu thức lựa chọn là biểu thức sinh ra trị nguyên hay chuỗi. Switch sẽ so
sánh “biểu thức lựa chọn” với các “biểu thức hằng” để biết phải thực hiện với khối
lệnh nào. Lệnh nhảy như Break, goto… để thoát khỏi câu Switch và bắt buộc phải
có.
Thí dụ sau: Thí dụ sẽ kiểm tra integerA thoả đúng trong các trường hợp 1, 2,
3 không nếu không đúng sẽ thực thi trường hợp default.
switch (integerA)
{
case 1:
Console.WrireLine(“integerA = 1”) ;
break;
case 2:

Console.WrireLine(“integerA = 2”) ;
break;
case 3:
Console.WrireLine(“integerA = 3”) ;
break;
defaul:
Console.WrireLine(“integerA is not 1, 2 or 3”) ;
break;
}
1.6 Các lệnh lặp
C# cung cấp cho chúng ta 4 vòng lặp khác nhau (for, while, do… while và
lệnh lặp mới foreach) cho phép chúng ta thực hiện một đoạn mã lặp cho đến khi
đúng điều kiện lặp. Nó cũng hỗ trợ các lệnh nhảy như: goto, breack, continue và
return.
1.6.1 Vòng lặp for
Cú pháp:

10


for ( [ Khởi tạo biến đếm ] ; [ Biểu thức ]; [ gia tăng biến đếm ] )
Khối_lệnh ;
1.6.2 Vòng lặp While
Cú pháp:
While( Biểu thức logic)
Khối_lệnh ;
Khối lệnh sẽ được thực hiện cho đến khi nào biểu thức còn đúng. Nếu ngay
từ đầu biểu thức sai, khối lệnh sẽ không được thực thi.
1.6.3 Vòng lặp do…while
Cú pháp:

do
Khối_lệnh
while( biểu thức logic)
Khác với vòng lặp while, ở vòng lặp do…while khối lệnh sẽ được thực hiện
trước, sau đó biểu thức được kiểm tra. Nếu biểu thức đúng khối lệnh lại được thực
hiện.
1.6.4 Vòng lặp foreach
Cho phép bạn rảo qua tất cả các phần tử bản dãy hoặc các tập hợp khác, và
tuần tự xem xét từng phần tử một. Cú pháp như sau:
foreach( Kiểu tên biến trên biến mảng)
Khối lệnh ;
Ví dụ:
foreach( int i in intArray)
Console.WrileLine( i.ToString( ));
foreach( Employee e in empArray)
Console.WrileLine( e.ToString( ));
1.6.5 Câu lệnh goto
Lệnh goto có thể dùng để tạo lệnh nhảy. Cách dùng lệnh này như sau:

11


1. Tạo nhãn
2. goto đến nhãn đó.
1.6.6 Câu lệnh break, continue và return
Ta dùng câu lệnh breack khi muốn ngắt ngang việc thi hành và thoát khỏi
vòng lặp.
Câu lệnh continue được dùng trong vòng lặp khi bạn muốn khởi động lại
vòng lặp nhưng lại không muốn thi hành lại phần lệnh còn lại trong vòng lặp, ở một
điểm nào đó trong thân vòng lặp.

Câu lênh return dùng để thoát khỏi một hàm hạnh sự của một lớp, trả quyền
điều khiển về phía gọi hàm (caller). Nếu hàm có một kiểu dữ liệu trả về thì return
phải trả về một kiểu dữ liệu này; bằng không thì câu lệnh được dùng không có biểu
thức.
1.7 Lớp và cấu trúc
1.7.1 Lớp
Lớp (class) là một khuôn mẫu thiết yếu mà chúng ta cần tạo ra đối tượng.
Lớp định nghĩa cái mà dữ liệu và hàm của mỗi đối tượng riêng biệt (được gọi là thể
hiện) của lớp có thể chứa. Ví dụ chúng ta có một lớp miêu tả một sinh viên nó được
định nghĩa các trường như: TenSV, MaSV, Namsinh và Diachi cái mà chúng ta giữ
thông tin cụ thể sinh viên. Nó cũng có thể được miêu tả bởi các hành động trong các
trường dữ liệu.
Lớp trong C# có cú pháp như sau:
Class MyClass
{
Private in someField;
Public string someMedthod(bool parameter)
{
}
}

12


1.7.2 Định nghĩa cấu trúc
Cú pháp:
[thuộc tính][kiểu truy cập] struct <định danh> [:< danh sách các giao diên>]
{
// Các thành viên của cấu trúc
}

Không giống như lớp, cấu trúc không hỗ trợ kế thừa. Tất cả các cấu trúc thừa
kế ngầm định object nhưng nó không thể thừa kế từ bất kì lớp nào hay cấu trúc nào
khác. Các cấu trúc cũng đã ngầm định là đã niêm phong. Tuy nhiên, nó có điểm
giống với lớp là cho phép cài đặt đa giao diện.
Cấu trúc được thiết kế sao cho đơn giản và “nhẹ cân“ nên các biến thành viên
đều là kiểu private và được gói gọn lại hết. Nên tùy từng tình huống và mục đích sử
dụng mà ta cân nhắc chọn lựa dùng lớp hay dùng cấu trúc.
Muốn tạo một thể hiện của cấu trúc ta dùng từ khóa new.Ví dụ như:
Sinhvien SV= new Sinhvien(100) ;
1.8 Phương thức và thuộc tính
1.8.1 Phương thức
Cú pháp khai báo trong C# gần như giống với cách khai báo trong C++ và
Java. Chỉ khác là mỗi phương thức được khai báo tách biệt public hoặc private.
Không thể dùng public để nhóm các phương thức định nghĩa. Ngoài ra tất cả các
phương thức C# được định nghĩa trong lớp định nghĩa
Trong C#, các phương thức kèm theo các từ khoá dùng bổ nghĩa cho phương
thức, kiểu giá trị trả về, các tham số nhập vào và phần thân nằm trong dấu ngoặc
kép:
[modifiers] return_type MethodName([parameters])
{
// Thân phương thức
}

13


Mỗi tham số có tên của kiểu của tham số và tên mà nó được tham khảo trong
thân phương thức, và cả giá trị trả về nếu có.
1.8.2 Thuộc tính
Để định nghĩa thuộc tính trong C# bạn dùng cú pháp sau:

Public string SomeProperty
{
Get
{
Return “ Đây là giá trị thuộc tính”;
}
Set
{
}
}
Có sự hạn chế thông thường ở đây là: Thủ tục get không có tham số và phải
trả về cùng kiểu với thuộc tính đã được khai báo. Bạn không nên khai báo tường
minh các tham số trong thủ tục set, mà trình biên dịch sẽ tự động biết là có một tham
số cùng kiểu trỏ đến giá trị.
1.9 Đón bắt lỗi với try và catch
Bạn phải dứt khoát với hầu hết với những gì liên quan đến ngoại lệ, đừng để
bất kì một thông báo lỗi nào đến người dùng trong khi ứng dụng của bạn đang tiếp
tục thực thi. Để giải quyết tình trạng này bạn phải kiểm soát được ngoại lệ.
Những phát biểu sử dụng cho trường hợp này là try và catch. Try chứa đựng
những phát biểu có thể phát ra ngoại lệ trong khi vẫn đón những ngoại lệ khác nếu
chúng còn đang tồn tại.
Nếu như chúng ta thật sự không biết ngoại lệ sẽ xảy ra khi thực thi đoạn mã
đó, nhưng chúng ta vẫn muốn an toàn khi thực thi chúng, cần bỏ qua những ngoại lệ
đó bằng cách dùng phát biểu đơn giản như sau.

14


Try
{

…………………
}
Catch
{
…………………
}
1.10 Cách sử dụng DirectX trong C#
Bước đầu tiên chúng ta cần làm cho bất kỳ một ứng dụng nào là tạo một
project mới trong Visual Studio. Bạn hãy chạy Visual Studio .Net với chế độ không
mở bất kỳ một project nào.
1. Lựa chọn New, Project từ thực đơn File, hộp thoại New Project sẽ xuất hiện có
dạng tương tự như hình dưới đây:

15


2. Thay đổi tên của project thành huyenanh1 và lựa chọn loại ứng dụng là Windows
Form Application từ danh sách các project mẫu (project templates). Kích chọn nút
OK để hoàn tất.
Trước khi chúng ta có thể biên dịch và chạy bất kỳ một ứng dụng nào đó có
sử dụng DirectX, chúng ta cần phải thực hiện một vài xác lập: liên kết với thư viện
DirectX ví dụ như đối với những chương trình ứng dụng sử dụng DirectX7, ta cần
phải tạo liên kết với thư viện DxVBLib, để liên kết được thì ta làm như sau:
(a). Lựa chọn Properties option trong thực đơn Project. Sau đó ta chọn Add
Reference như bảng dưới đây:

(b). Lựa chọn tab Com trong bảng Add Refrence sau đó chúng ta sẽ chọn DirectX 7
for Visual Basic Type Library rồi nhấn nút Ok để hoàn tất.

16



17


CHƯƠNG 2: KỸ THUẬT THIẾT KẾ TRÒ CHƠI
2.1 Lý thuyết trò chơi
2.1.1 Giới thiệu về lý thuyết trò chơi
Lý thuyết trò chơi là một nhánh của toán học ứng dụng. Ngành này nghiên
cứu các tình huống chiến thuật trong đó các đối thủ lựa chọn các hành động khác
nhau để cố gắng làm tối đa kết quả nhận được. Ban đầu được phát triển như là một
công cụ để nghiên cứu hành vi kinh tế học, ngày nay lý thuyết trò chơi được sử dụng
trong nhiều ngành khoa học, từ sinh học đến triết học. Lý thuyết trò chơi đã có sự
phát triển lớn từ khi John von Neumann là người đầu tiên hình thức hóa nó trong
thời kỳ trước và trong Chiến tranh Lạnh, chủ yếu do áp dụng của nó trong chiến
lược quân sự. Bắt đầu từ những năm 1970, lý thuyết trò chơi bắt đầu được áp dụng
cho nghiên cứu về hành vi động vật, trong đó có sự phát triển của các loài qua chọn
lọc tự nhiên. Lý thuyết trò chơi gần đây đã thu hút được sự chú ý của các nhà khoa
học máy tính do ứng dụng của nó trong trí tuệ nhân tạo, điều khiển học và nhiều lĩnh
vực khác.
Lý thuyết trò chơi nghiên cứu các quyết định được đưa ra trong một môi
trường trong đó các đối thủ tương tác với nhau. Nói cách khác, lý thuyết trò chơi
nghiên cứu cách lựa chọn hành vi tối ưu khi chi phí và lợi ích của mỗi lựa chọn là
không cố định mà phụ thuộc vào lựa chọn của các cá nhân khác.
2.1.2 Biểu diễn trò chơi
Các trò chơi được nghiên cứu trong ngành lý thuyết trò chơi là các đối tượng
toán học được định nghĩa rõ ràng. Một trò chơi bao gồm một tập các người chơi/đấu
thủ, một tập các nước đi (hoặc chiến lược) mà người chơi có thể chọn, và một đặc tả
về cơ chế thưởng phạt cho mỗi tổ hợp của các chiến lược. Có hai cách biểu diễn trò
chơi là biểu diễn theo dạng chuẩn tắc và biểu diễn theo dạng mở rộng.


18


Trò chơi dạng chuẩn tắc: Biểu diễn chiến lược trò chơi của hai người theo
dạng ma trận sẽ lưu thông tin về các đối thủ, các chiến lược hay nước đi của từng
đối thủ và cơ chế thưởng phạt sau mỗi nước đi.
Trò chơi dạng mở rộng: Mô tả các trò chơi có chiến lược quan trọng thường
được biểu diễn dưới dạng hình cây.
2.2 Các loại trò chơi
2.2.1 Trò chơi đối xứng và bất đối xứng
Trò chơi đối xứng là một trò chơi mà kết quả của cuộc chơi một chiến thuật
nào đó chỉ phụ thuộc vào các chiến thuật được sử dụng, chứ không phụ thuộc vào
người chơi. Nếu như tính danh của những người chơi có thể thay đổi mà không làm
thay đổi phần lợi đối với chiến thuật chơi, thì một trò chơi là đối xứng. Nhiều trò
chơi 2×2 thường được nghiên cứu là đối xứng.
Trò chơi bất đối xứng là một thể loại trò chơi mà các tập hợp chiến thuật khác
nhau được sử dụng bởi hai người chơi. Tuy vậy, có thể xảy ra trường hợp một trò
chơi có những chiến thuật giống nhau cho cả hai người chơi, nhưng vẫn bất đối
xứng. Chẳng hạn, trò chơi được minh họa dưới đây là bất đối xứng mặc dù cho có
cùng tập các chiến thuật cho cả 2 người chơi.

E

F

E

3, 4


1, 2

F

1, 2

3, 4

Hình 2.1 Một trò chơi bất đối xứng
2.2.2 Trò chơi tổng bằng không và trò chơi tổng khác không
Trò chơi có tổng bằng không là một trò chơi mà với mọi tổ hợp của tất cả
các chiến lược chơi thì tổng điểm của tất cả các người chơi trong ván chơi luôn bằng
0. Hay chúng ta nói một cách khác, thắng lợi của người này bằng thiệt hại của người
khác.

19


Trò chơi có tổng bằng không (zero-sum) là trò chơi có tổng giá trị kết quả
(mà người thắng được hưởng) là cố định. Bất cứ bên nào thắng (+1) cũng làm cho
bên kia thua cuộc (-1), tương ứng với tình huống ganh đua thuần tuý, cuối cùng dẫn
tới tổng (+1 -1) = 0.
Cờ vua là một trò chơi có tổng bằng 0 bởi không thể có trường hợp cả hai bên
đều thắng hoặc đều thua. Nếu một bên thắng thì bên kia nhất định là thua và ngược
lại. Thể thao là những ví dụ điển hình nhất của trò chơi có tổng bằng 0. Nhà vô địch
chỉ có thể đạt được vinh quang khi toàn bộ các đối thủ khác đều thua cuộc. Trong
một giải bóng đá tổng số trận thắng luôn bằng tổng số trận thua cũng là bởi cái tính
chất tổng bằng không ấy.
“Được ăn cả, ngã về không”, việc đầu cơ chứng khoán cũng chính là một trò
chơi có tổng bằng 0, ở đó, kẻ đầu cơ có thể mất trắng hoặc thắng lớn, nhưng lợi

nhuận mà anh ta thu được có thể đổi bằng cả gia tài, đôi khi mạng sống của những
nhà đầu tư tài chính khác
Khác với tổng bằng 0, trong những tình huống có tổng khác 0 thì thắng lợi
của người này chưa chắc đã là thiệt hại của người kia. Các tình huống này tồn tại với
điều kiện tổng kết quả (mà người thắng được hưởng) không bị giới hạn hay cố định.
Về bản chất đây là trường hợp kiến tạo kết quả thay vì chia sẻ kết quả giữa các đối
thủ.
2.2.3 Trò chơi đồng thời và trò chơi tuần tự
Trò chơi đồng thời là một loại trò chơi mà tất cả các người chơi đưa ra các
chiến thuật chơi của mình một cách đồng thời
Trò chơi tuần tự là trò chơi mà trò chơi mà các người chơi đưa ra các chiến
thuật chơi của mình một cách tuần tự, hết người này đến người kia. Trong các trò
chơi tuần tự, người đi sau có biết một số (nhưng không nhất thiết toàn bộ) thông tin
về các nước đi trước.

20


2.2.4 Trò chơi thông tin hoàn hảo và trò chơi thông tin không hoàn hảo
Một trò chơi được gọi là có thông tin hoàn hảo nếu mọi đấu thủ biết tất cả các
nước đi mà tất cả các đấu thủ khác đã thực hiện. Do vậy chỉ có các trò chơi tuần tự
mới có thể là các trò chơi thông tin hoàn hảo ví dụ trò chơi cờ vây, cờ vua.
Trò chơi không có thông tin hoàn hảo là trò chơi mà mọi đối thủ không biết
hết nước đi của đối thủ khác. Hầu hết các trò chơi được nghiên cứu trong lý thuyết
trò chơi là các trò chơi thông tin không hoàn hảo.
2.2.5 Các trò chơi dài vô tận
Bởi các lý do hiển nhiên, các trò chơi được nghiên cứu bởi các kinh tế gia và
những người chơi trong thế giới thực nhìn chung là kết thúc trò chơi trong hữu hạn
các bước đi. Các nhà toán học lý thuyết không bị cản trở bởi điều đó, và lý thuyết
gia về tập hợp đặc biệt nghiên cứu về các trò chơi kết thúc sau vô hạn các bước đi,

bới người thắng (hay là phần lợi) là không biết được cho đến sau khi các bước đi đó
đã hoàn thành.
Sự chú ý thường không phải là quá nhiều về cách nào tốt nhất để chơi trò
chơi, mà đơn giản là chỉ phụ thuộc vào người chơi hay người kia có hay không một
chiến thuật chiến thắng. (Có thể chứng minh rằng, sử dụng tiên đề chọn lựa, là có
những trò chơi với ngay cả là đầy đủ thông tin hoàn toàn, và chỉ có kết quả là
"thắng" hay "thua" và không người chơi nào có chiến thuật để chiến thắng). Sự tồn
tại của những chiến thuật như vậy, cho những trò chơi được thiết kế một cách thông
minh, có những kết quả quan trọng trong lý thuyết miêu tả tập hợp.
2.3 Các kỹ thuật thiết kế trò chơi
2.3.1 Tổng quan về thiết kế trò chơi
Khái niệm thiết kế trò chơi vẫn còn khá mới mẻ ở nước ta. Nhiều suy nghĩ
giản đơn cho rằng thiết kế trò chơi chỉ là một khâu sáng tạo khi đã có chút kĩ năng
đồ họa, thiết kế. Nhưng thực tế, nghề phát triển game xoay quanh nhiều môn học, ví
dụ như biên tập màn chơi (level editing), tạo hình (modeling), dựng chuyển động

21


(animating), lập trình, kỹ thuật phần mềm và âm thanh. Để có ra mắt một game “đủ
đô” là một danh sách các công việc bao gồm từ những nghề chuyên môn trong
ngành như thiết kế đồ hoạ (vẽ hoạt cảnh, lập mô hình, thiết kế nhân vật, thiết kế bề
mặt); thiết kế các màn chơi và trò chơi; viết chương trình (thường là công việc của
các kỹ sư lập trình); quản trị mạng trực tuyến (dành cho bộ phận điều hành trực
tuyến các game trên mạng – MMO, và quản lý website); sản xuất (Producer) - tức là
lo mọi việc liên quan từ sáng tạo trò chơi đến nội địa hóa game cho thị trường trong
nước.
Một trò chơi cốt lõi cũng giống như một phần mềm cao cấp. Những người
tham gia phát triển trò chơi phải có kiến thức cực kỳ chuyên sâu về lĩnh vực của
mình (lập trình, đồ hoạ…). Một Game Developer đã từng định nghĩa: “Nếu như một

ngôi nhà, một căn biệt thự được thiết kế bởi kiến trúc sư, thì game là một “công
trình” được định hình từ một hoặc nhiều người - Họ được gọi là Game Artist hay nói
rộng hơn là Concept Artist (Họa sỹ thiết kế ý tưởng)”. Hoạ sỹ là người chịu trách
nhiệm chính liên quan đến các vấn đề về mỹ thuật trong một sản phẩm game: những
hình phác thảo ban đầu (concept art), hình thể 2D, các quy mô 3D… Trong một dự
án game, tập thể các hoạ sỹ sẽ chịu sự lãnh đạo của giám đốc mỹ thuật (Art
Director) hoặc nhà thiết kế (Game Designer).
2.3.2 Quy trình khi thiết kế một game
Sản xuất một trò chơi điện tử phải cần rất nhiều công đoạn. Việc phát triển
game thường hay được bắt đầu với một ý tưởng hay một cảm hứng. Điều đó giống
như một kiểu phép thuật. Nhưng xây dựng nên một trò chơi cũng giống như bất kỳ
một công việc khó khăn nào khác, như việc xây dựng một nhà thờ hoặc viết một
cuốn tiểu thuyết hay vẽ một bức tranh. Phát triển trò chơi đòi hỏi có niềm đam mê,
sự cống hiến. Thậm chí một số người còn có thể nói rằng nó mang đến nỗi ám ảnh.
Nó lấy đi rất nhiều thời gian, năng lượng và tư tưởng của bạn. Nó không bao giờ kết
thúc. Ngay cả khi nó được hoàn thành một cách rất kỹ thuật, bạn tìm thấy nhiều
điều, những điều mới mẻ, những điều nhỏ mà bạn có thể kiểm tra, thay đổi hoặc

22


chỉnh sửa. Đó là một đòi hỏi cao và nỗ lực cực độ. Nếu bạn không hoàn toàn thích
thú, với tất cả các mối nghi ngờ của mình, bạn sẽ nhanh chóng trở nên chán ghét nó.
Để những ý tưởng đó có thể thực hiện được thì cần những quy trình sau:
 Chuẩn bị tài liệu thiết kế trò chơi, và giới thiệu sản phẩm đến với nhà phát
hành.
Tài liệu thiết kế trò chơi (viết tắt là GDD), là một tập hợp các thông tin mô tả
mọi khía cạnh của trò chơi từ một người thiết kế. Nó mô tả cách các menu sẽ tương
tác với người sử dụng, cốt truyện đằng sau những nhân vật chính, nghệ thuật, kinh
nghiệm và những gì người chơi cần phải có khi chơi trò chơi.

GDD phục vụ những mục đích quan trọng. Nó giúp bạn giải thích ý tưởng
của mình cho người khác để họ có thể tham gia thực hiện cùng bạn, và nó cho phép
các nhóm phát triển chia sẻ trên một quan niệm chung của dự án mà họ đang làm
việc. Sau khi bạn có một thiết kế và ý tưởng đã được hình thành, bạn có cần hai
nhóm: một số sẽ tạo ra trò chơi và một vài người sẽ cung cấp tiền để chi trả cho tất
cả những người làm ra trò chơi đó. Nhóm đầu tiên là Studio phát triển hoặc Studio
làm game. Nhóm thứ hai được gọi là các nhà phát hành. Một nhà phát hành chi tiền
cho Studio của bạn để sản xuất trò chơi. Họ cũng trả tiền cho việc tiếp thị sản phẩm,
và đổi lại, họ giữ hầu hết các lợi nhuận. Để giành được sự ủng hộ tài chính của nhà
phát hành, thường phải tạo nên một cuộc quảng bá. Khi bạn giới thiệu trò chơi của
mình đến một nhà phát hành, bạn cung cấp cho nhà phát hành một bản trình bày
ngắn gọn mô tả ý tưởng của mình, mục tiêu nhân khẩu học (những người sẽ cảm
thấy hứng thú nhất với trò chơi), và tại sao ý tưởng của bạn lại là điều mà họ nên tài
trợ, thay vì bất kỳ hàng trăm ý tưởng khác nữa. Một bản demo giới thiệu thì thường
rất hữu ích, một phiên bản nháp chưa hoàn chỉnh của trò chơi, như vậy bạn có thể
truyền đạt một cách hiệu quả những gì có trong trò chơi của mình.

23


 Tìm hiểu về tài liệu kỹ thuật và các khái niệm cơ bản của Engine game.
Tài liệu thiết kế kỹ thuật mô tả cách thức các trò chơi sẽ hoạt động đằng sau
hậu trường để đáp ứng các chi tiết kỹ thuật của GDD. Mọi điều về trò chơi, từ góc
độ kỹ thuật, trò chơi cần có tư liệu và lên kế hoạch ngay từ đầu.
Không chỉ riêng tài liệu thiết kế kỹ thuật là cần thiết để mô tả cấu trúc của tất
cả các mã mô-đun, mà cũng cần phải bổ sung thêm danh sách những phần mềm sẽ
sử dụng, bất kỳ loại mã hóa tiêu chuẩn nào mà bạn muốn thực thi, và cấu hình yêu
cầu tối thiểu cho sản phẩm hoàn chỉnh của mình. Người chỉ đạo chương trình trong
đội ngũ phát triển của bạn sẽ là một ứng cử viên để viết tài liệu này, tuy nhiên việc
bảo đảm rằng người đó có kỹ năng diễn giải bài viết kỹ thuật thật tốt cũng là một

điều rất quan trọng.
Bây giờ là lúc trò chơi được mô tả cả trong lẫn ngoài, bạn có thể bắt đầu lắp
ráp các mảnh đã được nêu trong tài liệu thiết kế kỹ thuật để hình thành nên phần
quan trọng nhất của trò chơi, Engine game. Trong phát triển game, “Engine” không
phải là đề cập đến một thiết bị máy móc. Mà là tất cả các mã cốt yếu hình thành trò
chơi, các đoạn mã đó được sử dụng để thực hiện các phép toán vật lý, giao tiếp với
các máy tính khác qua mạng, hình thành những yếu tố đồ họa trong game, phát ra
âm thanh, chạy các Script (kịch bản), và quản lý AI (trí thông minh nhân tạo).
 Phát triển nội dung, xây dựng hình ảnh, tiến hành thử nghiệm và phát hành
trò chơi.
Ngoài Engine, để thiết kế game còn phải có Content (nội dung) và Art (hình
ảnh). Trên lý thuyết, Content của một trò chơi - đó là level, các nhân vật, nền nhạc
và Art bao gồm Texture (các loại kết cấu, bề mặt), mô hình 3D, và Animation (hình
ảnh động) - sẽ được tách biệt với Engine của trò chơi, cho phép các nhà phát triển dễ
dàng sửa đổi tùy theo nhu cầu của dự án.
Bên cạnh đó là giai đoạn thử nghiệm, giai đoạn thử nghiệm là một loạt những
đòn tấn công thực sự khắc nghiệt đến cái “tôi” của bạn. Bạn đã dành rất nhiều thời

24


gian, nỗ lực và sức khỏe của mình để biến dự án này thành hiện thực, và bây giờ, khi
rất nhiều người thậm chí chưa bao giờ được nghe nói đến cách mà bạn chơi tựa
game của mình, họ hoàn toàn không hiểu được điều đó. Họ gặp khó khăn khi điều
hướng các menu. Họ không hiểu phải đi đâu, mục tiêu nhiệm vụ là gì, phải trò
chuyện với những ai, hoặc nơi nào để chuyển tiếp.
Theo nhà phát triển, tất cả các câu trả lời cho những câu hỏi này thì hoàn toàn
rõ ràng với bạn, nhưng đối với những người mà chỉ mới lần đầu tiên đến với trò chơi
của bạn, những điều này có thể quá khó hoặc không thể hiểu được. Tuy nhiên, bằng
cách tiến hành các bài thử nghiệm cũng có khả năng cho thấy được những điều gây

ra khó khăn cho người chơi, và sau đó sửa lại, hoặc hoàn thiện chúng. Trong giai
đoạn này của việc sản xuất, mục tiêu ban đầu có thể sẽ có vài thay đổi nhỏ để sửa
chữa các sai sót trong dự án. Bằng cách liên tục thử nghiệm và sàng lọc những kinh
nghiệm chơi game, bạn có thể tạo ra một trò chơi đã được mài giũa đến tận cùng.
Bây giờ trò chơi đã sẵn sàng để truyền tải khắp nơi, bạn đã sẵn sàng để bắt
đầu sự nghiệp của bạn như là một nhà phát triển game Rockstar được quốc tế hoan
nghênh.
2.3.3 Một số thuật toán thường được áp dụng khi thiết kế trò chơi
2.3.3.1 Các thuật toán tìm đường đi ngắn nhất
 Đường đi ngắn nhất từ một đỉnh nguồn tới một đỉnh đích, thuật toán
Dijkstra
Procedure Dijkstra( G: đơn đồ thị, liên thông có trọng số dương);{a: nguồn; z: đỉnh
đích}
BEGIN
1. For i:=1 to n do l(vi)=;
2. L(a):=0; S:=;
3. while zS do
Begin
u:=<đỉnh S và có nhãn L(u) nhỏ nhất>; S:=S{u};

25


×