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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,, ^+ W. k* q& t4 S" t3 ?
6 v. V6 q( R/ m( y% p( t0 S& D
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里# c0 C, R6 H* c! K+ I/ D' u) H" G
' ~7 _7 g/ X8 n
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
" V$ {8 t& @  y3 f' K  子函数及演示程序:
0 O+ v( [" X. Z4 J: X
) n* q2 J: B  y9 L& E; [0 d* [  #include<stdio.h>0 K' \# k0 @  u: T% z/ L1 x2 j
  #include<dos.h>
4 f2 O- I# a" t0 p4 E% l: }- Z  #include<conio.h>
  G* y1 L2 j, s6 K/ A* {' z' x9 D: T' x7 `& K
  void goto_xy(int x,int y);" ?5 B$ ?& k6 o$ y' L  E! U
  void dcls(int x1,int x2,int y1,int y2);( Z7 n+ J0 W) J1 T) N
  void bcls(int x1,int x2,int y1,int y2);: C$ n; K! h& q
  void kcls(int x1,int x2,int y1,int y2);& ?+ d6 Q% |4 [' z# X$ m0 }( C
  void recls(int x1,int x2,int y1,int y2);/ {: O; X0 b2 K
  void zcls(int x1,int x2,int y1,int y2);
/ g1 H6 K; g7 {: @& K  void puta(void);  _; G$ y* j3 a
) A! W6 u6 g1 {: r4 j4 F& e

  x6 V6 e+ ~: t& q! S: G- P6 y* B4 V  /*--------------演示程序---------------------*/; i# I' J. H) I! u$ b- P0 f
  main()3 v* G. D" j3 b3 m. a% h' R  m2 p
  {
0 j- c( Z* \. H, f& r* y  puta();
& _! z: V. s  l4 F5 b) N7 t$ Z* \: z  getch();
; [8 S6 l5 n, L4 B6 P% H  dcls(0,4,0,79);9 n- _: }9 S  L3 [1 F
  getch();
. M% P# D1 b% {- K7 B% m; g  puta();7 @6 A6 U3 \* ^- C" N' V
  getch();0 L. T/ J& W  h! |2 A4 l
  bcls(0,25,0,79);
$ A$ N6 g5 W3 s0 i5 ?  getch();
4 p4 X' {$ s& u& `4 M  puta();
: s! \7 r& K/ a  f4 ^6 D( ~  getch();9 g5 b, d. M/ a! h% Z/ N
  zcls(0,25,0,79);
2 [7 @" {8 W0 y3 a( f. D; U  getch();
) K3 v: {) h1 Z1 S  }; K8 z& D+ l1 @. f
  /*********center clear screen(中心清屏)***********/
% g: {9 U! q  S! Q* Y1 v  I  void zcls(int x1,int x2,int y1,int y2)5 c8 V2 i! ]2 b: F" m
  {
, k3 v& f4 Y0 j- X  ?2 j, X  int x00,y00,x0,y0,i,d;! h# ^9 C/ C, |! x  ?% {9 @" J& D
  if((y2-y1)>(x2-x1)){' l9 I0 F1 d: Y1 Y  e8 X
  d=(x2-x1)/2;
+ ~0 ]# `1 F+ N) d/ C3 _9 }  x0=(x1+x2)/2;% R2 w. G4 b8 ^& S" Q# n
  y0=y1+d;- @! n7 s4 e% |& n& t1 A
  y00=y2-d;" `: P) a  y  a! W
  for(i=0;i<(d+1);i++)
7 ~! u. N' I- i3 P  recls((x0-i),(x00+i),(y0-i),(y00+i));  J; X/ D. O& S" o! V2 c& U8 H
  delay(10);
- y1 c) t5 v" z: Z0 n  }
4 ^! W3 A) b6 b' ^( Q6 n- T0 z  else{' u% h" r; e1 T/ j1 g
  d=(y2-y1)/2;1 c- V5 }; k. h0 Q' |& ?# O1 {
  y0=(y1+y2)/2;% b7 D5 Q2 Z( d: q+ h. h
  x0=x1+d;
/ X" M; g$ C# D) W  x00=x2-d;
. O. P: L$ ^0 e  for(i=0;i<d+1;i++)
4 T4 W0 W& p* k( F7 n# \- `  recls(x0-i,x00+i,y0-i,y00+i);
( p9 Y' p+ v. |6 M+ B  delay(10);7 {# V% ]9 y0 x! m
  }3 z) ?6 s: G8 O$ L9 ?
  }$ s' |) n. J1 K: Q
+ Q- Z5 S9 H, {
  /************* clear rectangle side(矩形边清屏)***********************/
3 T8 d7 B$ F. \; t' V
( R; L* x1 r/ M6 C- U8 }  void recls(int x1,int x2,int y1,int y2)9 K+ \5 Y: H: @  ~9 @# b/ o9 C
  {
, a& a+ ?' i* T) v/ a3 G& M  int i,j;
6 x& d+ K& k0 E3 D6 b$ D2 V* c2 e  for(i=y1;i<y2;i++){! K! d/ U/ l5 Q9 m* k( p9 Y; V
    goto_xy(x1,i);
6 A* A* r" @* q) R% p, ^. [7 W. X  putchar(' ');+ `8 ^0 G  s! w; @' [% D
  goto_xy(x2,i);) R, q: K8 i5 C, ?8 Q
  putchar(' ');
. f& o# m0 g: t" v  delay(10);! a, d: W8 t! z: d: {
  }
6 Q' r& Y7 s1 N& Y  for(j=x1;j<x2;j++){1 ]. a0 P2 R. ]0 S. O: I, D
  goto_xy(i,y1);
0 y; e0 A( K) d" p  putchar(' ');8 s# D/ |+ L: f9 r
  goto_xy(j,y2);
! P' A6 A' }4 x: m* v8 l9 Z  putchar(' ');( I# u2 b$ ?* ~/ D6 Y
  delay(10);
0 S; P0 C" c) B5 n$ U; L  }
& u$ ^& l% S. S9 B, y# H  }! J5 w- v! k3 l3 m* f2 E
  /******************open screen clear(开屏式清屏)*********************/
$ ~& _+ b' O  _/ U$ P+ b8 ?3 H' F% O4 H% A* r7 m
  void kcls(int x1,int x2,int y1,int y2)3 K- k( M; H" Y- B5 {; q* w4 ]% I
  {- y# Y( r$ b& o2 E$ Y7 f
  int t,s,i,j;
8 l4 ?8 }5 H$ @4 a: M$ r! {  t=s=(y1+y2)/2;
1 h7 x4 v. S% T9 w: l  for(;t<=y2;t++,s--)7 _) q, [2 z+ b+ g: V
  for(j=x1;j<x2;j++){( V- B! }4 W4 m( G6 I* p
  goto_xy(j,t);
7 i6 j- l. w0 P# `  putchar(' ');. a' r- }% A; z- v5 S3 l- d
  goto_xy(j,s);
# ]" {- y) J9 D, V: N  putchar(' ');# Y( H; Q* }7 O2 H! W, S  }# d
  delay(10);5 f' c2 C2 C0 M+ ^/ }
  }* b1 y6 J" w* s# E: l, Y
  }
& d0 o% r: _6 G. Q$ i/ N  /*****************close screen clear*****闭幕式清屏*******************// A& ~5 ~$ T* x) Z8 m4 m9 l

4 ^( R: v4 O$ `# {' X% r; K  void bcls(int x1,int x2,int y1,int y2)
( B+ `! d5 J) G: E$ g6 B6 K2 F  {
  ]& Y6 w6 B5 U+ @1 K2 ~% L  int t,s,j;$ P- l. {: W2 {* F, m; Q! s3 y
  t=y1;5 K* Y% `5 E% C) x: ]
  s=y2;
, A; Y; I( I" l8 }9 D  for(t=y1;t<(y1+y2)/2;t++,s--)
7 V5 o4 r' \3 ?! |9 ^8 @  for(j=x1;j<x2;j++){, }: m3 E1 V  |6 Y
  goto_xy(j,t);: V5 e2 d; j5 j3 {, J! @" D
  putchar(' ');
0 E" ^% _2 W/ c6 g& Y8 o. Y  l6 P" X  goto_xy(j,s);
5 q1 o9 v1 u+ U/ E! K8 ~* f  putchar(' ');, g* M" p" H" F+ E1 @6 D
  delay(10);
0 ]5 a1 r& @$ |. h5 ?. A  }
+ Q% S1 d4 g# v4 a( ^* P  }- V  g$ l% G8 P( ~
  /******************bottom screen clear(自下清屏)********************/5 i- S+ n( l; h1 @6 v

) m- B' k* u# M- z% Q' I+ A" ~  void dcls(int x1,int x2,int y1,int y2)
1 E4 U$ A" q7 @) r- T( i  {
$ e$ u- M; c  p) V  int t,s,j,i;8 I, x7 Z+ ]. J( m$ r9 p9 S
  t=s=(y1+y2)/2;$ I# W- L, q: }) e5 q# p
  for(j=x2;j>x1;j--)
4 `, ~; o, f) ^8 ]7 C$ D  for(i=y1;i<y2;i++){5 c2 b! n- U* c. K% S/ M. Y
  goto_xy(j,i);
. d7 V& {# m1 X0 q+ Z& ~& p  putchar(' ');4 Y: t1 b9 A4 X
  delay(10);+ c! A9 M2 A3 S9 o7 R0 u4 K
  }7 @9 q: G6 d" t# k- J2 a( u* h
  }+ M! W- F: U% E9 v7 U9 t0 d. \- J0 ]
  /******************设置光标子函数******************/7 B: y& ?4 {/ K9 i

0 K  ^% s2 d8 B/ i  void goto_xy(int x,int y)
2 c: m' ~1 J! Z# G" {  {  p& w+ U$ w( p/ Q
  union REGS r;
/ E, f- G0 _& s  O  r.h.ah=2;
- c# L, }( c6 \  r.h.dl=y;
; O3 v# w5 ^) Z+ L  r.h.dh=x;
8 H* [. w! j1 b4 [  r.h.bh=0;
7 Q7 f( i+ q7 y. v  int86(0x10,&r,&r);
& S- N8 O6 q* {  }* B- D8 y; c  Q9 X, z

! F, L/ b2 G( Z8 y3 c  ?+ f  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
' J1 U+ D+ @- X6 h1 S$ I3 n5 ^
! f4 m, Y# O7 W# O) J- A  void puta(void)! C4 u: l: k6 y  s# ?( P
  {) s5 q, f* i* B( B
  int i,j;
: T. l* ]2 |! }8 E  o, F  for(i=0;i<24;i++){2 M/ Z( E* b9 l" K! X
  for(j=0;j<79;j++){
2 Z, k, ^9 H' \. H4 |  goto_xy(i,j);
& ?6 n# g+ b2 z5 ], N  printf("a");) b+ W( g! Q8 ]( C
  }
* j4 T! Z) ~8 f  }* I2 S0 A* V2 p6 c: ~' d- e
  }

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