Tải bản đầy đủ (.doc) (20 trang)

Thực tập cơ bản mô phỏng trò chơi bắn máy bay

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 (222.69 KB, 20 trang )

Mô phỏng trò chơi bắn máy bay


Thc Tp C Bn - Mụ phng trũ chi bn mỏy bay

LI NểI U
Trong bối cảnh công nghệ thông tin ngày càng phát triển, việc sử dụng rộng rãi
máy tính không chỉ bó hẹp trong viện nghiên cứu, các trờng đại học, các trung tâm máy
tính mà còn mở rộng ra cơ quan, xí nghiệp, nhà máy. Song song với quá trình phát triển
trên, việc giảng dạy tin học trong các trờng đại học, trung học và một bớc trong các trờng
phổ thông cũng đợc đẩy mạnh đi đôi với việc tăng cờng trang thiết bị máy vi tính.
Cùng với việc sáng tạo ra công cụ mới là máy tính điện tử, con ngời cũng tâp trung
trí tuệ từng bớc xây dựng ngành khoa học tơng ứng để đáp ứng những yêu cầu khai thác
tài nguyên thông tin.
Để đảm bảo đợc việc học tập tốt. Mỗi học sinh, sinh viên đều phải nỗ lực học tập
và rèn luyện. Không những học tập tại lớp do thầy cô giáo hớng dẫn giảng dạy, và truyền
đạt những gì cần thiết cho việc học tập. Chúng ta cần tìm hiểu thêm về các bài tập liên
quan đến kiến thức đã đợc học, để hiểu rõ hơn về kiến thức mà mình đã học đợc ở trên lớp
cũng nh là ở ngoài xã hội. Do đó việc tự học của học sinh sinh viên là một điều rất quan
trọng bởi vì ở trên lớp các thầy cô sẽ không có đủ thời gian để giảng dạy, truyền đạt hết
tất cả các kiến thức cho chúng ta. Nếu chúng ta chỉ học các kiến thức ở trên lớp mà không
tìm hiểu thêm ở bên ngoài thì sẽ không đủ cho việc học tập của chúng ta ngay lúc đó cũng
nh học tập sau này. Để có thể đạt đựơc kết quả tốt trong học tập thì chúng ta phải làm bài
tập thật nhiều, để có phần nào cha hiểu có thể hỏi các thy cô, khi đó ta sẽ có thêm một số
kiến thức mới mà ta vẫn còn cha biết.
Em rất chân thành cảm ơn các thy cô đã giao cho em đề tài này. Nó giúp em hiểu
thêm rất nhiều về phần lập trình đồ hoạ trong C, phần mà em vẫn cha đợc học ở trên lớp .
Nhất là trong việc lập trình các trò chơi giải trí.
Em rất cảm ơn cô giáo Lê Thị Hờng, cô giáo Hà Thị Bích Ngọc, thầy giáo Tô Hải
Thiên. Các thầy, cô đã hớng dẫn em tận tình và chi tiết để có thể giúp em hoàn thành đề
tài mà các thầy cô đã giao cho.



SVTH: Lp 61CT2

2


Thc Tp C Bn - Mụ phng trũ chi bn mỏy bay

MC LC
Mụ phng trũ chi bn mỏy bay.......................................................................................................1
LI NểI U..................................................................................................................................2
Nội dung..........................................................................................................................................4
Tổng quan về bài toán.................................................................................................................4
Chơng I : Tổng quan về bài toán................................................................................................4
1. Bài toán : Mô phỏng trò chơi bắn máy bay.......................................................................4
2. Yêu cầu của bài toán :.........................................................................................................4
3. Phạm vi giải quyết ..............................................................................................................5
4. Khó khăn...............................................................................................................................5
Chơng II : Phân tích và giải thuật.............................................................................................6
1. Hớng giải quyết :..................................................................................................................6
2. Giải thuật của các chức năng chính trong chơng trình :....................................................6
Chơng III : Cấu trúc chơng trình................................................................................................9
1. Cấu trúc chơng trình theo sơ đồ khối :...............................................................................9
2. Một số hàm, thủ tục và biến quan trọng............................................................................11
3. Các unit chính....................................................................................................................11
4. Mã chơng trình : ................................................................................................................11
5. Hớng giải quyết .................................................................................................................20
6.Kt lun................................................................................................................................20

SVTH: Lp 61CT2


3


Thc Tp C Bn - Mụ phng trũ chi bn mỏy bay

Nội dung
Tổng quan về bài toán
Bài toán gồm ba chơng :
Chơng I : Tổng quan về bài toán.
Chơng II : Phân tích và giải thuật.
Chơng III : Cấu trúc chơng trình.

Chơng I : Tổng quan về bài toán
1. Bài toán : Mô phỏng trò chơi bắn máy bay.
2. Yêu cầu của bài toán :
- Vẽ bầu trời có đầy sao.
- V bom, mỏy bay.
- Vẽ bệ súng và nòng súng theo toạ độ tâm.
- Nòng súng di chuyển bằng 2 phím left (ỗ) và phím right (ố).
- Máy bay xuất hiện ngẫu nhiên từng tốp từ 35 chiếc.
- Máy bay sẽ thả bom
- Đạn bắn theo hớng của bệ súng, và khi có lệnh bắn bằng phím
SPACE thi đạn sẽ bắn ra khỏi lòng súng.
- Khi máy bay và bom bị trúng đạn thì sẽ nổ
-Mỗi lần chơi sẽ có 100HP
- Sau khi chơi hết số HP thì sẽ hiện ra số điểm mà ngời chơi đạt đợc.(Cách tính
điểm : số máy bay bị bắn trúng * số điểm của mỗi máy bay đẫ đợc định sẵn +số
bom bị bắn chúng *số điểm mỗi quả bom)
-Khi HP<100 nu bn trỳng mt mỏy bay thỡ s c cng thờm 5HP.


SVTH: Lp 61CT2

4


Thc Tp C Bn - Mụ phng trũ chi bn mỏy bay

3. Phạm vi giải quyết .
- Với bài toán này ta có thể giải quyết bằng nhiều cách với ngôn ngữ lập trình riêng cho
từng loại. Chúng ta có thể dùng ngôn ngữ lập trình C hoặc pascal.
- Do có nhiều cách giải quyết nh vậy nên phải chọn cách giải quyết cho phù hợp.
- bài toán này em sử dụng ngôn ngữ lập trình C để giải quyết vấn đề. Chủ yếu sử
dụng đồ hoạ trong C.
- Trớc tiên để làm đợc yêu cầu của bài toán chúng ta phải vẽ đợc máy bay, bom, bệ
súng, nòng súng, nền trời, đạn. Sau khi đã vẽ xong, chúng ta phải làm cho nó có thể
chuyển động đợc.Vì vậy chúng ta cần phải sử dụng các câu lệnh đồ hoạ trong C để có thể
giải quyết đợc bài toán khó này.
4. Khó khăn.

-Trong quá trình học, sinh viên không đợc học phần đồ họa trong C, chỉ đợc học phần
căn bản của C mà thôi, vì vậy việc vẽ và làm cho máy bay, bom, nòng súng, đạn di chuyển
đợc là một việc vô cùng khó.
-Chúng ta phải đọc sách thêm để có thể hoàn thành tốt bài toán đựơc giao.

SVTH: Lp 61CT2

5



Thc Tp C Bn - Mụ phng trũ chi bn mỏy bay

Chơng II : Phân tích và giải thuật
1. Hớng giải quyết :

Để có thể giải quyết đợc bài toán trớc tiên ta khởi tạo chế độ đồ hoạ để chơng trình có
thể thực hiên các lệnh vẽ. Sau đó ta sử dụng các lệnh line, putpixel, fillellpse để vẽ bầu
trời, máy bay, đạn, bệ súng.(Lu ý là dùng mảng để lu trữ đạn và máy bay, chú ý đền góc
và vận tốc.).
+Vẽ Máy bay
+V bom
+V b sỳng
+V nũng sỳng
+V nn tri, to cỏc c n, v n
Sử dụng các lệnh if để kiểm tra điều kiện xem đạn bắn có trúng máy bay hay không.
Dùng lệnh outtextxy để đa ra màn hình các thông tin về trò chơi nh số điểm đạt đợc, tên
ngời chơi.
2. Giải thuật của các chức năng chính trong chơng trình :
-u tiờn l khi to ch ha
int mh=0,mode=0;
int i,j;
initgraph(&mh,&mode,"D:\\TC\\BGI");
if(graphresult()!=0)
{
printf("\n KHONG THAY TRINH DIEU KHIEN DO HOA!");

printf("\n CHUONG TRINH KHONG THE THUC HIEN!
...");
getch();
return 1;

}
else
SVTH: Lp 61CT2

6


Thực Tập Cơ Bản - Mô phỏng trò chơi bắn máy bay

{
closegraph();
-Dùng các hàm về đồ họa để vẽ máy bay, súng , bom, nền trời …
void drawFighter(int x, int y)
{
setcolor(WHITE);
moveto(x,y);
linerel(-36,0); linerel(0,-7); linerel(-6,-7); linerel(6,0);
linerel(12,7); linerel(12,0); linerel(12,7);
moveto(x-24,y-7);
linerel(-12,0);
moveto(x-12,y);
linerel(0,3); linerel(-18,0); linerel(0,-3);
}
void drawBomb(int x, int y)
{
setcolor(WHITE);
moveto(x,y);
linerel(-3,-3); linerel(0,-6); linerel(2,-6); linerel(-2,-3);
linerel(3,1); linerel(3,-1);
linerel(-2,3); linerel(2,6); linerel(0,6); linerel(-3,3);

}
void drawAmmo(int x, int y)
{
setcolor(WHITE);
pieslice(x,y,0,360,1);
}
void drawBlockhouse()
SVTH: Lớp 61CĐT2

7


Thực Tập Cơ Bản - Mô phỏng trò chơi bắn máy bay

{
setcolor(WHITE);
line(xmax/2-30,ymax,xmax/2-30,ymax-30);
line(xmax/2+30,ymax,xmax/2+30,ymax-30);
arc(xmax/2,ymax+10,52,128,50);
}
void drawGun(int x, int y)
{
setcolor(WHITE);
setlinestyle(SOLID_LINE,0,3);
line(xmax/2,ymax-40,x,y);
setlinestyle(SOLID_LINE,0,1);
}
void drawSky()
{
int i;

for(i=1; i<=200; i++)
{
putpixel(xStar[i],yStar[i],colorStar[i]);
}
}
void destroy()

//TAO CAC VU NO TREN MAN HINH

{
int i;
float r;
setcolor(RED);
setfillstyle(SOLID_FILL,YELLOW);
setlinestyle(SOLID_LINE,0,3);
SVTH: Lớp 61CĐT2

8


Thực Tập Cơ Bản - Mô phỏng trò chơi bắn máy bay

for(i=1; i<=10; i++)
{
if(rate[i]!=0)
{
r=rate[i]/10.0;
moveto(xdestroy[i],ydestroy[i]-r*12);
linerel(4*r,8*r);


linerel(8*r,4*r);

linerel(-

8*r,4*r); linerel(-4*r,8*r);
linerel(-4*r,-8*r);

linerel(-8*r,-4*r);

linerel(8*r,-4*r); linerel(4*r,-8*r);
if(rate[i]>2)
floodfill(xdestroy[i],ydestroy[i],RED);
rate[i]--;
}
}
setlinestyle(SOLID_LINE,0,1);
}
-Các hàm điều khiển chuyển động

Ch¬ng III : CÊu tróc ch¬ng tr×nh
1. CÊu tróc ch¬ng tr×nh theo s¬ ®å khèi :

SVTH: Lớp 61CĐT2

9


Thực Tập Cơ Bản - Mô phỏng trò chơi bắn máy bay

Start Game


Đạn

Đạn = Máy

False

Bay
Đạn = Bom

True

Nổ

Bay

Điểm

Quit Game

SVTH: Lớp 61CĐT2

10


Thc Tp C Bn - Mụ phng trũ chi bn mỏy bay

2. Một số hàm, thủ tục và biến quan trọng.
int xmax,ymax,HP=100,SCORE=0;
int xFighter[5],yFighter[5],bombFighter1[5],bombFighter2[5];

int booleanBomb[9],xBomb[9],yBomb[9];
int booleanAmmo[11],xAmmo[11],yAmmo[11];
int xdestroy[21],ydestroy[21],rate[21];
int xGun,yGun,angleGun=90;
int xStar[201],yStar[201],colorStar[201];
float tangBomb[9],tangAmmo[6;
3. Các unit chính.

- Khởi tạo chế độ đồ hoạ.
- Vẽ nòng súng, bệ súng
- V mỏy bay,bom
- To cỏc v n
- Vẽ nền trời đầy sao
- Điều kin
- Đóng chế độ đồ hoạ.
4. Mã chơng trình :

#include <iostream.h>
#include <graphics.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <dos.h>
int xmax,ymax,HP=100,SCORE=0;
int xFighter[5],yFighter[5],bombFighter1[5],bombFighter2[5];
SVTH: Lp 61CT2

11



Thực Tập Cơ Bản - Mô phỏng trò chơi bắn máy bay

int booleanBomb[9],xBomb[9],yBomb[9];
int booleanAmmo[11],xAmmo[11],yAmmo[11];
int xdestroy[21],ydestroy[21],rate[21];
int xGun,yGun,angleGun=90;
int xStar[201],yStar[201],colorStar[201];
float tangBomb[9],tangAmmo[6];
//__________________________KIEM

TRA

VA

KHOI

TAO

CHUONG

TRINH__________________________
int initGame()
{
//_____________________________KIEM
TRA__________________________________________
int mh=0,mode=0;
int i,j;
initgraph(&mh,&mode,"D:\\TC\\BGI");
if(graphresult()!=0)

{
printf("\n KHONG THAY TRINH DIEU KHIEN DO HOA!");
printf("\n

CHUONG

TRINH

KHONG

THE

THUC

HIEN! ...");
getch();
return 1;
}
else
{
closegraph();
printf("\n

\t\t___________________GAME

BAN

MAY

BAY__________________");

printf("\n \t\tLE QUOC DUYET.\n");
SVTH: Lớp 61CĐT2

12


Thực Tập Cơ Bản - Mô phỏng trò chơi bắn máy bay

printf("\n \t\tBUILD: 01/01/2012.\n");
printf("\n \t\tEMAIL: ");
getch();
clrscr();
printf("\n

\t\t____________________HUONG

DAN

CHOI___________________");
printf("\n \t\tSu dung phim mui ten de di chuyen nong
sung.\n");
printf("\n \t\tSu dung phim SPACE de ban.\n");
printf("\n \t\tThoat game nhan ESC.\n\n\n");
printf("\n \t\tNhan phim bat ky de bat dau choi ...");
getch();
//____________________________KHOI
TAO____________________________________________
initgraph(&mh,&mode,"D:\\TC\\BGI");
settextstyle(0,0,1);
xmax=getmaxx();

ymax=getmaxy();
xGun=xmax/2; yGun=ymax-70;
for(i=1; i<=4; i++)
{
xFighter[i]=-50*i; yFighter[i]=20*i;
bombFighter1[i]=random(xmax/2);
bombFighter2[i]=random(xmax/2);
}
for(i=1; i<=8; i++) booleanBomb[i]=0;
for(i=1; i<=10; i++) booleanAmmo[i]=0;
SVTH: Lớp 61CĐT2

13


Thực Tập Cơ Bản - Mô phỏng trò chơi bắn máy bay

for(i=1; i<=20; i++) rate[i]=0;
for(i=1; i<=200; i++)
{
xStar[i]=random(xmax);
yStar[i]=random(ymax);
colorStar[i]=random(getmaxcolor());
}
return 0;
}
}
//______________________________NHOM

HAM


DIEU

KHIEN

DO

HOA_______________________________
void drawFighter(int x, int y)
{
setcolor(WHITE);
moveto(x,y);
linerel(-36,0); linerel(0,-7); linerel(-6,-7); linerel(6,0);
linerel(12,7); linerel(12,0); linerel(12,7);
moveto(x-24,y-7);
linerel(-12,0);
moveto(x-12,y);
linerel(0,3); linerel(-18,0); linerel(0,-3);
}
void drawBomb(int x, int y)
{
setcolor(WHITE);
moveto(x,y);
linerel(-3,-3); linerel(0,-6); linerel(2,-6); linerel(-2,-3);
linerel(3,1); linerel(3,-1);
SVTH: Lớp 61CĐT2

14



Thực Tập Cơ Bản - Mô phỏng trò chơi bắn máy bay

linerel(-2,3); linerel(2,6); linerel(0,6); linerel(-3,3);
}
void drawAmmo(int x, int y)
{
setcolor(WHITE);
pieslice(x,y,0,360,1);
}
void drawBlockhouse()
{
setcolor(WHITE);
line(xmax/2-30,ymax,xmax/2-30,ymax-30);
line(xmax/2+30,ymax,xmax/2+30,ymax-30);
arc(xmax/2,ymax+10,52,128,50);
}
void drawGun(int x, int y)
{
setcolor(WHITE);
setlinestyle(SOLID_LINE,0,3);
line(xmax/2,ymax-40,x,y);
setlinestyle(SOLID_LINE,0,1);
}
void drawSky()
{
int i;
for(i=1; i<=200; i++)
{
putpixel(xStar[i],yStar[i],colorStar[i]);
}

}
SVTH: Lớp 61CĐT2

15


Thực Tập Cơ Bản - Mô phỏng trò chơi bắn máy bay

}
}
void controlBomb()

//DIEU KHIEN BOM

{
int i,j;
for(i=1; i<=8; i++)
if(booleanBomb[i])
{
yBomb[i]+=1;

xBomb[i]=xmax/2-(ymax-

yBomb[i])*tangBomb[i];
if(yBomb[i]>ymax-35)
{
if(xBomb[i]>xmax/2-30)
{
for(j=1; j<=20; j++)
if(rate[j]==0)

{
rate[j]=10;
xdestroy[j]=xBomb[i]; ydestroy[j]=yBomb[i];
HP=10;
break;
}
booleanBomb[i]=0;
}
}
}
}
SVTH: Lớp 61CĐT2

16


Thực Tập Cơ Bản - Mô phỏng trò chơi bắn máy bay

void controlAmmo()

//DIEU KHIEN DAN

{
int i,j,k;
for(i=1; i<=10; i++)
{
if(booleanAmmo[i])
{
yAmmo[i]-=3;


xAmmo[i]=xmax/2-((ymax-40-

yAmmo[i])*tangAmmo[i]);
for(j=1; j<=4; j++)
{
if((yAmmo[i]<=yFighter[j])&&(yAmmo[i]>=yFighter[j]-14))
if((xFighter[j]42<xAmmo[i])&&(xFighter[j]>xAmmo[i]))
{
for(k=1;
k<=20; k++)
if(rate[k]==0)
{
rate[k]=10;
xdestroy[k]=xFighter[j]-20; ydestroy[k]=yFighter[j]-7;
xFighter[j]=40;
bombFighter1[j]=random(xmax/2);
bombFighter2[j]=random(xmax/2);
if(HP<100) HP+=5;
SCORE+=10;
break;
}
SVTH: Lớp 61CĐT2

17


Thực Tập Cơ Bản - Mô phỏng trò chơi bắn máy bay

booleanAmmo[i]=0;
break;

}
}
for(j=1; j<=8; j++)
if(booleanBomb[j])
if((yAmmo[i]<=yBomb[j])&&(yAmmo[i]>=yBomb[j]-18))
if((xAmmo[i]<=xBomb[j]+3)&&(xAmmo[i]>=xBomb[i]-3))
{
for(k=1; k<=20; k++)
if(rate[k]==0)
{
rate[k]=10;
xdestroy[k]=xBomb[j]; ydestroy[k]=yBomb[j]-9;
SCORE=SCORE+5;booleanBomb[j]=0;
break;
}
booleanAmmo[i]=0;
break;
}
if((xAmmo[i]<0)||(xAmmo[i]>640)||(yAmmo[i]<0)) booleanAmmo[i]=0;
}
}
}
void controlGun()

//DIEU KHIEN SUNG

{
int i;
char key;
if(kbhit())

SVTH: Lớp 61CĐT2

18


Thực Tập Cơ Bản - Mô phỏng trò chơi bắn máy bay

controlAmmo();
cleardevice();
drawSky();
drawBlockhouse();
for(i=1; i<=4; i++) drawFighter(xFighter[i],yFighter[i]);
for(i=1; i<=8; i++)
if(booleanBomb[i]) drawBomb(xBomb[i],yBomb[i]);
drawGun(xGun,yGun);
for(i=1; i<=5; i++)
if(booleanAmmo[i])
drawAmmo(xAmmo[i],yAmmo[i]);
if(HP<=0)
{
}
}
//______________________________________HAM
MAIN()____________________________________
void main()
{
if(initGame()) exit(1);
runGame();
getch();
closegraph();

}

SVTH: Lớp 61CĐT2

19


Thc Tp C Bn - Mụ phng trũ chi bn mỏy bay

5. Hớng giải quyết .

Đây còn là chơng trình bắn máy bay khá đơn giản. Phần đồ hoạ không đợc
đẹp mắt, mặt khác một số tính năng khác nh bắn đạn còn hơi chậm, chế độ điều khiển
nòng súng còn cứng nhắc, không linh hoạt, số lợng máy bay trong mỗi lợt chơi không
đa dạng về góc độ.
Mt thiu sút na l thiu v phn õm thanh.
Do vậy, hớng phát triển chính của chơng trình là cải thiện đợc các nhợc
điểm trên có thể có đợc một chơng trình hoàn thiện.
6.Kt lun

Qua đợt thực tập này em đã củng cố đợc rất nhiều kiến thức đã đợc học trong
nhà trờng cũng nh vận dụng những kiến thức đó vào đề tài thực tập.
Từ bài thực tập này, chúng ta có thể coi đây là một bớc cơ bản, đặt nền móng
cho các bài thực tập khác với mức độ kiến thức cao hơn.

Vĩnh Yên, ngày 9 tháng 2 năm 2012
Sinh viên
Lê Quốc Duyệt

SVTH: Lp 61CT2


20



×