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

Báo cáo đồ án đồ họa máy tính Xây Dựng Phần Mềm Trò Chơi PingPall

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 (257.76 KB, 31 trang )

Trò Chơi PinBall

MỤC LỤC:
MỤC LỤC:..........................................................................................................................1
1.1.Giới Thiệu Chung......................................................................................................5
1.2.Ứng Dụng...................................................................................................................6
1.3 Các lĩnh vực nghiên cứu............................................................................................7
1.4.Tổng quan về trò chơi................................................................................................8
1.5.Tóm tắt nội dung báo cáo:.........................................................................................9
1.1. Các phép vẽ hình cơ bản.........................................................................................10
1.1.1.Vẽ hình tròn......................................................................................................10
1.1.2.Vẽ hình chữ nhật...............................................................................................12
2.1.Các hàm chính trong chương trình..........................................................................13
Hàm Putpixel()...........................................................................................................13
Hàm Getpixel()..........................................................................................................13
Hàm Setcolor()...........................................................................................................14
Hàm Setfillstyle().......................................................................................................14
3.1 Bảng giá trị màu sử dụng trong thư viện graphics.h................................................14
4.1. Các hàm chính.........................................................................................................15
4.1.1.Hàm vẽ gạch.....................................................................................................15
4.1.2.Hàm vẽ bóng.....................................................................................................15
4.1.3.Hàm vẽ thanh đỡ...............................................................................................16
4.1.4.Phím di chuyển trái bóng..................................................................................16
4.1.5.Hàm Show.........................................................................................................17
4.1.6.Hàm Menu........................................................................................................17
4.1.7.Hàm Load..........................................................................................................18
4.1.8.Hàm Gameover.................................................................................................19
4.1.9.Hàm run_pinball...............................................................................................19
4.1.10.Hàm xóa gạch.................................................................................................22
CHƯƠNG III: CÀI ĐẶT CHƯƠNG TRÌNH...................................................................23
3.1.Giới thiệu về ngôn ngữ lập trình..............................................................................23


3.3.Code chương trình...................................................................................................24
CHƯƠNG IV: KẾT LUẬN...............................................................................................31

GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

1


Trò Chơi PinBall

DANH MỤC CÁC BẢNG, SƠ ĐỒ, HÌNH
Bảng 2.1. Bảng giá trị màu sử dụng trong thư viện graphics.h
Hình 1.1. Các lĩnh vực nghiên cứu của đồ họa máy tính
Hình 2.1. Các vị trí đối xứng trên đường tròn (C) tương ứng với (x,y)
Hình 2.2. Vẽ hình chữ nhật
Hình 2.3.Hình vẽ gạch.
Hình 2.4.Hình vẽ bóng tròn.
Hình 2.5.Hình vẽ thanh ngang đỡ bóng.
Hình 2.6.Hình chuyển động của bóng.
Hình 3.1.Chương trình chính của trò chơi pinball.

GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14


2


Trò Chơi PinBall

LỜI CẢM ƠN
Sau một thời gian thực hiện đồ án, đến nay mọi công việc liên quan đến đồ án đã
hoàn tất. Trong suốt thời gian này, chúng em đã nhận được rất nhiều sự giúp đỡ.
Nhóm chúng em xin chân thành cảm ơn sự giúp đỡ nhiệt tình của thầy giáo
GV Nguyễn Ngọc Tú trang bị cho chúng em những kiến thức quý báu .
Cũng xin gửi lời biết ơn đến ba, đến mẹ, những người đã luôn dành những
tình thương yêu nhất cho chúng em, những người đã luôn hỗ trợ, dõi theo những
bước đi của chúng em trong tất cả các năm học vừa qua. Cảm ơn tất cả bạn bè,
những người đã sát cánh cùng nhau những niềm vui, cùng chia sẻ những khó khăn
của chúng em và giúp đỡ chúng em rất nhiều trong quá trình thực hiện đồ án này.

GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

3


Trò Chơi PinBall

LỜI MỞ ĐẦU
Đồ họa máy tính là một ngành khoa học Tin học chuyên nghiên cứu về các

phương pháp và kỹ thuật để có thể mô tả và thao tác trên các đối tượng của thế
giới thực bằng máy tính.
Về bản chất: đó là một quá trình xây dựng và phát triển các công cụ trên cả hai
lĩnh vực phần cứng và phần mềm hổ trợ cho các lập trình viên thiết kế các chương
trình có khả năng đồ họa cao.
Với việc mô tả dữ liệu thông qua các hình ảnh và màu sắc đa dạng của nó, các
chương trình đồ họa thường thu hút người sử dụng bởi tính thân thiện, dể dùng,...
kích thích khả năng sáng tạo và nâng cao năng suất làm việc.
Thuật ngữ đồ họa máy tính (Computer Graphics) được đề xuất bởi nhà khoa học
người Mỹ tên là William Fetter vào năm 1960 khi ông đang nghiên cứu xây dựng
mô hình buồng lái máy bay cho hãng Boeing.
Các chương trình đồ họa ứng dụng cho phép chúng ta làm việc với máy tính
một cách thoải mái, tự nhiên.
Tuy nhiên, việc dạy và học kỹ thuật đồ họa thì không là đơn giản do chủ đề
này có nhiều phức tạp. Kỹ thuật đồ họa liên quan đến tin học và toán học hầu hết
các giải thuật vẽ, tô cùng các phép biến hình đều được xây dựng dựa trên nền tảng
của hình học không gian hai chiều và ba chiều.
Là sinh viên chúng em được tìm hiểu làm quen với một số kĩ thuật đồ họa
trên máy tính thông qua bài giảng, tài liệu do thầy giáo cung cấp. Với những kiến
thức đã học chúng em quyết định chọn đề tài: Xây Dựng Phần Mềm Trò Chơi
Ping Pall

GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

4



Trò Chơi PinBall

CHƯƠNG I: GIỚI THIỆU CHUNG
1.1.Giới Thiệu Chung.
Pinball - đó là cờ bạc, là tổ tiên của một trò chơi gọi là việc nhỏ mọn
(«việc nhỏ mọn» của Pháp "trang sức"), có trụ sở tại tòa án của vua Louis XIV.
Nó xảy ra khi một trong những đội bóng của ông giảm bảng hồ bơi và dính nó với
chân ở một bên. Mặt khác, người chơi phải đánh bóng cue và đánh bại anh ta trong
túi, khác nhau về giá trị. Bóng chạm chân và tất cả thời gian để thay đổi hướng.
Các cầu thủ gửi các quả bóng vào túi bên phải, bạn phải đưa vào tài khoản góc
lệch khi đánh các chân. Trò chơi này là rất gợi nhớ của những khẩu súng. Trong
một trong các cuộc họp của cung điện vào năm 1777, đề xuất một niềm vui giải trí
mới. Nó là như vậy tất cả đã để hương vị, em trai của nhà vua rằng ông ngay lập
tức gọi cô là tên của sản của ông Bagatelle. Trò chơi này không chỉ tầng lớp quý
tộc, nhưng cũng thích những người bình thường và nhanh chóng lan rộng trong cả
nước. Và khi những người lính Pháp đã đi đến Mỹ để chống lại người Anh, họ đã
một đi lang thang trò chơi này. Như vậy, thế giới mới đã gặp và đem tình yêu với
các trò chơi việc nhỏ mọn. Đã có vào năm 1869, Montague Redgrave - Anh phát
minh, làm việc tại Mỹ, bắt đầu sản xuất bảng cho các trò chơi phổ biến, vào năm
1871, hoàn thiện chúng, thay thế lỗ (bỏ túi) vào mùa xuân (cản), và cue pít tông.
Bây giờ các cầu thủ chạy bóng bằng pít tông trên một sân chơi nghiêng. Cơ chế
này vẫn còn thành phần chính của tất cả các máy pinball. Giới thiệu này không chỉ
làm cho trò chơi thêm chức năng thuận tiện, nhưng cũng làm giảm các bảng chơi
game, và bảng điều khiển phía trên, bạn có thể nhìn thấy những điểm truy cập.
Montague Redgrave phát minh chính thức ra đời pinball. Máy một máy pinball có
thể được tìm thấy trong tất cả các nước châu Âu, nhưng pinball chơi trực tuyến,
bạn có thể chỉ đơn giản là ở nhà. Nội quy của các phiên bản máy tính của các quy
tắc của trò chơi thực tế được lặp đi lặp lại trên máy. Nhiệm vụ của bạn là để thu
thập như nhiều điểm. Phần thứ hai của trò chơi là, với quả bóng phụ để mở rộng

các trò chơi càng lâu càng tốt, đó là để giữ cho quả bóng trên lĩnh vực này càng
lâu càng tốt và có cơ hội để chơi trò chơi tiền thưởng miễn phí (phát lại). Pinball
máy tính - là một trò chơi arcade, nơi bạn có để chơi một hay nhiều quả bóng sắt,
giữ cho chúng trên sân chơi và tại các điểm đạt được cùng một trò chơi. Trò chơi
được dựa trên phiên bản cổ điển rất nhiều, nhưng nguyên tắc vẫn giữ nguyên.
Người hâm mộ có thể hiển thị sắc nét tổng thể ít lớp để tiêu diệt các zombie. Bạn
sẽ lái xe lõi sắt của nghĩa trang giữa hầm mộ. Theo ý của bạn ba quả bóng và quân
đội của zombies đói, biến thành một mớ hỗn độn đẫm máu, bạn đạt được điểm.
Một sự pha trộn thú vị của phiên bản pinball dường như bóng đá. Big lĩnh vực
GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

5


Trò Chơi PinBall

màu xanh lá cây, bóng trong vở kịch. Đó là chỉ có cầu thủ trên sân không ở tất cả,
và thay vào đó là đòn bẩy sẽ giúp bạn tránh được những mục tiêu tại các cửa của
bạn. Pinball, nơi lề đáy biển với các cư dân của nó, trông rất sống động và đầy
màu sắc. Giữ bóng trên sàn nhà, có nghĩa là, trên lĩnh vực này càng lâu càng tốt và
gõ vào điểm số của họ. Pinball trò chơi trong thể loại đua hoặc công viên cũng có
vẻ như một giải pháp tốt. Pinball chủ đề Giáng sinh hoặc trong các thác nước sẽ
sáng lên thời gian giải trí của bạn và nâng cao tinh thần. Mang xuống và thu thập
quà tặng, hoa quả và quả mọng, mà sẽ mang lại cho bạn điểm. Chọn bất kỳ phiên
bản của chính mình và bắt đầu chơi pinball trực tuyến miễn phí. Đẹp, đồ họa tươi
sáng sẽ làm hài lòng mắt, và nền âm nhạc Thưởng thức nghe. Pinball trò chơi sẽ là

một cách tốt để dành nhiều thời gian ở nhà, văn phòng hoặc thậm chí trong giao
thông.
1.2.Ứng Dụng.
Ngày nay, đồ họa máy tính được sử dụng rộng rãi trong nhiều lĩnh vực khác nhau
như công nghiệp, thương mại, quản lý, giáo dục, giải trí,... Sau đây là một số ứng
dụng tiêu biểu:
- Tạo giao diện (User Interfaces): như các chương trình ứng dụng
WINDOWS, WINWORD, EXCEL ... đang được đa số người sử dụng ưa chuộng
nhờ tính thân thiện, dể sử dụng.
- Tạo ra các biểu đồ dùng trong thương mại, khoa học và kỹ thuật: Các biểu
đồđược
tạo ra rất đa dạng, phong phú bao gồm cả hai chiều lẫn ba chiều góp phần thúc đẩy
xu hướng phát triển các mô hình dữ liệu hổ trợđắc lực cho việc phân tích thông tin
và trợ giúp ra quyết định.
- Tự động hóa văn phòng và chế bản điện tử: dùng những ứng dụng của đồ họa để
in ấn các tài liệu với nhiều loại dữ liệu khác nhau như: văn bản, biểu đồ, đồ thị và
nhiều loại hình ảnh khác ...
- Thiết kế với sự trợ giúp của máy tính (Computer aided design): Một trong những
lợi
ích lớn nhất của máy tính là trợ giúp con người trong việc thiết kế. Các ứng dụng
đồ họa cho phép chúng ta thiết kế các thiết bị cơ khí, điện, điện tử, ô
tô, máy bay,... như phần mềm AUTOCAD...
- Lĩnh
vực
giải trí, nghệ thuật: Các phần mềm PAINTBRUSH,
CORELDRAW,

GVHD:Nguyễn Ngọc Tú

|


SV Thực Hiện : Nhóm 14

6


Trò Chơi PinBall

PHOTOSHOP... cho phép tạo ra các hình ảnh trực quan trên màn hình của máy
tính, người họa sĩ có thể tự pha màu, trộn màu, thực hiện một số thao tác: cắt, dán,
tẩy, xóa, phóng to, thu nhỏ ... Ngoài ra hiện nay còn có hàng triệu game online
cũng như offline phục vụ trong việc giải trí.
- Lĩnh vực bản đồ: xây dựng và in ấn các bản đồ địa lý. Một trong những ứng
dụng hiện nay của đồ họa là hệ thống thông tin địa lý (GIS - Geographical
Information System).
1.3 Các lĩnh vực nghiên cứu

Hình 1.1 – Các lĩnh vực nghiên cứu của đồ họa máy tính
- Các hệ CAD/CAM (CAD – Computer Aided Design, CAM – Computer Aided
Manufacture)
Các hệ này xây dựng tập hợp các công cụ đồ họa trợ giúp cho việc thiết kế các
chi tiết và các hệ thống khác nhau: các thiết bị cơ khí, điện tử... Chẳng hạn như
phần mềm AutoCad của hảng AutoDesk...
- Xử lý ảnh (Image Processing)
Đây là lĩnh vực xử lý các dữ liệu ảnh trong cuộc sống. Sau quá trình xử lý ảnh,
dữ liệu đầu ra là ảnh của đối tượng. Trong quá trình xử lý ảnh, chúng ta sẽ sử dụng
rất nhiều các kỹ thuật phức tạp: khôi phục ảnh, xác định biên...
Ví dụ: phần mềm PhotoShop, Corel Draw, ...

GVHD:Nguyễn Ngọc Tú


|

SV Thực Hiện : Nhóm 14

7


Trò Chơi PinBall

- Khoa học nhận dạng (Pattern Recognition)
Nhận dạng là một lĩnh vực trong kỹ thuật xử lý ảnh. Từ những mẫu ảnh có sẵn,
ta phân loại theo cấu trúc hoặc theo các phương pháp xác định nào đó và bằng các
thuật toán chọn lọc để có thể phân tích hay tổng hợp ảnh đã cho thành một tập hợp
các ảnh gốc, các ảnh gốc này được lưu trong một thư viện và căn cứ vào thư viện
này để nhận dạng các ảnh khác.
Ví dụ: Phần mềm nhận dạng chữ viết (VnDOCR) của viện Công nghệ Thông tin
Hà Nội, nhận dạng vân tay, nhận dạng mặt người trong khoa học hình sự...
- Đồ họa minh họa (Presentation Graphics)
Đây là lĩnh vực đồ họa bao gồm các công cụ trợ giúp cho việc hiển thị các số liệu
thống kê một cách trực quan thông qua các mẫu đồ thị hoặc biểu đồ có sẵn. Chẳng
hạn như các biểu đồ (Chart) trong các phần mềm Word, Excel...
- Hoạt hình và nghệ thuật
Lĩnh vực đồ họa này bao gồm các công cụ giúp cho các họa sĩ, các nhà thiết kế
phim ảnh chuyên nghiệp thực hiện các công việc của mình thông qua các kỹ xảo
vẽ tranh, hoạt hình hoặc các kỹ xảo điện ảnh khác...
Ví dụ: Phần mềm xử lý các kỹ xảo hoạt hình như 3D Animation, 3D Studio
Max..., phần mềm xử lý các kỹ xảo điện ảnh: Adobe Primiere, Cool 3D,...
- Kỹ thuật phân tích và tạo ảnh (tổng hợp ảnh - Image Synthesis): là lĩnh vực xây
dựng mô hình và hình ảnh của các vật thể dựa trên các đối tượng và mối quan hệ

giữa chúng.
1.4.Tổng quan về trò chơi.
Pinball,cái tên hẳn không còn xa lạ . Một trò chơi từng ngốn rất nhiều thời
gian , gắn chặt chúng ta vào những chiếc điện thoại nokia hay những chiếc máy
tính đời cũ.Pinball phổ biến đến mức mỗi phiên bản Window đều mặc định cài đặt
phiên bản 2D đơn giản bên cạnh trò bài lá….
 Nhiệm vụ của người chơi là điều khiển nhịp nhàng thanh ngang bên dưới
(di chuyển sang trái hay sang phải) để đỡ quả bóng .
 Người chơi cố gắng đỡ trúng bóng để bóng di chuyển lên bên trên ghi
điểm các thanh ngang bên trên ,mỗi lần bóng lên trên đụng trúng thanh
ngang thì thanh ngang sẽ mất đi đồng thời bạn sẽ được 1 điểm
 Nếu để bóng lọt qua thanh ngang bên dưới thì người chơi đã thua, trò chơi
sẽ dừng.
GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

8


Trò Chơi PinBall

1.5.Tóm tắt nội dung báo cáo:
-

Chương 2: Phân Tích.
Chương 3: Cài Đặt Chương Trình.
Chương 4: Kết Luận.


GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

9


Trò Chơi PinBall

CHƯƠNG II: PHÂN TÍCH
1.1. Các phép vẽ hình cơ bản
1.1.1.Vẽ hình tròn
Thuật toán Bresenham
Phương trình đường tròn đi qua tâm có tọa độ (xc , yc) là:
(x - xc)2 + (y - yc)2 = R2
Hình tròn là hình đối xứng tâm

Hình 2.1. Các vị trí đối xứng trên đường tròn (C) tương ứng với (x,y)
Để đơn giản ta xét tâm trùng với gốc 0: x2 + y2 = R2
Ta xét các điểm tạo ra từ góc phần tư thứ 2: từ 90 0 đến 450 , thực hiện theo hướng
+x, -y.
Do tính đỗi xứng của đường tròn nên nếu điểm (x,y) ∈(C) thì các điểm (y,x),
(-y,x), (-x,y), (-x,-y), (-y,-x), (y,-x), (x,-y) cũng ∈ (C)
Vì vậy, ta chỉ cần vẽ một phần 8 cung tròn sau đó lấy đối xứng qua gốc O và 2
trục tọa độ thì ta có được toàn bộ đường tròn.
Giả sử (xi , yi) đã vẽ được. Cần chọn điểm kế tiếp là (xi + 1, yi) hoặc (xi + 1, yi - 1).


GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

10


Trò Chơi PinBall

Từ phương trình x2 + y2 = R2 ta tính được giá trị y tương ứng với tọa độ x i + 1 là:
y2 = R2 – (xi + 1)2.
Đặt:
• d1 = yi2 - y2 = yi2 - R2 + (xi + 1)2.
• d2 = y2 – (yi - 1)2 = R2 – (xi + 1)2 – (yi - 1)2.
Suy ra:
pi = d1 - d2 = [yi2 - R2 + (xi + 1)2] – [R2 – (xi + 1)2 – (yi - 1)2]
= 2. (xi + 1)2 + yi2 + (yi - 1)2 – 2.R2
• pi+1 = 2. (xi + 2)2 + 2.(y i +1 - y i ) - 2.(y i +1 - y i )
2
2
= pi + 4xi + 6 + 2.(y i +1 - y i ) - 2.(y i +1 - y i )
2

2

Ta xét:
• Nếu pi < 0: chọn điểm nằm ngoài đường tròn yi+1 =yi.
• Nếu pi ≥ 0: chọn điểm nằm trong đường tròn yi+1 =yi + 1.

Ta chọn điểm đầu cần vẽ (0, R), ta có: p1 = 3 – 2R
Tóm lại ta có thuật toán vẽ đường tròn:
• Bước 1 chọn điểm đầu cần vẽ: (x1,y1) = (0,R)
• Bước 2 Tính P đầu tiên: p1 = 3 – 2R
Nếu pi < 0: chọn điểm kê tiếp là (x i +1, yi). Ngược lại thì chọn điểm (xi + 1,yi 1)
• Bước 3 x:=x+1 tính lại p
Nếu pi < 0: pi +1 = pi + 4 xi + 6. Ngược lại: pi +1 = pi + 4.( xi - yi) + 10
Khi đó :
Nếu pi +1 < 0: chọn điểm kê tiêp là (x i +1 ,y i +1 ). Ngược lại chọn điểm (x i +1 ,y i +1 1)
• Bước 4 Lặp lại bước 3 cho đên khi x = y.
 Thuật toán cài đặt

GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

11


Trò Chơi PinBall

void circle (int xc, int yc, int r){
int x,y;
for (x=0; x<=int((float) r*sqrt(2)/2); x++){
y= int (sqrt(r*r - x*x));
doixung(xc,yc,x,y);
}
}

void doixung(int xc, int yc, int x, int y){
putpixel(xc+x,yc+y,1);
putpixel(xc-x,yc+y,2);
putpixel(xc+x,yc-y,3);
putpixel(xc-x,yc-y,4);
putpixel(xc+y,yc+x,5);
putpixel(xc-y,yc+x,6);
putpixel(xc+y,yc-x,7);
putpixel(xc-y,yc-x,8);
}
1.1.2.Vẽ hình chữ nhật.
Chỉ cần lấy tọa độ hai đỉnh đối nhau của hình chữ nhật là ta có thể vẽ ra hình
chữ nhật.ở đây ta lấy hai đỉnh trên trái và dưới phải. Từ đó ta vẽ đươc các cạnh.

Hình 2.2.Vẽ hình chữ nhật.
 Thuật toán cài đặt
void rectangle(int x1,int y1,int x2,int y2)
GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

12


Trò Chơi PinBall

{
For(int i=y1;i

{
putpixel(x1, y1+1,color);
putpixel(x2, y1+1,color);
}
For(int i=x1;i{
putpixel(x1+1, y1,color);
putpixel(x1+1,y2,color);
}
}
2.1.Các hàm chính trong chương trình.
Các hàm cần dùng trong thư viện graphics.h
 Hàm Putpixel()
Hàm thực hiện công việc: vẽ ra màn hình một pixel tại một vị trí xác định. Hàm có
dạng:
putpixel(x,y,color)
Trong đó:
• x, y: tọa độ theo trục x, y
• color: màu của pixel
 Hàm Getpixel()
Hàm thực hiện công việc: trả về màu của một pixel tại vị trí cho trước. Hàm có
dạng:
putpixel(x,y)
Trong đó:
• x, y: tọa độ theo trục x, y.
• giá trị trả về là màu tương ứng.

GVHD:Nguyễn Ngọc Tú

|


SV Thực Hiện : Nhóm 14

13


Trò Chơi PinBall

 Hàm Setcolor()
Hàm thực hiện công việc: đặt màu vẽ hiện tại. Hàm có dạng:
setcolor(color)
Trong đó:
• color: màu mà ta muốn đặt.
 Hàm Setfillstyle()
Hàm thực hiện công việc: đặt mẫu và màu tô. Hàm có dạng:
setfillstyle(style,color)
Trong đó:
• style: kiểu mẫu muốn đặt.
• color: màu muốn đặt.
3.1 Bảng giá trị màu sử dụng trong thư viện graphics.h
Tên màu

Giá trị màu

BLACK
BLUE
GREEN
CYAN
RED
MAGENTA

BROWN
LIGHTGRAY
DARKGRAY
LIGHTBLUE
DARKBLUE
LIGHTCYAN
LIGHTRED
LIGHTMAGENTA
YELLOW
WHITE

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Bảng 2.1. Bảng giá trị màu sử dụng trong thư viện graphics.h


GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

14


Trò Chơi PinBall

4.1. Các hàm chính
4.1.1.Hàm vẽ gạch.
Truyền tham số là tọa độ của đỉnh trên trái của hình chữ nhật. Ta sẽ có một viên
gạch gồm hai hình chữ nhật tạo thành

Hình 2.3.Hình vẽ gạch.
void drawbrick(int lx,int ly)
{
int s=10;
setcolor(s);
rectangle(lx,ly,lx+62,ly+18);
rectangle(lx+4,ly+4,lx+62-4,ly+18-4);
setfillstyle(1,s+1);
floodfill(lx+2,ly+2,s);
setfillstyle(s,18);
setfillstyle(22,6);
}
4.1.2.Hàm vẽ bóng
Truyền tham số là tọa độ tâm trái bóng.

GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

15


Trò Chơi PinBall

Hình 2.4.Hình vẽ bóng tròn.
Dùng hàm có sẵn vẽ quả bóng bằng hàm vẽ hình elips đặc
fillellipse(x, y, x1, x2);
4.1.3.Hàm vẽ thanh đỡ

Hình 2.5.Hình vẽ thanh ngang đỡ bóng.
Dùng hàm có sẵn vẽ thanh ngang.và tô màu cho nó.
rectangle(a-50,b-14-24,a+50,b-30);
setfillstyle(1,1);
floodfill(a-49,b-14-23,15);
4.1.4.Phím di chuyển trái bóng
void phimdichuyenbong()
{char ch;
do{
ch=getch();
switch(ch)
{
case 32:
setcolor(BACKCOLOR);

setfillstyle(SOLID_FILL, BACKCOLOR);
fillellipse(getmaxx()/2, getmaxy()-21, RADIUS, RADIUS);
run_pinball();
break;
GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

16


Trò Chơi PinBall

}
}while(ch!=27);
}
4.1.5.Hàm Show
void show()
{
int xpad = getmaxx()/2 - 20;
int ypad = getmaxy() - 11;
int x=getmaxx()/2;
int y=getmaxy()-21;
rectangle(0, 0, getmaxx(), getmaxy());//ve khung gioi han ben ngoai
setcolor(10);
rectangle(xpad-30, ypad, xpad + 70, ypad+10);//ve thanh do
setfillstyle(1,1);
setcolor(WHITE);

setfillstyle(SOLID_FILL, BALLCOLOR);//lay mau hien tai de ve bong
fillellipse(x, y, RADIUS, RADIUS);//ve bong (hih elip dac)
//ve gach
int i,j,lx=0,ly=0;
for(i=0;i<5;i++)
{
for(j=0;j<12;j++)
{
drawbrick(lx,ly);
lx=lx+53;
delay(DELAY);
}
lx=0;
ly=ly+14;
}
}
4.1.6.Hàm Menu
void menu()
{while(1)
{
cleardevice();
setcolor(13);
settextstyle(8, HORIZ_DIR, 8);
outtextxy(30,20,"PINBALL GAME");
GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14


17


Trò Chơi PinBall

setcolor(3);
settextstyle(2, HORIZ_DIR, 7);
outtextxy(getmaxx()/2-27,getmaxy()/2+10,"START");
outtextxy(getmaxx()/2-19,getmaxy()/2+50,"EXIT");
int ch=ch%2;
rectangle(getmaxx()/2-50,getmaxy()/2+5ch*40,getmaxx()/2+50,getmaxy()/2+35-ch*40); /*selection*/
switch(getch())
{
case 72: ch++; break;
/*up key*/
case 80: ch--; break;
/*down key*/
case 13:
/*enter key*/
if(ch==1)
{
Beep(500,800);
Sleep(10);
cleardevice();
show();
phimdichuyenbong();
}
else if(ch==0)
exit(1);
}

Beep(500,100);
}
}
4.1.7.Hàm Load
void load()
{
setcolor(13);
settextstyle(8, HORIZ_DIR, 8);
outtextxy(30,20,"PINBALL GAME");
gotoxy(37,19);//chuyen con tro toi vi tri x,y
cout<<"LOADING";
for(int i=0;i<=50;i++)
{
gotoxy(14+1+i,17+1);
printf("Ý");
Beep(i *10,100);
GVHD:Nguyễn Ngọc Tú

/*loading disp loop */

|

SV Thực Hiện : Nhóm 14

18


Trò Chơi PinBall

delay(100);

gotoxy(37,17);
cout<<"Complete "<}
delay(200);
menu();
}
4.1.8.Hàm Gameover
void gamover()
{
setcolor(3);
for(int i=0;i<135;i++)
{
circle(getmaxx()/2,getmaxy()/2,i*3);
delay(15);
}
setfillstyle(SOLID_FILL,7);
for(int i=0;i<100;i++)
{
fillellipse(getmaxx()/2,getmaxy()/2-15,3*i,20);
delay(15);
}
setcolor(12);
settextstyle(4, 0, 2);//HORIZ_DIR(0)-huong nam ngang(font,huong,co
chu),GOTHIC_FONT(4)
outtextxy(getmaxx()/2-90,getmaxy()/2-27,"GAME OVER");
Beep(1000,800);
//Beep(1000,1000);
delay(400);
getch();
//cleardevice();

menu();
}
4.1.9.Hàm run_pinball
void run_pinball()
{
int dx, dy, x, y, dung = 0, i;int by,midx,midy;
int xpad, ypad;
char c;
GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

19


Trò Chơi PinBall

srand(time(0));//srand() voi tham so là time() thay cho randomize --khoi dong hàm
random() .
do
{
dx = rand()%3 - 1;//rand thay cho ramdom
} while (dx == 0);
do
{
dy = rand()%3 - 1;
} while (dy == 0);
x=getmaxx()/2;

y=getmaxy()-21;
xpad = getmaxx()/2 - 20;
ypad = getmaxy() - 11;
do
{
setcolor(13);
setfillstyle(SOLID_FILL, BALLCOLOR);
fillellipse(x, y, RADIUS, RADIUS);//ve hinh elip dac toa do x,y ,rong,cao
delay(DELAY);//lam tre thoi gian
setcolor(BACKCOLOR);
setfillstyle(SOLID_FILL, BACKCOLOR);
fillellipse(x, y, RADIUS, RADIUS);
x += dx;
y += dy;
if ((getpixel(x+11,y)>=10)||(getpixel(x-11,y)>=10)||x < RADIUS +1 || x >
getmaxx() - RADIUS - 1)//gioi han trai phai
{
dx = -dx;
x += 2 * dx;
dung = 1;
}
if ((getpixel(x,y-11)>=10)||(getpixel(x,y+11)>=10) ||y<10)//gioi han tren duoi || y
> getmaxy() - RADIUS - 1
{
dy = -dy;
y += 2 * dy;
dung = 1;
GVHD:Nguyễn Ngọc Tú

|


SV Thực Hiện : Nhóm 14

20


Trò Chơi PinBall

erasebrick(x/53,y/14-1);
cout<<"xoa "<}
if (abs(y-ypad) <= RADIUS && (x-xpad)<=80 && (x-xpad)>0)//gioi han thanh
do
{
dy = -dy;
y += 2 * dy;
dung = 1;
}
if (abs(y-ypad) < RADIUS && (x-xpad)<0)
{
Beep(500,100);
gamover();
}
if (abs(y-ypad) < RADIUS && (x-xpad)>80)
{
Beep(500,100);
gamover();
}
if (kbhit())//de nhan phim bat ki
{

c = getch();
if (c == 0)
c = getch();
rectangle(xpad-30, ypad, xpad + 70, ypad+10);//xoa thanh do
setfillstyle(1,0);
switch(c)
{
case 75 : if (xpad > 0)//phim <-xpad -= 20;
break;
case 77 : if (xpad < getmaxx() - 70)//phim-->
xpad += 20;
break;
case 'p':
Beep(100,100);
setcolor(13);
settextstyle(4, 0, 1);
GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

21


Trò Chơi PinBall

outtextxy(getmaxx()/2-60,getmaxy()/2-27,"PAUSED");
setcolor(13);
setfillstyle(SOLID_FILL, BALLCOLOR);

fillellipse(x, y, RADIUS, RADIUS);
rectangle(xpad-30, ypad, xpad + 70, ypad+10);///thanh do
bong
getch();
setcolor(BLACK);
outtextxy(getmaxx()/2-60,getmaxy()/2-27,"PAUSED");
break;
}
setcolor(10);
rectangle(xpad-30, ypad, xpad + 70, ypad+10);//ve thanh do
setfillstyle(1,1);
}
} while (c != 27);
}
4.1.10.Hàm xóa gạch
void erasebrick(int b,int l)//xoa
{
setfillstyle(1,0);
bar(b*53,l*14,(b*53)+51,(l*14)+13);
}

GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

22



Trò Chơi PinBall

CHƯƠNG III: CÀI ĐẶT CHƯƠNG TRÌNH
3.1.Giới thiệu về ngôn ngữ lập trình.
Ngôn ngữ lập trình (NNLT) C/C++ là một trong những ngôn ngữ lập trình
hướng đối tượng mạnh và phổ biến hiện nay do tính mềm dẻo và đa năng của nó.
Không chỉ các ứng dụng được viết trên C/C++ mà cả những chương trình hệ thống
lớn đều được viết hầu hết trên C/C++. C++ là ngôn ngữ lập trình hướng đối tượng
được phát triển trên nền tảng của C, không những khắc phục một số nhược điểm
của ngôn ngữ C mà quan trọng hơn, C++ cung cấp cho người sử dụng (NSD) một
phương tiện lập trình theo kỹ thuật mới: lập trình hướng đối tượng. Đây là kỹ thuật
lập trình được sử dụng hầu hết trong các ngôn ngữ mạnh hiện nay.
3.2 Giao diện chương trình
Các thuật toán các phép biến hình được Demo thành chương trình bằng ngôn
ngữ C++. Đầu tiên giao diện chương trình sẽ xuất hiện.

Hình 3.1.Chương trình chính của trò chơi pinball.
GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

23


Trò Chơi PinBall

3.3.Code chương trình
Sau khi đã xác định ý tưởng và các thuật toán liên quan, ta xây dựng được chương

trình hoàn chỉnh sau
/* Chuong trinh minh hoa chuyen dong cua mot trai pinball co tam do o duoi */
#include <conio.h>
#include <graphics.h>
#include <dos.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <iostream>
#include <cstdlib>
using namespace std;
#define RADIUS 10
#define BALLCOLOR RED
#define BACKCOLOR 0
#define DELAY 3
void gamover();
void load();
void menu();
void show();
void phimdichuyenbong();
void drawbrick(int lx,int ly)// ve gach
{
int s=10;
setcolor(s);
rectangle(lx,ly,lx+50,ly+12);
rectangle(lx+3,ly+3,lx+50-3,ly+12-3);
setfillstyle(1,s+1);
floodfill(lx+2,ly+2,s);
setfillstyle(s,12);
setfillstyle(22,6);

}
void erasebrick(int b,int l)//xoa
GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14

24


Trò Chơi PinBall

{
setfillstyle(1,0);
bar(b*53,l*14,(b*53)+51,(l*14)+13);
}
void run_pinball()
{
int dx, dy, x, y, dung = 0, i;int by,midx,midy;
int xpad, ypad;
char c;
srand(time(0));//srand() voi tham so là time() thay cho randomize --khoi dong hàm
random() .
do
{
dx = rand()%3 - 1;//rand thay cho ramdom
} while (dx == 0);
do
{

dy = rand()%3 - 1;
} while (dy == 0);
x=getmaxx()/2;
y=getmaxy()-21;
xpad = getmaxx()/2 - 20;
ypad = getmaxy() - 11;
do
{
setcolor(13);
setfillstyle(SOLID_FILL, BALLCOLOR);
fillellipse(x, y, RADIUS, RADIUS);//ve hinh elip dac toa do x,y ,rong,cao
delay(DELAY);//lam tre thoi gian
setcolor(BACKCOLOR);
setfillstyle(SOLID_FILL, BACKCOLOR);
fillellipse(x, y, RADIUS, RADIUS);
x += dx;
y += dy;
if ((getpixel(x+11,y)>=10)||(getpixel(x-11,y)>=10)||x < RADIUS +1 || x >
getmaxx() - RADIUS - 1)//gioi han trai phai
{
dx = -dx;
x += 2 * dx;
dung = 1;
}
GVHD:Nguyễn Ngọc Tú

|

SV Thực Hiện : Nhóm 14


25


×