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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
, x3 P& j6 r9 P2 j( e  B+ v' x+ o
$ i- L2 \' q# M. z* t  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里' y# n' X* w& v3 g: E6 r+ n2 T
6 M' j$ J4 I* y5 v1 Z7 f
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
0 V- k: D  C6 `  子函数及演示程序:3 f1 F" }+ K& {- f' \
$ J& |0 z% t6 z' o$ ?
  #include<stdio.h>2 ^3 d# {4 L1 h$ I& H! r3 s# {2 ^
  #include<dos.h>
7 T/ {( F) t* A- u  #include<conio.h>
: ]) X5 e9 w) Q% q% i! P6 e3 p7 p( P" \5 e# S2 R/ U  b: T
  void goto_xy(int x,int y);
5 _, H5 N0 a* M! U1 Z  void dcls(int x1,int x2,int y1,int y2);# x: Z; n9 v* b$ r2 b. F5 a9 V3 ?
  void bcls(int x1,int x2,int y1,int y2);
% |. }0 o- j, u  void kcls(int x1,int x2,int y1,int y2);
1 \! I1 j+ c9 e8 P' |  void recls(int x1,int x2,int y1,int y2);
. w, F  U9 V* o1 p; J1 ]4 G  void zcls(int x1,int x2,int y1,int y2);9 s& }" g; P/ T) q6 X! @- s
  void puta(void);
  t4 `, |+ K3 F* ?* U+ G7 N8 f& L; g* N) g/ @3 t

% e8 X  T, U# t; a$ a7 ?: ~  /*--------------演示程序---------------------*/  F# f& s3 [2 x: u" e
  main()
' f; d% J- z+ @5 u3 w! S' X  {' _8 z( V* v- Q# A/ p0 h1 k
  puta();
# [6 e% ~. B# F3 w9 {  getch();
: W2 n% u% r  C- c4 y  dcls(0,4,0,79);
5 `7 R& \3 A1 D4 p. ^  getch();
8 |; o- t6 G' x# z  puta();# Z8 }, {) X& o0 v2 I; b9 ^7 o  d* c
  getch();) {1 d) f% g, M5 s. v% P6 O
  bcls(0,25,0,79);
+ G  y) z' o* c' I  getch();
1 R3 N  X3 C- b( u" [4 l7 z% W4 B  puta();. Z: S$ n. Y* f9 c: Y. j
  getch();
3 e; M, z1 g2 d3 B5 y* W  zcls(0,25,0,79);0 e8 q( H- y: V9 ?4 L
  getch();
9 C6 c/ h2 ^- }2 f  }+ D) X9 ?  Y: t. Z1 ~
  /*********center clear screen(中心清屏)***********/
9 s, B+ ?/ g5 I0 ~  void zcls(int x1,int x2,int y1,int y2)
2 M* [# V& q& ?! G; y$ {2 j' g+ V  {
# ]7 y/ K2 O( o) b2 ~5 k  int x00,y00,x0,y0,i,d;
$ f, ]1 y5 ?7 Q1 T% ]  if((y2-y1)>(x2-x1)){1 b9 F7 ?# x# m- `* e5 Y
  d=(x2-x1)/2;
: a7 x# r9 L# h3 T& Q  x0=(x1+x2)/2;
" ]: Z. Q# E; S- C5 y4 v6 ^. ?  y0=y1+d;
9 S% \) K9 W- Z4 z% d, T' Z" c  y00=y2-d;
2 u2 J& Z5 l* k  D  for(i=0;i<(d+1);i++)! R" F# q* Y2 T! P
  recls((x0-i),(x00+i),(y0-i),(y00+i));* \: j& h. Z8 j' b1 o( M% c
  delay(10);- j% ?3 |2 U: \# }% T
  }5 X7 o' G- D' p+ j2 h3 Y& V5 A
  else{
! s' w5 ^* m' M: E* r: @* E0 @5 N  d=(y2-y1)/2;" s: [  S# ]. V* k
  y0=(y1+y2)/2;
5 q3 m! Q$ }. \7 U6 j  x0=x1+d;
4 I, Z+ ]6 x$ m0 X  x00=x2-d;
3 S& x: L0 V6 y9 \8 i  for(i=0;i<d+1;i++)
  W+ ?0 |8 e' m4 s8 j  recls(x0-i,x00+i,y0-i,y00+i);
4 G# l- Y2 H% n  o% S( I  delay(10);$ m: n# [$ q" s: j: R
  }
$ q. _" j9 @8 U& e2 `2 K  }
1 v% u# {$ J9 O3 x
. ^! i2 E% g+ y  /************* clear rectangle side(矩形边清屏)***********************/0 h( _# G1 b. R5 Z) E; o1 z4 C
$ h: l; S! f: t$ {3 O" l4 N$ u8 O
  void recls(int x1,int x2,int y1,int y2)
' e9 K  g# f2 q# f+ s2 q  {7 _3 l- Z& V# Q2 M4 V+ V, a
  int i,j;
( L# @0 A2 @* ^$ U4 l8 U! h  for(i=y1;i<y2;i++){
2 }0 j/ z2 X2 Q3 Y5 q( n- |    goto_xy(x1,i);
  J% }. D, k/ }. e0 w  putchar(' ');
3 u( [! c, b7 ~! T% T% E  goto_xy(x2,i);
- N5 M: o9 h' x4 n  putchar(' ');
' k2 X7 {4 p8 j/ F4 R  delay(10);
) }! b- I7 K7 `5 D: v  }- Z1 k2 F% d: b" T. ], H7 i3 s
  for(j=x1;j<x2;j++){3 h0 R7 o4 k' Y9 F
  goto_xy(i,y1);
4 f; ^4 f$ e* }0 d% \  putchar(' ');/ t0 b% R8 h* E6 \7 [5 A
  goto_xy(j,y2);
' S. j7 F; \( O% f+ Y9 w! ?" o0 `! `0 S  putchar(' ');
. h4 n+ V; V1 E1 [1 S- e  delay(10);
$ m8 @3 g) U1 w# _' }8 Y  }
. d& I4 K/ T* \, }8 f8 ~; U% W! R0 V  }8 j8 V  ~" S& u& t
  /******************open screen clear(开屏式清屏)*********************/; G3 y% P4 c/ @( I8 G
2 X' E: _8 {' R1 c& e' G1 V
  void kcls(int x1,int x2,int y1,int y2)! i) J) u( R4 S3 i2 I' t5 J- b/ k
  {
/ f& o+ w4 _" k" w$ K  int t,s,i,j;
; V  {# C9 L  U. N; K0 ]  t=s=(y1+y2)/2;* x) s8 {  [% \5 t' N3 w7 V. m/ T8 ~
  for(;t<=y2;t++,s--)
" P8 \0 ]- E+ r, R1 `  for(j=x1;j<x2;j++){
9 r$ @9 `4 e: }4 r# Q. g5 Y  goto_xy(j,t);
& b; `2 u! t3 l" }5 s  putchar(' ');
7 O# t8 |% ~7 Y, S- x5 ^) p  goto_xy(j,s);1 f6 q& |6 Q; ?
  putchar(' ');
# B, l0 ~8 }8 \3 V- j! F: F7 J  delay(10);
! D2 S: f1 G% _0 W7 C  }
- H9 Z. X% M# b9 m; l+ @; f' S# ?  }  n  A" K6 Y4 n9 B& w
  /*****************close screen clear*****闭幕式清屏*******************/' L0 B6 D6 N# c' j, S# J

0 @6 b0 h6 u/ K3 b- N/ y6 x) M  void bcls(int x1,int x2,int y1,int y2)
. K$ T' x$ S6 `  {' ?9 O, Z9 w% S1 ~9 i% s
  int t,s,j;
+ y( W% h7 C2 q/ V9 g% u  t=y1;
* s) G" A, P8 W* Y  s=y2;* J$ v" N# J# `: A) m/ z+ H' w
  for(t=y1;t<(y1+y2)/2;t++,s--): g$ H) ^1 o9 X2 |
  for(j=x1;j<x2;j++){
/ v; ]9 h1 T( p* O  }  goto_xy(j,t);
8 Y" d% S" ^) n% a2 |. i  putchar(' ');+ O! H0 U8 x3 Q1 U
  goto_xy(j,s);8 Q7 j) I9 L+ k8 H% B  Y
  putchar(' ');- c# V; ]% M$ j! [, `
  delay(10);% Q; U; f! r# g& V+ Z7 h
  }% r3 k8 k$ O) S3 l9 |6 u
  }9 I5 T( S* f2 D6 Q7 U1 Y
  /******************bottom screen clear(自下清屏)********************/
! Q2 G- B* u7 }7 o  M4 F! I7 ?4 }0 j$ p! X& T% G
  void dcls(int x1,int x2,int y1,int y2)3 z& M$ S4 V( d3 J: X' C2 N) B
  {
: D+ W$ n( d9 M; [* ]  d, y  int t,s,j,i;, X6 E% Q* j* ~- r3 s+ V
  t=s=(y1+y2)/2;' Y  M6 W, g3 ?( V- D; o4 L
  for(j=x2;j>x1;j--)
" K3 p  a' O4 B4 H" r9 b  for(i=y1;i<y2;i++){9 r  m) ?; ~0 P; Y* T1 }; |
  goto_xy(j,i);
1 T2 e- D! J! h: o; ~* s2 V2 |  putchar(' ');
" q, K7 ^6 ?. }+ H6 l  delay(10);; R/ g$ N7 [( J8 m
  }: r: J' o5 q. f  y* w2 _- \0 D7 c
  }
3 f; D+ Y$ f+ i# I0 @# v/ P  /******************设置光标子函数******************/
' B3 i+ m$ ~4 ~; B  B9 I* w4 S- k# m3 j
  void goto_xy(int x,int y)0 R# g. e' v/ u
  {( U9 w* |5 J  z/ g+ J9 b
  union REGS r;
3 p* B1 V, u# B  r.h.ah=2;
+ D" i! k- A; U) p9 [  r.h.dl=y;1 E, s  N8 M, A- D$ {
  r.h.dh=x;
( D5 x  A/ H, s  r.h.bh=0;
/ f- d+ l# V  K  int86(0x10,&r,&r);# ]. O" r; C* A% ?
  }
1 s4 x: G0 D) j7 c+ Z% B7 L$ n$ e- }5 w* a' {+ p9 u0 U
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 e1 J4 p5 I$ k
4 q0 {$ i3 y8 X2 u1 b  void puta(void). g  T5 F5 b" R! m3 w8 o
  {, I- q/ F# A3 i: R. j* w
  int i,j;3 k7 }) r+ b; I0 l  P
  for(i=0;i<24;i++){0 ?/ y, @# h3 L! d* E5 s
  for(j=0;j<79;j++){$ u! A4 {  q9 a1 U8 @# Z$ r
  goto_xy(i,j);! ^" y% B4 h+ ?8 E; V7 T! A
  printf("a");
/ L1 I* z% {% r7 @, G% N; [  }$ c8 b4 Y6 G3 s& f& X3 q
  }3 U6 L/ b& f, e7 O3 d
  }

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