Tải bản đầy đủ (.pdf) (19 trang)

Ngon ngu lap trinh C_3

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 (402.47 KB, 19 trang )

Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

Chơng 8
Màn hình và cửa sổ - Đồ hoạ - âm thanh

8.1. Quản lý màn hình và cửa sổ
8.1.1. Màn hình kiểu văn bản
Hàm chọn kiểu màn hình văn bản:
void textmode(int mode);
Trong đó:
Ký hiệu

Giá trị mode

Mốt văn bản

LASTMODE

-1

trớc đó

BW40

0

đen trắng 40 cột

C40


1

16 màu, 40 cột

BW40

2

đen trắng 80 cột

C80

3

16 màu, 80 cột

MONO

7

đơn sắc 80 cột

Ví dụ chọn mốt 16 màu 80 cột:
textmode(C80);
Chú ý: Các ký hiệu trong bảng trên đã đợc định nghĩa trong tệp
conio.h. Màn hình ở mốt văn bản bao gồm 25 dòng.
8.1.2. Đặt mầu nền, mầu chữ
Đặt mầu nền cho màn hình (cửa sổ hiện hành):
void textbackground(int color);
Đặt mầu chữ:

void textcolor(int color);
Bảng sau đây cho biết các thông tin về màu (các hằng số về màu chứa
trong trong tệp conio.h và graphis.h).

98


Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

Ký hiệu

Mầu

Giá trị color

Mầu nền, chữ

BLACK

đen

0

cả hai

BLUE

xanh da trời


1

cả hai

GREEN

xanh lá cây

2

cả hai

CYAN

xanh lơ

3

cả hai

RED

đỏ

4

cả hai

MAGENTA


tím

5

cả hai

BROWN

nâu

6

cả hai

LIGHGRAY

xám nhạt

7

cả hai

DACKGRAY

xám sẫm

8

màu chữ


LIGHGBLUE

xanh nhạt

9

màu chữ

LIGHGREEN

xanh nhạt

10

màu chữ

LIGHTCYAN

xanh nhạt

11

màu chữ

LIGHTRED

đỏ nhạt

12


màu chữ

LIGHTMAGENTA

tím nhạt

13

màu chữ

YELLOW

vàng

14

màu chữ

WHITE

trắng

15

màu chữ

Ví dụ: Đặt chữ màu trắng trên nền xanh da trời.
textcolor(WHITE);

// hoặc textcolor(15);


textbackground(BLUE); // hoặc textbackground(1);
8.1.3. Xây dựng cửa sổ
Cửa sổ là một hình chữ nhật trên màn hình. Để tạo một cửa sổ hãy dùng
lệnh sau:
void window(int x1, int y1, int x2, int y2);
Hàm này sẽ tạo một cửa sổ có toạ độ góc trái bên trên là (x1, y1), toạ độ
góc phải bên dới là (x2, y2) và đa con trỏ màn hình về góc trái trên (toạ độ
0, 0) của cửa sổ mới đợc tạo ra. Chú ý rằng x2 >= x1, y2 >= y1.
Hàm chuyển con trỏ màn hình tới một điểm (x, y):

99


Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

void gotoxy(int x, int y);
Hàm xoá màn hình hay cửa sổ:
void clrscr(void);
Hàm trả về toạ độ x (ngang) của con trỏ trong cửa sổ hiện hành:
int wherex(void);
Hàm trả về toạ độ y (dọc) của con trỏ trong cửa sổ hiện hành:
int wherey(void);
Ví dụ chơng trình 8.1:
# include <conio.h>
void main()
{
textmode(C80);
textbackground(CYAN);

window(1,1,80,25);
clrscr();
textbackground(RED);
window(30, 10, 50, 15);
clrscr();
textcolor(YELLOW);
cprintf("%s", "Happy new year...");
getch();
}

8.2. Đồ hoạ
8.2.1. Khởi động hệ thống đồ hoạ của C
Các tệp điều khiển đồ hoạ của C thờng đợc đặt trong th mục
C:\TC\BGI, đó là các tệp *.BGI, *.CHR ... Các hàm và các hằng số đồ họa
đợc đặt trong tệp graphics.h.
Mục đích của việc khởi động hệ thống đồ hoạ là xác lập các thiết bị đồ
hoạ, mốt đồ hoạ sẽ sử dụng. Để khởi động đồ hoạ ta dùng hàm:
void initgraph(int *driver, int *mode, char *path);
Trong đó:
driver : là thiết bị điều khiển đồ hoạ.
mode : là mốt đồ hoạ.

100


Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

path : đờng dẫn của th mục chứa các tệp điều khiển đồ hoạ.
Ví dụ: Giả sử máy tính có màn hình VGA, các tệp tin đồ hoạ nằm trong

th mục C:\TC\BGI, ta có thể khởi động hệ thống đồ hoạ nh sau:
int driver = VGA;
int mode = VGAHI;
initgraph(&driver, &mode, C:\TC\BGI);
Các thông tin về điều khiển đồ hoạ của C hay xem trong các referent C.
Khởi động hệ thống đồ hoạ tự động: gán hằng DETECT cho driver của
initgraph().
Ví dụ:
int driver = DETECT;
int mode;
initgraph(driver, mode, C:\TC\BGI);
Khi đó sẽ khởi tạo đồ hoạ theo kiều và độ phân giải cao nhất có thể.
Trong trờng hợp này hãy dùng hàm getmaxx() và getmaxy() để xác định
kích thớc màn hình đồ hoạ đang sử dụng.
Sau khi thực hiện xong công việc đồ hoạ, ta nên đóng chế độ đồ hoạ lại
để khỏi làm ảnh hởng đến một số việc khác bằng hàm:
void closegraph(void);
8.2.2. Lỗi đồ hoạ
Để phát hiện lỗi đồ hoạ, hãy dùng hàm:
int graphresult(void);
Nếu việc khởi động hệ thống đồ hoạ thành công thì hàm graphresult()
trả về giá trị 0. Để biết đó là lỗi gì hãy dùng hàm:
char *grapherrormsg(int n);
trong đó n là mã lỗi do hàm graphresult trả về.
Ví dụ ta có thể dùng đoạn chơng trình nh sau để bắt lỗi đồ hoạ:
...
int error = graphresult();
if (error)

101



Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

{
printf(grapherrormsg(error));
exit(1);
}
else
{
... // thực hiện công việc đồ hoạ
}
Ví dụ: chơng trình 8.2.
#include
#include
#include
#include

<graphics.h>
<stdio.h>
<conio.h>


void main()
{
int driver = DETECT, mode, error;
initgraph(&driver,&mode, "C:\\TC\\BGI");
error = graphresult();
printf("\nGia tri so cua man hinh: %d", driver);

if (error)
{
printf("\nLoi do hoa:%s",grapherrormsg(error));
exit(1);
}
else
{
setcolor(14);
// mầu nét vẽ
setbkcolor(1);
// mầu nền
//vẽ đờng tròn tâm ở giữa màn hình,bán kính=50
circle(getmaxx()/2, getmaxy()/2, 50);
}
getch();
closegraph();
}

8.2.3. Các hàm đồ hoạ
Đặt mầu nền:
void setbkcolor(int color);

102


Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

Đặt mầu đờng vẽ:
void setcolor(int color);

Chọn kiểu tô và màu tô:
void setfillstyle(int patten, int color);
Các giá trị của color xem trong mục 8.1.2.
Các giá trị của patten xem trong bảng sau:
Tên hằng

Giá trị

Mô tả kiểu tô

EMPTY_FILL

0

Tô bằng mầu nền

SOLID_FILL

1

Tô bằng đờng nét liền

LINE_FILL

2

Tô bằng - - -

LTSLASH_FILL


3

Tô bằng ///

SLALL_FILL

4

Tô bằng /// đậm

BKSLASH_FILL

5

Tô bằng \\\ đậm

LTBKSLASH_FILL

6

Tô bằng \\\

HATCH_FILL

7

Tô bằng đờng gạch bóng nhạt

XHATCH_FILL


8

Tô bằng đờng gạch bóng chữ thập

INTERLEAVE_FILL

9

Tô bằng đờng đứt quãng

WIDE_DOT_FILL

10

Tô bằng dấu chấm tha

CLOSE_DOT_FILL

11

Tô bằng dấu chấm mau

Kiểu tô và mầu tô đợc sử dụng trong các hàm pieslice, fillpoly, bar,
bar3d và floodfill ta sẽ xem sét sau.
Chọn giải mầu:
Để thay đổi giải màu đã đợc định nghĩa trong bảng ở mục 8.1.2 ta
dùng hàm:
void setpalette(int color1, int color2);
Ví dụ câu lệnh:
setpalette(0, LIGHTCYAN);

sẽ đổi mầu đầu tiên trong bảng mầu ở mục 8.1.2 thành mầu xanh lơ nhạt, các
mầu khác không bị ảnh hởng.
103


Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

Xác định giải mầu hiện hành:
voi getpalette(struct palettetype * palette);
ở đây palettetype là kiểu đã đợc định nghĩa trớc nh sau:
#define MAXCOLORS 15
struct palettetype
{
unsgned char size;
unsigned char colors[MAXCOLORS+1];
};
Trong đó:
size là số lợng màu trong palette.
colors là mảng chứa mầu có chỉ số chạy từ 0 tới size-1.
Hàm getcolor trả về mầu đã xác định trớc đó bằng hàm setcolor
Hàm getbkcolor trả về màu đã xá định trớc đó bằng hàm setbkcolor.
Hàm getmaxcolor trả về mầu cực đại thuộc giải mầu đang có hiệu lực.
Trên 256 K EGA, hàm này luôn cho giá trị 15.
8.2.4. Vẽ và tô màu
Vẽ điểm:
void putpixel(int x, int y, int color);
Vẽ một điểm tại toạ độ (x, y) theo màu xác định bởi color.
Vẽ đờng tròn:
void circle(int x, int y, int r);

Vẽ một đờng tròn với tâm tại điểm (x, y) và bán kính là r.
Vẽ cung tròn:
void arc(int x, int y, int gd, int gc, int r);
Vẽ cung tròn có tâm là (x, y), góc đầu là gđ, góc cuối là gc và bán kính
là r.
Vẽ ellipse:

104


Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

void ellipse(int x, int y, int gd, int gc, int a, int b);
Vẽ đờng ellipse có tâm tại (x, y), góc đầu là gd, góc cuối là gc, bán
trục ngang là a, bán trục đứng là b.
Vẽ hình quạt:
void pieslice(int x, int y, int gd, int gc, int r);
Vẽ hình quạt có tâm tại (x, y), góc đầu là gd, góc cuối là gc, bán kính là
r.
Vẽ đờng gấp khúc và đa giác:
Muốn vẽ đờng gấp khúc đi qua n điểm (x1, y1), (x2, y2), ... (xn, yn),
trớc hết phải đa các toạ độ vào mảng a kiểu int, tức là gán x1 cho a[0], y1
cho a[1], ..., xn cho a[n-1], yn cho a[n] . Sau đó gọi hàm:
drawpoly(n, a);
Nếu (xn, yn) trùng với (x1, y1) thì nhận đợc đờng gấp khúc khép kín.
Vẽ đa giác:
fillpoly(n, a);
Vẽ và tô màu một đa giác có đỉnh làcác điểm (x1, y1), ..., (xn, yn). a là
ma trận chứa toạ độ các điểm nh trên.

Vẽ đờng thẳng:
void line(int x1, int y1, int x2, int y2);
Vẽ đờng thảng từ điểm (x1, y1) tới điểm (x2, y2) không làm thay đổi
vị trí con trỏ.
void lineto(int x, int y);
Vẽ đờng thảng từ điểm hiện tại tới điểm có toạ độ (x, y) và chuyển con
trỏ tới điểm (x, y).
void linerel(int dx, int dy);
Vẽ đờng thẳng từ điểm hiện tại (x, y) tới điểm (x+dx, y+dy) và chuyển
con trỏ tới vị trí mới.
Hàm chuyển con trỏ:
void moveto(int x, int y);
Chuyển con trỏ tới điểm (x, y).
105


Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

Vẽ hình chữ nhật
void rectangle(int x1, int y1, int x2, int y2);
Vẽ hình chữ nhật có các cạnh song song với cá cạnh của màn hình. Tọa
độ trên trái là (x1, y1) và tọa độ dới phải là (x2, y2).
void bar(int x1, int y1, int x2, int y2);
Vẽ và tô màu hình chữ nhật.
void bar3d(int x1, int y1, int x2, int y2, int depth, int top);
Vẽ và tô mầu khối chữ nhật. Tham số depth ấn định số điểm ảnh trên bề
sâu của khối ba chiều, tham số top có thể nhận giá trị 1 (TOPON) hoặc 0
(TOPOFF) xác định khối chữ nhật là có nắp hay không.
Chọn kiểu đờng vẽ:

void setlinestyle(int linestyle, int patten, int thickness);
Hàm này tác động đến nét vẽ của các hàm/thủ tục: line, lineto,
rectangle, drawpoly, circle ... Cho phép ấn định 3 yếu tố của đờng vẽ là
dạng, bề dày và mầu tự tạo.
Các giá trị có thể của tham số linestyle:
Hằng

Giá trị

Dạng nét vẽ

SOLID_LINE

0

Nét liền

DOTTED_LINE

1

Nét chấm

CENTER_LINE

2

Nét chấm gạch

DASHED_LINE


3

Nét gạch

USERBIT

4

Mẫu tự tạo

Bề dầy do tham số thickness ấn định, các giá trị có thể là:
NORM_WIDTH = 1

bề dầy bình thờng.

NORM_WIDTH = 3

bề dầy gấp ba.

Mẫu tự tạo: Nếu tham số thứ nhất là USERBIT_LINE thì có thể tạo ra
mẫu đờng thảng bằng tham số patten, ví dụ đoạn chơng trình:
int patten = 0x1010;
setlinestyle(USERBIT_LINE, patten, NORM_WIDTH);
106


Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++


line(0, 0, 100, 200);
Giá trị patten trong hệ 16 là 0x1010 còn trong hệ 2 là:
0001

000

0001

0000

Chỗ nào có bit 1 điểm sẽ sáng, bit 0 làm tắt điểm ảnh.
8.2.4. Cửa sổ Wiewport
Khái niệm:
Viewport là một vùng chữ nhật trên màn hình đồ hoạ, nó tựa nh
window trong textmode. Để thiết lập Viewport ta dùng hàm:
void setviewport(int x1, int y1, int x2, int y2, int clip);
Trong đó (x1, y1) là tọa độ góc trên trái, (x2, y2) là toạ độ góc dới
phải. Các tham số này phải thoả mãn:
0 <= x1 <= x2
0 <= y1 <= y2.
Tham số clip có thể nhận một trong hai giá trị:
clip = 1 không cho phép vẽ ra ngoài viewport.
clip = 0 cho phép vẽ ra ngoài viewport.
Sau khi thiết lập viewport, ta có hệ toạ độ mới mà góc trên bên trái của
viewport sẽ có toạ độ là (0, 0).
Xác nhận Viewport hiện hành:
Để xác nhận viewport hiện hành ta dùng hàm:
void getviewsettings(struct viewporttype *vp);
ở đây kiểu viewporttype đã đợc định nghĩa nh sau:
struct viewport

{
int left, top, right, bottom;
int clip;
};
Xoá Viewport:
Để xoá một viewport ta dùng hàm:
107


Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

void clearviewport(void);
Xoá màn hình và đa con trỏ về (0, 0) của màn hình:
void cleardevice(void);
Khi thực hiện hàm này sẽ xoá mọi thứ trên màn hình.
Toạ độ âm dơng:
Nhờ Viewport ta có thể viết các chơng trình đồ hoạ theo toạ độ âm
dơng. Muốn vậy ta thiết lập viewport sao cho tâm tuyệt đối của màn hình là
góc trên bên trái của viewport và cho tham số clip = 0 để có thể vẽ ra ngoài
giới hạn của viewport. Đoạn trình sau thực hiện công việc trên:
int xc = getmaxx()/2, yc = getmaxy()/2;
setviewport(xc, yc, 2*xc, 2*yc, 0);
Nh vậy màn hình sẽ đợc chia thành 4 phần với toạ độ âm dơng nh
sau:
Phần t trái trên :

x âm, y âm.

Phần t trái dới :


x âm, y dơng.

Phần t phải trên :

x dơng, y âm.

Phần t phải dới:

x dơng, y dơng.

Ví dụ chơng trình 8.3 : Vẽ đồ thị hàm sinX.
#
#
#
#
#
#

include <graphics.h>
include <conio.h>
include
include <math.h>
define TYLEX 20
define TYLEY 80

void main()
{
int driver = DETECT, mode, xc, yc;
initgraph(&driver, &mode, "c:\\tc\\bgi");

if (graphresult() != 0) exit(1);
xc = getmaxx()/2; yc = getmaxy()/2;

108


Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

setviewport(xc, yc, xc*2, yc*2, 0);
setcolor(YELLOW);
setbkcolor(BLUE);
// Ve cac truc toa do
line(-xc, 0, xc, 0);
line(xc-10, -5, xc, 0);
line(xc-10, 5, xc, 0);

// truc x
// mui ten tren truc x
// mui ten duoi truc x

line(0, -yc, 0, yc);
line(-5, -yc+10, 0, -yc);
line( 5, -yc+10, 0, -yc);

// truc y
// mui ten trai truc y
// mui ten phai truc y

outtextxy(5, 5, "0,0");

outtextxy(xc-10, 10, "X");
outtextxy(15, -yc+5, "Y");
// Ve ham sin(x)
int x, y, i;
for (i=-400; i<=400; i++)
{
x = (2*M_PI*i*TYLEX/200);
y = (sin(2*M_PI*i/200)*TYLEY);
putpixel(x, y, YELLOW);
}
getch();
closegraph();
}

8.2.5. Xử lý văn bản trên màn hình đồ hoạ
Hiển thị chuỗi ký tự:
void outtext(char *s);
Hàm này hiển thị chuỗi s tại vị trí con trỏ.
void outtextxy(int x, int y, char *s);
Hàm này hiển thị chuỗi s tại toạ độ (x, y).
109


Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

Fonts chữ:
Các fonts nằm trong các tệp .CHR, để chọn và nạp font hãy dùng hàm:
void settextstyle(int font, int direction, int size);
Tham số font để nhận kiểu chữ và có nhận một trong các giá trị sau:

Hằng

Giá trị

Kiểu chữ

DEFAULT_FONT

0

Mặc định

TRIPLEX_FONT

1

Triplex

SMALL_FONT

2

Nhỏ

SANS_SERIF_FONT

3

Sans Seif


GOTHIC_FONT

4

Gothic

Tham số direction xác định hớng hiển thị, nhận một trong hai giá trị
sau:
Hằng

Giá trị

Hớng hiển thị

HORIZ_DIR

0

Nằm ngang từ trái sang
phải

VERT_DIR

1

Thẳng đứng từ dới lên.

Tham số size là hệ số phóng đại, nhận giá trị từ 1 tới 10.
Vị trí hiển thị:
Hàm settextjustify cho phép ấn định nơi hiển thị văn bản so với vị trí

của con trỏ hay với toạ độ (x, y) của outtextxy. Hàm có dạng nh sau:
void settextjustify(int horiz, int vert);
Tham số horiz có thể nhận một trong các giá trị sau:
Hằng

Giá trị

Kiểu hiển thị

LEFT_TEXT

0

Văn bản hiện bên phải con trỏ

CENTER_TEXT

1

Chỉnh tâm văn bản theo vị trí
con trỏ

RIGHT_TEXT

2

Văn bản hiện bên trái con trỏ

110



Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

Tham số vert có thể nhận một trong các giá trị sau:
Hằng

Giá trị

Kiểu hiển thị

BOTTOM_TEXT

0

Văn bản hiện bên trên con trỏ

CENTER_TEXT

1

Chỉnh tâm văn bản theo vị trí
con trỏ

TOP_TEXT

2

Văn bản hiện bên dới con trỏ


Ví dụ:
settextjustify(1, 1);
ottextxy(100, 100, ABC);
Kết quả là điểm (100, 100) sẽ nằm giữa chữ B.
8.2.6. Cắt dán hình, tạo ảnh chuyển động
Hàm unsigned imagesize(int x1, int y1, int x2, int y2) trả về số byte cần
thiết để lu trữ ảnh trong phạm vi hình chữ nhật (<x1, y1>, <x2, y2>).
Hàm void *malloc(unsigned n) trả về con trỏ trỏ tới vùng nhớ n byte
mới đợc cấp phát.
Hàm void getimage(int x1, int y1, int x2, int y2, void *bitmap) sao
chép các điểm ảnh của hình chữ nhật (<x1, y1>, <x2, y2>) và các thông
tin về bề rộng chiều cao của hình chữ nhật vào vùng nhớ do bitmap trỏ
tới. Vùng nhớ và và biến bitmap cho bởi hàm malloc, độ lớn của vùng
nhớ đợc xác định bằng hàm imagesize.
Hàm void putimage(int x, int y, void *bitmap, int copymode) để sao
lu ảnh trong vùng nhớ bitmap ra màn hình tại điểm (x, y). Tham số
copymode xác định kiểu sao chép ảnh, nó có thể nhận các giá trị sau:
Hằng

Giá trị

Kiểu hiển thị

COPY_PUT

0

Sao chép nguyên si.

XOR_PUT


1

Các điểm ảnh trong bitmap kết hợp với
các điểm ảnh trên màn hình bằng phép
XOR

111


Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

OR_PUT

2

Các điểm ảnh trong bitmap kết hợp với
các điểm ảnh trên màn hình bằng phép
OR

AND_PUT

3

Các điểm ảnh trong bitmap kết hợp với
các điểm ảnh trên màn hình bằng phép
AND

NOT_PUT


4

Các điểm ảnh xuất hiện trên màn hình
đảo ngợc (NOT) với ảnh trong bitmap

Chú ý: Nếu dùng XOR_PUT để chép hình, rồi lặp lại câu lệnh đó thì
hình sẽ bị xoá và màn hình trở lại nh cũ. Kỹ thuật này dùng để tạo ccác
hình ảnh chuyển động.
Tạo ảnh chuyển động:
Nguyên tắc tạo ảnh giống nh phim hoạt hình:
- Vẽ một hình.
- Để trễ một thời gian xác định.
- Xoá hình đó.
- Vẽ hình tiếp theo.
- Để trễ một thời gian xác định.
...
Vẽ hình:
- Cách 1: Vẽ lại hình ở các vị trí khác nhau.
- Cách 2: Lu ảnh vào một vùng nhớ, rồi đa ảnh ra màn hình
ở các vị trí khác nhau.
Xoá ảnh:
- Cách 1: Dùng hàm cleardevice.
- Cách 2: Dùng hàm putimage (mode XOR_PUT) để xếp
chồng lên ảnh cần xoá.
- Cách 3: Lu trạng thái màn hình vảo một nơi nào đó, vẽ ảnh,
đa trạng thái cũ màn hình ra đè lên ảnh vừa vẽ.
Ví dụ1 : Cắt dán ảnh.

112



Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

// Minh hoa cat dan anh
#include <conio.h>
#include <graphics.h>
#include <alloc.h>
void main()
{
int drive = DETECT, mode;
initgraph(&drive, &mode, "c:\\tc\\bgi");
bar(0, 0, getmaxx(), getmaxy());
unsigned size = imagesize(10, 20, 30, 40);
char *p = (char*)malloc(size);
getimage(10, 20, 30, 40, p);
getch();
cleardevice();
putimage(getmaxx()/2, getmaxy()/2, p, COPY_PUT);
getch();
closegraph();
}

Ví dụ 2: ảnh chuyển động.
//Chuong trinh ve duong Archimedian
#
#
#
#


include <conio.h>
include <graphics.h>
include <math.h>
define K 2

void archimed()
{
double goc = 0.0, f, xc, yc;
xc = getmaxx() / 2; yc = getmaxy() / 2;
setviewport(xc, yc, 2*xc, 2*yc, 0);
setbkcolor(BLUE);
while (!kbhit())
{
f = K * goc;
putpixel(f * cos(goc), f * sin(goc), YELLOW);
goc += 0.001;
}
}

113


Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

void main()
{
int drive = DETECT, mode;
initgraph(&drive, &mode, "c:\\tc\\bgi");

archimed();
getch();
closegraph();
}

Ví dụ 3: Vẽ trái bóng chuyển động.
// Ve_Bong_Chuyen_Dong;
# include <conio.h>
# include <graphics.h>
# include <dos.h>
const r = 20, step = 5;
int x, y;
void Vebong(int color)
{ setcolor(color);
setfillstyle(SOLID_FILL, color);
fillellipse(x, y, r, r);
}
void main()
{ int drive = DETECT, mode;
initgraph(&drive, &mode, "c:\\tc\\bgi");
x = r;
y = getmaxy()/2;
setbkcolor(BLUE);
do
{ Vebong(BLUE);
x = x + step;
if (x>=getmaxx()-r-step) x = r;
Vebong(YELLOW);
delay(120);
}

while (!kbhit());
closegraph();
}

Ví dụ 4: ảnh chuyển động.
114


§¹i häc Th¸i Nguyªn-Tr−êng §HSP. Khoa To¸n-Tin
NguyÔn M¹nh §øc – Ng«n ng÷ lËp tr×nh C++

// Minh hoa mot trai bong nay
#include <conio.h>
#include <graphics.h>
#include <math.h>
#include <stdlib.h>
#include <dos.h>
double x, y, omega, k, theta, a ;
double quydao(double x)
{ return a*fabs(sin(omega*x+theta))*exp(-k*x);}
void main()
{ int drive = DETECT, mode;
initgraph(&drive, &mode, "c:\\tc\\bgi");
line(0, getmaxy()-96, getmaxx(), getmaxy()-96);
setbkcolor(BLUE);
randomize();
do
{ x = 0.0;
omega = M_PI-0.1;
k = random(50) / 100;

theta = M_PI/(random(20)+1);
a = random(100) + 250;
do
{ setfillstyle(SOLID_FILL, BLUE);
setcolor(BLUE);
fillellipse(x*100, getmaxy()-100-y, 4, 4);
x+=0.001;
y = quydao(x);
setfillstyle(SOLID_FILL, YELLOW);
setcolor(BLUE);
fillellipse(x*100, getmaxy()-100-y, 4, 4);
delay(2);
k += 0.0001;
}
while (!kbhit() && x*100}
while (!kbhit());
getch();
closegraph();
}

115


Đại học Thái Nguyên-Trờng ĐHSP. Khoa Toán-Tin
Nguyễn Mạnh Đức Ngôn ngữ lập trình C++

8.3. Âm thanh
8.3.1. Tạo âm thanh trong Turbo C
Công cụ cơ bản để tạo âm thanh là các hàm:

void sound(unsigned frequency);
Phát âm thanh có tần số là frequency (Hertz).
viod nosound(void);
Tắt âm thanh.
void delay(int n);
Tạm dừng trong n mili giây.
void sleep(int n);
Buộc máy dừng trong n mili giây.
Các hàm trên nằm trong tệp dos.h .
Bằng cách sử dụng khéo léo các hàm sound, delay và nosound chúng ta
có thể tạo ra các âm thanh kỳ thú, các bản nhạc kỳ diệu.
8.3.2. Ví dụ
# include <dos.h>
void main()
{
sound(150);
delay(500);
nosound();
}

116



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×