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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
2 f+ q4 @& A: [. |" W0 S3 [
3 Z' d$ h, J7 l, g2 v& z  A% g  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. L3 b$ p2 k3 \! `* n) f0 i
" y6 A# O3 t6 k8 c' O  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. , d+ l' _* T7 _# l0 p
  子函数及演示程序:
" x! u3 P3 ?' W: s. q
+ G/ k  M* K6 b( }" b( Y  #include<stdio.h>
; @6 n( C/ J1 w# e$ V  #include<dos.h>3 y/ v9 t: P+ R* w
  #include<conio.h>5 _  z" \& ~$ H1 G- [* z
) R; m# {* Y. z2 o. O
  void goto_xy(int x,int y);/ g. Y. _8 o1 I  x
  void dcls(int x1,int x2,int y1,int y2);
, s" \7 J6 ^1 G7 {+ ~% Y  void bcls(int x1,int x2,int y1,int y2);+ \8 U' E$ ?8 @
  void kcls(int x1,int x2,int y1,int y2);
! Z* d# f& h. x! O) W  void recls(int x1,int x2,int y1,int y2);4 \% A! x; L. v* A9 n
  void zcls(int x1,int x2,int y1,int y2);
: Q7 u% p5 W  M6 W  void puta(void);
+ @: }8 m* b- T) x6 S3 c2 O- b
2 G9 d1 n' R. {, F# U
# W% |% R4 `/ [* ?* C# S  /*--------------演示程序---------------------*/
" g) h, u- b& Q7 g. J% j  main()# }! C, [" i# O/ U1 v( a$ T9 u2 g
  {
& ]  Z9 h! [, K3 P  puta();" U: G- g( W7 u3 y3 C7 m- C
  getch();
+ i5 }$ \/ X  Z7 }  dcls(0,4,0,79);
' r$ J7 Q- `/ S* E4 P5 f  getch();' W( L9 D; ^8 X2 L: h( l+ I
  puta();
/ S1 K$ X% o4 {2 V; B/ v  getch();
. o3 t7 h% q, o- e& b  bcls(0,25,0,79);
5 B( j0 l' N% O8 l- W  getch();. y% {0 n; u+ U! e! B
  puta();
8 W* Q  L8 `8 `# H9 F  getch();' F/ }0 n5 K' `) k( q3 H
  zcls(0,25,0,79);7 N: z8 U& L/ S/ x, E/ B
  getch();
8 C1 z/ X0 k  s3 c* |  }
  x% l1 H1 z- D1 I0 v# m" b9 Q# ]  /*********center clear screen(中心清屏)***********/
# @" q9 D1 M0 s" _/ c  void zcls(int x1,int x2,int y1,int y2)
, `9 q) I# x5 H7 {  {. B. Q, K$ G1 _& P) e- D
  int x00,y00,x0,y0,i,d;9 x2 F; d/ O+ k: J7 u
  if((y2-y1)>(x2-x1)){
; U  g! V0 R. m/ j; @  d=(x2-x1)/2;- V9 I8 e1 ]* K; T4 W% }& G
  x0=(x1+x2)/2;2 Q9 X  X) B; `0 P# `( Y- T8 J) k
  y0=y1+d;# T/ C. d- z0 a0 y/ E7 D4 A
  y00=y2-d;( _9 X3 H' B. H+ h
  for(i=0;i<(d+1);i++)1 y. T" N5 F# g, G9 b
  recls((x0-i),(x00+i),(y0-i),(y00+i));
9 p3 M5 y& [* q  delay(10);
5 v8 W9 `: s4 r5 ^" i  }
" v' \. ?1 G* C  else{3 ]8 ?4 ?% e& }' x
  d=(y2-y1)/2;6 R- T. v4 }" k* V& E6 U
  y0=(y1+y2)/2;
1 l  u0 f+ l6 d8 w+ m) c' I  x0=x1+d;3 v  I5 W2 U0 _: f" }; N1 m  R
  x00=x2-d;
' b& j' }( \5 _# S2 a/ U, Q  for(i=0;i<d+1;i++)4 l8 x7 K6 a: w  V3 W) j6 c
  recls(x0-i,x00+i,y0-i,y00+i);% ], m- a% E- H$ R9 v; f4 T
  delay(10);
, G8 R& M9 x; C: i  }
/ D0 G( C5 `) T' G  }
4 C( b  b4 L% ?2 v- V+ B% n
6 O* s& }! h; F7 K6 s7 j, f  /************* clear rectangle side(矩形边清屏)***********************/
, `% n* I' R2 M2 w  U  Z+ ^/ j# ~  n4 |' o4 X2 |
  void recls(int x1,int x2,int y1,int y2)8 T$ x4 a: c( ^3 i9 v
  {
6 X  ]1 w* H3 Z; O; Q, a0 u  int i,j;
; J: L! |9 ?: U# g  for(i=y1;i<y2;i++){/ W; o9 d- [) A( N
    goto_xy(x1,i);
6 s% }+ B' `0 J9 }# [7 z2 a  putchar(' ');3 p7 u' A% E/ _5 f
  goto_xy(x2,i);5 Q) l) G4 y) s2 C/ H
  putchar(' ');
, Q8 ]2 Q$ [! `! Y7 w# M  delay(10);
9 c1 S4 m; L; q$ Z  }
( v7 F, q/ Q* J: N5 l  for(j=x1;j<x2;j++){
: q# D, ?8 S4 |, ~1 q4 u/ s  goto_xy(i,y1);
7 q/ [1 q# r5 ^* C% _  putchar(' ');
: I  k- E- L" u+ w: h  goto_xy(j,y2);
4 r. w# X* a* j1 b2 Z! P4 g  putchar(' ');; M+ @- T( \$ H
  delay(10);
# K' [3 h! W  u* f  }& {8 ~: z3 j) a+ O" A/ c5 ~6 \8 h
  }1 n* J, U6 x  O( n
  /******************open screen clear(开屏式清屏)*********************/
- t: O$ c+ i+ I, e- p
2 t, O$ p$ H0 ?2 Y% m  void kcls(int x1,int x2,int y1,int y2)
9 M' N- n. E6 ?* o; t  {' f/ m# t* h  f- U1 A. L
  int t,s,i,j;  x5 M; c* O7 c0 A7 Y6 N" C8 f/ O
  t=s=(y1+y2)/2;1 V3 g& X4 O! U8 ~3 i4 V- N! a
  for(;t<=y2;t++,s--)4 p( B( m6 F/ q5 |: ~' R
  for(j=x1;j<x2;j++){/ A1 R7 a, [7 N0 U6 m
  goto_xy(j,t);& \, M9 P& K+ [% d! m
  putchar(' ');
# |$ j) Y0 ]; t  goto_xy(j,s);
' F# |0 N( P  g, R. R& ]  putchar(' ');
" r& k3 J' f$ R5 P7 G  delay(10);
- `: Q# Q1 J0 @5 M7 f$ A9 H  }3 q' S( Y1 Q; o# z
  }" _' F6 [" ~+ E! V
  /*****************close screen clear*****闭幕式清屏*******************/
) F1 ~7 A7 [3 q
8 }, F# h9 i' V/ e  void bcls(int x1,int x2,int y1,int y2)
* ^  S9 l( j) S; Z$ _  {
$ y3 Y2 B' c  l( b) Y8 ~0 E  int t,s,j;
5 U. F' w7 O3 s8 s: x% I  t=y1;4 I* f. _, A7 H' _
  s=y2;; `1 z# s( @% o1 S# f
  for(t=y1;t<(y1+y2)/2;t++,s--)" U; a) f) t7 ^, |7 k0 o0 z( e
  for(j=x1;j<x2;j++){; x' g$ z/ w1 P
  goto_xy(j,t);
6 z) ^- K1 F$ @+ b, \  putchar(' ');
7 P# t* v3 f8 d. I  goto_xy(j,s);
( y; a) m0 \( X, V& w  putchar(' ');% r2 G3 M9 t' T9 Y2 G
  delay(10);. k0 f3 S& g7 A( u" ~
  }
) u! r. m6 R# v5 D$ R% d  }; V0 A" c" g) a. j
  /******************bottom screen clear(自下清屏)********************/
" z) N9 t3 V' a+ s6 C9 i3 P
; g: n8 K7 W% ~" P2 N  void dcls(int x1,int x2,int y1,int y2)
" F$ H6 p! X6 b  {, D- c5 @  m/ X( w+ n, ~
  int t,s,j,i;
) m; C5 {5 V4 ~3 R  t=s=(y1+y2)/2;1 Y  h+ W) C5 |: ~. G# K3 t
  for(j=x2;j>x1;j--)! @: b2 }4 q3 `( d0 G
  for(i=y1;i<y2;i++){
, P( b' I% m- d+ Q1 b  goto_xy(j,i);' }! a  w1 `3 q# i! y4 P0 `- e
  putchar(' ');) `/ X! Z, d# H
  delay(10);) I  P0 K8 N; N- ]0 f
  }* X% w- B# z+ ^$ O5 W8 G
  }
) _/ d+ t, f" M) f! L( r  /******************设置光标子函数******************/8 A2 B2 Z. J' A' u) N/ v# w4 C

. c. ?1 a. l" k3 M. Q! H  void goto_xy(int x,int y)* e6 \' E7 e; Q& n% I  U
  {3 D: L3 t. v- i. O4 a- q0 I7 ?; W
  union REGS r;& q+ c' q$ n7 I1 p7 C
  r.h.ah=2;2 R- [, b5 [- B( l& c" A+ |
  r.h.dl=y;; t6 q8 \& [! [5 A- [) t! P
  r.h.dh=x;
- S. \+ q; Q5 p- ]# @, ?  r.h.bh=0;
% f* l* v3 S; t& a) B& h- C! U  int86(0x10,&r,&r);* F& G# i- y8 S* d
  }0 ]  i( g4 R6 G6 W5 }& Z8 C4 {* F

9 q! ~# v; f2 b! t  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
2 ]: b- Q+ x( E( a: b! j
' ?+ W+ f4 z& W$ f/ q" x9 k  void puta(void)
* m; I/ S$ [+ r' Q- y& y( T: e- q  {. o$ t  M4 u4 l* _, q0 q
  int i,j;
/ F% Q+ _. B* y1 _  for(i=0;i<24;i++){- ]3 z6 _, i: v
  for(j=0;j<79;j++){
+ S3 h- m: y. ^, c4 ^  goto_xy(i,j);
5 @; a' J" u" t, g+ w  printf("a");
. x; h4 f, }. v# q* e* j3 `6 C  }
% U0 Y1 Q& g5 w; u6 f3 e  }
; j8 D6 k! [: B: |9 j  }

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