  
- UID
- 133
- 帖子
- 51
- 精华
- 1
- 积分
- 186
- 金币
- 55
- 威望
- 2
- 贡献
- 0

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
$ u! n# V3 j- q) R* s5 |2 Y5 G c4 Z6 k
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
' r- N2 L- W( r) G% A1 i) J
# y- X: a' C5 A P, } 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
9 ^* }: o- K% p: Z# U 子函数及演示程序:
. V4 U; A( H/ {: d) i; W9 O
- F" o( Z" N3 H #include<stdio.h>) Q+ [5 h. A1 I- U5 [6 {
#include<dos.h>
9 ^+ |) G& o" p5 }) R #include<conio.h>
* U; H1 H% D+ `. W2 \) {( L7 E, t' Y& B: L
void goto_xy(int x,int y);
$ l% |) U) [% G3 _5 K1 W void dcls(int x1,int x2,int y1,int y2);
" x' D( n6 I" R3 { void bcls(int x1,int x2,int y1,int y2);7 A% ~/ `1 C- u/ U8 h6 {
void kcls(int x1,int x2,int y1,int y2);6 \5 N. l) A$ W& m, |5 Y& }8 m+ Y- i* ^
void recls(int x1,int x2,int y1,int y2);9 J- Y. R N( ?$ |* C: ]
void zcls(int x1,int x2,int y1,int y2);
X! G6 h, { U, a; r* s" o1 j void puta(void);
0 N0 ]2 { z/ @% F ^. p) e/ [# e4 P8 }4 M3 K" G7 D
& _8 v# B$ P9 t& O' n6 H$ Z+ Z
/*--------------演示程序---------------------*/
5 F6 d7 a* ? A3 V0 @ main()
1 [7 r6 d0 B! l4 j7 Z {
/ A7 r3 M/ l0 h( N puta();/ n6 ^7 ?+ z, E) }& k2 o$ O0 T
getch();
$ u& j, G4 w8 i- j% d8 i& P dcls(0,4,0,79);
( S* a7 b! o/ s2 D) a$ u. |8 H getch();; V9 p `( I! |$ w3 a6 r: Y; m$ k
puta();
* s2 z2 |' v; @0 ~5 h; R getch();. ]2 v- c m v
bcls(0,25,0,79);- O% `( l2 ^" s: ^ p) F: v
getch();) F/ S. d; K3 F) Q# L B, k
puta();
3 \, D3 t* Z, Q! }. k$ u getch();& W" Q. C; I. J
zcls(0,25,0,79);
; o" }; B& C Y3 t8 v% E' j: k getch();
- O; J- C0 _% h. S: w! C7 L }2 p3 h! S$ h- e+ Q: i' v! O: z
/*********center clear screen(中心清屏)***********/
/ G2 c; T0 r! b3 W% ] void zcls(int x1,int x2,int y1,int y2)
3 E. _" j+ x) X {
: ^) u; i8 G2 X7 v, n5 p! o0 E int x00,y00,x0,y0,i,d;
! A9 R2 J) A$ q3 R6 M0 q6 L! D) | if((y2-y1)>(x2-x1)){
! O" A1 R2 _2 _+ s/ u- e- O d=(x2-x1)/2;
8 q1 v4 u6 \" z" p/ f6 p x0=(x1+x2)/2;
6 k1 H! P t+ Z- j y0=y1+d;' H" C, d4 }" t6 N8 O, }$ ~
y00=y2-d;
8 g8 R1 b: j$ k7 F* `$ t for(i=0;i<(d+1);i++): I* ~9 A9 T( }3 i* `
recls((x0-i),(x00+i),(y0-i),(y00+i));
0 o; U- e0 `7 ^) X delay(10); r1 T. e' V# D0 r5 }9 P
}
( Y" z9 M1 ~' m4 c* Q, W else{4 Q# Q1 i" c0 p. F" x
d=(y2-y1)/2;# j5 |( h) n! f- a
y0=(y1+y2)/2;
) P5 x* q5 t, a* H5 z" g x0=x1+d;
7 l4 c j/ {* ]! i; \( J+ m. G) N# r) K x00=x2-d;5 b- m, n6 f5 B( T3 z: D7 x
for(i=0;i<d+1;i++)% I3 k, R5 e% Y( a& u5 i
recls(x0-i,x00+i,y0-i,y00+i); S! |. }( a- q7 H( N/ g+ z A
delay(10);
4 {1 K- _8 M" Q4 ^0 e& c Q+ q: { }+ T* C. V; T' q% O
}
+ N1 A. S$ { o1 A0 m s
7 d( h( V% a9 ?: K /************* clear rectangle side(矩形边清屏)***********************/& J+ R" ~, a5 E! h( g
: [+ w5 ^( m+ v void recls(int x1,int x2,int y1,int y2)2 }3 a4 V0 p0 N6 m6 o
{
" P- }& a9 I! {3 q int i,j;
7 a! l% S% D( k7 ~$ x for(i=y1;i<y2;i++){. y) j. H* h! s \
goto_xy(x1,i);( M0 U- [, o) ^7 k/ C
putchar(' ');" H! v5 B# S9 a/ w
goto_xy(x2,i);
6 U" ]& j h/ I T; {9 `; ] putchar(' ');
& d9 w1 M5 I5 A! O! W delay(10);$ d8 I, P( b! k$ E( B% ~
}
6 b; N3 t* Q: r0 O1 [# W for(j=x1;j<x2;j++){
/ `# e: s" c1 D T goto_xy(i,y1);2 ]& S h& G$ q( P6 ^& l
putchar(' ');/ r7 d5 V1 j9 S1 {3 K
goto_xy(j,y2);2 P; ^! d1 y' J' l: B
putchar(' ');
# B% A7 p" }' z% S9 s9 l" M* [- K delay(10);
, j7 q( g$ \& _ }
. o( ^ }! W G$ o! i+ t) ` }# F a/ |/ I# {, c% ^
/******************open screen clear(开屏式清屏)*********************/7 g- d0 `8 } t9 W; p. B
% s: w0 z* `. g* x( T7 x+ P+ z3 m
void kcls(int x1,int x2,int y1,int y2)7 _! Q+ T: z S/ l) h
{# ?4 z; q! }0 A
int t,s,i,j;4 o$ l6 x5 r* U( E0 F, \5 g
t=s=(y1+y2)/2;
5 I! N9 G. R3 r$ c L; s for(;t<=y2;t++,s--)$ J+ _( d# r+ [$ I$ g
for(j=x1;j<x2;j++){
- U$ ~) L( i% b) J3 L goto_xy(j,t);
2 B. U# t- `+ z putchar(' ');2 H3 W& x1 ~4 L: o4 w- L
goto_xy(j,s);
, J# [6 i. Y+ D' T1 ]2 _2 Z putchar(' ');
1 l' |# {! X0 [* {% A delay(10);
! B+ v4 t+ R1 S; c# I, m' c. I. o; Y }, ^: z5 b* n+ a
}% c4 B* C- e9 h$ o& z
/*****************close screen clear*****闭幕式清屏*******************/
/ l2 y9 ? r s% R [+ s5 ?
$ X8 \# ]4 ?- I; \$ ^* ^ void bcls(int x1,int x2,int y1,int y2)8 n/ X$ Z( i/ j$ L
{& x8 `' l; L0 Y
int t,s,j;
! G* E" E: e( c6 `0 j t=y1;
1 U8 p2 u- d( y7 {' Y) R! J* Z+ j s=y2;: |. F) {1 H8 \3 c
for(t=y1;t<(y1+y2)/2;t++,s--)
1 T$ o) q2 K: ^ for(j=x1;j<x2;j++){9 I6 h ], H. c6 J4 [
goto_xy(j,t);5 ]* b8 e0 i2 k |7 g
putchar(' ');. s7 C3 H5 C" [2 D
goto_xy(j,s);) V4 f2 y% n8 ~0 d- S' G
putchar(' ');
9 t. ]+ T& R }. k3 x' K) L delay(10);& w& O- I/ X0 b5 t [( r
}3 u0 G- }2 r$ J$ n$ v7 @1 \$ F
}
3 u4 j$ A: J: q# V w' e- O /******************bottom screen clear(自下清屏)********************/
% E- c/ g* a! n/ q* u
6 B+ P$ \1 W5 ~3 F( m void dcls(int x1,int x2,int y1,int y2)
5 a# C& @6 R- Y4 b {1 O+ z/ D# n! F
int t,s,j,i;( G! C$ R$ p( L( m
t=s=(y1+y2)/2;" i4 k7 }* _; G2 F4 _5 n# }
for(j=x2;j>x1;j--)( u1 F" }: h; W0 w- W
for(i=y1;i<y2;i++){
% c0 S( s) A8 P goto_xy(j,i);( w' h x, M9 q. `
putchar(' ');
. ?! d: i. |& y3 u( q* ? delay(10);/ Z- W6 [) {" {1 B8 T4 D
}8 {. {" |* F2 y7 T# u5 d: s% l
}. F& Z6 e2 e' C& d! Y, Y
/******************设置光标子函数******************/5 w+ T1 o" i+ @. U0 m
- k; g4 a% b- M2 g
void goto_xy(int x,int y)
. |) `: I; B: Q$ u) t% K1 n {
e* y+ B, {- {9 l& d# A7 A union REGS r;
' A7 d% w8 p( Z* o2 ]- Q, Y1 N r.h.ah=2;
/ K5 z+ d" W3 d2 \- u" S+ Y r.h.dl=y;* X" R+ _! A. b$ q! ^
r.h.dh=x;
5 O. a9 ]$ B0 u4 k0 h r.h.bh=0;* F( o7 W o v. e
int86(0x10,&r,&r);
- C1 t3 C9 e5 G) c+ j- K+ A }
1 [0 J( O/ T6 v! ]9 N7 j
/ {% X' w: L6 I& A5 K /**********************在屏幕上打出一连串的a字母用于演示程序******************/% K8 E6 A/ S# n9 i
( [8 W+ j( Z- ?8 H) f# m
void puta(void)
0 Z9 b7 Y& |7 L; x {' ~* k4 q9 | l9 C
int i,j;0 E7 A% o0 M6 `: I
for(i=0;i<24;i++){2 i% U7 W @8 v
for(j=0;j<79;j++){% L5 G7 g! o: Q0 l d# {0 ^2 Q" y
goto_xy(i,j);! n! ]1 Z ?' i, S# J3 R
printf("a");7 G3 c. z/ z K* ]1 c, V
}
9 t/ o9 K u+ R }
; c0 p7 f2 {/ `9 @6 p } |
|