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

Lập trình trò chơi bắn máy bay

44 737 4

Đ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 44
Dung lượng 210,5 KB

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

Nội dung

Hiện nay em đã hoàn thành các chơng trình học của trờng và của khoa đã đề ra, đã đến lúc em phải đối mặt với những thử thách mới, đầu tiên đó là bài tập tốt nghiệp với đề tài “Lập trình

Trang 1

Mục lục Lời nói đầu……… ……… 3

Phần I: Phân tích bài toán……….4

1 Bài toán……… 4

2 Phân tích bài toán……… 4

Phần II: Phân rã chức năng……… ……… 6

1 Mô tả trò chơi……….6

2 Sơ đồ modul hoá……….6

3 Phân rã chức năng……… … 7

Phần III: Tổ chức dữ liệu cho chơng trình……… …… 9

1 Các biến toàn cục……… …… 9

2 Các biến cục bộ………10

Phần IV: Thiết kế giải thuật……….11

1 Giải thuật vẽ máy bay……… ………11

a T tởng của giải thuật……… … 11

b Giải thuật………11

2 Giải thuật vẽ nòng súng……….11

a T tởng của giải thuật………11

b Lu đồ……….12

c Giải thuật……… … 12

3 Giải thuật vẽ viên đạn………13

a T tởng của giải thuật………13

b Giải thuật……… ………13

4 Giải thuật kiểm tra xem đạn có trúng máy bay không?……….13

a T tởng của giải thuật………13

b Lu đồ……… 13

c Giải thuật……….14

5 Giải thuật vẽ đờng đi của viên đạn……… … 15

a T tởng của giải thuật………15

b Giải thuật……… …… 15

6 Giải thuật làm nổ máy bay……… … 16

a T tởng của giải thuật………16

Trang 2

b Lu đồ……….16

c Giải thuật……… … 18

Phần V: Một số giao diện của chơng trình……… ………… .19

1 Giao diện của trò chơi……….19

2 Màn hình thiết lập thông số cho chơng trình……….19

3 Hộp thoại khi thoát chơng trình……….20

Phần VI: Mã nguồn của chơng trình………21

Trang 3

LờI NóI ĐầU

Trong thời đại công nghệ thông tin ngày nay, tin học đợc áp dụng vào hầu hết các ngành nghề, lĩnh vực nh kinh tế, văn hoá, xã hội Trong lĩnh vực giải trí thì công…nghệ thông tin càng đợc ứng dụng mạnh mẽ hơn, trong đó Game nổi lên với những trò chơi mới đầy hấp dẫn cả về nội dung, hình ảnh và âm thanh Qua 4 năm học tập và rèn luyện trên giảng đờng của Khoa Công Nghệ Tin Học - Viện Đại Học Mở Hà Nội cùng với sự dạy dỗ chỉ bảo tận tình của các thầy cô giáo trong khoa, em đã trang bị cho mình đợc một số kiến thức nhất định về ngành công nghệ thông tin Những kiến thức này sẽ là hành trang giúp em có thể đứng vững khi ra trơng và có thể đóng góp một phần nhỏ bé của mình trong quá trình tin học hoá và trong công cuộc phát triển của đất nớc

Hiện nay em đã hoàn thành các chơng trình học của trờng và của khoa đã đề ra,

đã đến lúc em phải đối mặt với những thử thách mới, đầu tiên đó là bài tập tốt nghiệp với đề tài “Lập trình trò chơi bắn máy bay” viết trên ngôn ngữ “ Turbo C ” mà khoa

đã giao cho Với sự hớng dẫn của thầy giáo – Thạc Sỹ Lơng Cao Đông cùng với kiến thức và sự nỗ lực của bản thân, em đã hoàn thành bài tập tốt nghiệp

Em xin trân trọng cảm ơn các thầy các cô trong Khoa Công Nghệ Tin Học - Viện Đại Học Mở Hà Nội, cùng tất cả bạn bè và mọi ngời đã giúp đỡ, chỉ bảo trong những năm qua, đặc biệt em chân thành cảm ơn thầy giáo Lơng Cao Đông đã quan tâm tới em trong quá trình học tập, rèn luyện tại trờng và đã giúp đỡ, chỉ bảo em trong quá trình làm bài tập tốt nghiệp này

Tuy nhiên do hạn chế thời gian và đang ở những bớc đi ban đầu nên chơng trình của em không thể tránh khỏi những thiếu sót và những mặt hạn chế Em rất mong đợc sự đóng góp ý kiến của các thầy cô giáo và toàn thể mọi ngời

Em xin trân trọng cảm ơn !

Trang 4

Phần I: Phân Tích Bài Toán.

1.BàiToán:

Đề bài: Lập trình trò chơi bắn máy bay

Yêucầu:+ Các máy bay xuất hiện ngẫu nhiên tại toạ độ ngẫu nhiên trên đỉnh màn hình.+ Dùng phím -> và <- để điều khiển quay nòng súng ở đáy màn hình

+ Kiểm tra va chạm+ Xử lý bắn đạn+ Xử lý kết thúc trò chơi+ Thông báo kết quả

Trong những modul này có thể có các modul con khác, để giải quyết đợc những yêu cầu này thì ta cần tổ chức dữ liệu cho từng modul và viết đợc giải thuật cho từng modul, phải biết cách sử dụng một số phơng pháp:

+ Sử dụng một số hàm, thủ tục trong th viện đồ hoạ graphics.h nh: thủ tục khởi tạo đồ hoạ, vẽ hình chữ nhật, vẽ đờng thẳng, tô màu, đặt

màu, cắt dán ảnh để vẽ giao diện ch… ơng trình

+ Dùng vòng lặp để bắt phím+ Sử dụng định lý Pitago trong tam giác để tính toạ độ của 1 điểm

+ Sử dụng phơng trình đờng thẳng để vẽ đờng chuyển động của đạn.+ Lấy và xử lý thời gian hệ thống

+ Sử dụng phơng pháp cắt dán ảnh để vẽ đạn và máy bay

Trang 5

Sau khi đã xây dựng đợc giải thuật cho từng modul thì bắt tay vào việc viết mã cho các chơng trình con tơng ứng với từng modul Kết nối, xử lý các chơng trình con

và xử lý các tình huống để có đợc một chơng trình hoàn thiện

Trang 6

Phần II: Phân Rã Chức Năng

1 Mô tả trò chơi.

Trong trò chơi này các máy bay sẽ xuất hiện ngẫu nhiên trên màn hình Ngời chơi sẽ dùng các phím quy định để chơi trò này, mỗi lần tiêu diệt 1 máy bay sẽ đợc tính 1 điểm, bắn trợt sẽ không đợc điểm nhng cũng không bị trừ điểm (vì trò chơi căn

cứ vào thời gian chơi chứ không căn cứ vào số đạn bắn ra để qua bài) Khi bắn đạn và khi đạn trúng máy bay làm nổ báy bay đều phát ra âm thanh

Trong khi chơi ngời chơi có thể đặt lại các thông số cho chơng trình nh:

+ Tốc độ di chuyển của nòng súng

+ Độ khó của trò chơi (Thực chất là quy định thời gian 1 máy bay sẽ biến mất)

+ Thời gian sẽ kết thúc một bài chơi

Và ngời chơi cũng có thể bắt đầu chơi một bài mới hay có thể ngừng chơi bằng các phím nóng đã đợc hớng dẫn ở bên dới màn hình

Nếu ngời chơi qua đợc bài thì bài sau sẽ khó hơn bài trớc (máy bay sẽ biến mất nhanh hơn bài trớc đó)

Trong mỗi bài chơi đều có các chỉ số cho phép ngời chơi biết mình đã bắn bao nhiêu lần, đã đợc bao nhiêu điểm, máy bay đã xuất hiện bao nhiêu lần và thời gian còn lại của bài chơi đó

Khi ngời chơi chiến thắng hay thất bại tức là khi kết thúc trò chơi thì sẽ có một bảng tổng kết thành tích ngời đó đã đạt đợc qua tất cả các bài đã chơi

2 Sơ đồ modul hoá (trang bên)

Trang 7

Vẽ nòng súng Xử lý phím tra bắnKiểm

Đếm thời gian

Kiểm tra bắn trúng

Vẽ đư

ờng đi của đạn

Vẽ lại máy bay

Kiểm soát giờ chơi

Xử lý qua bài

Tăng

điểm

Xử lý bắn trúng

đếm máy bay

Thông báo giờ chơi

Xử lý qua bài

Nổ máy bay

Vẽ máy bay

Sơ Đồ Modul Hoá

Trang 8

+ Khởi tạo ban đầu:

Mo dul này sẽ làm nhiệm vụ khởi tạo các biến và tham số ban đầu cho chơng trình

+ Vẽ máy bay:

Modul này sẽ thực hiện chức năng vẽ máy bay lên màn hình, lu hình ảnh của máy bay vào một biến trỏ (pmb) là biến toàn cục sau đó sẽ xoá màn hình Modul này chỉ đợc gọi một lần trong chơng trình

+ Vẽ đạn:

Thực hiện chức năng vẽ viên đạn và lu hình ảnh viên đạn vào biến trỏ toàn cục (pdan), sau đó xoá màn hình

+ Vẽ đờng đi của đạn:

Tính toán toạ độ của viên đạn trên đờng chuyển động và sử dụng biến trỏ pdan

để vẽ hình ảnh đạn chuyển động

+ Vẽ nòng súng

Chức năng này sẽ sử dụng một số tham số có sẵn cùng với công thức toán học

để tính toạ độ của nòng súng rồi vẽ nòng súng, sử dụng tham số truyền vào là màu tô để tô màu cho nòng súng

+ Vẽ giao diện:

Gọi tới 2 chức năng vẽ khung chơi và vẽ khung thông báo cùng với vẽ bệ súng

và dán ảnh nòng súng để tạo màn hinh chơi game

+ Kiểm tra đạn có bắn trúng máy bay

Modul này sẽ kiểm tra tại vị trí hiện thời của viên đạn và của máy bay thì viên

đạn có trúng máy bay không? Nếu trúng thì sẽ trả về giá trị 1 và gọi tới modul làm nổ máy bay sau đó sẽ nhảy tới đoạn chơng trình xử lý phím Nếu không trúng thì sẽ trả về giá trị 0

+ Thông báo kết quả:

Modul này sẽ sử dụng kết quả xử lý của 1 số modul nh: cộng điểm, đếm máy bay để đa kết quả của ngời chơi ra màn hình Modul này sẽ đợc gọi khi ngời chơi chọn mục ngừng chơi, hay ngời chơi đã thua hoặc đã thắng

Trang 9

Phần III: Tổ Chức Dữ Liệu Cho Chơng Trình

Để lu trữ dữ liêu, trong chơng trình có sử dụng cả biến toàn cục và biến cục bộ,

ở một số modul có sử dụng mảng 1 chiều và mảng 2 chiều

1 Các biến toàn cục:

+ goc_lech: là biến có kiểu số thực có chức năng lu giữ giá trị của góc lệch (tính

bằng độ) của nòng súng so với phơng ngang 0x

+ int xs1,ys1,xs2,ys2, xs3,ys3, xs4,ys4 ;

Là tám biến kiểu nguyên giữ giá trị toạ độ của 4 điểm của nòng súng Trừ 2 biến xs1,ys1 là đựơc tính toán theo vị trí đặt bệ súng và 2 biến này không thay

đổi trong chơng trình, ngợc lại giá trị của 6 biến còn lại thay đổi liên tục trong chơng trình

dokho lu tr giá trị để quy định mức độ khó của trò chơi.(Khó nhất là dokho = 1), dokho chính là số giây máy bay hiện trên màn hình

Trang 10

+ char *cban,*ctrung,*cdemmb, *tgian;

Lµ c¸c biÕn trá cã t¸c dông lu tr÷ mét x©u ký tù

PhÇn IV: ThiÕt KÕ Gi¶i ThuËt

Trang 11

1 Giải thuật vẽ máy bay.

a T t ởng của giải thuật:

Giả sử ta vẽ máy bay với n điểm, ta lu các điểm của máy bay vào hai mảng một chiều Trong đó có một mảng chứa hoành độ x[n] và một mảng chứa tung độ y[n] của từng điểm đó Nh vậy nếu một điểm thứ m trong dãy các điểm của máy bay sẽ có toạ

độ (x[m],y[m])

Dùng một vòng lặp để nối lần lợt các điểm này với nhạu: điểm[1] nối với

điểm[2], điểm[2] nối điểm[3], , điểm[n-1] nối điểm[n] Kết thúc vòng lặp ta sẽ…nối nốt điểm[n] với điểm[1]

Dùng hàm đồ hoạ để tô màu cho máy bay

b Giải thuật:

setcolor(màuvẽ);

for (i=1;i< n;i++)

Line(x[i], y[i], x[i+1], y[y+1]);

Line (x[1], y[1], x[1], y[1]);

2 Giải thuật vẽ nòng súng.

a T t ởng của giải thuật

+ Ta sẽ vẽ một nòng súng có hình chữ nhật với 4 điểm (x1,y1), (x2,y2), (x3,y3),

(x4,y4) Trong chơng trình nòng súng này sẽ quay xung quanh điểm (x1,y1).+ Những dữ kiện đã biết:

1 Điểm (x1,y1) đã biết trớc (tính đợc do nó nằm trong bệ súng) và nó là

Trang 12

Chú ý: Trong chơng trình phải đổi góc ∝ ra đơn vị radian.

x2=x1+(dài*cos( ∝ ) ); y2=y1-(dài*sin( ∝ ) ); x3=x1+(rộng*cos(90- ∝ ) );

y3=y1+ (rộng*sin(90- ∝ ) ); x4 = x2+(x3-x1); y4= y2+ (y3-y1);

setcolor(màuvẽ); m[0]=x1; m[1]=y1; m[2]=x2; m[3]=y2; m[4]=x4;

m[5]=y4; m[6]=x3; m[7]=y3; m[8]=x1 ; m[9]=y1;

drawpoly(5,m); setfillstyle(1,màutô); fillpoly(4,m);

Trang 13

3 Giải thuật vẽ viên đạn

a T t ởng của giải thuật:

Viên đạn ở đây chỉ đơn giản là một hình tròn nhỏ bán kính r đợc tô màu Do vậy để vẽ viên đạn đơn giản ta chỉ cần dùng thủ tục circle(int x,int y, int r) để vẽ 1 hình tròn sau đó dùng thủ tục floodfill(int x,int y,int màuviền) để tô màu cho viên

4 Giải thuật kiểm tra đạn có trúng máy bay không?

a T t ởng của giải thuật:

+ Tại mỗi vị trí mới của viên đạn(xdan,ydan) ta sẽ kiểm tra xem tại đó viên đạn có trúng máy bay không Nếu có thì sẽ trả về giá trị 1 còn không thì trả về giá trị 0

*) Các dữ kiện đã biết:

1 Toạ độ hiện thời của viên đạn (xdan,ydan)

2 Chiều rộng của máy bay và chiều dài của máy bay (rộngmb,dàimb) là hai hằng số

3 Toạ độ điểm trên trái của máy bay (xmb, ymb)

+ Một viên đạn bắn trúng máy bay nếu toạ độ của viên đạn nằm bên trong máy bay

Trang 15

5 Giải thuật vẽ đ ờng đi của viên đạn

a T t ởng của giải thuật:

+ Khi vẽ đợc viên đạn ta lu ảnh của viên đạn vào biến char *pdan bằng cách dùng

thủ tục malloc(size) và các hàm imagesize(int x1,int y1,int x1,int y2), hàm

getimage(int x1,int y1, int x2,int y2,pdan).

+ Để viên đạn chuyển động đợc ta dùng phơng pháp cắt dán ảnh( getimage và

putimage) Vị trí ban đầu của viên đạn là ở đầu nòng súng do đó toạ độ ban

đầu của nó bao giờ cũng là (x1,y1)

*) Yêu cầu đợc đặt ra là phải làm sao để viên đạn chuyển động cùng phơng với

nòng súng

*) V ấn đề cần giải quyết ở đây là làm sao xác định đợc toạ độ của viên đạn khi nó

chuyển động trên màn hình

*) Giải quyết vấn đề: Để giải quyết vấn đề nêu ở trên ta sử dụng phơng trình đờng

thẳng đi qua 2 điểm (x1,y1) và (x2,y2) là 2 điểm ngoài cùng của nòng súng (Xem hình nòng súng ở trang trớc) Để cho viên đạn chuyển động lên phía trên đỉnh màn hình thì ta sẽ cho tung độ của viên đạn (ydan) giảm dần từ y1 sau đó dựa vào phơng trình đờng thẳng ở trên để tìm ra hoành độ (xdan) của viên đạn

+ Với chế độ XOR_PUT của thủ tục putimage ta sẽ dán ảnh pdan vào vị trí cũ để xoá

sau đó dán vào vị trí mới Viên đạn sẽ ngừng chuyển động (biến mất) khi nó chạm vào các cạnh của màn hình(xdan>=getmaxx() || xdan<=0 || ydan<=0) hoặc chạm vào máy bay(kt_va_cham()==1)

putimage(xdan,ydan,pdan,XOR_PUT); //Vẽdelay(1);

putimage(xdan,ydan,pdan,XOR_PUT); //Xoá

yd=yd-1; // cho vien dan bay ve phia tren mh

}while(kt_va_cham()!=1 & xdan<getmaxx() & xdan>0 & ydan>0);

6 Giải thuật làm nổ máy bay.

Trang 16

a T t ởng của giải thuật:

+ Khi viên đạn chạm vào máy bay thì sẽ xoá hình máy bay (việc xoá máy bay sẽ đợc làm trớc khi gọi chơng trình con này) và thay vào đó là một hình ảnh nổ (ở đây đơn giản chỉ là những đoạn thẳng khác màu giao nhau tại 1 điểm) kèm theo đó là phát ra một âm thanh nổ

+ Ta có thể dùng một vòng for(i=1;i<=n; i++) để tạo ra n đoạn thẳng với những màu bất kỳ, vẽ xong ta cho dừng màn hình (delay(100)) để có thể xem đợc sau đó sẽ chạy một vòng for giống ở trên để xóa hình vừa vẽ

Trang 17

c Gi¶i thuËt.

void no_may_bay(int xmb,int ymb){

int i, ax[12],ay[12],mau[15];

Trang 18

PhÇn V: Mét sè giao diÖn cña ch¬ng tr×nh

1 Giao diÖn cña trß ch¬i

Trang 19

2 Mµn h×nh thiÕt lËp th«ng sè cho ch ¬ng tr×nh

3 Hép tho¹i khi tho¸t ch ¬ng tr×nh

Trang 20

PhÇn VI: M· Nguån Cña Ch¬ng Tr×nh

Trang 21

#define rong_be 50 //chieu rong cua be sung

#define cao_sung 50 //chieu dai cua nong sung

#define rong_sung 6 //chieu rong cua nong sung

float goc_lech; // goc lech cua nong sung so voi phuong ngang 0x

int xs1,ys1,xs2,ys2, xs3,ys3, xs4,ys4 ; //toa do 4 diemcua nong sung

int danbay; // cho biet tren man hinh co vien dan dang bay khong

int xd,yd; //toa do cua vien dan khi bay

int xmb,ymb; //Toa do may bay

int dmb, rmb; // chieu dai va rong cua may bay

int ban,trung,demmb; // cac bien dem so lan ban trung va truot int rtime,goctang,dokho; //rtime:thoi gian cua 1 bai choi

int ytach; // toa do duong phan cach giua vung game va vung thong baochar *cban,*ctrung,*cdemmb, *tgian;

char *pmb, *pdan; // Bien tru luu hinh anh may bay va dan

void ve_nong_sung(int mau);

void ve_dan(int mau); //ve va luu anh vien dan vao bien tro pdan

int ban_trung(int xmb,int ymb); //kiem tra dan co trung may bay khong?

void no_may_bay(int xmb,int ymb);

Trang 22

void thong_bao(char *s,int bai) ; //ve ra hop message box

void run(void); //ket noi cac chuong trinh con va xu ly cac tinh huongvoid tongket(void); // Thong bao ket qua choi

void button(int x,int y,int x1,int y1,char s[25], int mau);// ve nut an

int getbox(int x,int y, int defau,int nhapso); //ham de nhan vao DL tu keyboardvoid option(int dai, int rong); // ve hop tuy chon(OPTION) ra giua man hinh.void exitbox(int dai,int rong,char kt); //ve hop exit giua mh // kt='T'or='K'int kt_thoat(void);

Trang 23

outtextxy(getmaxx()/2-190,getmaxy()-85,"Sinh vien thuc hien:

NGUYEN VAN HAI ");

Trang 24

outtextxy(getmaxx()/2+10,ytach+5,"F2 : New Game ");

outtextxy(getmaxx()/2+10,ytach+20,"SPACE : Ban dan ");

outtextxy(getmaxx()/2+10,ytach+35,"F3 : Thiet dat tham so(Option)");

outtextxy(getmaxx()/2+10,ytach+50,"ESC / F10 : Thoat khoi Game");}

Trang 25

getimage(x[1]-2,y[1]-2,x[7]+2,y[8]+2,pmb);cleardevice(); //xoa man hinh

Trang 26

void ve_dan(int mau)

line(xmb+35-ax[i],ymb+5-}delay(100);

for(i=1 ;i<=10;i++)

{

Trang 27

ay[i],xmb+35+ax[i],ymb+15+ay[i]);

line(xmb+35-ax[i],ymb+5-}}

Trang 28

int ok=1, bai=1;

int ban1, trung1, demmb1;// Dem cac chi so nay trong tung baive_khung_game();

struct time timep;

int giay, giay_lech, no;

NEW:

tieptuc=1; tam=0; giay=0; no=0;

ban1=0; trung1=0; demmb1=0; goc_lech=90;

ve_be_sung();

setcolor(WHITE);

outtextxy(10,ytach+5,"Diem Cua Ban : 0 ");

outtextxy(10,ytach+20,"So Lan May Bay Xuat Hien : 0 ");outtextxy(10,ytach+35,"Tong So Lan Ban Dan : 0 ");outtextxy(10,ytach+50,"Thoi Gian Con Lai : ");

xx=10+textwidth("Diem Cua Ban : ");

Ngày đăng: 23/06/2016, 16:59

HÌNH ẢNH LIÊN QUAN

Sơ Đồ Modul Hoá - Lập trình trò chơi bắn máy bay
odul Hoá (Trang 7)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w