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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,1 [/ j5 y$ f- r5 O
" |3 ~' C% H3 Q 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里3 T" P0 v8 X `0 _8 a% z
/ ?) ^# D* p! }+ C! g3 `7 M
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
- y! y' k$ {4 j( g* K4 K 子函数及演示程序:
; J5 R" F0 t' Y3 V5 a: ^1 w# V# N0 d
#include<stdio.h>( p/ F& D# ?8 I9 F8 i# H8 B7 S+ A/ i2 P
#include<dos.h>% K& {) s/ w7 d" e8 g2 a( l
#include<conio.h>
' \. M' ]5 |3 l3 D4 F% E5 ^, I6 p/ \' u
void goto_xy(int x,int y);2 F# d/ P' a, P' C
void dcls(int x1,int x2,int y1,int y2);
p* a0 C% K) a void bcls(int x1,int x2,int y1,int y2);) N) h6 N$ V8 X
void kcls(int x1,int x2,int y1,int y2);& m C4 ~& A2 ` T. g5 l2 d
void recls(int x1,int x2,int y1,int y2);4 C( M- }8 W8 z0 W; V3 S! U6 [7 B! |. q
void zcls(int x1,int x2,int y1,int y2);9 A6 V! q/ Z, L/ K2 i4 Y
void puta(void);$ `, I; \0 H7 C" }" W2 F; E h
: q+ w: r. M5 @7 v0 g) O. N9 z7 j* a
' D" C7 b$ _, Z* v* j. f9 V5 d9 B /*--------------演示程序---------------------*/
4 k; P: N% i/ {0 T1 w3 O& g. I main()/ f8 h) b: Q+ z' R6 B
{
/ K4 X$ Y0 S# M/ Y0 J puta();& M- k4 l" n6 k
getch();5 s2 o# I+ Z5 [+ m- R1 p
dcls(0,4,0,79);
" l( w) `7 W3 G, c! q) g9 A getch();4 a8 |' x- Y. @% X; x/ c5 _
puta();
% X: n) a9 D1 d% L& ? getch();% ~ A$ j8 ]6 d1 L
bcls(0,25,0,79);
5 { E) b. h& e getch();/ I5 w" w2 @% P: j
puta();
- f, i1 G1 K# x4 D4 h: q* M% @1 y getch();6 M e2 A% R4 a9 i% a1 D/ R& J
zcls(0,25,0,79);* w3 {/ w' @* J
getch();* P8 K ` ]$ H; Y) i+ A0 g$ J
}7 H2 M* `: a/ Y# ]
/*********center clear screen(中心清屏)***********/
% P- `, i1 }) S* H4 a void zcls(int x1,int x2,int y1,int y2)
/ p" c2 [6 M9 m {
& f. h( {" Y) h- e int x00,y00,x0,y0,i,d;" V5 k3 c2 n# Y
if((y2-y1)>(x2-x1)){
7 n' g4 Y2 u9 ? d=(x2-x1)/2;
- G5 E @* F% u- | x0=(x1+x2)/2;- M7 ?, M/ V% T
y0=y1+d;
3 ]4 `6 G7 q+ t y00=y2-d;# Z: |! i; z- g" p% V
for(i=0;i<(d+1);i++)
2 ]/ X; [! w- [6 T) ?, i recls((x0-i),(x00+i),(y0-i),(y00+i));0 c9 J7 N. ~* Q) v- U% u+ l' w
delay(10);1 `- ]$ [( ~9 J% E9 E: E
}, X6 f' f+ v8 N, ]
else{
- t# Q7 w6 H6 e d=(y2-y1)/2;7 ? q8 l6 a/ N& U# {
y0=(y1+y2)/2;
, u0 B- t1 r s! {9 S4 f( y x0=x1+d;; A+ Q2 F3 k) K# {- ~. }
x00=x2-d;) ?: [" b/ k7 k& K, w
for(i=0;i<d+1;i++)
" w) l9 C6 }0 x, K5 F recls(x0-i,x00+i,y0-i,y00+i);
+ q6 `# f$ H" _' E2 H; p0 E delay(10);
9 f. h7 B9 {; K; [7 h2 d9 l9 |1 L1 { }3 c! ^. o2 M2 h/ x$ a2 ]5 l6 t
}. h; r) ]5 ~3 }0 Y+ |7 j
6 s& g# ^6 S6 x6 M8 g /************* clear rectangle side(矩形边清屏)***********************/
( X$ O* p6 T* \) `, i) U! E
+ \, k% h" W- j- V void recls(int x1,int x2,int y1,int y2) p, o# X" A+ |9 i3 F
{: |; b) X% f! ]' W- B% U
int i,j;
# _( N, ^7 y+ a5 c2 P f for(i=y1;i<y2;i++){
" U5 N G# k: j9 t5 e goto_xy(x1,i);
7 \2 K8 b" e4 i! T7 M. o) G2 P2 e putchar(' ');
0 P8 m3 c3 _; b goto_xy(x2,i);
3 N) U9 d" |: ~6 j1 f/ q putchar(' ');
' H/ J% c4 _# O' _' G, H& _* f! O delay(10);) b+ p i( d @( m: d9 c
}0 Z. d3 M3 F* Q! k; n# C
for(j=x1;j<x2;j++){5 v9 _( A6 N9 [
goto_xy(i,y1);& @. m7 \/ w. C }
putchar(' ');$ w9 U2 ~0 g4 K! Q* e$ H! i: j
goto_xy(j,y2);
2 x$ N6 V; ~/ ~* J5 J putchar(' ');
6 `* L: g) W1 @$ k" R delay(10);; Q/ b, F) @6 o, v1 S
}
9 S1 D0 q, ]6 V' \; E/ A9 N }
1 x( ?+ u9 E ~& u /******************open screen clear(开屏式清屏)*********************/1 x' _" C/ o% ~* `3 b
% v( n* W; j: {: |9 d- d0 @
void kcls(int x1,int x2,int y1,int y2)" r r% q0 W- X) Y% N
{
" i- d" {6 n1 M- o int t,s,i,j;
0 D a! v# o3 ]% Q7 e; [' {' t) \ t=s=(y1+y2)/2;' L' j0 `( q) U, O
for(;t<=y2;t++,s--)
0 g# S: S8 r! X( _& S for(j=x1;j<x2;j++){& H7 P/ I. g( s3 {" P# _
goto_xy(j,t);
+ l" L" b* e! |+ p# K5 J putchar(' ');
I, B( r. k: X goto_xy(j,s); P* E- l4 ?" e6 L" A3 @
putchar(' ');
& x a' F4 p" Z. Q# ~1 j1 i w/ C delay(10);8 l0 |3 G3 n; Y
}. b' C# J5 m- X. u
}
, Y0 Z* V. i) ^* v /*****************close screen clear*****闭幕式清屏*******************/8 N- D5 ~$ |* v1 l* i/ b; c
3 c7 o0 u, J3 V% m9 m. Q
void bcls(int x1,int x2,int y1,int y2)! e/ Q9 F8 C3 `8 v1 W: `( d1 B4 J
{& d* A5 O7 l- U) v4 M K
int t,s,j;
+ q- M" d5 s2 o L6 ? t=y1;
" ]9 b9 g2 @0 @4 r" C: o V s=y2;
) m3 w0 c+ {3 D for(t=y1;t<(y1+y2)/2;t++,s--)# _; y" F" `! Z$ E* T9 M+ ^# U' P/ l+ J
for(j=x1;j<x2;j++){; q( }% C) N4 L y! d; a% g* s
goto_xy(j,t);3 ]' p) _( P. V! u3 K; K! D$ o+ I
putchar(' ');) t" p' m! T% I6 [
goto_xy(j,s);
: i# T5 y a- Q- X3 L* Z# X" M putchar(' ');
5 z( A+ R8 {% k5 ? delay(10);
' T) {% `- |8 B }
5 a! G! B/ O0 M* Y }
9 i4 C9 f" b! T6 C /******************bottom screen clear(自下清屏)********************/; W2 l: n; |4 N6 N. G" u! U
- y" s( q" ]5 v- S void dcls(int x1,int x2,int y1,int y2)
! V' @5 |" t3 _/ l) e6 T) f( b {/ Y8 V) m/ z! C5 x2 i1 H+ `
int t,s,j,i;
% U# [5 V2 D7 |5 I t=s=(y1+y2)/2;% N" Y, u( c% d
for(j=x2;j>x1;j--)
; V5 X. _0 v0 O/ ?# P" }, ]( s for(i=y1;i<y2;i++){
* F k7 }# S A8 a" D' D/ ] goto_xy(j,i);2 i. q9 e) {* c- U$ I
putchar(' ');
0 w% v/ F. [. s delay(10);0 y' |( p( _$ j! J) n& y
}
0 B% g" g( t5 z" l }; E% f4 h7 ^$ F- j
/******************设置光标子函数******************/* l+ E1 T, k8 d5 a
- T8 d, l b. r% s void goto_xy(int x,int y)+ @- U, {' O( l) O, z
{
; F* f5 U2 x9 c% Q! H+ y/ m1 v. O( E union REGS r;
# z( M' E+ }: W" L r.h.ah=2;! v3 a% f9 }: S% Y& a
r.h.dl=y;: f" F3 e0 c& P
r.h.dh=x;/ F& X" N1 |8 X
r.h.bh=0;
+ o6 W. J8 v) _; N$ g1 ]8 p7 d! N int86(0x10,&r,&r);8 `, u5 m5 N! b/ v0 F, n. z r) A# x8 l! z
}" o9 ]7 c; `* V0 ^- v- \0 Q/ S! _& D
2 A! ?( L, ~' T- h/ S/ @% G0 X% f3 B
/**********************在屏幕上打出一连串的a字母用于演示程序******************/% C7 b5 s; F5 t8 I, A& k: t2 J
! V- p: c) M" K void puta(void)- t# v d, x- j' I- |
{7 I3 F7 T3 X1 b$ ]) e
int i,j; V- |% u: d) J" |* \/ c' ?) k
for(i=0;i<24;i++){
$ G4 d' z- r' b1 I9 |! W$ ~6 i for(j=0;j<79;j++){
! ^( i0 j/ S Q1 h9 [2 f goto_xy(i,j);' ?% f6 j: H3 k: X
printf("a");
: j% P- y, K( h) N: o) t }
, F% X; g# ]1 T8 A( w }
* T/ [* p {* C# h$ j! c2 l$ c% V } |
|