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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
7 ]+ a# z/ _/ f% W4 I
' G, c9 h0 p7 i# ~! J 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里% h8 X: ~" z2 g% Q
( F2 ? E; a& Q/ N 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4 y7 ? h( ^# U( G6 L 子函数及演示程序:
P8 c b9 |; e% H1 m8 {$ l6 }: o7 U" M* e/ m- V4 v: `" c+ [
#include<stdio.h>% Q8 I! \* _! m* H1 m- `% _2 j: c
#include<dos.h>
; i& i% [7 F: T X #include<conio.h>
; z+ v3 F8 {+ H% i- L ^3 O$ g5 ~# J7 p% _
void goto_xy(int x,int y);
J& x! \" \6 A7 e, t* Q void dcls(int x1,int x2,int y1,int y2);0 j/ f* Z9 j8 M0 H2 H3 W! p. W
void bcls(int x1,int x2,int y1,int y2);
! o7 J7 ]2 V/ _, S, B void kcls(int x1,int x2,int y1,int y2);7 ^! i& c" Y, o5 t3 c1 l+ G& d6 G
void recls(int x1,int x2,int y1,int y2); @. P5 G1 `7 T; U! }; z- L" {
void zcls(int x1,int x2,int y1,int y2); x. Q/ N: k% v9 l+ ^- x- W: Z
void puta(void);
- ?6 R$ K1 @8 P* G, t1 N6 h" d' B4 _9 s
1 N6 p6 N1 P! @ /*--------------演示程序---------------------*/6 f1 ~" h7 D3 i& q: E
main()% y8 ?$ T& j# @) E& u1 ^
{0 v I# _$ d0 z$ V4 `7 W* E. |$ D
puta();
% g Q3 k% }- }; r; d, L, i$ \8 ?& z getch();0 _' d% R5 f, ~. k
dcls(0,4,0,79);
2 R6 w0 U! P- ?5 c/ M getch();
+ J8 j' q% A. t9 K puta();
1 n* O. B1 G! o getch();* F' i: c; p" ]1 R/ z0 ~0 o* J
bcls(0,25,0,79);
; e2 q8 ^: C9 t2 T! f& h$ M getch();! p/ s: O+ Y5 l/ I* h0 j. U2 q& q
puta();
. c/ E7 y* }( f( f. _0 z3 F getch();% V2 B) J* Z' }1 X- F/ w9 `
zcls(0,25,0,79);
& f1 v) c Y, b getch();9 s% B, h7 f+ m5 v: X
}' O0 v( `$ p4 s1 m
/*********center clear screen(中心清屏)***********/
# M) H9 A8 R9 a9 m( f: T void zcls(int x1,int x2,int y1,int y2), D) L& I5 x" R) x7 u: c5 j( |
{
. U' z& t$ j8 }/ |+ F( R+ n int x00,y00,x0,y0,i,d;
8 B) ~0 K" I" K8 x/ n) w if((y2-y1)>(x2-x1)){
7 H" T" f, H$ t( K. I2 D: l, E, ^ d=(x2-x1)/2;
& U4 P' Y4 b7 C$ e x0=(x1+x2)/2;
8 S0 }$ O* U; \ y0=y1+d;. U8 b w5 V- V) h4 I) n, p; U. ~
y00=y2-d;
/ w# n: o0 v, a: b; K for(i=0;i<(d+1);i++)% u* q5 `& m! \$ e' q
recls((x0-i),(x00+i),(y0-i),(y00+i));
+ p5 x2 A* j7 L delay(10);/ o: V% B! I& B3 I; r
}
' q% }* o3 o+ d4 D else{$ T2 v, M4 S; j7 w9 l6 L( ]
d=(y2-y1)/2;9 R$ v- L9 r# Z
y0=(y1+y2)/2;
7 l! {: W5 D' }' L x0=x1+d;/ s! a$ J4 b3 E6 r& E
x00=x2-d;& X" T) o( f8 B$ m+ O' P( u
for(i=0;i<d+1;i++)
( W' y1 p% i: x! @8 i recls(x0-i,x00+i,y0-i,y00+i);
. e/ h% t b8 g( k+ F' A# X6 s delay(10);. L( j6 |: h/ G' u3 Y
}
2 Z! m% l2 H- a. {" v }
* P5 u* j8 u6 Z6 H ~$ Q% ]/ f3 X# q% p4 e6 L; C% m- F
/************* clear rectangle side(矩形边清屏)***********************/ x, h* ~7 f% e& p7 E( C4 i
# ^, X# W# f/ R! h2 f& U void recls(int x1,int x2,int y1,int y2)0 ^/ n- i+ i7 x B3 b8 o+ X
{
7 l% m. i4 a. J5 q- w- m% D int i,j;4 u. n4 c) j& ?( u+ `: \( J) u
for(i=y1;i<y2;i++){$ `* }$ y; ^' [0 }7 R# w
goto_xy(x1,i);
& |6 `! s3 l$ p; M U8 F4 c putchar(' ');
$ k- B( l+ [% S/ t" L goto_xy(x2,i);2 H( C/ T3 R' ?+ o7 k" X
putchar(' ');2 K# _4 U5 E* R# U
delay(10);
' u4 S/ ~ G1 y5 z, u, W" O }/ c0 `. N& D, [+ x7 i
for(j=x1;j<x2;j++){% M7 J ^' v6 g$ R$ t
goto_xy(i,y1);! D! p" e& q% \# I! \/ F: h
putchar(' ');- ^4 ~- G% ~+ ?8 F* I$ U' ^
goto_xy(j,y2);
( W* _% d8 _2 Q! [- Y! D0 y putchar(' ');
2 i: v9 f8 w' g! I# S" Q. M delay(10);, |& H$ m2 ?5 A u$ u. v
}
/ e" g* J& f3 p) X& U2 }" f }
9 y* x6 b$ M! F8 L! _' y8 B /******************open screen clear(开屏式清屏)*********************/
0 W( E* B9 E& `1 O8 N; @9 E8 p
6 J! ^ ?6 _/ C" G; y" Z9 | void kcls(int x1,int x2,int y1,int y2)
- { J+ j& h$ t J1 M {
$ @" G) S6 y4 T7 D8 V% E int t,s,i,j;
) k5 i# R0 ?2 [( c4 ^2 F" I t=s=(y1+y2)/2;% G7 I# D0 N+ x' y
for(;t<=y2;t++,s--)0 m$ b3 w: B8 z$ H) R7 c% `2 S
for(j=x1;j<x2;j++){: C+ l- H8 K; s: [$ X* r5 q
goto_xy(j,t);* B' j n1 J1 t [) p1 e
putchar(' ');3 v& \# X1 `( w; R4 ?( k7 A& ]
goto_xy(j,s);
3 h! ?8 ]* J- G$ ]8 i putchar(' ');
3 x7 {0 x' U* N @% [ delay(10);* y- ^7 Q, Z2 e Q K9 {
}
4 X" h& n; \% y- g' _6 n1 i }5 C1 e# l+ k0 R8 M; c+ z
/*****************close screen clear*****闭幕式清屏*******************/- v1 l/ h" A5 q2 `/ J E2 h! v
' [& {3 M2 X3 U* ^- [# T
void bcls(int x1,int x2,int y1,int y2)
3 T* j4 ?- r4 U7 G ~7 e {
/ D* X' G$ D( t2 _ int t,s,j;
' o) f* v6 i9 O& Y3 ^: a, U) V$ r+ U3 g t=y1;$ @- X M. m2 q& r- o8 X
s=y2;& [! F0 |- d% J3 E/ H) G. T p" |9 t
for(t=y1;t<(y1+y2)/2;t++,s--)& F2 R5 _# l( _+ I0 R; z0 x/ u
for(j=x1;j<x2;j++){
6 t: }% J: @5 z$ p goto_xy(j,t);# f. @, s5 }* O, O9 k& ?, J0 j
putchar(' ');; j8 i) x: O0 X7 {
goto_xy(j,s);& b; S% D# q2 f/ s
putchar(' ');. m: o7 h F& G/ K3 D; N' d2 I
delay(10);$ A! }' K. P4 f
}( q: E/ I9 W2 b6 k; W2 p4 C
}
7 e7 Y9 R b* p /******************bottom screen clear(自下清屏)********************// o/ S1 [3 t& I, d( w
( T3 c. N% Q* j8 J$ w$ G% f7 H
void dcls(int x1,int x2,int y1,int y2)5 J& ~1 K( J1 ~/ @
{4 W# N8 }8 X* \- Q, S, R
int t,s,j,i;
) C, s5 w! E# Z" l t=s=(y1+y2)/2;* J u$ k9 x$ t5 ]4 ^
for(j=x2;j>x1;j--)* ?* ]* ^0 J; j& [8 i. j
for(i=y1;i<y2;i++){- b! L& J) `" r; E; f3 Y
goto_xy(j,i);
' u2 N! Q7 e! o putchar(' ');% _# O/ D' k& L
delay(10);9 b5 ~% K% b# d! p8 ^* R" W
}. r# Z0 t9 U+ E" H- b5 |) y
}+ R0 Q& p6 K- `! r) d& I
/******************设置光标子函数******************/
1 V9 N+ F. ]$ V. `1 e) U
3 \1 F, j( B1 P7 t void goto_xy(int x,int y)( B: Z5 w4 z0 y! I- v- G, _$ m. q
{
N$ L. b; Y2 Y2 q4 j* K+ V union REGS r;
7 Z* [& E* t) z# H, n8 X: c5 {9 Y r.h.ah=2;
6 P" Q" D" v* `0 {& Q! R r.h.dl=y;7 w( y; P9 S/ }) ]1 r, T1 C- u
r.h.dh=x;3 s0 P" `' a2 Y
r.h.bh=0;, S5 f T; M% I v! t6 x1 B/ `
int86(0x10,&r,&r);
' A% ^! n! s1 O% S, n; O3 x }1 I7 _, B9 y1 ~; B
2 A( n0 \ Z8 K
/**********************在屏幕上打出一连串的a字母用于演示程序******************/* |% B( j& O5 e# c" O: x
! @* S3 g' }$ {8 Q; X
void puta(void)% M. r( x A8 l
{' a2 X6 N1 v. b- c5 A+ m3 n
int i,j;5 H- m$ u7 J1 `! a* a2 G$ }
for(i=0;i<24;i++){
7 ]- r. A8 o! m% O for(j=0;j<79;j++){1 l ^8 i l/ U
goto_xy(i,j);- Q5 S5 N. e& |1 t2 ]
printf("a");
, i5 M( ~) M( x5 U! i( | }+ G% l8 a+ c$ c9 [* y
}3 O% b% w4 f4 K1 P9 F
} |
|