返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,; x8 x: w, p+ h* w6 ?- r5 |' g

2 s) s. U9 t. F6 P7 {  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
* o- ]# o4 f2 F
- L: M0 U+ a" m8 u# E# G' l  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
- F0 Z, l; w8 C, O! a7 ]/ a' q  子函数及演示程序:
) l3 t7 u+ h# }. V5 O- i& W! o8 V
" _+ n/ ^4 I* f) u* K  #include<stdio.h>
) r5 S& \+ y2 Q( p' l  #include<dos.h>
+ v: [8 ?' R( G  #include<conio.h>
& w. V3 k9 I- g( D
( y! w1 H+ |$ _: ~1 i9 f/ p  void goto_xy(int x,int y);
' z$ Q$ Y/ E( L, |; C  void dcls(int x1,int x2,int y1,int y2);; B$ z* }6 m1 _( ]
  void bcls(int x1,int x2,int y1,int y2);: t9 Q1 ?' S' o9 w) l1 Y5 }, p$ l
  void kcls(int x1,int x2,int y1,int y2);
7 N: O* I0 F( G- M; `  void recls(int x1,int x2,int y1,int y2);0 ?; l0 [% d9 D: b% F) ]
  void zcls(int x1,int x2,int y1,int y2);
* r% @/ J4 V' l8 r) T! P  V) I  void puta(void);
; }+ H- E" C) |  d+ m0 k5 l) `$ z
+ ]( J5 H0 H' i( h
3 K! E3 H, Z+ L/ ?+ @0 {$ Z9 H" G  /*--------------演示程序---------------------*/
+ W( b/ t5 a& L3 A% x, n  main()4 P, F: e4 O' [1 P# l% M2 y
  {) `1 i% _! Q! Z7 e: [: ~8 E# `1 x
  puta();
! E% M5 U5 \4 p! y5 @  getch();; m7 {; }0 P* W' L4 w3 g# V
  dcls(0,4,0,79);6 W  ?! Y: w, ^: P
  getch();9 L4 ~" T# V- M1 n  y/ M3 d$ v" b
  puta();
) w* G5 i5 A! z# z  getch();' N" W* Q1 s: `6 s- m
  bcls(0,25,0,79);% o) X, ]0 J/ T# A3 I- D- d: H
  getch();
6 I* w' x4 C+ {+ W' t8 [- g) K# b  puta();( z+ k$ e' F! Y+ L" V: m
  getch();1 g0 k) \6 ^4 j, A6 g6 ?
  zcls(0,25,0,79);
0 N. @" z) ^/ q, A6 V$ J  getch();
  |% b) F* T9 y/ W  }
: D( s% b; |, d7 T5 W7 h  /*********center clear screen(中心清屏)***********/' t4 h$ V, Z$ l& ^# \( b! [
  void zcls(int x1,int x2,int y1,int y2)
9 E$ h' s& T2 X/ s  {
. t" {$ `& u0 u) s6 a: w( X  int x00,y00,x0,y0,i,d;' G+ F, O- r  U. p
  if((y2-y1)>(x2-x1)){
) M; {* D  z" u, j0 C* G+ Y4 ]  d=(x2-x1)/2;
! A- \& e" U* w7 {/ s8 r  x0=(x1+x2)/2;+ x, B, A; C- B3 G5 m. F
  y0=y1+d;
& g/ O" M( |  l7 ~* |  y00=y2-d;7 x9 O- ^( A) H! f4 V/ P
  for(i=0;i<(d+1);i++)( a: K: U" O; a: \& y, \& w  P. i  f
  recls((x0-i),(x00+i),(y0-i),(y00+i));
! y! H+ z* H! g  delay(10);9 ~+ b; p- l  }* p4 \2 O2 o
  }, Q- A- V4 `$ O" Q0 ^% j+ }/ v
  else{+ |% Y; r  i8 R
  d=(y2-y1)/2;
' w: r5 E, L: U5 \, `" ]3 P8 O; F  y0=(y1+y2)/2;
, h6 @: a% ^0 M' }4 b4 {; s  x0=x1+d;
  v2 K% P3 @" u% P5 I( r) q) g" }6 |  x00=x2-d;4 d3 S7 m8 ~7 `
  for(i=0;i<d+1;i++)# E/ I: Z" {2 g: A" v7 b* C" Z
  recls(x0-i,x00+i,y0-i,y00+i);
6 J) b* X# t8 D  delay(10);
  V( {- R3 p1 g0 o3 \% g% f0 c  {  }& [9 N9 x5 a" P5 R7 v* W# h3 ]+ v
  }8 N4 ]7 b' R3 ~! h4 N( X. b
1 b6 k! W7 a" _* k" _3 G
  /************* clear rectangle side(矩形边清屏)***********************/. A( C& G% A2 r
6 e6 Z# s$ a' b5 a
  void recls(int x1,int x2,int y1,int y2)
$ p0 H; W& c  A( K  {
9 k- ~6 w) I4 p- ^  int i,j;' B* x) [$ ~- q2 {2 g
  for(i=y1;i<y2;i++){
* F5 L3 L, W% a% Y: `# Q    goto_xy(x1,i);0 Y( e8 |3 w2 d. n4 \- W
  putchar(' ');$ W; R, y$ i8 A
  goto_xy(x2,i);
5 z- I( Q) T4 S$ X+ A  putchar(' ');  ~" u. x8 ^' h5 n6 W8 `
  delay(10);
4 `4 X6 |! p  V0 O  }
! z" ?: Q! @- u  for(j=x1;j<x2;j++){0 ^) x% J& Q1 _% A' G" z
  goto_xy(i,y1);( h! S0 n( q* I- `3 [- |; [
  putchar(' ');: Q; `  B0 k+ v* y" ]( z" `
  goto_xy(j,y2);
% G" _* Q% u5 M% Z  putchar(' ');
# c9 E& q; [# m, @  delay(10);
3 @& @$ V3 N- S; w2 L  }
8 {! `1 A+ r  Z' i, A8 t7 o: b  }
% g5 y& |7 h5 E3 N  /******************open screen clear(开屏式清屏)*********************/0 l2 ^. ]9 b3 s
. i3 i( s% N4 s, M& Y
  void kcls(int x1,int x2,int y1,int y2)
9 G9 M5 X$ p9 |  {
2 a# @- v% z9 ~. b  int t,s,i,j;) x2 }* M4 B9 M' F; y6 o
  t=s=(y1+y2)/2;
. {6 E# }+ \# ^  {  for(;t<=y2;t++,s--). I) _. |) ~% T$ h- m
  for(j=x1;j<x2;j++){
: Q. h3 _( _) `! p  goto_xy(j,t);* q8 B5 Q( [, g$ `5 {' o9 F
  putchar(' ');% P: }0 D  K# b4 r- A' m
  goto_xy(j,s);
: i" _4 X5 L6 {9 F  putchar(' ');1 i% A) {, p0 D& N$ e0 J
  delay(10);
. w4 {, g+ r* C! r6 J  }. n" `4 V8 |* z( X0 }
  }
6 Z4 [' [6 x7 ~2 M  /*****************close screen clear*****闭幕式清屏*******************/
0 {( j9 v4 b1 }% g' R4 r
2 [; C& z! n4 `  t4 ^& T' b5 j) ?/ B& u  void bcls(int x1,int x2,int y1,int y2)( k8 F! i* f4 b. k4 \2 `- }( J
  {
4 Z5 k$ k# |9 f! g* D5 R  int t,s,j;* m1 |9 {+ I6 U. Y1 ^/ @
  t=y1;
' |3 i2 u: a0 w) b. d) V  s=y2;
' J& W2 l4 P: x, e  for(t=y1;t<(y1+y2)/2;t++,s--)7 i, _7 ~  [% w6 i* |% A, w
  for(j=x1;j<x2;j++){
( k, [, q$ v: x8 t; r9 f4 o4 u  goto_xy(j,t);+ X' ]+ b3 v' _
  putchar(' ');; O) \0 l$ s( E$ f; ]6 r
  goto_xy(j,s);
. {$ ]/ U3 n" p, n. Y( v$ x, V  putchar(' ');# J/ A" S. i* I
  delay(10);/ W1 C* \' S+ f' N, Y) \; [( A
  }1 [6 T/ ^, {8 ?
  }
4 G. D% a4 ~1 N  /******************bottom screen clear(自下清屏)********************/
, |+ L! f& e# y3 F" B! F) r9 D
/ ]8 u( x4 ^4 j5 S  void dcls(int x1,int x2,int y1,int y2)
$ h. x1 K7 {# i9 m( A  {
7 [- I0 E, R! `% e# F2 F  int t,s,j,i;  F& x5 i1 Y" z: t
  t=s=(y1+y2)/2;, o# k, W* Q& \5 Y+ g/ y/ F
  for(j=x2;j>x1;j--). _- ]4 w9 i! u# G: ]$ F! l; }
  for(i=y1;i<y2;i++){
) P6 e' o4 e/ ~- e' S8 G  goto_xy(j,i);
' q6 V. t! c; m$ [1 }8 E+ z  putchar(' ');2 K$ F) t2 r/ F' j+ n* _2 d4 s  B
  delay(10);
% B# q: S( t8 O! }7 }; f  }
5 i# w: p# Q$ u: ~! w  }  D  T* x0 _- e- Z, w
  /******************设置光标子函数******************/6 R) @1 S0 M' ?* q' D
. Z! ^2 l$ k6 R% x3 W7 L+ }
  void goto_xy(int x,int y)1 `% \& W7 S6 A, `3 ?
  {
' B- f# J( |$ s8 ^5 N, @  union REGS r;& a3 {/ w& Y1 A9 n3 e
  r.h.ah=2;" R- Y9 B, v. E4 X
  r.h.dl=y;# Y/ Q6 i& s( g
  r.h.dh=x;; u9 Q4 |0 `/ R' ]7 E! P( \
  r.h.bh=0;+ e# c& L" k! `. |( Y7 r' u
  int86(0x10,&r,&r);: U) y3 L. B) M0 E1 P  ?' F6 g
  }
. B; Y& q) s6 J& B
0 Q1 e$ _8 M5 I1 _% S" j  Y  /**********************在屏幕上打出一连串的a字母用于演示程序******************/0 W0 t6 s2 y/ t- s" f

( @5 v* F4 F4 C3 d; T  void puta(void)  D. g' `+ i1 N& L+ \- l
  {, k' @0 M  K5 Y6 z8 |/ ^9 I
  int i,j;) Y; {8 A' d8 r, l% D6 J( z3 B1 ^
  for(i=0;i<24;i++){
  X4 U" b8 o2 ?  for(j=0;j<79;j++){
/ M, F0 k- E+ ^' @  goto_xy(i,j);
, Z3 \- C3 d8 W# s6 ]6 @6 h, d  printf("a");
3 Q0 v. k+ D, g+ I  ?2 \  }
! X9 R. \1 r0 d9 z; R- U! F( I  O  }0 z0 ?' R3 p' J* _  K' Z
  }

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