返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,. F) E( L/ u6 w) q0 {5 S0 v
5 e! n2 ?/ F4 I: E9 o/ J
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
2 k. r0 Z% _9 }5 x; B. ?; C% `& H9 `1 J# V& Y5 f
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. $ O' ~5 D% q% z
  子函数及演示程序:
" J4 s8 C; G8 g, Z
0 q0 X7 b- j3 u* M/ O6 }  #include<stdio.h>
& m, ]2 k+ _4 p4 G# X; G; \- E  #include<dos.h>
$ p! X* L$ H2 Y. d% K  #include<conio.h>; a4 L$ N; g* ?$ e1 ]
. K  u# v0 M0 y3 d" G
  void goto_xy(int x,int y);, @) `0 @- R; z1 ?' p
  void dcls(int x1,int x2,int y1,int y2);
& [4 F" Q( @" n3 Y3 z  l  void bcls(int x1,int x2,int y1,int y2);4 j: l  r+ W8 a+ n2 I
  void kcls(int x1,int x2,int y1,int y2);
  X$ z' ?, F5 m2 Z  void recls(int x1,int x2,int y1,int y2);# l4 J- h& K  ]! @% O2 B
  void zcls(int x1,int x2,int y1,int y2);
( _* Y" w' d& l, N+ r- D) l  v  void puta(void);8 l( d6 b3 g) _; W: N

* s* n. r8 b  @4 P8 a6 N8 U2 I0 F9 r) J& g# u( j( e$ _
  /*--------------演示程序---------------------*/8 p, A4 G, A  }5 T
  main()' L8 P4 M5 a0 Q
  {1 ]* V4 Z; p! a, g# M! S) O3 G
  puta();
7 C2 l4 I/ P  M2 [: j6 s  getch();
4 Q2 v1 B4 E7 J  dcls(0,4,0,79);" m2 c/ B1 \8 D8 J9 J. N
  getch();
" _3 B* y  M+ B: ]  puta();& @" d- Z8 [5 h5 r) e- J, ]: v
  getch();
$ L) C8 a+ O8 l  bcls(0,25,0,79);+ ]  D/ M. y1 f
  getch();9 v# A2 J( B. T& e. w/ ]0 V) \3 A$ Q
  puta();2 F+ x  Z( m0 B) h' w, @
  getch();
: B3 O, c3 D0 N3 ]+ ^  zcls(0,25,0,79);2 X. R$ ^' U8 r1 p* b
  getch();
3 n0 N8 _9 w( }# O$ r) P1 O  }
* v2 u; H7 y- m8 I! [  /*********center clear screen(中心清屏)***********/
. [* m& }9 S# P# a& X4 ]; ]  void zcls(int x1,int x2,int y1,int y2)
3 _- X/ b/ X2 |- K7 o5 j  Y  {2 d3 c* Y2 u, C# k# l6 S9 H7 K
  int x00,y00,x0,y0,i,d;+ F! q- Y/ M' g; l* N4 z
  if((y2-y1)>(x2-x1)){
1 z4 i7 ^; x! q7 I  d=(x2-x1)/2;' c8 ?; l# g  Y2 A2 b, ~2 f& ?
  x0=(x1+x2)/2;
6 J0 p6 O( l9 r7 W2 E4 A5 v  y0=y1+d;6 `3 G2 N( O. U' h1 {; U$ v' F# I- Q
  y00=y2-d;# B, J. Z% k* |9 M" H* E
  for(i=0;i<(d+1);i++)
5 Z) p% g0 T2 o; J4 W3 C  recls((x0-i),(x00+i),(y0-i),(y00+i));2 T2 t! z& N5 c% U
  delay(10);$ H1 N% O9 @, F: Z
  }; O1 ^% h3 u' d$ }1 O; F4 ^" d
  else{
5 s! U+ r% {0 u  d=(y2-y1)/2;
0 ]9 U$ N& [" q  y0=(y1+y2)/2;; k, V7 Z8 V2 B# b  Q) j9 N
  x0=x1+d;! g* D/ h# t4 p1 ~6 E
  x00=x2-d;* S- {0 q8 J& @( n
  for(i=0;i<d+1;i++)) w* @1 f2 ^6 z
  recls(x0-i,x00+i,y0-i,y00+i);# Y/ p; H4 p, F" B! H
  delay(10);  H3 ~# M& f( \- g
  }7 ~5 Z* ~, h7 E0 S3 V
  }
( V/ e/ J" Z# S4 E- G9 b* N4 J
5 F0 a; u6 q. O, w3 }  /************* clear rectangle side(矩形边清屏)***********************/
  H4 x( v; A5 e" H6 a0 s* m
$ e# e' F; n$ Z4 b5 H6 Q7 ~  void recls(int x1,int x2,int y1,int y2)
" N) K  ]2 `* _7 L" J  {9 S; m, m9 T  B6 Z8 U, F6 k- S
  int i,j;/ C+ l" g: j% r5 `( S
  for(i=y1;i<y2;i++){+ q5 Z4 P; W/ h7 H( \
    goto_xy(x1,i);, T  S$ O* ?) }- c) B" L- `
  putchar(' ');' n  o+ [& J) i* D# C9 J
  goto_xy(x2,i);% Z9 l2 E8 _5 @- k
  putchar(' ');. {% {" \) b9 Y1 b( ]: j+ ~
  delay(10);8 m/ _& O6 G. ?' f: k
  }9 C4 u2 Q- S4 ], _; H  A
  for(j=x1;j<x2;j++){, F0 K& j  Y1 l' {- T7 W
  goto_xy(i,y1);
! r0 J# G/ u" M+ _4 D3 y8 z  putchar(' ');( t+ W2 O: M4 a  x
  goto_xy(j,y2);1 N6 g$ R' }: w
  putchar(' ');
( k' h. o$ }/ r0 L( j$ D  delay(10);
! e0 O% R4 s3 |( `8 m; G  }5 g6 g/ E6 ]" S% I) _; Z& q$ E
  }  g1 }/ z- Z) E+ J1 G. U6 f
  /******************open screen clear(开屏式清屏)*********************/0 L" _! D( c3 Q6 t- t2 L5 u$ a

9 W( t4 H5 |6 ^& n( R  void kcls(int x1,int x2,int y1,int y2)# v. ^8 I+ `0 u
  {& k7 C; R5 c9 ]' g; B: d
  int t,s,i,j;
  o- s- J& ?$ T, B* _1 D  t=s=(y1+y2)/2;/ _0 ~5 Z8 {: L; H( o" ]2 T3 ]7 l
  for(;t<=y2;t++,s--)
7 e4 S% R8 q& j  for(j=x1;j<x2;j++){
5 F* J1 x5 L" a* g6 |3 w  goto_xy(j,t);
; h3 j  o* x, }0 U& H4 }, a0 L* J  putchar(' ');
) N$ _% P9 D" O+ X# u" p3 O! ]$ V  goto_xy(j,s);) w/ w/ E$ ^3 L' A9 n$ @
  putchar(' ');
3 F4 N7 z$ C9 _* m( c  delay(10);
) \; A& j3 u' T8 |& N  }1 S+ @9 o, Y4 O
  }
) w4 D; v8 z% g) r  /*****************close screen clear*****闭幕式清屏*******************/
+ o& D3 _4 ~1 S& U% c6 B+ s. r+ R% Z) V
  void bcls(int x1,int x2,int y1,int y2): V  U* V. x) j+ a) ?7 q. S) r- n
  {. e& l! c# @* f, R$ b& D2 h8 \
  int t,s,j;
- E6 U5 C) _, P! S$ _! x7 _; c  t=y1;8 |- Z  y, M0 O) z
  s=y2;" ^) l9 ?% L6 u$ W
  for(t=y1;t<(y1+y2)/2;t++,s--)
& z- n5 R2 t  e. {( @  for(j=x1;j<x2;j++){
% \- n( E/ M# Z8 S) s# Y  goto_xy(j,t);/ c. ^+ x5 P" [$ y: V
  putchar(' ');
& h  N: K) f/ M+ t! q! t  goto_xy(j,s);
' c% f4 \, Z! q9 J  putchar(' ');
' ]  G3 ]2 t2 G  G  delay(10);
% K5 C& H4 {% k1 j  R7 f  e  }
1 I, P6 ]4 z5 _' n1 j+ D/ }/ s  }. i- f, F/ L- T9 ^8 C5 {  N
  /******************bottom screen clear(自下清屏)********************/7 l8 D1 {9 V5 T9 Z' b+ a

( `5 P& C8 T$ E' }1 d$ f  void dcls(int x1,int x2,int y1,int y2)
, R  f0 m% g9 `6 s* j/ {  {3 S! s" v! D. ~3 G4 [5 a
  int t,s,j,i;! F$ @5 T0 M# ]( N7 v
  t=s=(y1+y2)/2;% q9 `0 G, f- K6 b1 O6 G
  for(j=x2;j>x1;j--)
" |9 ]. C. J; m) m* q( |  for(i=y1;i<y2;i++){1 o" y6 a% a2 d
  goto_xy(j,i);
2 V6 y1 S8 i* @, m7 }  putchar(' ');' b( f. T; v7 T/ q
  delay(10);
/ ?$ e6 R& h! R7 q$ u7 Z: Y  }
- Z) T6 E/ |: [0 u; z7 \) j/ p( ^# f# \  }
5 t# }& x6 @4 e  /******************设置光标子函数******************/
" t: N" J& w. Z, e/ B7 p
8 ]& C5 i) {7 U% j, E  void goto_xy(int x,int y)
1 \( b! d4 y% P6 [6 ?  {
$ z" C. f. ~; Y8 K' e  union REGS r;. E. B' j! s5 Q1 s$ g
  r.h.ah=2;/ Y* y! K, m, Y9 W3 F  T
  r.h.dl=y;6 ~7 H: {) B8 S2 \! A# H# b
  r.h.dh=x;
6 O% {8 S% e! ]9 d0 S7 j9 Y  r.h.bh=0;: U. V7 F  a& [" L9 M. X
  int86(0x10,&r,&r);
& U+ I* ~% |5 `7 {- R# F% d3 S$ k' [  }
. {( |' f( o& H  t. |; Y, N
# D/ u( o3 {1 _" U* v8 U* d  /**********************在屏幕上打出一连串的a字母用于演示程序******************/. J! q4 q" \: {2 F- K8 a2 p

% K1 d( H8 X* m3 r$ r  void puta(void)" z; W3 R" d* y% u/ K
  {4 j8 L! c$ e4 P. M  W
  int i,j;
* ^* z7 F: T- D7 x, m7 y$ V  for(i=0;i<24;i++){
* e; A. e4 U  Z$ m6 O/ R/ B  for(j=0;j<79;j++){. [8 m1 A4 o8 g$ C
  goto_xy(i,j);+ c/ |! M8 Y  u8 Z: A
  printf("a");9 Y- @1 _, q' A
  }
- |, {! i% ^6 L; V9 A  }0 n, R% D  W2 D/ m# N% p# M4 T
  }

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