获得本站免费赞助空间请点这里
返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,5 \* q/ }6 B9 R1 `) S

# y, r: G7 S2 t  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里5 }3 r1 z9 X' @( a5 i* e% \
! g: |- F4 ~9 _& x5 I  b8 X
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
  m8 d1 I0 [3 |# }, p  子函数及演示程序:
  O/ E  C  y: R0 E3 d) d, e2 _& J7 M
. K+ s* S1 H9 o  #include<stdio.h>7 Q& n* Y6 Y# a) U6 f+ {% J0 L
  #include<dos.h>8 K8 |7 u: W1 H, V: t2 P
  #include<conio.h>- V, [. y0 i+ \8 j: |6 b

9 m$ Z& A+ @: q" U: l8 X# ^  ^1 K  void goto_xy(int x,int y);
% ]! ^3 A) U- d2 O( W" l  void dcls(int x1,int x2,int y1,int y2);
2 o) _# f9 b1 d+ a2 G  void bcls(int x1,int x2,int y1,int y2);4 h+ x( y! j3 P6 s. l
  void kcls(int x1,int x2,int y1,int y2);0 l/ g+ G6 t* y, a
  void recls(int x1,int x2,int y1,int y2);: K* K1 H4 b2 I. d2 n  `
  void zcls(int x1,int x2,int y1,int y2);( I9 O: e3 a, B8 k! T6 E" o
  void puta(void);6 j5 G9 F( R: z
' B5 P  g9 c" ]
' y/ O( ~' d6 ?  n. ^( R
  /*--------------演示程序---------------------*/) M+ t! v# q: h/ s* {
  main()
$ N1 q  a/ ~5 n/ E  {% @7 ]* }' Y0 t& I6 a
  puta();3 i) {" H% s6 @4 g4 S5 ^
  getch();
. K) G/ P  W  y! b$ K  dcls(0,4,0,79);5 f6 Z8 W& T: |2 h& U+ z
  getch();' L+ r/ `2 I* A( _: F# D+ u! R
  puta();
3 l& c( J, n1 M  getch();
0 A5 A& e# N# s5 ^  bcls(0,25,0,79);
; G- {! T% Q2 ]/ k5 K4 s  getch();
; d. R/ @! [/ f, t  ]) \& s  puta();
/ P8 ^  V' W) y1 X" u9 Q. r- Q  getch();
  c, @2 v# R% v% o$ F. N9 h/ N  zcls(0,25,0,79);
9 L) n+ D8 s9 l* Y5 P" m  getch();
; k" [+ f! d  O( z( T  }
- Y. q7 F' [: O- I3 ?* f# B  /*********center clear screen(中心清屏)***********/
1 {; K& T3 o7 B+ J! h  void zcls(int x1,int x2,int y1,int y2)  a1 E0 ^( h/ [- S" |
  {
- f9 \( W  U6 ?9 k  int x00,y00,x0,y0,i,d;8 O: g/ {! M0 V6 v
  if((y2-y1)>(x2-x1)){
( a- V' v) G9 \6 S$ ?  d=(x2-x1)/2;
5 c9 T+ k9 z; m  x0=(x1+x2)/2;2 d# F1 [$ w8 r$ J, J+ J
  y0=y1+d;
8 R0 |& g5 g: q7 o4 M2 h. I' u) ~1 O  y00=y2-d;
: f1 b/ r! a$ x1 B; x: z. K8 P  for(i=0;i<(d+1);i++)% P' k) G, O8 Z- c% E! r
  recls((x0-i),(x00+i),(y0-i),(y00+i));
1 W6 P- }9 m7 _' B0 ^+ e  delay(10);
/ Q$ `6 d5 m6 ]0 n4 q  }- x# \4 M6 M& K* g
  else{
- `# e0 p6 M5 |) f6 _6 l) ~  d=(y2-y1)/2;+ o7 Z5 _) [$ x2 [* e1 M# a
  y0=(y1+y2)/2;
% y9 R! F8 k3 r* Z$ w  x0=x1+d;
5 H6 w) ?% B) U6 {( d  x00=x2-d;7 A' P4 W% L7 s. l4 H, K
  for(i=0;i<d+1;i++)+ o( W* Y; a1 j$ @9 h/ t
  recls(x0-i,x00+i,y0-i,y00+i);
8 t3 G& T* T, I  delay(10);& i: _5 P' J. C
  }
8 |8 I+ N: }( U  }
# [" p3 J1 C9 G" r4 J6 j: u+ F: }# c  I5 Z( i9 @
  /************* clear rectangle side(矩形边清屏)***********************/# `( h; c+ f! w3 X/ ?8 w" n5 ]' G

7 A! v: i; Z- }0 o5 L  void recls(int x1,int x2,int y1,int y2)" D: v4 E. M/ a- T( F0 g# W
  {! S0 @9 |" f4 _
  int i,j;! Q* j: [, M4 o7 [+ \  e
  for(i=y1;i<y2;i++){
2 N2 ?* |" v9 p    goto_xy(x1,i);$ k! A$ e* B% k& u& y# t# @
  putchar(' ');- G3 ]0 A3 D, S* q' K
  goto_xy(x2,i);9 \1 L1 u- n0 l3 I& ?
  putchar(' ');
) ~+ Y+ R8 Q" {: ?9 {9 u2 I  delay(10);8 A* b( A' I5 y
  }' |! a, f9 J; e3 A
  for(j=x1;j<x2;j++){
/ i' V# }6 ^) n  goto_xy(i,y1);3 B, X& C! s) L- o7 A% F
  putchar(' ');
* e/ `/ L, y: g  H, \  u7 j  G# p  goto_xy(j,y2);
. A+ n* j7 i5 D  X& x8 _  putchar(' ');4 j  ^0 w: c3 V  L0 i" I6 c# B  z& k  @
  delay(10);
6 v" E3 u/ \9 Y# v. U+ |. H* d  }
, a: l" P1 m; _% W: s3 p! Z  }
/ O* Z% x" y1 L% Q  K5 e8 y+ x! B  /******************open screen clear(开屏式清屏)*********************/
7 Y4 i, ^/ {/ m2 D+ l/ ~5 w/ U8 p8 r6 r; n7 `$ V" g
  void kcls(int x1,int x2,int y1,int y2)' [- _, g: z+ t7 V( t" v& X
  {
! g$ }8 w& N: h: H' {! y  int t,s,i,j;
/ A/ L% H- `. K  t=s=(y1+y2)/2;
' E. H+ n3 ]$ k! }- Z( _  for(;t<=y2;t++,s--)" ^6 p: y6 K! ?. v" @7 i
  for(j=x1;j<x2;j++){6 z5 r& b2 O' `# W6 W6 m( d0 ]
  goto_xy(j,t);  T" w6 o: E; t5 ~$ Q3 j$ t# \# F
  putchar(' ');
' j0 B" [. _3 c  goto_xy(j,s);
1 }7 t# N1 r( e2 A+ \" B  putchar(' ');
* `1 c- j0 J. @( K+ y$ O  delay(10);
3 c! c8 Z7 h/ Q" M! o6 y# A  E  }
- w( Y: n  j% b/ {; h  }" A# `  t# P' M; P- \: w/ ~7 [
  /*****************close screen clear*****闭幕式清屏*******************/
# X1 L+ q8 i+ }$ p+ N
3 k4 S- h7 [" O" |# N0 Q  void bcls(int x1,int x2,int y1,int y2)
: j- ?" o4 b8 P  {
7 T6 ~7 p8 J9 I8 X; W, O5 K) U  int t,s,j;9 z5 x1 C6 F( ]: F) ]3 c
  t=y1;
  f  W  v, Y: {6 T) y3 j; P; I  s=y2;8 q" N( F2 a1 M* O' x5 N' C5 N
  for(t=y1;t<(y1+y2)/2;t++,s--)8 D; b9 p! l/ u* P* Y8 a( E4 E
  for(j=x1;j<x2;j++){
. ]( s8 n3 A* B6 h' P0 e7 i( \  goto_xy(j,t);
( H# Q$ ^& z' D& T: S) ]' [; z, Q  putchar(' ');( q" r1 S  a2 j$ Q
  goto_xy(j,s);  T" t7 y1 l) k) k
  putchar(' ');
; Z9 R( [9 a2 h  delay(10);
/ `* V0 N& s3 M2 x  }  O( n/ S" r! I7 C8 T7 e
  }& @: K7 V  Q; R: X& i- B8 h8 ~' Y
  /******************bottom screen clear(自下清屏)********************/4 Z7 Q& E9 Z1 ^3 G

& c# K+ Q: b+ S7 g+ H) k: x  void dcls(int x1,int x2,int y1,int y2)3 r8 e2 L8 r/ r3 Q) g
  {
0 f& Q1 x0 H+ k4 ]' ?2 v, g  int t,s,j,i;# |$ e7 P- x. `' G# k1 y
  t=s=(y1+y2)/2;) ?" o8 `1 @3 h. V4 u
  for(j=x2;j>x1;j--)' J1 y# {5 \, w* g( s7 C  ^. x
  for(i=y1;i<y2;i++){
  q. I% c" \- \" ?2 }! X' Z. x  goto_xy(j,i);1 b0 Y; ~- r+ ]0 w4 Y
  putchar(' ');
4 K1 k9 d! p7 i* q: H  \  delay(10);2 E9 `! I3 a/ p5 ~7 n6 V' D
  }
7 O4 U/ X- e) f! H8 t' R2 V; `9 }  }) z5 }  j# `- L
  /******************设置光标子函数******************/- z  u5 S4 E# W1 e) |1 v& ]1 V

, ~* `9 ^8 S& r7 s: E  void goto_xy(int x,int y)7 u0 ^0 K4 a) ?4 K2 C* c
  {
7 r0 o3 V1 T8 |  union REGS r;
' I3 p  x) o% n" y- j) t  r.h.ah=2;$ i, H, P, o& w4 Y8 k" d! Q3 ?
  r.h.dl=y;0 ?! u1 Z) _. g2 _7 S/ h& j
  r.h.dh=x;  ~; }' y9 j, D
  r.h.bh=0;
* J3 v1 V. R% m- ?! ~  int86(0x10,&r,&r);
7 _9 _3 C$ m: b3 V/ W2 Y9 p  }+ ~$ d. l& B0 r6 J
: h- m7 w( t! m" T' Z, z  W
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/4 d% q3 ^% s1 B. B. {/ b% J& q0 D
1 L  f8 I0 `- y' y
  void puta(void)
  n' T# [4 Z, |$ z* V! }/ f- C5 w  {
; |8 v3 r. a4 E  \' k9 ?  int i,j;
5 m# j' d5 S6 x5 e  for(i=0;i<24;i++){
9 e' z2 B+ e3 J' x  for(j=0;j<79;j++){/ N% d- t7 p) i3 Y2 N0 i4 V4 [
  goto_xy(i,j);
- ]( |5 p9 B5 G: H0 b) V9 _' ^& ~  printf("a");9 T* V4 ~, k6 w8 c) X, V! A: ]
  }; a4 |6 W$ W3 \) c
  }/ Y0 P6 ]& B, k* O9 S) ^, ?
  }

返回列表
【捌玖网络】已经运行: