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

Báo cáo lập trình windows game tank

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 (3.04 MB, 18 trang )

ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM

BÁO CÁO CUỐI KỲ
GAME TANK
GVHD: ThS. PHẠM THI VƯƠNG
Môn học: LẬP TRÌNH TRÊN WINDOWS – WINP1.C21
Nhóm 7:
1. HUỲNH NGỌC HIỆP 10520128
2. NGUYỄN TẤN HOAN 10520135
TP. Hồ Chí Minh, tháng 5 năm 2012
LỜI CẢM ƠN
Trong suốt thời gian học tập và hoàn thành báo cuối cuối kỳ, chúng em đã nhận
được sự giúp đỡ, chỉ bảo tận tình của các thầy cô Trường đại học công nghệ thông tin –
Đại học quốc gia thành phố Hồ Chí Minh. Chúng em xin gửi lời cảm ơn sâu sắc đến quý
thầy cô.
Đặc biệt xin chân thành cảm ơn thầy Phạm Thi Vương – người đã trực tiếp hướng
dẫn và tạo mọi điều kiện thuận lợi giúp đỡ chúng em hoàn thành báo cáo này.
Chúng em cũng xin cảm ơn chân thành tới gia đình và bạn bè đã tạo điều kiện, giúp
đỡ và động viên chúng em hoàn thành bài báo cáo đúng thời hạn.
Mặc dù đã cố gắng hết khả năng nhưng bài báo cáo không thể nào tránh khỏi những
thiếu xót. Rất mong nhận được sự góp ý quý báu của quý thầy cô để đồ án hoàn chỉnh hơn.

Nhóm sinh viên thực hiện
Nhóm 7
Tháng 5 – 2012
NHẬN XÉT CỦA GIÁO VIÊN












ThS. Phạm Thi Vương Nhóm 7








MỤC LỤC
ThS. Phạm Thi Vương Nhóm 7
4
I. Giới thiệu Game Tank:
1. Mô tả Game Tank:
Như chúng ta đã biết, hiện nay đã có rất rất nhiều game bắn xe tăng khác nhau,
dường như trò chơi bắn xe tăng đã trở nên quá phổ biến. Để có thể đáp ứng một
cách tốt nhất thị hiếu cho người chơi thì game cần phải có những tính năng ưu việt
hơn các phần mềm khác. Ngoài một số chức năng như các game bắn tăng khác,
game của chúng ta cần phải xây dựng lên những tích năng mà các game khác không
có nhiều và làm nổi bật những tính năng đó.
Hiện nay có một sô công cụ, ngôn ngữ, môi trường để phát triển game, nhóm
chúng em đã chọn XNA để hoàn thành game bắn xe tăng bởi:

- Ngôn ngữ lập trình CSharp đơn giản, dễ học và hiểu nhanh hơn so với các
ngôn ngữ lập trình khác.
- Môi trường XNA làm việc chuyên nghiệp, quản lý tốt khi làm game trên
windows.
- Microsoft tín nhiệm thư viện XNA này.
2. Các chức năng chính của Game Tank:
Cũng như các tính năng chính của các game bắn xe tăng thông thường, Game
Tank có một số tình năng cơ bản và ưu việt sau:
• Cho phép người chơi khởi tạo trò chơi mới.
• Trong khi chơi, game có một số chức năng nổi bật sau:
Người chơi điều khiển xe tăng bảo vệ Heart và tiêu diệt các xe tăng địch.
Khi người chơi tiêu diệt toàn bộ xe tăng địch và bảo vệ an toàn Heart thì
người chơi sẽ hoàn thành level đó. Qua các level cao hơn thì tốc độ di
chuyển, tốc độ bắn đạn của xe tăng địch sẽ tăng lên và cùng với đó là các
tường bảo vệ được đơn giản hơn.
Để trợ giúp một phần nào đó cho người chơi thì trong khi chơi game xe
tăng bảo vệ có thể nhận được một số gift sau:

ItemBomb ItemBullet ItemLife ItemMove
ItemScore

 ItemBomb: Là một item nguy hiểm cho người chơi và xe tăng địch,
khi xe tăng bảo vệ hay xe tăng địch va chạm với item này thì xe
tăng đó sẽ bị tiêu diệt ngay tức khắc. Vì vậy, trong khi chơi người
chơi nên cẩn thận với item này.
 ItemBullet: Tăng tốc độ bắn đạn cho xe tăng địch.
 ItemLife: Tăng số mạng của xe tăng bảo vệ lên 1 mạng.
 ItemMove: Tăng tốc độ di chuyển cho xe tăng bảo vệ.
 ItemScore: Cộng điểm thành tích cho người chơi.
ThS. Phạm Thi Vương Nhóm 7

5
• Trong phần Option của game, người chơi có thể tắt/mở âm thanh trong
game tùy theo ý thích.
Cùng với đó là tính năng Map Editor của game, cho phép người chơi thực
hiện một số chức năng cơ bản sau:
 Thiết kế map chơi game tùy chọn theo ý thích của người chơi.
Bạn có thể thiết kế map với nhiều loại tường khác nhau như: gạch,
bê tông, nước và cỏ sao cho người chơi cảm thấy thích thú và hấp
dẫn khi chơi game.
Sau khi thiết kế map hoàn chỉnh, người chơi có thể lưu map dưới
dạng file .txt và sử dụng tính năng open map để chơi game với map
do bạn thiết kế.
 Open tùy chọn do người chơi thiết kế hoặc các level cao hơn trong
game.
• Giúp người chơi lưu thành tích cao nhất khi chơi game.
• Nếu người chơi chưa biết được cách chơi game, làm để nào để điều khiển
xe tăng, game có hướng dẫn cách chơi game cụ thể cho người chơi.
• Hiển thị thông tin cơ bản về nhóm hoàn thành game.
II. Giao diện chính của Game Tank:
Các giao diện chính của game như sau:
1. Màn hình Loading game:
Chờ đợi để load hình ảnh hiển thị cho game.
ThS. Phạm Thi Vương Nhóm 7
6
2. Menu game:
Hiển thị các tùy chọn trong game.
3. Màn hình Play (Chơi game):
Phần giao diện quan trọng nhất trong game, nơi người chơi chơi và cảm nhận về
game.
ThS. Phạm Thi Vương Nhóm 7

7
4. Màn hình Pause:
5. Màn hình Option (Tùy chọn):
ThS. Phạm Thi Vương Nhóm 7
8
Trong phần Option, ta có thêm tùy chọn Map Editor dùng để thiết kế Map chơi cho
game. Thiết kế map xong bạn có thể sử dụng chức năng lưu map, mở map theo ý thích.
Giao diện ban đầu khi mở Map Editor:
Giao diện sau khi thiết kế Map Editor theo ý thích của bạn:
ThS. Phạm Thi Vương Nhóm 7
9
6. Màn hình Construction (Hướng dẫn):
Hiển thị các hướng dẫn chơi và sử dụng game một cách tốt nhất.
7. Màn hình High Score (Thành tích):
Hiển thị điểm số người chơi cao nhất trong game.
ThS. Phạm Thi Vương Nhóm 7
10
8. Màn hình About (Thông tin):
Hiển thị thông tin về nhóm tác giả hoàn thành game.
III. Các giải thuật dùng trong Game Tank:
1. Sơ đồ lớp và chức năng:
1.1. Sơ đồ lớp xây dựng giao diện cho game:
ThS. Phạm Thi Vương Nhóm 7
11
Lớp GameScene là một lớp trừu tượng, các lớp khác được kế thừa từ lớp
GameScene dùng làm xây dựng nên các giao diện chính cho game và các màn hình hiển thị
khi hoàn thành một level hay hoàn thành game.
1.2. Sơ đồ lớp xây dựng tường:
ThS. Phạm Thi Vương Nhóm 7
12

Game bao gồm các loại tường: gạch, bê tông, nước, cỏ và heart, nên game được xây
dựng từ các class kế thừa từ lớp clsWall.
1.3. Sơ đồ lớp xây dựng Gift:
1.4. Sơ đồ lớp xây dựng Map Editor:
ThS. Phạm Thi Vương Nhóm 7
13
1.5. Hình ảnh, âm thành và font chữ trong game:
Audio và Image chứa các hình ảnh và âm thanh được sử dụng game.
Cùng với đó là kiểu chữ được định dạng ở font trong thư viện Font.
2. Giải thuật toán quan trọng trong game:
2.1. Giải thuật quản lý và vẽ các thành phần giao diện:
/*
ThS. Phạm Thi Vương Nhóm 7
14
* Update các thành phần cho game
*/
public override void Update(GameTime gameTime)
{
// Đếm số thành phần trong giao diện
for (int i = 0; i < components.Count; i++)
{
if (components[i].Enabled)
{
// Cập nhật các thành phần
components[i].Update(gameTime);
}
}
// Gọi hàm Update cơ sở
base.Update(gameTime);
}

/*
* Vẽ các thành phần trong game
*/
public override void Draw(GameTime gameTime)
{
for (int i = 0; i < components.Count; i++)
{
GameComponent gc = components[i];
if ((gc is DrawableGameComponent) &&
((DrawableGameComponent) gc).Visible)
{
// Vẽ các thành phần lên màm hình
((DrawableGameComponent) gc).Draw(gameTime);
}
}
// Gọi hàm Draw cơ sơ
base.Draw(gameTime);
}
ThS. Phạm Thi Vương Nhóm 7
15
2.2. Kỹ thuật đọc Map từ file .txt:
// Lưu thông tin map đọc vào
public static byte[,] _map;
// Biến cờ chỉ trạng thái mở map bằng MapEditor hay chế độ mặc định
public static bool isOpen;
// Đường dẫn đến file .txt lưu map
public static String filePath = "";

public static void LoadMap(int level)
{

System.IO.StreamReader sr = null;
// Nếu map được mở bằng MapEditor
if (isOpen)
{
// Lấy đường dẫn file .txt
sr = System.IO.File.OpenText(filePath);
}
// Nếu map được mở theo chế độ mặc định trong game
else
{
// Lấy file .txt theo level mà người chơi đang chơi
sr = System.IO.File.OpenText("Map" + level +".txt");
}
try
{
// Lưu nội dung map
_map = new byte[14, 17];
// Lưu nội dung file .txt
string s = "";
int i = 0;
while ((s = sr.ReadLine()) != null)
{
int n = s.Length;
for (int k = 0; k < n; k++)
{
string mypoint = s[k].ToString();
// Lấy thông tin map
_map[i, k] = byte.Parse(mypoint);
}
i++;

}
}
catch (System.Exception ex)
{
}
}
ThS. Phạm Thi Vương Nhóm 7
16
2.3. Kỹ thuật xét va chạm:
• Va chạm giữa xe tăng với tường:
// Kiểm tra vị trí giữa xe tăng và tường
private bool isIn(Vector2 _position, clsWall wall)
{
if (((_position.X > wall.position.X)
&& (_position.X < (wall.position.X + wall.size.X)))
&& ((_position.Y > wall.position.Y)
&& (_position.Y < (wall.position.Y + wall.size.Y))))
return true;
else
return false;
}
// Kiểm tra va chạm giữa xe tăng với tường
public bool IsCollides(clsWall wall)
{
if (isIn(position, wall)
|| isIn(position + new Vector2(size.X, 0), wall)
|| isIn(position + new Vector2(0, size.Y), wall)
|| isIn(position + size, wall)
|| isIn(position + new Vector2(size.X / 2, 0), wall)
|| isIn(position + new Vector2(size.X, size.Y / 2), wall)

|| isIn(position + new Vector2(size.X / 2, size.Y), wall)
|| isIn(position + new Vector2(0, size.Y / 2), wall))
return true;
else
return false;
}
• Va chạm giữa xe tăng với đạn và giữa đạn với heart:
/*
* Kiểm tra va chạm giữa xe tăng với đạn, đạn với heart
*/
public bool IsCollides(Rectangle _rect)
{
// Sử dụng hàm Intersects(Rectangle value) được xây dựng
sẵn để kiểm tra va chạm
return rectangle.Intersects(_rect);
}
• Kỹ thuật xây dựng hiệu ứng nổ tung của xe tăng:
// Vẽ các mảnh vỡ của xe tăng
spriteBatch.Draw(texture
, new Rectangle((int)position.X
ThS. Phạm Thi Vương Nhóm 7
17
, (int)position.Y, texture.Width, texture.Height)
, new Rectangle(0, 0, texture.Width, texture.Height)
, Color.White
, 0
, Vector2.Zero
, SpriteEffects.None, .5f);
// Vẽ hiệu ứng ánh sáng xe tăng
if (isFinishCircleBurn == false)

{
spriteBatch.Draw(Game.Content.Load<Texture2D>
("Image/Tank-Wall/CircleBurnSprite")
, new Rectangle((int)positionCircleBurn.X - 50,
(int)positionCircleBurn.Y - 50, 120, 120)
, new Rectangle((int)(frameX * 120), 0, 120, 120)
, Color.White
, 0
, Vector2.Zero
, SpriteEffects.None, .5f);
}
Trong đó vị trí và khung hình của hiệu ứng được cập nhật theo giời gian
nhằm tạo cho hiệu ứng đẹp và thật hơn.
IV. Tổng kết:
Việc sử dụng thư viện lập trình game XNA trong CSharp vào lập trình giúp
việc lập trình game và trình bày, thể hiển được trong sáng hơn, bên cạnh đó giúp tối
ThS. Phạm Thi Vương Nhóm 7
18
ưu hóa code dể dàng. Giúp cho việc phân tích thiết kế dễ đi vào khuôn mẫu và thực
hiện.
Mặc dù đã cố gắng hoàn thiện chương trình, tuy nhiên việc sai sót trong lập
trình là khó tránh khỏi và còn một số hạn chế mong thầy và các bạn thông cảm và
góp để chương trình hoàn thiện hơn.
Cảm ơn thầy và các bạn đã theo dõi báo cáo của nhóm!
ThS. Phạm Thi Vương Nhóm 7

×