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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
  [2 R+ `& I) r, s1 T6 I" q' u# P8 N7 ^, g
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
& {, Q! T5 c* t2 W8 Y3 B2 V
3 T) J0 b; ]) n5 s6 a) ]  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. % T# g: h0 Q9 E3 {, o
  子函数及演示程序:
; d9 o, v( C  Z  u4 Y# [
/ `% i) Z" V# l' R6 |: Z9 \  #include<stdio.h>
9 p, B2 s% t' M4 ], H- D  #include<dos.h>
. e( T! t; E# D# v0 ~, k  #include<conio.h>
+ Y: n. r% r6 u$ ?2 ~' x" Y1 O) ^0 t5 G- }  G5 X( k( f
  void goto_xy(int x,int y);: J$ ^; c& h4 Y  X' ]; k
  void dcls(int x1,int x2,int y1,int y2);
% x: D- w! R: v0 }  void bcls(int x1,int x2,int y1,int y2);  W0 r  J7 f, g! S6 [+ @0 O
  void kcls(int x1,int x2,int y1,int y2);0 o8 `: C& f- l2 U' q  F5 @: ]
  void recls(int x1,int x2,int y1,int y2);, |- m6 E, @8 ]# U7 ~
  void zcls(int x1,int x2,int y1,int y2);
, K, u# {3 o; H+ P  void puta(void);
; Y0 \2 o$ k4 M1 d
: J0 G! A2 ^: a9 q( m6 v. f5 _0 \1 A/ u% e
  /*--------------演示程序---------------------*/9 Q8 u8 e% u4 B6 l
  main()
8 r, E% u0 M7 P; j- I$ M  {; ]5 w1 s+ z' z( H) x: W9 S$ N
  puta();' \) t& y  M8 k' }; @* ~
  getch();
; V$ \# h" A4 N' P: d  dcls(0,4,0,79);$ p$ A, i. [1 R+ c. O
  getch();
) i. m) P, S* q9 }2 R0 w0 K" a: j% b  puta();
% F" I  v0 h  F+ l  getch();
# J9 [( m" V# |6 v6 w  bcls(0,25,0,79);! ^2 k2 A% e2 r' D. H) D  d
  getch();! R# J# ]3 y5 o$ l) [
  puta();
9 S8 A; H9 Y4 d& p, `7 w  getch();
3 i% I4 r. B- i9 R+ `  zcls(0,25,0,79);
: I% C" ]% w8 N) h0 @( H7 r7 v  getch();! ]+ r4 |* V3 w
  }' e/ U: D# g- r3 \1 q& X
  /*********center clear screen(中心清屏)***********// ~0 u# U2 K/ m* g$ r7 s7 i& f4 e
  void zcls(int x1,int x2,int y1,int y2)" o' V6 Y& F2 x$ f
  {
6 c1 P) k( l3 y2 E- t  int x00,y00,x0,y0,i,d;! p$ _3 U% M1 Y1 ^5 }( V
  if((y2-y1)>(x2-x1)){/ c1 f0 ~# q1 L# B  Z% C
  d=(x2-x1)/2;
6 @  M0 o( R! g* g: I$ p) l, v% d9 ]# V  x0=(x1+x2)/2;
- n6 Z+ {! q( w  y0=y1+d;+ T" A3 A" I" y" V
  y00=y2-d;# s. H+ ^/ c8 [( T2 p1 T6 @- e
  for(i=0;i<(d+1);i++): c8 r. e+ b* y4 b& ?9 f; ^# S7 J
  recls((x0-i),(x00+i),(y0-i),(y00+i));# W  ]$ F9 T* W* @
  delay(10);
5 J, T0 q( O9 I, B: c( `4 |  }
) ?; I7 p% k; K$ c  else{8 ?% O" c' p' m  {
  d=(y2-y1)/2;0 y, c8 r( {9 P
  y0=(y1+y2)/2;
4 ^- j1 i  W  G7 C. W& d2 ^% S  x0=x1+d;
9 J1 j  [& _2 ]% h1 _, e9 ~) x  x00=x2-d;+ x5 T4 S9 y+ E: B, ~% J3 Y4 |2 o
  for(i=0;i<d+1;i++)
$ o/ s. O& Y2 b: {  recls(x0-i,x00+i,y0-i,y00+i);0 W4 x2 ]- S  N  o: M
  delay(10);
% r% J) O1 I# ]8 @  }
4 Z0 b6 _' ^5 l" _! d8 |$ C+ F0 Z  }
3 m3 m0 ~" R1 I0 B# N7 V, t
  F* ~2 C+ k" K9 L  /************* clear rectangle side(矩形边清屏)***********************/2 C/ P% {9 E  H. ?
# s; D" v. w; @, Y
  void recls(int x1,int x2,int y1,int y2)
8 ?/ n+ Z7 U8 R/ e$ W  {4 g4 k, K( J% t' ?7 z& D4 n
  int i,j;
1 d, B- `" @( R! G2 s% ?  for(i=y1;i<y2;i++){
; g7 d  n) R4 }$ ^    goto_xy(x1,i);6 ?2 w* r1 `- \
  putchar(' ');
9 C7 |8 m, u8 H5 r' ?  goto_xy(x2,i);
2 q  V" z) L* z0 @# Q) V6 w4 Y  x  putchar(' ');" Z5 `2 c9 b+ X6 y
  delay(10);
5 _0 f0 X3 u- y& Y; U- ?  }& e9 @0 m# F7 |9 B- X# X
  for(j=x1;j<x2;j++){& s* u& p3 {$ u5 X& o9 `9 m
  goto_xy(i,y1);
" o7 e& ?2 e9 r7 s! y' W  putchar(' ');
4 ~% ?+ }4 j* b3 J4 C% U- n, r  goto_xy(j,y2);
' Z% g, p: {! Z+ M3 m% n  putchar(' ');$ ]! Q- _1 Y  a, \0 h( Q1 x- o
  delay(10);
& ~' ^0 t, Z: `, B  }
  z. ^+ m  ~2 _3 r  }
" ^3 T' Q, A1 f$ K* [  /******************open screen clear(开屏式清屏)*********************/
' i, j- f9 Y$ \' }$ u. K7 S7 a3 @% H6 @* e
  void kcls(int x1,int x2,int y1,int y2)1 N- R8 `% K; q8 Y  o
  {
) b+ V+ G9 n7 p0 P* n  q  int t,s,i,j;, o+ y; c/ a) T! z; R
  t=s=(y1+y2)/2;
" }2 }. ^" i; K  B, u  for(;t<=y2;t++,s--)
. a$ O3 Y) O% A- u9 o/ b  for(j=x1;j<x2;j++){$ N) t5 w' [. j( [: T# G
  goto_xy(j,t);
3 q" p7 @; k8 y* X- P* V$ {  putchar(' ');
8 r- L! x0 t2 L  P8 y' J  `* L  goto_xy(j,s);
7 q/ o5 n, T" e2 K7 k" [( }  putchar(' ');; p& M4 e+ ?% M* f& ~1 y
  delay(10);
! |# e  O% F3 ]' r- o: A1 u  }( l1 V8 P5 w9 d5 V8 T6 D' {
  }  r  X, m% C; G1 F9 h
  /*****************close screen clear*****闭幕式清屏*******************/
5 k3 S8 X( s" B4 {  ~2 i3 C& ~! h" X9 x6 J
  void bcls(int x1,int x2,int y1,int y2)) D9 Z+ l# h  ]' s4 }! K3 b
  {4 i0 _4 w( K- ]4 ~5 c  h& O
  int t,s,j;% W/ B$ w# U: b( L0 B) x& k& l
  t=y1;0 m' \: L. ~2 c8 a" s8 P$ m
  s=y2;
; N6 l- _" j8 Q* Y5 U  for(t=y1;t<(y1+y2)/2;t++,s--)+ {+ j3 \2 b3 G! [7 }3 v
  for(j=x1;j<x2;j++){% D% |. E$ C5 f  @; Z& w
  goto_xy(j,t);
) t) a* @( B2 v  putchar(' ');6 g) j9 g0 n% z
  goto_xy(j,s);
; x8 S* ]$ ~, v9 x4 K  putchar(' ');
, c$ L! k/ l) c$ P, g! A  delay(10);
$ l4 d* w! N- n2 {5 n8 l( z  }7 P3 B/ z  N0 i  o9 w
  }
: D8 ^+ v( P0 O2 ?7 K3 I+ q8 T  /******************bottom screen clear(自下清屏)********************/$ z- k0 y) _6 i6 L; D* q

0 @' t. _( b6 F7 [  void dcls(int x1,int x2,int y1,int y2)
& F6 B, w+ L5 g) v7 q  {
* s( i9 B) Z  }8 N3 d: p  P1 t  int t,s,j,i;! ~  U7 d$ P0 U4 L8 g
  t=s=(y1+y2)/2;* d- T( K$ @! s8 A8 e+ p; m
  for(j=x2;j>x1;j--); w: w8 H) y  J) k# K9 U
  for(i=y1;i<y2;i++){- n) R( Z7 J3 p$ f
  goto_xy(j,i);! M$ ]+ W2 Q3 Z. v9 u6 O9 o% g
  putchar(' ');$ B  j$ h* \! o$ Z8 w
  delay(10);  P# G3 |4 z1 f# `1 r
  }
+ z8 D/ `% O) e2 B3 T' f  }  y8 S/ P# Y' \! S* e3 W+ ^& A
  /******************设置光标子函数******************/3 I! b9 Z1 O- ]+ j3 Y6 ^3 ~
9 ^0 S1 q% I9 @2 @) L% p
  void goto_xy(int x,int y), k& ?2 s/ e) i' P/ e& d" Y2 j
  {7 c+ z' p  F8 _/ p$ y
  union REGS r;
0 F# b4 `. D3 U$ D  r.h.ah=2;* S. x& m; _2 R  h/ F- n# u
  r.h.dl=y;! f) j2 m0 e- w! D8 e* B
  r.h.dh=x;
0 Y% c0 {8 g1 f  r.h.bh=0;
" O% `& o% a$ c& D' @  int86(0x10,&r,&r);2 y  G7 s% [1 g& _, T
  }
) L2 [6 a. N% Q; `" a! K9 x! N/ h- f
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
) Y6 F7 F& x+ O/ Q
( \8 a$ n6 x" \2 Q2 z& S  void puta(void)/ h& B4 y' o) g* ]+ h
  {
/ }9 k7 C/ H& I1 @) m, z9 f  int i,j;
& B1 Z0 x; c/ o. a) Q* o$ c  for(i=0;i<24;i++){, K2 l# y: B1 A/ e- ]: j
  for(j=0;j<79;j++){
' b& W8 E9 S9 C! Z8 G, R# s  goto_xy(i,j);
8 y- O' O. X8 R/ \0 o  printf("a");
/ I/ N* z+ v. e. ^  }
' G- N( l& J  K: N  }
) F! L# S( F% E% k. N8 J  K  }

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