标题:
C语言艺术清屏
[打印本页]
作者:
zw2004
时间:
2008-1-21 17:14
标题:
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
, g. K- [' J8 M, w( k3 d/ r* o3 Y4 C
% g! ~* Z1 C ]/ S! v5 `+ J' R, l; U
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
$ U, s( G+ f6 p. |
' F+ Q P% p/ f9 |) k t% }" Q
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
% E9 Q5 z @2 e- z7 e
子函数及演示程序:
8 A. c0 v% t+ ]+ B
% d/ R6 t2 \# m# a. v2 P
#include<stdio.h>
# ^. Z4 a7 }3 y+ |6 p
#include<dos.h>
9 b6 T# B9 F# F8 B# a
#include<conio.h>
, X6 w! Z0 r0 u, r
% y" w5 L, Z" q3 @$ E
void goto_xy(int x,int y);
; i* |2 d. s' w r" i0 s+ g/ @
void dcls(int x1,int x2,int y1,int y2);
& y! W/ W3 d* \
void bcls(int x1,int x2,int y1,int y2);
. A$ ]1 @$ M1 e8 l6 R! D
void kcls(int x1,int x2,int y1,int y2);
$ _) T1 k: D c" Z
void recls(int x1,int x2,int y1,int y2);
1 Q/ J( \/ b w/ e
void zcls(int x1,int x2,int y1,int y2);
3 o8 ^: y3 C! `4 o s; y
void puta(void);
: G" F+ l) d" z' F
6 Z0 Q9 w3 |0 V* o
* A- a+ U- y9 s. f1 g
/*--------------演示程序---------------------*/
0 z. _6 c/ S9 J3 P8 o6 \
main()
\" [# \1 M2 g9 v- H/ Z
{
7 r; m. W/ ?8 A$ a8 t' J
puta();
3 a; C" E* N X6 J& F2 ^0 c
getch();
3 i& D5 o& N' g J1 N; x+ B
dcls(0,4,0,79);
/ ?/ Q9 ~" x5 x, I4 }" T
getch();
. _$ V) u$ g U- n; l2 f
puta();
0 e7 C' |% e! }. B7 t5 T( q
getch();
3 I# C* M: X0 p
bcls(0,25,0,79);
) j; I0 M( H5 g( L. N3 U
getch();
/ d1 O8 ^4 g5 [6 ~- V) H4 T
puta();
9 H8 I, y$ R7 O
getch();
7 y( M. L6 N; g3 E% X0 K
zcls(0,25,0,79);
$ U- y9 o0 _3 x% f' @5 Q0 n
getch();
% I0 c+ ~. X8 B# ^5 t
}
+ P" G- Q6 T1 G7 j5 c& u2 v+ p
/*********center clear screen(中心清屏)***********/
0 H7 \% S+ a' U' F
void zcls(int x1,int x2,int y1,int y2)
5 ~1 C1 f! X0 G/ l4 b `& R
{
& h9 @4 [3 ~: u
int x00,y00,x0,y0,i,d;
& q; i$ n2 g" z! G
if((y2-y1)>(x2-x1)){
5 Y2 H* }8 c- Q: Q9 f* i
d=(x2-x1)/2;
; R! \. m+ L+ r2 ?, B0 F
x0=(x1+x2)/2;
+ B$ F$ x: N+ e1 x1 q
y0=y1+d;
" ?5 j3 a' r' {' ], ^4 \$ I! C
y00=y2-d;
7 d9 \4 F# |. k8 V5 ?" E
for(i=0;i<(d+1);i++)
: @1 z" ?4 w9 Z: z1 }1 i' c. x
recls((x0-i),(x00+i),(y0-i),(y00+i));
2 I% f' q' n. J$ t$ p! P
delay(10);
. o( l \9 W" i6 R6 D2 B. P
}
3 Q/ T* J$ ]/ [- X( S/ V
else{
% d# R0 N3 ]+ O* Q$ M
d=(y2-y1)/2;
) G1 C: o2 X v. {& _' _* ^
y0=(y1+y2)/2;
/ l8 Y9 [% c2 ^' X
x0=x1+d;
9 S1 W' C: b- ?1 V2 x u" O3 I
x00=x2-d;
' d* R" M7 l) g
for(i=0;i<d+1;i++)
# ~% G6 q$ g5 r0 Z: j# g
recls(x0-i,x00+i,y0-i,y00+i);
' Y F8 a- t- l2 Q9 `
delay(10);
! Z1 ^: H6 l( ^3 v3 c. \
}
0 K j5 ]6 [. v+ X, `! u6 t/ s. D
}
% q+ }2 D. V# S/ a, P6 t) ~" W% E
$ p9 C; Z5 \% @$ @5 ^' L8 ~' i+ O" j
/************* clear rectangle side(矩形边清屏)***********************/
5 R7 O q. I: V4 s
5 M5 L A) |/ Y# P0 \, o" k3 D2 b
void recls(int x1,int x2,int y1,int y2)
% T; b4 U( @4 t2 _# }
{
1 }4 h, i7 V& L
int i,j;
' q4 A7 _ v% ~% N" C
for(i=y1;i<y2;i++){
* n. X( ]8 k0 W+ Y! A" Y
goto_xy(x1,i);
, G9 m2 Z w7 q3 i. S
putchar(' ');
. \, j0 O w( ?- K
goto_xy(x2,i);
% Z$ r2 i8 p# R1 U% a
putchar(' ');
! B# D- s* Q/ \' b' |6 d
delay(10);
6 F# \' ]8 m6 E# ]' O2 F
}
( d' W6 y' |. T' w1 s6 `2 k" b
for(j=x1;j<x2;j++){
9 T( @- w% S0 p. G G* G
goto_xy(i,y1);
, T/ Y8 Y' \5 `
putchar(' ');
9 F5 P2 s$ f) {( w
goto_xy(j,y2);
2 W0 A$ L0 u5 f: M; X0 n+ ^
putchar(' ');
! ?4 M2 M& |2 u9 D4 C6 a/ j: F; a
delay(10);
$ h" z! A# n# Y
}
" ]* S% o# U- H
}
, @: E- W/ i D8 a) b9 A+ q
/******************open screen clear(开屏式清屏)*********************/
5 A& C* _5 B6 \/ z: g
, h. N3 i8 c/ N; [: o
void kcls(int x1,int x2,int y1,int y2)
1 L% S! {4 y$ [$ S; Q# t6 w; b! W+ |
{
; w4 K% d6 o: K( |- ?, K7 ^5 A
int t,s,i,j;
8 A0 Q8 }" g9 | k
t=s=(y1+y2)/2;
# U: n- S1 s7 c+ Z0 c0 z
for(;t<=y2;t++,s--)
* Z/ U! P1 C3 \% W$ a4 Z( r1 C
for(j=x1;j<x2;j++){
) x( l2 c5 y5 Q: m C* e3 h
goto_xy(j,t);
/ Y, q: I" S I& m0 m
putchar(' ');
4 ~; @0 ?/ x3 {' a! l
goto_xy(j,s);
9 Y% j- ]0 D n( r; Z7 t: _
putchar(' ');
0 d% D9 X( E$ ^9 N- S W
delay(10);
5 {/ Q7 d- \3 L
}
& q# f/ d6 c" S: j! }
}
$ T F' v' W( ~- n
/*****************close screen clear*****闭幕式清屏*******************/
8 p3 Y2 Z6 z0 h4 j. B4 H, e
4 K' `, b( V4 X# S: v' K. ~: k9 F
void bcls(int x1,int x2,int y1,int y2)
' s% k0 i; B+ K, n3 Y4 U% Q
{
% p& `! c0 C! k% ~
int t,s,j;
& r( w( E) X w! a" G9 U |
t=y1;
+ F+ s1 h- e; ?0 k# a& H
s=y2;
% u/ @" a! C% c5 [0 x: ~) W9 A' N& I
for(t=y1;t<(y1+y2)/2;t++,s--)
+ U5 ?& q' Q" [% t
for(j=x1;j<x2;j++){
6 \5 f P, l; C0 c+ G2 f
goto_xy(j,t);
8 S0 ~' }0 z1 d' b
putchar(' ');
9 u: o( \6 D$ F1 u* z6 B; D. T. b R7 x
goto_xy(j,s);
: G; E, w) U; e
putchar(' ');
5 M7 v# H3 e. I+ l3 G, g
delay(10);
5 i2 p% r( w+ n4 H5 o
}
7 z% ~& X: I# W" O; q+ u3 f
}
! q* n" ]8 |7 i$ R& O$ o
/******************bottom screen clear(自下清屏)********************/
1 I- V: \4 e# K* l( s) I
% d8 h* g; J" x, q
void dcls(int x1,int x2,int y1,int y2)
4 Z; t0 L# G0 C- W% k% ]
{
% w% j4 Q7 }7 ?: v" w1 S) @ a
int t,s,j,i;
- I+ k* N4 R+ w v% W+ h: J
t=s=(y1+y2)/2;
; v5 {, _6 X0 O; y1 }; I m
for(j=x2;j>x1;j--)
# n1 o+ q, ]; d0 g. b0 \
for(i=y1;i<y2;i++){
) E7 l" L$ U" ?
goto_xy(j,i);
8 S$ }" y# K# E$ l3 d6 d/ m
putchar(' ');
1 H, p) S1 @) E; s6 }% e3 M
delay(10);
; ?& |2 J6 x! k" E7 \: a- ]6 S3 ]
}
) y3 }9 m6 j; k$ V) p9 U7 {) \" Z6 d
}
+ z! x1 z" ?- U0 ~1 z0 c0 }
/******************设置光标子函数******************/
1 Y W8 Z2 d5 t; N! g1 R! w/ `
* ~: R7 N2 p6 q0 F" B9 S0 r
void goto_xy(int x,int y)
8 Z' N) G3 R' w- `" Q* S
{
& Y# {0 ]) v5 C+ l# i" ]5 r
union REGS r;
* A$ q' X& v; {
r.h.ah=2;
; [1 O- {+ W' ~$ [3 V
r.h.dl=y;
' a' {2 y7 P$ f% a, M2 r2 X, j0 A
r.h.dh=x;
0 A. M) E# M( C. B1 B
r.h.bh=0;
5 W( c, |" T+ _' e
int86(0x10,&r,&r);
1 Q" S6 ?% N, J: b4 p
}
1 U: T1 D& }( s7 \2 ?: L8 n
/ v. l7 `5 M/ q. Y( `4 P
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
& F- t- t2 {" H- ?8 f/ v
7 k1 h% h+ o9 s/ y5 z5 X2 [
void puta(void)
9 e, D& x5 \5 D- _- u+ i
{
/ {4 z* c) O- E& u2 ]
int i,j;
5 E1 ]! g$ w2 t
for(i=0;i<24;i++){
9 B( U1 `' C& ?- d8 O
for(j=0;j<79;j++){
2 O! Z& i \) ~' q+ |0 p; v- W
goto_xy(i,j);
( }+ Y1 u+ B7 h1 \
printf("a");
4 b5 @& J4 [4 e9 v
}
+ e/ g7 l, r2 i7 V# S9 k, R% V
}
; a$ z6 u( B4 \
}
欢迎光临 捌玖网络工作室 (http://89w.org/)
Powered by Discuz! 7.2