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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏," f5 t3 U8 U) X) g( Y6 z
/ f3 S0 y) w" X0 Q3 I
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
( z+ {, f0 |( m$ X) r  ]+ T9 ^- J
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 6 g- g8 }' f, ~5 t5 s( R7 \0 A
  子函数及演示程序:# ]9 y& J5 _2 E8 A; ~9 w
7 |- l2 {6 U7 H- V  ?9 a) n" w  l
  #include<stdio.h>3 g8 |% }- d0 N: L
  #include<dos.h>, W7 R- O, D  K
  #include<conio.h>
! {0 h4 [* L) @* i# O, h/ |7 u- H) Y- Q$ P  `  ^5 Q
  void goto_xy(int x,int y);* l: {/ R& M( D+ X
  void dcls(int x1,int x2,int y1,int y2);, C3 K$ ^: ]: `
  void bcls(int x1,int x2,int y1,int y2);7 ]0 C$ Z4 l& u" p
  void kcls(int x1,int x2,int y1,int y2);
. U) o- ^2 L4 i2 r  void recls(int x1,int x2,int y1,int y2);5 Q2 V9 W) H7 J8 K
  void zcls(int x1,int x2,int y1,int y2);, x* P* F3 [0 j- O* a# F- A
  void puta(void);
5 v  L1 L$ d3 ~, h! J* s6 u" J
% H% i) E' H2 |# a6 u9 Z) }3 B) ]* V4 e1 L5 d! D6 `
  /*--------------演示程序---------------------*/
' z5 k/ O8 |0 p6 J* [  main()) a3 e2 X4 p/ Q7 j0 u' G1 }- f
  {
( {6 {6 a1 a$ i6 V: v" t8 X  puta();+ v; h7 ]0 x- {5 i/ K
  getch();
9 ^+ Q4 }8 p; V( B  u# H4 l, {2 O  dcls(0,4,0,79);
  ~, I# c$ ]; }2 x$ O& Y6 G" ~  getch();
8 Z( @, f5 W# Z1 o3 ~0 s  puta();
! u7 ~6 {) B5 [% k. y  getch();
& b" q7 X/ @& W3 ^5 |* x* D  bcls(0,25,0,79);
  L+ }- g# f. M/ w* K. j6 q  getch();9 s2 ?( o6 \$ ^1 G6 @
  puta();  ]* u/ G* q$ L$ F
  getch();1 E. @# Z7 M& u6 s  G
  zcls(0,25,0,79);% b& B* k* k/ ?. }# k7 k
  getch();
6 H+ R7 D4 W$ N' V: S8 Q6 \  }& b* f1 u$ a  |. i
  /*********center clear screen(中心清屏)***********/
$ g/ B3 X# x: C( I  void zcls(int x1,int x2,int y1,int y2)& T1 f2 J/ _% j3 C5 b! x( }
  {
5 o$ d7 C  S/ t: g: s0 E  int x00,y00,x0,y0,i,d;
$ m1 v9 z* j9 T, Q  if((y2-y1)>(x2-x1)){
8 }7 w$ c9 V' c! Q8 X4 ]1 Q7 D7 H5 c  d=(x2-x1)/2;
) `$ v2 g/ h2 }+ U5 L9 Y) r6 v2 D  x0=(x1+x2)/2;7 @9 C) t3 B( B& E! _' ^3 r- X
  y0=y1+d;4 j% w7 b$ Z8 y+ Z$ ?
  y00=y2-d;
! p& {/ O3 s0 R- D) }) H+ @, _- [  for(i=0;i<(d+1);i++)# k2 N8 B2 N$ G' J  j6 V
  recls((x0-i),(x00+i),(y0-i),(y00+i));
. `0 X6 L4 @# e! r3 T  delay(10);
$ S! d+ i/ x) ?- x3 S! f  }
9 V2 L# M; e4 _6 R* T' L: R2 u' O  else{
8 B& f4 D' [/ J" t' F, e/ R; C+ A  d=(y2-y1)/2;$ v- _1 N; S) i! Q# ?( j4 A9 _# l5 p6 Q8 k7 M
  y0=(y1+y2)/2;
5 l3 d* U. f, v' |6 X/ m  x0=x1+d;
: h( J! }7 n$ X0 n$ V! U  x00=x2-d;
* V1 S# E+ b! M  }. J* J  for(i=0;i<d+1;i++)
1 N5 P6 A. Z- k8 Q) s0 m) x  recls(x0-i,x00+i,y0-i,y00+i);' ^8 _# h- T4 ^3 |9 d" G2 x
  delay(10);
, o( U. s4 g  b. f" E6 t6 P  }
7 W. K8 O+ d9 x% n  }
0 X% i. ?# G0 O8 [; q, m% i7 U
3 k$ U+ q8 a8 W. J3 n. a  /************* clear rectangle side(矩形边清屏)***********************/' a- y4 i9 C6 }3 e. Z$ B

; n- M# z) V( E: `  e( B% H  void recls(int x1,int x2,int y1,int y2)
& }  R. S; h- S& G) a" p  {
8 D- ^4 f, C5 M  K* T( n+ r  int i,j;2 A% M$ v. A6 q$ q0 u5 Q
  for(i=y1;i<y2;i++){
8 `( ^! ^1 d" i! o    goto_xy(x1,i);$ s' r' |& _2 j: [7 R+ g
  putchar(' ');
: j6 Y, t" S* a) j6 B  goto_xy(x2,i);( W7 U' \% b% K- V5 m1 W
  putchar(' ');. [1 W9 j$ r. z' n. v# s* E
  delay(10);
! w/ k% h. F! m  }
+ u' t! q2 w2 k) I0 B  \  for(j=x1;j<x2;j++){
, Z3 G4 A) f/ h# [1 q  goto_xy(i,y1);
4 x9 l  m; ?- D! a/ v7 Q6 z  putchar(' ');+ s7 L. Z* a0 r8 \! |
  goto_xy(j,y2);( y! s3 c0 n- f) F
  putchar(' ');
% Z+ L! B+ M" P+ ~/ D: T% K6 k& s. K4 n. [  delay(10);
" R# v' w1 Q5 w" M2 B6 A  }
/ X& [( {) H, z" t: s; `  }' p( Y- \% o* S; H$ ^
  /******************open screen clear(开屏式清屏)*********************/4 d7 p9 v% _$ S( O. n

2 J  _( U/ E! I2 \9 U' `7 C  void kcls(int x1,int x2,int y1,int y2)$ N" a2 N7 L2 ?4 R4 o; H
  {2 B, F, ^% @5 ?3 J. e
  int t,s,i,j;, H3 Z1 t: [) g3 L  t! P( o, \  c
  t=s=(y1+y2)/2;
& W* C& }, r& E$ p- r  for(;t<=y2;t++,s--)
0 i; J$ |% v; H5 \0 Z% Y  for(j=x1;j<x2;j++){
& g' l1 i4 a2 b6 u* n  goto_xy(j,t);
  D! H) l. ?! }- {  putchar(' ');5 v# C0 z+ y3 z4 M( I- n
  goto_xy(j,s);' Z9 `# Y; b; j8 G  b9 h
  putchar(' ');; ~! l- `% \3 W3 p
  delay(10);# w' K1 v  n" p. O9 v
  }/ Z. C8 Q; ^% G4 L1 @# Z( E
  }9 c& b, S0 I% V0 Q# U+ a& s, ]3 ~
  /*****************close screen clear*****闭幕式清屏*******************/
+ n+ _, m4 t4 e9 X: W
5 S, K$ d6 w7 \9 x7 i  void bcls(int x1,int x2,int y1,int y2)
7 x" r5 N* ~9 H/ V  {
0 Y; S# [8 d" ?5 R  int t,s,j;
/ e6 M" `; I6 X( T0 u  t=y1;
& L% P  p  x$ \7 J  s=y2;
1 K( o. h4 }: g/ |  for(t=y1;t<(y1+y2)/2;t++,s--)8 l$ s- x0 r, r" d
  for(j=x1;j<x2;j++){
" Z* O% h; t0 C7 n6 W  goto_xy(j,t);) {& `# P( ^" B1 H6 ?4 e# X3 O
  putchar(' ');2 [5 i' C) F  [- F2 A
  goto_xy(j,s);
: J6 V- E* {7 C# U2 @, W  putchar(' ');
3 r* @& ~) U9 s8 j6 b  delay(10);6 k* A+ h' r8 I& ~$ T: y% x
  }
" L6 B$ D5 H. Z7 K/ g  }/ R1 V$ W* D9 ~% c
  /******************bottom screen clear(自下清屏)********************/" |* H, R4 f/ I) Y
5 ^: I2 a: N- d" u' G. B$ Z7 I
  void dcls(int x1,int x2,int y1,int y2), w4 q; R, M: C
  {/ j; s- ]0 y/ H1 a7 w
  int t,s,j,i;) Q% ?& h9 x& I2 ^
  t=s=(y1+y2)/2;/ w6 e* r+ Y7 E, T% }% ]  _) Z
  for(j=x2;j>x1;j--)
+ y. Y5 o% A, @+ N  for(i=y1;i<y2;i++){
  D4 s9 [. Y2 U4 L' @) k7 A  goto_xy(j,i);7 E; i$ k+ q8 b- U/ x
  putchar(' ');& c/ ~7 X  _2 d. e
  delay(10);
. @1 X: M$ Q9 T! g2 Y3 t  }: K. o. |% j% |' \, C6 a( N
  }. i- h, L# K! _2 t8 s2 Y
  /******************设置光标子函数******************/# {6 d8 O7 R8 |! A6 u# M

- m& a; S2 e" f. U* \  void goto_xy(int x,int y)
# h; N$ R+ R% z: m4 f  {
( F- Z0 P# G1 j2 y/ P  union REGS r;
  m( C  c( i7 a2 u" W" \) {  r.h.ah=2;
4 {$ e1 Z4 U9 i) D' e  r.h.dl=y;: _& K0 G0 I; Y3 p7 [
  r.h.dh=x;
& O9 T8 k. K- H0 E1 }( S4 t" ]1 U  r.h.bh=0;5 o0 J8 }& @1 ^9 |  k: p2 T
  int86(0x10,&r,&r);
- x- x0 x0 `0 e/ H" }  }
+ y6 m( ]/ u5 k- m
/ W3 i' H7 O$ w3 Q% @' u1 [  /**********************在屏幕上打出一连串的a字母用于演示程序******************/4 k: F( `, F. E: o; Z

2 C$ j/ ]# ~7 [% u" z  K2 D3 G1 a  void puta(void)
+ Z0 [1 S! ]- c  {4 g+ J4 E) T8 Z* K" f! h% v/ E, Q' x
  int i,j;2 u) W$ y- S. r2 f
  for(i=0;i<24;i++){5 S% ?, P+ y8 Z. S/ i( J) y
  for(j=0;j<79;j++){
. c+ ~, D0 \3 c% [- d* ^% f  goto_xy(i,j);
5 A9 n, t1 x6 `# A3 w% X1 `  printf("a");& u3 }' i0 m/ ]: F4 ]7 }
  }
+ X/ V0 E$ Y0 n  }% t8 F- i" D9 |. r1 B+ k
  }

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