Thực tập cơ bản mô phỏng trò chơi bắn máy bay
Trang 2LỜI 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áctrờ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ảngdạ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 trangthiế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 đềuphả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ệchọc tập Chúng ta cần tìm hiểu thêm về các bài tập liên quan đếnkiế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 sinhsinh 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ếnthứ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ậpcủ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ậtnhiều, để có phần nào cha hiểu có thể hỏi các thầy 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
Trang 3Em rất chân thành cảm ơn các thầy 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
MỤC LỤC
Lời núi đầu 2
NỘI DUNG 5
Tổng quan về bài toán 5
Chơng I : Tổng quan về bài toán 5
1 Bài toán : Mô phỏng trò chơi bắn máy bay 5
2 Yêu cầu của bài toán : 5
3 Phạm vi giải quyết 5
4 Khó khăn 6
Chơng II : Phân tích và giải thuật 7
1 Hớng giải quyết : 7
2 Giải thuật của các chức năng chính trong chơng trình : 7
Chơng III : Cấu trúc chơng trình 11
1.Cấu trúc chơng trình theo sơ đồ khối : 11
2 Một số hàm, thủ tục, và biến quan trọng 12
3 Các unit chính 12
4 Mã chơng trình : 12
5 Hớng giải quyết 25
6.Kết luận 25
Trang 4Chơ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ừ 3à5 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ímSPACE 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ổ
Trang 5-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ểmcủ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 nếu bắn trỳng một mỏy bay thỡ sẽ được cộng thờm 5HP
đợ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 chomá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
Trang 6Chơ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ụngcá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ậntốc.)
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
Trang 72 Gi¶i thuËt cña c¸c chøc n¨ng chÝnh trong ch¬ng tr×nh :
-Đầu tiên là khởi tạo chế độ đồ họa
printf("\n KHONG THAY TRINH DIEU KHIEN DO HOA!");
printf("\n CHUONG TRINH KHONG THE THUC HIEN! ");
-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);
Trang 9void destroy() //TAO CAC VU NO TREN MAN HINH
if(rate[i]>2) floodfill(xdestroy[i],ydestroy[i],RED);
Trang 10} }
Trang 11Đạn = Máy BayĐạn = Bom
Nổ
Điểm
Quit Game
BayTrue
False
Trang 122 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];
Trang 13int xFighter[5],yFighter[5],bombFighter1[5],bombFighter2[5]; int booleanBomb[9],xBomb[9],yBomb[9];
{
closegraph();
Trang 14printf("\n \t\t _GAME BAN MAY BAY ");
printf("\n \t\tLE QUOC DUYET.\n");
Trang 15bombFighter1[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;
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);
Trang 16void drawBomb(int x, int y)
Trang 17} }
void controlBomb() //DIEU KHIEN BOM
xdestroy[j]=xBomb[i];
ydestroy[j]=yBomb[i];
Trang 18HP-=10;
break;
} booleanBomb[i]=0; }
} }
xAmmo[i]=xmax/2-for(j=1; j<=4; j++)
{ if((yAmmo[i]<=yFighter[j])&&(yAmmo[i]>=yFighter[j]- 14))
42<xAmmo[i])&&(xFighter[j]>xAmmo[i]))
if((xFighter[j]-{
for(k=1; k<=20; k++)
Trang 19if(rate[k]==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;
Trang 20SCORE=SCORE+5; booleanBomb[j]=0;
break;
} booleanAmmo[i]=0;
break;
} if((xAmmo[i]<0)||(xAmmo[i]>640)||(yAmmo[i]<0))
booleanAmmo[i]=0;
} }
drawGun(xGun,yGun);
for(i=1; i<=5; i++)
Trang 21if(booleanAmmo[i]) drawAmmo(xAmmo[i],yAmmo[i]);
if(HP<=0)
{
} }
Một thiếu sút nữa là thiếu về phần õ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ànthiện
Trang 226.Kết luận
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