Tiểu luận môn Đồ họa máy tính "Mô phỏng game bắn tăng trên máy điện tử cầm tay Brick Game" - Pdf 24

TRƯỜNG ĐH HỒNG ĐỨC
KHOA CNTT&TT


BÀI TIỂU LUẬN

HỌC PHẦN ĐỒ HỌA MÁY TÍNH

Đề tài:
“Mô phỏng game bắn tăng trên máy điện tử cầm tay Brick Game” SVTH : Bùi Hữu Giáp
Lớp : Đại học tin – K15
MSV : 1261030003

Thanh Hóa, 11/2014LỜI CẢM ƠN
Trong quá trình học tập tại trường, chúng em đã được học hỏi và tiếp thu
rất nhiều kiến thức đại cương cũng như chuyên ngành nhằm nâng cao vốn hiểu
biết và là hành trang quý báu giúp chúng em vững bước vào đời. Em xin gửi lời
cảm ơn chân thành đến quý thầy cô đã giảng dạy chúng em trong suốt thời gian
qua, khoa Công Nghệ Thông Tin và truyền thông cũng như tất cả quý thầy cô
trong trường Đại học Hồng Đức. Đặc biệt em xin chân thành cảm ơn cô Lê Thị
Hồng - người đã trực tiếp giảng dạy chúng em học phần Đồ họa máy tính và
cũng là người tận tình hướng dẫn em trong suốt thời gian thực hiện đề tài này.
Tuy nhiên, dù rất cố gắng nhưng do thời gian có hạn nên bài tiểu luận của
em khó tránh khỏi những thiếu sót. Em rất mong nhận được sự thông cảm và đóng
góp ý kiến của quý thầy cô và các bạn để bài tiểu luận của em được hoàn chỉnh
hơn.
Em xin chân thành cảm ơn! Thanh Hóa, 11/2014
Sinh viên thực hiện
i

MỤC LỤC
CHƯƠNG I: MỞ ĐẦU 1

1.1.


CHƯƠNG II: CƠ SỞ LÍ LUẬN 3

2.1.

Xe tăng 3

2.2.

Đạn 3

2.3.

Di chuyển 4

2.4.

Boss 6

2.5.

Luật chơi 7

CHƯƠNG III: NỘI DUNG 9

3.1.

Tổ chức lưu trữ game 9

3.2.


3.3.2.

Hàm hiển thị một số nguyên ra màn hình đồ họa 15

3.3.3.

Nhóm các hàm hiển thị các đối tượng trong game 16

ii

3.3.4.

Nhóm các hàm điều khiển giao diện khi chơi game 17

3.3.5.

Màn hình Welcome 20

3.3.6.

Menu chính 22

3.3.7.

High Score 23

3.3.8.

Option 24


Xây dựng một số level cho game 28

CHƯƠNG IV: KẾT LUẬN 32

4.1.

Tóm tắt kết quả nghiên cứu 32

4.2.

Đề xuất và hướng phát triển 32

TÀI LIỆU THAM KHẢO 34
iii

HÌNH ẢNH
Hình 1: Xe tăng địch 3

Hình 2: Xe tăng do người chơi điều khiển 3

Hình 3: Đạn 3

Hình 4: Di chuyển xe tăng khi không bị vật cản 4

Hình 5: Di chuyển khi xe tăng bị cản một bên ở phía trước 5

Hình 6: Di chuyển xe tăng khi bị cản cả hai bên ở phía trước 6

Mô phỏng game bắn tăng trên máy điện tử cầm tay Brick Game
SVTH: Bùi Hữu Giáp
1
GVHD: ThS. Lê Thị Hồng

CHƯƠNG I: MỞ ĐẦU
1.1. Lí do chọn đề tài
Vào những năm 80, khi máy tính và Internet vẫn chưa xuất hiện thì thứ giải
trí “xa xỉ” nhất đối với những đứa trẻ con đô thị là màn hình tivi và máy điện tử
bốn nút Nintendo của Nhật. Chính các trò chơi điện tử kinh điển thuở thập niên
80 này là sự khởi đầu của nguồn cảm hứng sáng tạo cho những game online ăn
khách sau này.
Thật thiếu sót nếu không liệt kê trò Battle City – bắn tăng – vào dòng game
kinh điển của một thế hệ. Trò chơi này được Namco bán năm 1985 trên hệ máy
NES, sau đó được phát triển cho một số nền máy như Game Boy, Arcade, Sharp
X1. Battle City có khoảng 35 màn chơi mà khi vượt qua hết game thủ sẽ quay về
chơi lại từ đầu với mức độ khó hơn. Ngoài ra, trò chơi cũng có chế độ cho phép
thay đổi và tự tạo ra bản đồ.
Máy điện tử Brick game đã thực sự tạo nên một cuộc cách mạng trong các
phương tiện giải trí cầm tay từ những năm 1993 – 1994. Hiếm có cô cậu học sinh
nào thời đó không bị “hút hồn” vào màn hình đen trắng của chiếc máy này trong
nỗ lực chinh phục đỉnh cao của trò chơi “xếp gạch”. Các phiên bản về sau của
Brick game còn có thể các trò khác như đấm bốc hay đua xe.
Tuổi thơ đã đi qua và không bao giờ trở lại, đến bao giờ game thủ Việt mới
có thể sống lại cảm giác của một thời đam mê điện tử bốn nút, có thể chơi đi chơi
lại một trò chơi mà không thấy chán? Ngày đó, bao giờ?


1.4. Phương pháp nghiên cứu
- Phương pháp thu thập tài liệu: thu thập tài liệu từ những bài báo khoa
học, các trang web tin học và một số ebook về đề tài nghiên cứu, giáo
trình và các tài liệu học tập khác.
- Phương pháp phân tích và tổng hợp tài liệu: từ những tài liệu đã thu
thập, tiến hành tìm hiểu, phân tích và tồng hợp nội dung liên quan đến
đề tài.
- Phương pháp chuyên gia: trong quá trình nghiên cứu có sự góp ý, điều
chinh từ giáo viên hướng dẫn.
- Phương pháp phân tích và tổng hợp kinh nghiệm: sau quá trình tìm
hiểu và đúc kết kinh nghiệm, tiến hành tổng hợp và hoàn thiện đề tài.
- Phương pháp thực nghiệm: sau khi cài đặt xong chương trình cần xây
dựng một số bộ test tiêu biểu và thực hiện kiểm tra tính đúng đắn dựa
trên kết quả thu được từ chương trình.

Mô phỏng game bắn tăng trên máy điện tử cầm tay Brick Game
SVTH: Bùi Hữu Giáp
3
GVHD: ThS. Lê Thị Hồng

CHƯƠNG II: CƠ SỞ LÍ LUẬN
2.1. Xe tăng
Ở trong game, mỗi xe tăng được biểu diễn bởi 6 điểm ảnh; điểm ảnh ở phía
trước chính là nòng của xe tăng. Hình 1 biểu diễn hình dạng của xe tăng khi ở
những hướng khác nhau tương ứng là lên trên, sang trái, xuống dưới và sang phải.
Xe tăng do người chơi điều khiển cũng giống như xe tăng của địch, chỉ khác
ở chỗ có tâm với một màu sắc khác để phân biệt (hình 2).

Mô phỏng game bắn tăng trên máy điện tử cầm tay Brick Game
SVTH: Bùi Hữu Giáp
5
GVHD: ThS. Lê Thị Hồng

tăng khi di chuyển không có vật cản thì tọa độ tâm của nó là không
đổi và chỉ xoay toàn thân về hướng tương ứng (hình 4).
- Khi phía trước của xe tăng có vật cản ở một phía thì nó không thể tiến
về phía trước được; tuy nhiên nó vẫn có thể rẽ về 1 trong 3 hướng còn
lại nếu như hướng đó không có vật cản. Khi xe tăng rẽ về hướng ngược
với hướng có vật cản, toàn thân của xe tăng dịch chuyển về hướng đó
1 nấc, đồng thời thân xe tăng quay về hướng đó (hình 5).
- Khi xe tăng bị vật cản ở cả hai bên phía trước, nó không thể tiến về
phía trước cũng như rẽ trái hay rẽ phải, lúc này nó chỉ có thể quay đầu.
Khi quay đầu, ngoài việc xe tăng đổi hướng thì nó còn được dịch
chuyển về hướng đó 1 nấc (hình 6).
Hình 5: Di chuyển khi xe tăng bị cản một bên ở phía trước

Mô phỏng game bắn tăng trên máy điện tử cầm tay Brick Game
SVTH: Bùi Hữu Giáp
6
GVHD: ThS. Lê Thị Hồng

- Khi xe tăng bị một vật cản ở phía sau (bởi nòng của một xe tăng khác),

và bắn một cách ngấu nhiên. Đạn của xe tăng địch không làm hại quân địch mà
chỉ có đạn do xe tăng người chơi bắn ra mới có thể tiêu diệt được quân địch.
Người chơi sẽ được yêu cầu tiêu diệt một số lượng xe tăng nhất định, khi
hoàn thành nhiệm vụ này, người chơi sẽ được đấu với Boss; nếu xe tăng người
chơi điều khiển điều khiển bị trúng đạn thì ngay lập tức nó sẽ nổ và người chơi
phải chơi lại màn chơi đó, đồng thời số lượt chơi còn lại sẽ bị trừ đi 1.
Khi đấu với Boss, người chơi sẽ được giao nhiệm vụ bắn trúng điểm yếu của
Boss một lượng đạn nhất định để tiêu diệt được nó và hoàn thành nhiệm vụ. Khi
bị trúng đạn của Boss, xe tăng do người chơi điều khiển sẽ nổ ngay tức thì và
người chơi sẽ phải quay lại chiến đấu với Boss từ đầu đồng thời số lượt chơi còn
lại sẽ bị trừ đi 1. Sau khi hạ được Boss của Level đó, người chơi sẽ được đưa tới
Level tiếp theo với độ khó cao hơn.
Trong quá trình chơi, người chơi có thể tạm dừng bất cứ lúc nào với chức
năng Pause hay dừng chơi với chức năng Stop. Khi chọn chức năng Stop, toàn bộ
thông tin liên quan đến trò chơi sẽ được lưu lại; người dùng có thể thoát khỏi trò
chơi và tiếp tục bất cứ lúc nào nếu muốn.
Khi chức năng Reset được gọi tới khi người dùng đang chơi, toàn bộ kết quả
sẽ bị hủy bỏ, người dùng sẽ chơi lại game từ đầu.
Khi xe tăng do người chơi điều khiển bị nổ và số lượt chơi còn lại đã hết thì
người chơi sẽ thua. Trò chơi sẽ tự động cập nhật bảng xếp hạng và yêu cầu người
Mô phỏng game bắn tăng trên máy điện tử cầm tay Brick Game
SVTH: Bùi Hữu Giáp
8
GVHD: ThS. Lê Thị Hồng

chơi nhập tên vào (nếu như số điểm của người chơi lớn hơn của người chơi có thứ
hạng 10 trong bảng xếp hạng).

xe tăng do người chơi điều khiển; số lượt chơi còn lại.
- int mball[101][4], c_mball=0, eball[101][4], c_eball=0,
enemy[11][4], c_enemy=0 lần lượt là các biến dùng để lưu lại thông
tin về những viên đạn do xe tăng người chơi điều khiển bắn ra; số
lượng đạn do xe tăng người chơi bắn ra hiện có trên màn hình; thông
tin về những viên đạn do xe tăng địch bắn ra; số lượng đạn do xe tăng
địch bắn ra hiện có trên màn hình; thông tin về những xe tăng địch
hiện có trên màn hình; số lượng xe tăng địch hiện có trên màn hình.
- int a_boss[5]

là mảng dùng để lưu các thông tin liên quan tới Boss
trong mỗi level.
Ba biến khác được sử dụng:
string path;
int lv_max=0;
int g_ct=0;
char r_name[12][16];
Mô phỏng game bắn tăng trên máy điện tử cầm tay Brick Game
SVTH: Bùi Hữu Giáp
10
GVHD: ThS. Lê Thị Hồng

int r_score[12];
Trong đó:
- string path dùng để lưu lại thông tin về đường dẫn tới thư mục cài đặt
của game, đường dẫn này sẽ được cập nhật liên tục mỗi khi game đươc
thực thi.

11
GVHD: ThS. Lê Thị Hồng

void huy_dan(int i, int ball[][4], int &c_ball, int del=1);
void huy_danxy(int x, int y, int direction, int ball[][4], int &c_ball);
void huy_danxy_same(int x, int y, int direction, int ball[][4], int &c_ball, int &p);
Trong đó:
- Hàm void huy_dan(int i, int ball[][4], int &c_ball, int del=1) dùng để
hủy viên đạn thứ i trong mảng đạn ball với số đạn trong mảng hiện tại
là c_ball. Đối số del đưa vào để cho phép hàm này xóa viên đạn trên
màn hình đồ họa hay không.
- Hàm void huy_danxy(int x, int y, int direction, int ball[][4], int
&c_ball) dùng để xóa tất cả những viên đạn có tọa độ (x, y) và có
hướng bay là direction trên màn hình game ra khỏi mảng lưu đạn ball,
sau khi thao tác xóa hoàn thành, số đạn c_ball được lưu trên mảng sẽ
giảm đi 1.
- Hàm void huy_danxy_same(int x, int y, int direction, int ball[][4], int
&c_ball, int &p) dùng để xóa tất cả những viên đạn có tọa độ (x, y) và
có hướng bay là direction trên màn hình game ra khỏi mảng lưu đạn
ball, sau khi thao tác xóa hoàn thành, số đạn c_ball được lưu trên mảng
sẽ giảm đi 1, viên đạn thứ p trên mảng lưu đạn ban đầu sẽ biến đổi
thành viên đạn thứ p trên mảng lưu đạn sau khi xóa.
3.2.2. Nhóm các hàm thao tác với xe tăng
Các hàm thao tác với xe tăng bao gồm:
int empty(int x, int y, int direction);
int damage(int x, int y, int direction, int xt, int yt, int directiont);
void move(int &x, int &y, int &o_direction, int n_direction);
void shoot(int x, int y, int direction, int a_ball[][4], int &c_ball);
int die(int x, int y, int direction, int ball[][4], int &c_ball);
Trong đó:

Trong đó:
- Hàm void sinhdich(int enemy[][4], int &c_enemy) dùng để sinh ra
một xe tăng địch tại một trong 6 vị trí trên màn hình. Sau khi xe tăng
được sinh ra sẽ được lưu vào mảng enemy với số xe tăng trong mảng
c_enemy được tăng lên 1. Việc sinh địch phục thuộc vào số lượng xe
tăng địch cho phép tối đa trên màn hình e_max.
- Hàm void dichlam(int enemy[][4], int &c_enemy, int eball[][4], int
&c_eball, int mball[][4], int &c_mball) dùng để điều khiển hoạt động
của tất cả các xe tăng của địch. Các thao tác này được thực hiện một
cách ngẫu nhiên phụ thuộc vào những con số được sinh ngẫu nhiên
bởi hệ thống.
Mô phỏng game bắn tăng trên máy điện tử cầm tay Brick Game
SVTH: Bùi Hữu Giáp
13
GVHD: ThS. Lê Thị Hồng

3.2.4. Hàm điều khiển Boss
void boss_lam()
{
if (a_boss[2]==8 && a_boss[3]==-1)
a_boss[3]=1;
else if (a_boss[2]==33 && a_boss[3]==1)
a_boss[3]=-1;
else if (a_boss[4]==b_speed)
{
p_boss(a_boss[1], a_boss[2], 1);
if (a_boss[3]==1)


Trong đó:
- Hàm void lv_initial() dùng để khởi tạo cho mỗi level bao gồm đọc địa
hình vào từ file, khởi tạo địch và một vài thông số khác liên quan tới
level đó.
- Hàm int play() dùng để điều khiển tất cả các thao tác của người chơi
và xe tăng của địch khi chơi ở chế độ bắn xe tăng. Giá trị trả về của
hàm trả về sẽ quyết định thao tác tiếp theo của toàn chương trình.
- Hàm int boss() dùng để điều khiển tất cả các thao tác của người chơi
và Boss khi chơi ở chế độ Boss. Giá trị trả về của hàm sẽ quyết định
thao tác sẽ thực hiện tiếp theo của toàn chương trình.
- Hàm void newgame() sẽ được gọi tới khi người dùng chơi một ván
mới. Hàm này sẽ điều khiển toàn bộ quá trình chơi game của người
dùng qua các level. Hoạt động của hàm sẽ phụ thuộc vào giá trị trả về
của hàm play() và boss() đã được đề cập tới ở trên.
- Hàm void continuegame() cũng tương tự như hàm play(), tuy nhiên
hàm này được gọi tới khi người dùng tiếp tục chơi với một trạng thái
được lưu từ trước. Khi được gọi đến, hàm này sẽ đọc tất cả những
thông tin liên quan tới game đã được người chơi dừng lại tại phiên
trước; sau khi đọc dữ liệu, quá trình chơi game sẽ được tiếp tục.
3.3. Nhóm các hàm đồ họa
3.3.1. Hiển thị một điểm ảnh trên màn hình
Mỗi điểm ảnh trên màn hình chơi game được hiển thị ra bởi hàm
void point(int x, int y, int color=0)
{
setcolor(color);
rectangle(X0+xlt+(y-1)*p_size+p_size/2-2, Y0+ylt+(x-1)*p_size+p_size/2-2,
X0+xlt+(y-1)*p_size+p_size/2+2, Y0+ylt+(x-1)*p_size+p_size/2+2);
setfillstyle(1, color);
floodfill(X0+xlt+(y-1)*p_size+p_size/2, Y0+ylt+(x-1)*p_size+p_size/2, color);

int l=strlen(s);
for (i=0; i<l/2; i++)
{
char temp=s[i];
s[i]=s[l-i-1];
s[l-i-1]=temp;
}
settextstyle(font, 0, size);
int c=getcolor();
if (color!=c)
setcolor(color);
outtextxy(x, y, s);
if (color!=c)
setcolor(c);
Mô phỏng game bắn tăng trên máy điện tử cầm tay Brick Game
SVTH: Bùi Hữu Giáp
16
GVHD: ThS. Lê Thị Hồng

}
Trong đó, num là con số cần được hiển thị; x, y lần lượt là hai tọa độ ứng với
vị trí (x, y) cần hiển thị; color là màu chữ; size là kích thước chữ; font là font chữ
cần hiển thị.
Hàm này hoạt động như sau: Đầu tiên, một xâu s được khởi tạo với giá trị
‘0’ dùng để lưu xâu chuyển đổi.Tiếp theo, từng chữ số của con số sẽ được
chuyển đổi thành các kí tự số và lưu vào trong s. Tiếp đến, xâu s sẽ được đảo
ngược lại trật tự. Cuối cùng là hiển thị xâu s ra màn hình tại đúng tọa độ (x, y).

3.3.4. Nhóm các hàm điều khiển giao diện khi chơi game
 Hàm xóa màn hình
void g_clrscr()
{
if (InFullScreen)
{
setbkcolor(0);
setfillstyle(10, 8);
bar(0, 0, GetSystemMetrics(SM_CXSCREEN), Y0);
bar(0, Y0+Width, GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN));
bar(0, Y0, X0, Y0+Width);
bar(X0+Height, Y0, GetSystemMetrics(SM_CXSCREEN), Y0+Width);
}
setfillstyle(1, 2);
bar(X0, Y0, X0+Height, Y0+Width);
}
Nhiệm vụ của hàm này là xóa toàn bộ các đối tượng trên màn hình đồ họa
và sau đó khởi tạo lại màn hình cửa sổ chơi game theo đúng kiểu cửa sổ đã được
thiết lập (Maximized Window hay Nomal Window).
 Hàm hiển thị địa hình cho mỗi level
void p_frame()
{
g_clrscr();
setcolor(0);
rectangle(X0+12, Y0+32, X0+428, Y0+648);
rectangle(X0+19, Y0+39, X0+421, Y0+641);
setfillstyle(1, 0);
floodfill(X0+16, Y0+36, 0);
for (int i=1; i<=maxx; i++)

p_number(target, X0+590, Y0+90);
outtextxy(X0+460, Y0+115, "Destroy");
outtextxy(X0+550, Y0+115, ":");
p_number(destroy, X0+590, Y0+115);
settextstyle(2, 0, 5);
outtextxy(X0+470, Y0+190, "Level");
outtextxy(X0+510, Y0+190, ":");
p_number(level, X0+530, Y0+190, getcolor(), 5, 2);
settextstyle(2, 0, 5);
outtextxy(X0+580, Y0+190, "Speed");
outtextxy(X0+620, Y0+190, ":");
p_number(speed, X0+640, Y0+190, getcolor(), 5, 2);
settextstyle(2, 0, 5);
outtextxy(X0+470, Y0+215, "Music");
outtextxy(X0+510, Y0+215, ":");
if (music)
outtextxy(X0+530, Y0+215, "On");
Mô phỏng game bắn tăng trên máy điện tử cầm tay Brick Game
SVTH: Bùi Hữu Giáp
19
GVHD: ThS. Lê Thị Hồng

else
outtextxy(X0+530, Y0+215, "Off");
outtextxy(X0+580, Y0+215, "Sound");
outtextxy(X0+620, Y0+215, ":");
if (sound)


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status