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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,7 o. h. P3 |( c) ^. U! z# B# ^( a
0 ~& g2 k' n/ y- T. t" x/ w2 \
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里0 R3 w, b% L3 h: H7 j9 S+ h+ H
7 k6 \; c. I9 U% P! U5 M
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. " z$ q# m5 s- G* I+ `' g. h- ^
  子函数及演示程序:
: E6 C9 _5 ^$ y: P1 O
- b3 L( G" t+ D. R' |9 O  #include<stdio.h>$ D. S; a$ q. I3 X
  #include<dos.h>
1 y3 Z; H; ]8 l4 |! Q$ d* ~  #include<conio.h>- B8 ~8 Z$ L, q2 _, b. @, f

) }' k, K, {3 Q1 m  void goto_xy(int x,int y);1 z& U! }+ M# ]1 @- S" L5 R2 I
  void dcls(int x1,int x2,int y1,int y2);: g# c5 C: F* A
  void bcls(int x1,int x2,int y1,int y2);7 \4 e, G# @! A1 L; z3 M: @; t
  void kcls(int x1,int x2,int y1,int y2);
5 S9 Q/ l0 Z* S4 c. ^2 v  void recls(int x1,int x2,int y1,int y2);# _6 v- J/ V! Z7 A' _
  void zcls(int x1,int x2,int y1,int y2);
$ z: x$ ]( [: F, G# w  c  void puta(void);( V! O+ m. x: }
. G, ~* {" @* z! V( j$ G& Y/ B
0 p- P6 r  |! l- y' M7 B, z
  /*--------------演示程序---------------------*/
% i& p3 Q% g$ k- y  main()
- ^, H4 T; n) |7 @, C( }1 M  {7 e& K9 \5 g* r3 d0 f8 u
  puta();
* B5 B6 m+ f, T9 D  getch();6 y% P4 ]7 ?3 v
  dcls(0,4,0,79);
! @, O# T( y$ |$ E  getch();, E% `9 X( a0 ]5 m, ^6 l! R
  puta();6 i% [" S/ f: N* Z5 c
  getch();
3 ?+ o, G- Q  |  bcls(0,25,0,79);- ?$ ?+ d3 r5 N7 x# I3 R+ j
  getch();
9 c1 ]4 p' K  W5 F8 Z  puta();3 R+ S# \9 H: @& N
  getch();
& e' l3 D9 [' u" W: A  zcls(0,25,0,79);# T: t8 t' t2 V* C+ U! O
  getch();
) `; P% X% C+ e' I' V, J* b$ v* O0 m  }
# H0 u- O8 X! u  /*********center clear screen(中心清屏)***********/+ g/ o0 Y6 `) |8 t1 R
  void zcls(int x1,int x2,int y1,int y2)
/ R* v/ \2 H0 [  {
2 g  ~  x! I6 d" s( C, t* V+ `8 ~  int x00,y00,x0,y0,i,d;
; K1 i( m  \+ Y/ n1 r6 Q  if((y2-y1)>(x2-x1)){7 P  F7 ^9 M3 o5 M$ L. n
  d=(x2-x1)/2;
# L1 b3 G7 y5 T  x0=(x1+x2)/2;1 i, |! z% a( ?7 \) `
  y0=y1+d;
" C2 `" Q' Z# O; ^* H3 N  \  y00=y2-d;
$ Q% Y5 I6 j( T  n  for(i=0;i<(d+1);i++)
$ x2 s" j) l- Z" E6 ~& s  recls((x0-i),(x00+i),(y0-i),(y00+i));' I2 u3 j5 n6 N8 b8 {, y; d
  delay(10);
$ x! [# C0 l: M% v! s  }2 [3 C# S, `9 D
  else{
( H4 V8 n, O" e: D/ {/ Z  n  d=(y2-y1)/2;
+ Q% ~$ ^- y% t+ `  y0=(y1+y2)/2;* p' h$ Y  O* R7 [& K9 O
  x0=x1+d;6 T) g$ J- V4 z6 K0 U. c/ t
  x00=x2-d;8 u/ ]  q3 m0 q
  for(i=0;i<d+1;i++)) [& P; e) {* Q8 {' K
  recls(x0-i,x00+i,y0-i,y00+i);' b7 x; `# e% P4 c, z
  delay(10);0 i& W  H. D+ f( j- n5 l" M0 b
  }
/ @% j3 t9 a, E  }
$ Y) V5 U: D5 p9 d8 y- _3 [
7 g# L7 c( v% s2 Q3 S8 E/ b  /************* clear rectangle side(矩形边清屏)***********************/$ r6 t1 F; Z+ [' J
; d! y8 @6 g6 T) M8 ?
  void recls(int x1,int x2,int y1,int y2)( T/ R: z9 c8 n- j; C
  {: o" G- O; n6 L( Y+ [
  int i,j;% \! D/ @/ h' A: Y- W( m0 s3 B4 Z6 }
  for(i=y1;i<y2;i++){
3 Z4 d3 u+ B; U, e$ r( A    goto_xy(x1,i);; o- Q9 _: g4 O; j6 {8 a$ {
  putchar(' ');
! S; O, c, p" ~! o% y  goto_xy(x2,i);
* @5 p0 B5 v9 Z- v  putchar(' ');
; V/ M. D' q+ V5 T  delay(10);2 t7 A# u2 H0 C+ B* M1 P+ T
  }
; @3 w9 x: S- V2 J9 C4 h  for(j=x1;j<x2;j++){
# F2 Q* s/ u0 p4 T  goto_xy(i,y1);
5 q9 R8 O+ E- _% r6 B  putchar(' ');
: Z7 r' n; b: G/ O5 b3 u1 c5 b  goto_xy(j,y2);
! d8 r2 @( b7 F6 c2 N8 q  putchar(' ');
1 v! W) U& V% A: F7 d1 c& B1 [  delay(10);
6 n. x; v* A) M- I! K) a  }
  T) D% K+ t( R  }7 y' B" y9 t: Z* W/ X
  /******************open screen clear(开屏式清屏)*********************/
( ]" T1 H2 o' v; R$ `% k) A' V& }& Q, ~
  void kcls(int x1,int x2,int y1,int y2)0 C; q0 P' P9 Z+ s: h+ L) ~
  {
& c) e, c9 |6 J# K8 G$ r) c  int t,s,i,j;
& C5 @1 H" j: k6 u6 l0 q  t=s=(y1+y2)/2;
! B( l1 o* y8 Y# m! ?, f; T  for(;t<=y2;t++,s--)6 [3 K5 B9 I$ \4 L# o
  for(j=x1;j<x2;j++){
* c" P" k3 r% Q1 G& W' A  goto_xy(j,t);0 h$ Q1 ^: V4 ]4 g
  putchar(' ');0 m- j8 D% E1 ?7 E" J8 n4 J
  goto_xy(j,s);, M6 Q  a) a. y# U$ u4 V& k
  putchar(' ');
! t" ?% P* R8 X8 M  delay(10);5 x! m5 }- t3 M2 W) B0 F; Q
  }
3 r) R! Q8 k1 C# U' N$ z  }  I% [* T7 _/ _7 z; S) H
  /*****************close screen clear*****闭幕式清屏*******************/, f6 e+ W: s  u

6 V7 b$ k0 N: D3 M  void bcls(int x1,int x2,int y1,int y2)7 }( ^) S$ C3 h% |
  {# r; Z0 i5 Z1 m* J
  int t,s,j;& y+ p% C2 N& x
  t=y1;! B% D. Y! c& o' ?# U8 t5 A( o
  s=y2;
5 p3 I" N( Y8 M) g( x" l6 [+ o  for(t=y1;t<(y1+y2)/2;t++,s--)
% N; g1 r; U4 M" D  for(j=x1;j<x2;j++){& Z' |" ]4 e; G, t' G2 m) z( T
  goto_xy(j,t);4 }6 B% _# J9 _$ _4 |- `/ B
  putchar(' ');& t" u& \9 b. k
  goto_xy(j,s);: x. g6 ]# ~) p5 A/ T) a# u) h6 j
  putchar(' ');* Q9 J8 @. r/ i7 J7 o& y
  delay(10);
8 ]% J- g; k; r# Z7 Y+ u  }2 z1 P9 S. S) J$ H8 I
  }% W; N# V6 V' c! w. C) ~
  /******************bottom screen clear(自下清屏)********************/
6 a( `% U* n+ B8 V; ?4 ]
1 ~9 x3 v8 f& O& N2 y; q+ U! F  void dcls(int x1,int x2,int y1,int y2)- z* S6 M  C& Y- ^$ O# X) X; I
  {
" s0 T+ _: x& }( T7 O  w% P  int t,s,j,i;( V, I  j4 V# G" @  H
  t=s=(y1+y2)/2;( B8 f* C6 w! E6 [& {+ n
  for(j=x2;j>x1;j--)  S/ S7 o& T  D. o; B' A/ A
  for(i=y1;i<y2;i++){
. Z& C. R" K5 v" b/ i  goto_xy(j,i);
; F9 S0 v! f- \8 [6 q7 r. B  putchar(' ');# j( K' r) H. Y- ?
  delay(10);. ]& N% V* C9 a0 D+ G
  }
5 G# [9 ]/ r2 _9 w6 D# w  }; h) }4 }8 q/ u% |' G! `# T  L
  /******************设置光标子函数******************/3 k1 c# z; T: f- @& x$ X8 E" q

* h' l; ~( I% H  void goto_xy(int x,int y)& `' q+ W6 s: u% i) L& B$ {4 X) P
  {6 [- X5 o% \% C* a8 D
  union REGS r;
/ H5 C; p6 W. k7 v; e/ W+ A  r.h.ah=2;) y" U% e3 H6 v" n  T% Y' k
  r.h.dl=y;
7 T, P9 x/ ]$ Q+ N  r.h.dh=x;, U2 ?: y, V4 G1 h
  r.h.bh=0;
5 J" T& O! E: H+ z6 W' l2 p  int86(0x10,&r,&r);# u! Z* g# a3 R
  }5 M& S8 Z, |2 U  j- w6 X- c4 }

7 |: u; R- H* D  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
' M9 S8 g" [/ T$ I2 j
& F: o. f7 O2 r  void puta(void)6 B4 g$ K2 F# P) }
  {
! H5 T: |8 P6 B5 p0 O  int i,j;
; O, l- l! x, g6 X% u  p, R( F  for(i=0;i<24;i++){
% }4 e3 }+ L$ ^- @0 V# ?% T  for(j=0;j<79;j++){3 y2 u( T* f! Q0 n% I
  goto_xy(i,j);$ h& \4 M' V3 A
  printf("a");
  C4 E/ S: K, ?/ c! a) j  }
6 [( L& n  H0 @4 g! ]  }  s7 z0 j! \/ O3 e# i% F; A
  }

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