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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
) v* T+ h4 U! _0 k4 a
; k! I# ?2 g# s% ^! J" P  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
0 c+ {) V3 }" c0 V, ]$ _5 d, q7 L4 a$ @7 V' w* G0 `
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
- ]/ k: w3 `; y5 F8 N" b( o  子函数及演示程序:
1 }) ^' U% O- h8 a+ v2 C' u) X4 |$ {
  #include<stdio.h>
* U# K$ G. V3 U* t  w2 C8 r  #include<dos.h>% S1 I4 Z8 A* J; L: }  @( [1 o
  #include<conio.h>
- g' E2 ^) I6 @: {( d- [; u  j6 k5 f5 R' u" Z% G; o  x
  void goto_xy(int x,int y);- \% A0 b* x4 W! s% P
  void dcls(int x1,int x2,int y1,int y2);4 T2 M! C; V3 ^8 h" N7 q9 }5 ?" s
  void bcls(int x1,int x2,int y1,int y2);
; X& T6 H! S- E. v8 y8 L5 e  void kcls(int x1,int x2,int y1,int y2);& ~4 S4 E, Z* J3 ?5 o( Z% F4 n8 ~
  void recls(int x1,int x2,int y1,int y2);7 b# y- g7 M! i& m" q6 q+ f
  void zcls(int x1,int x2,int y1,int y2);2 j* B- V5 {# v* @8 ]2 q- L
  void puta(void);9 m6 I* e$ F1 M" j9 X& j4 @
9 N5 R$ a. J4 }  x6 v

' E7 b. U! L' Q- x4 r  /*--------------演示程序---------------------*/! C1 J( |! z: W1 x
  main()
/ l* ~3 S: J% O9 E' S  {
0 m; M4 J& H7 ^  puta();
: ]$ F' b$ o8 ?% m9 [  m  getch();
8 V+ W% _- Q- N4 y  dcls(0,4,0,79);
3 d2 Z- L" x  x; q5 G( ]  getch();% v) P& N% F7 D3 m$ E) b8 R
  puta();
, a" R# Z1 [% Y3 I# B7 S  getch();  i* |: m4 e' E0 A, m9 l" Z% @
  bcls(0,25,0,79);
( K: H- K/ l' |% S$ W3 \3 ^  getch();. E1 U* ]# Q' K9 K* j. H6 a& k
  puta();- [  W$ J' o. W' ?9 B
  getch();- i% D. ~9 I6 K$ e
  zcls(0,25,0,79);, t1 B* O7 v$ L) u$ s: k
  getch();: s' E/ c; c' j. W: k1 C9 @
  }
) |: O, t& J3 O1 f  /*********center clear screen(中心清屏)***********/
1 F1 W' U$ K' h6 \% v% u  void zcls(int x1,int x2,int y1,int y2), w/ N4 G# [% g* a' k
  {
! u# B2 C+ G8 O7 |# e  H  int x00,y00,x0,y0,i,d;1 z/ q& A- g9 _% V1 v: N
  if((y2-y1)>(x2-x1)){. R- z4 H* p/ M* v; Y
  d=(x2-x1)/2;: c# V& y' ^% L% E5 h) i
  x0=(x1+x2)/2;1 }+ F5 k' U, B. d1 X! y
  y0=y1+d;. V, p' [3 X! ^- K  n' A
  y00=y2-d;
6 P, `- b  I+ c- H& N" @& o% i! E  for(i=0;i<(d+1);i++): B4 P+ c' T7 |  F
  recls((x0-i),(x00+i),(y0-i),(y00+i));% S, R( M7 ~) K' n
  delay(10);1 N9 O) h1 X) [# ^% X
  }5 \- z2 S( z6 `. F1 [9 v$ f& H
  else{$ c( ~. K& d2 q* a
  d=(y2-y1)/2;
7 C9 {% x- r1 B4 G  y0=(y1+y2)/2;
! Z% j$ ~" a) U2 s  x0=x1+d;
% B, Z8 i7 v9 @  x00=x2-d;% G: ^5 u1 v# y  ~( b
  for(i=0;i<d+1;i++)
  {$ ~; T0 A7 k+ W  recls(x0-i,x00+i,y0-i,y00+i);1 E' B. S! C) W7 j* [/ ^" V3 R6 U
  delay(10);
( L: s& C" ^% c1 G  }
+ ~% Y# ~& J/ M0 G5 e  }
7 R+ O; y( X  t- R6 m
, t  @4 [; D. r& [* F  /************* clear rectangle side(矩形边清屏)***********************/9 B* M( G7 K% X( H6 D
  v" }" }% S# g' `% Q
  void recls(int x1,int x2,int y1,int y2)
- c5 l  o/ [( x, M  {
. Z5 I0 s6 p  t3 Q9 C  int i,j;8 y% ^. u( E. G, G
  for(i=y1;i<y2;i++){
- g: q  {8 o4 y: e    goto_xy(x1,i);
) {0 G* [7 F$ \* u. }2 }  putchar(' ');& N  z+ D/ u7 a$ T! B- t, d
  goto_xy(x2,i);; l. G" C7 z1 C7 |& K& n
  putchar(' ');. }3 X- g! f" O8 o
  delay(10);
- q5 V. n. [  J. z% [- _7 E+ P  }
; `& Y% }$ [& A  q& o" S  for(j=x1;j<x2;j++){8 T  ^) @& c$ Y0 [7 U
  goto_xy(i,y1);
2 Q& _) d, P) r  putchar(' ');8 u( W5 K  \: i/ h- Y: H) p4 K
  goto_xy(j,y2);: Q3 H4 r. l; l" \0 b
  putchar(' ');
4 T6 ~1 P4 ^& s) W! r  delay(10);
5 t6 f+ o" o, m0 `4 Q' n0 D& J: T  }: `/ U! `, d8 i0 B% W
  }+ O6 |6 z( y2 Z
  /******************open screen clear(开屏式清屏)*********************/5 {/ I# k2 j( J7 L. _& i0 i1 b

& D# w% @) H! a7 x7 l  void kcls(int x1,int x2,int y1,int y2)8 R! y. i; V: V  n5 q5 ]
  {
4 q  M0 a8 S5 V% }# ]  u% L" t" z  int t,s,i,j;$ _9 ^) J) Z' I: M) t3 S
  t=s=(y1+y2)/2;0 ]' i; I8 S9 T7 v  K( l
  for(;t<=y2;t++,s--)9 }: f% m) E: x" A
  for(j=x1;j<x2;j++){
9 k/ m. G/ g, x$ `8 U7 W  goto_xy(j,t);
! L; E7 }. [# Z" K# b  putchar(' ');9 S3 a8 @- \2 e/ `4 Z( v
  goto_xy(j,s);
' w5 Y' Q, C& @6 s/ o: s/ A  putchar(' ');6 I2 \- X. r; S3 t3 U: ^
  delay(10);
( n: U6 A) I6 t, Z5 J  }; u- T1 L- P) i3 @, C4 C4 B& x
  }3 k- c5 J  T9 Y. {
  /*****************close screen clear*****闭幕式清屏*******************/8 ?4 I9 H0 b3 I, ~
1 r9 v' P- ]) K" `# {
  void bcls(int x1,int x2,int y1,int y2), Y+ N" M0 d% N' _) L
  {5 G) Y+ }4 E/ g+ p( x/ y
  int t,s,j;
9 O: A+ S& h0 X  t=y1;/ M3 O; u  g  x: `
  s=y2;0 E- D& L  H% |' @; t7 p2 W" B+ @
  for(t=y1;t<(y1+y2)/2;t++,s--)/ u2 f- _2 [4 g! L: k9 T  R7 q
  for(j=x1;j<x2;j++){
6 E8 r2 i5 n3 |+ C  goto_xy(j,t);2 a2 @  R% u: \! o3 L
  putchar(' ');
  g6 J/ T7 v3 m0 V% S  goto_xy(j,s);
" |' y: i. w9 F  putchar(' ');
6 X# j# X& n: ?3 m& ~% }' `  delay(10);
" y# v# _; R7 q  }% z$ [5 C- m6 s5 j+ M2 x
  }
6 ^' z/ x2 t1 |$ S1 k  /******************bottom screen clear(自下清屏)********************/
& h0 z6 h- P9 F* p( M3 a, v1 y5 Q
! @+ j4 A4 E( f6 B2 D: n7 `  void dcls(int x1,int x2,int y1,int y2)
$ |/ d: }8 s; A8 @  B" X- }  {2 B0 d. W( J  @1 Z& W. R
  int t,s,j,i;
7 r. V+ z  W: N) S  y  t=s=(y1+y2)/2;
) P. U+ N; x+ ], G- A/ c  for(j=x2;j>x1;j--)
  ~" E7 {, v& R/ [  for(i=y1;i<y2;i++){
! G' Y: n$ B  y. ^# F  Y, K" I9 i  goto_xy(j,i);% E2 ^. V' [' h2 P
  putchar(' ');
% j- S* O$ A5 A  delay(10);5 f8 e3 N5 L+ ~, ?
  }. r% Z2 z: W: Q9 J3 ]
  }
% ?% |" ^) `- k- R7 \: q  V5 K, g- W  /******************设置光标子函数******************/
: H7 ~, B) S+ W8 V( v% X" h+ j8 d) f$ K( Q) J: w
  void goto_xy(int x,int y)% S8 v  B  w. F5 X7 }, c/ j6 F
  {0 O+ M% q; [$ g
  union REGS r;
' ^& U. u! B4 x0 t5 t0 K  r.h.ah=2;* |. n% P+ y6 l6 A- ^. K/ e4 N" g
  r.h.dl=y;2 Z5 K# B' F4 U$ U% `6 g
  r.h.dh=x;7 w; h" i) Y  t6 L2 s7 m
  r.h.bh=0;
2 b  [8 v( g, ~, m  int86(0x10,&r,&r);
( B- d: x/ ?# X7 K  }) i; B4 J; e) R, J

2 ~3 f/ H. ?8 P6 ^$ M  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
- o' i! b6 I0 m+ m- R% X$ _$ B
4 {( \8 I0 Y5 B" q7 o  void puta(void)
( F0 ~9 t8 ~7 f# H/ [  {) k3 t: t5 w! j6 S) L: @
  int i,j;
3 C9 Z2 X6 K% ]% a& v3 H  for(i=0;i<24;i++){* P9 ~: L. O9 w* C) s# H: |" c& q3 g
  for(j=0;j<79;j++){8 H* q: e' U7 }7 `
  goto_xy(i,j);' y% a% L* _7 d: `" h# b
  printf("a");& Z5 F+ V1 U; {8 z& T1 X
  }
# l+ c/ ?3 W8 m7 k" ]  b/ R1 Y6 W4 u  }
% _3 ~: j- }( e. H$ j; H) ^  }

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