返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,$ o$ ]9 U& i" j4 t3 e3 k) j

# {! z" K/ x! _  s' t# K7 `" z* U  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
1 j7 T' b/ O3 Z- V5 l- t* N
$ j6 x+ T) D; v  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
) ]* T( p9 j* a9 U  子函数及演示程序:
' @8 t' t  [3 D# i% p; }: g' e# l$ i( u4 U
  #include<stdio.h>* W7 x1 A7 H, O. o# n: v1 J4 e# T
  #include<dos.h>
+ L% k# w1 J' d: R: @  #include<conio.h>; B1 T+ R; p+ w2 I

. T: x6 e- L9 x* f  Z! X1 B  void goto_xy(int x,int y);5 L7 b9 h7 ~' J1 e; q  ]
  void dcls(int x1,int x2,int y1,int y2);
% j2 b+ K6 M/ d% |  void bcls(int x1,int x2,int y1,int y2);6 K1 J* ?2 ?  Z& p+ r
  void kcls(int x1,int x2,int y1,int y2);
. {0 ~1 e) F2 `# b  void recls(int x1,int x2,int y1,int y2);( v5 A9 ]: W' E+ @) p3 |
  void zcls(int x1,int x2,int y1,int y2);; Q' w5 x, ?6 v7 H- e9 q& {
  void puta(void);6 d  {) n5 f; Y; p/ ]

1 F6 O) c4 I7 N9 m& j+ Y
/ P$ Q$ Q8 G+ o& u  /*--------------演示程序---------------------*/
3 \3 A6 {. j7 Q# n& Q  Q6 g9 Q  main()
2 h8 r! e. O0 W$ l3 m0 V% l! b/ ]  {
& \- Q. T  W; C5 r/ u. S  puta();
/ f% E! U% b0 _5 b/ F9 c  getch();
6 U9 L7 @4 i' V  o- X  dcls(0,4,0,79);
( w) V. S+ m4 u3 C: D0 F/ A4 T% T  getch();7 U' i$ U, y( N& _: @( o
  puta();1 x0 j/ n. k) _9 Z1 N+ x* d
  getch();
2 c0 R( y) k3 b& l: h  g+ `9 C; [* O  bcls(0,25,0,79);
. b7 R+ T+ d0 g9 h& _7 I, S: C$ u  getch();
8 A2 T& W0 c5 i  puta();0 h) Y5 H9 D3 \3 P5 L4 ?
  getch();
% |# V' F( }! [  zcls(0,25,0,79);# M2 Q  h9 }3 k' c. O+ C4 n
  getch();
" V7 i' u/ D3 ^4 @+ M  }6 }2 T( B+ e5 P* h
  /*********center clear screen(中心清屏)***********/; A0 d( |) a8 w4 ]
  void zcls(int x1,int x2,int y1,int y2)
  a7 Q8 k2 r8 M0 u! x  {
, E& J" {; E+ I4 r: D2 _/ v1 t& h  int x00,y00,x0,y0,i,d;
! b8 D* }4 k1 }" n4 b5 f# T  if((y2-y1)>(x2-x1)){
) x* ^" V, s; b1 [2 `7 I5 k  d=(x2-x1)/2;
4 o  ]; y5 A+ q9 k- L  x0=(x1+x2)/2;
. ^  |8 e3 W7 R) W. f2 F; T( C  y0=y1+d;2 X% t( ]' \: z
  y00=y2-d;
. y& W/ ^* ~. y* a3 @9 ?% O+ V  for(i=0;i<(d+1);i++)6 |8 \; X. l. W& J
  recls((x0-i),(x00+i),(y0-i),(y00+i));
. B3 e0 o+ j3 M. y1 O. ~2 w6 ]9 O  delay(10);- `/ |8 J! ?& W& ?3 Q2 c. P/ O6 {
  }, f. U2 T* h" N  M0 p/ W
  else{% t+ k, X0 G$ u) P
  d=(y2-y1)/2;
; M3 `3 x6 M* x2 \) S$ {8 d  y0=(y1+y2)/2;1 T. A2 Z) W  M
  x0=x1+d;3 P  M; S% I# P$ ?" Q9 h
  x00=x2-d;
6 M+ V; d; h; K( E  for(i=0;i<d+1;i++)2 S* O' D  g/ B. b; h
  recls(x0-i,x00+i,y0-i,y00+i);/ Y  s$ O( ]7 O& }, J( m
  delay(10);
1 A; u0 n0 A) ?/ u# E# p6 o# @3 t# h  }1 @: Q$ {- D/ c6 v  @$ e
  }5 y. k% c( {9 u( D
/ x) {6 F* D0 j
  /************* clear rectangle side(矩形边清屏)***********************/9 o9 m# I' G$ [9 v( G6 X

0 i$ w. i4 Q4 G! P5 H  void recls(int x1,int x2,int y1,int y2), x; N, r, |  x: \( Q3 z' X; u
  {# z  `8 B$ d9 U9 ~: V  T
  int i,j;  q( u; f4 @- B& W/ K: T
  for(i=y1;i<y2;i++){
" @; L% _) ^& M/ [! u9 S    goto_xy(x1,i);6 i* R& o5 M# U! C' j: S) z
  putchar(' ');, g; i1 M. E% O) f$ W2 c
  goto_xy(x2,i);
+ m: R* `% m6 B' W: |  putchar(' ');
4 W9 q: G! N* D6 Z0 C8 V) s, F9 s# v  delay(10);
3 e5 L) P1 O# m8 c' @2 a2 K: ?  }( c$ X  N+ c! o/ l0 @. }
  for(j=x1;j<x2;j++){5 b% n5 z4 I, }) R  Q+ K
  goto_xy(i,y1);
* j; [: _" Q, t, S4 S: A3 r+ N  putchar(' ');8 I/ m4 Y+ f1 q; ?4 c$ w1 }5 L/ Y
  goto_xy(j,y2);
( ]- b7 h0 R0 a/ G3 t# D9 W. I  putchar(' ');4 C) H9 v! c: Y# ?( S8 c% a
  delay(10);0 G0 Z: R- E- y/ y$ m+ y
  }
  s" @; I8 k; P8 p+ B  }# v8 A; y+ [3 z$ d
  /******************open screen clear(开屏式清屏)*********************/
" A# _' S! f3 o+ T
  D+ S1 I# k4 S3 x1 d& O: a& L' q  void kcls(int x1,int x2,int y1,int y2)
- K! J: t# @( j* Q) a# L4 o2 u7 o2 g  {
' d6 R( m. k2 A' D5 X  int t,s,i,j;* d7 B/ W! }9 n
  t=s=(y1+y2)/2;% {! R! C  J- k2 y/ J: T
  for(;t<=y2;t++,s--)' K7 g. n7 ^+ U$ v
  for(j=x1;j<x2;j++){
9 s+ ]3 r! |4 d( a! D0 g  goto_xy(j,t);; U& h6 l* w) N' o
  putchar(' ');0 Q6 o, h5 Z9 @7 v' h! ], G
  goto_xy(j,s);9 L# }( L: `+ [* D; s6 |
  putchar(' ');& T- a3 z5 q- v$ R+ P. V2 i0 c2 X
  delay(10);, s; R3 u& o, I1 G2 @( i
  }
) z; x/ F9 [# H  }# x) D) s" k: c/ a+ ~6 U" Y
  /*****************close screen clear*****闭幕式清屏*******************/
" Z2 |; y6 a& J( p) ]6 `- f$ J- Y& |6 ~# e* P# R
  void bcls(int x1,int x2,int y1,int y2)9 b( |2 a+ I8 m2 X. y
  {
# s: E0 F9 o: A9 F' E. ]6 Z3 e6 V  int t,s,j;
# P1 M& ~, {+ h! b/ v2 f; V8 G4 x  t=y1;! a# O% ^& r& ]) Q8 Z/ L3 _
  s=y2;
. C- R& O, \, y$ t0 r8 S  for(t=y1;t<(y1+y2)/2;t++,s--)" |" A; ]0 W3 s, ^7 E
  for(j=x1;j<x2;j++){
/ l1 a2 c/ x! D, p: ^9 d  goto_xy(j,t);2 t  Y5 F3 d2 Q/ D% A  X" D  R
  putchar(' ');
% w, ^8 T. E) p& {  goto_xy(j,s);% G" j$ W( ^" U+ b: g( D
  putchar(' ');9 ]3 g- ~2 y- b- Z# X
  delay(10);
6 F" r# s) X: A: W; r1 z: ~; D  }: T: T( h* j5 I: ]% {/ W
  }. R/ S8 E3 u) c& M. o2 Y- n- M
  /******************bottom screen clear(自下清屏)********************/
  V' o) Y* e; a! `
7 N% I( n9 O" U( }  void dcls(int x1,int x2,int y1,int y2)% t1 j% p- m) d0 W
  {( T9 C( v1 p& \! r6 {2 Q
  int t,s,j,i;( ]1 `, B) P) i5 I5 G
  t=s=(y1+y2)/2;" `" |% a+ }" @; `- F8 ~1 A% Y
  for(j=x2;j>x1;j--)
  j1 h7 j+ {" u3 ~1 L, F  for(i=y1;i<y2;i++){
. O0 w" N' i% u: T8 A0 ]# K' W  goto_xy(j,i);
9 ?5 K  m/ X9 m) p. i( I' N. `  s6 f  putchar(' ');) u9 j( m, D" j$ I, q
  delay(10);1 k+ o& B) Q5 p- E) r- C2 h
  }
$ M5 T1 z5 p7 B  }5 |% j, w8 ~( N5 W9 h/ d) k
  /******************设置光标子函数******************/4 D' M6 H  @* ~" {( g' [) `; s9 I

$ f9 G3 o! o$ F' v; c. \  void goto_xy(int x,int y)
  B/ S7 Y) d( w/ G  {
0 x4 ]  X! }% [( s6 Y# H& K: D$ @  union REGS r;
  ~# t6 ]0 h& {  r.h.ah=2;( N$ n( W4 E4 w/ w; `5 v
  r.h.dl=y;! B' s# H: T1 ]7 J3 m7 q2 m
  r.h.dh=x;
* V! l' V# S( R& x  r.h.bh=0;, X2 p  y' R% u( ^% B9 o; U
  int86(0x10,&r,&r);) u3 d  m% }) v2 M# L
  }
) d1 M6 M- d$ }; I& Y- P- l4 O* c$ x  C+ z! Y& f
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
$ o6 G! @" o: k* [' k& F
5 w. A" u. R8 g9 z8 X2 F4 i  void puta(void)
  I" E) `. A! N- R  {
6 e- l/ W5 L  m; ~2 N. s  int i,j;
0 b( w, s& x" F8 i; m+ n' n  for(i=0;i<24;i++){/ N$ U2 w/ k, _4 x7 h- I4 A
  for(j=0;j<79;j++){
7 W. W+ a+ I/ \( Z: F% X0 W  goto_xy(i,j);6 J8 i- X, |& q9 m  `0 d
  printf("a");& J- t1 I2 z8 S+ r, I) {/ U
  }
) C; ~" Z$ R" b+ b, j  }% W' }9 U2 u# |/ c: A% U+ Z$ K
  }

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