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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,5 V; S1 z- V9 ~

2 _$ o3 k. t4 S; R  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
- a6 c, |6 [7 I
8 S8 D) t" @2 e- [! d1 q  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 1 Y+ A+ h7 n8 [9 f  J! r8 @
  子函数及演示程序:( U! V3 S' D  @/ A; C; e
' a3 V' |7 v$ v. t$ J2 ~0 q
  #include<stdio.h>
! D/ K% V) r6 L( K9 ~2 y& w5 ^( q1 h  #include<dos.h>
3 D% I+ ]" T2 w  #include<conio.h>
. b: G4 Y3 R+ Y  X
' {' f3 g( R) b5 Y  l  void goto_xy(int x,int y);
& W( J% r4 d) ~! f  void dcls(int x1,int x2,int y1,int y2);
4 r( N, y, t, o# o$ c( r3 c  void bcls(int x1,int x2,int y1,int y2);
2 M: b0 Q, D6 F6 ?  ^6 O; ~  void kcls(int x1,int x2,int y1,int y2);
0 N* ]! G( s! A/ F) L9 [6 }  void recls(int x1,int x2,int y1,int y2);
4 F' f3 o8 I7 l7 \. o8 i, R3 j  void zcls(int x1,int x2,int y1,int y2);
# g+ d7 [' e- j  d0 P' A& l  void puta(void);! S5 o8 B( h4 y1 N" `1 y  i9 }2 B4 k

8 _: I' B) T2 G3 |
  E# y( i4 E4 R0 J3 ?4 ?  /*--------------演示程序---------------------*/
& B$ X7 {, ]* _# M: I! V  main()
! K  o% L" r( ~9 o  {
( m* D% R5 G' r/ Z* |  puta();
' |& ]9 Q$ E1 B7 ]0 Z. ?  getch();4 C* O! [- h/ ~; r# M
  dcls(0,4,0,79);
' `% c2 i( `$ o: Z, O, n# a5 D! ^4 j( {  getch();7 n% y6 f1 t( `
  puta();
7 _* [2 K, f, o& F2 L3 ~2 Q$ V) A  getch();8 k+ p1 V6 D% s+ a/ z
  bcls(0,25,0,79);) Y! k- f  q8 U% s% F, ?. Z
  getch();0 N: I, U( b8 g6 B" s+ |8 r9 L
  puta();
; M( U) u( m0 b7 K" `  getch();4 w2 N! j& G$ I% B
  zcls(0,25,0,79);% u! @6 ^' K$ o: J, k
  getch();
0 i- o7 D) X0 z1 A, p9 @  }  e* A: Z1 g0 d4 Z% h; P. V
  /*********center clear screen(中心清屏)***********/
' O8 b& }' _9 O- Q* {, y6 b  void zcls(int x1,int x2,int y1,int y2)
0 ]! ]/ @" F1 O1 ]& D  {
5 |. g3 _9 ~- z( |: C# q! s  int x00,y00,x0,y0,i,d;
. P0 `' ~3 m3 W4 j* D  if((y2-y1)>(x2-x1)){
: j( l  v! v- m' y: e3 p, F7 O' y  d=(x2-x1)/2;
% G" I% }1 S7 ?3 Z4 x  x0=(x1+x2)/2;+ }5 E9 y$ p+ J" d/ A
  y0=y1+d;6 u# K7 n2 W: T4 y
  y00=y2-d;7 ]* y/ F' \, a0 v5 G& }- H
  for(i=0;i<(d+1);i++)
4 c. m6 u; k% g& F$ ?  recls((x0-i),(x00+i),(y0-i),(y00+i));6 P; \+ X) T. b
  delay(10);
9 Y: O: ]' F, g* U' Q6 B9 |3 K2 C. p  }; s# @# R8 n0 u, {5 P) A9 Y( y
  else{
( v7 W9 a8 [/ H* X  d=(y2-y1)/2;
( J. U- i: L" D! o1 q  y0=(y1+y2)/2;4 {" F/ }9 Y, D$ D# y4 N0 [
  x0=x1+d;9 Q, T  s. Z/ E' o' T
  x00=x2-d;/ {5 p- w. K/ @8 m. C
  for(i=0;i<d+1;i++)- R7 y4 z* {4 E9 s: t
  recls(x0-i,x00+i,y0-i,y00+i);
1 P& M! O% Y% L  delay(10);8 ^: [7 Z* K! w4 A
  }
- Q( x" r' A) f& R& F# d/ S/ y# B  }. Q* `- r' U9 J! |

+ w4 o9 o& J: Y  /************* clear rectangle side(矩形边清屏)***********************/- `5 B$ b8 L5 E1 \; C8 i& Y/ l. d

, L- I- N! A: _3 r" u  void recls(int x1,int x2,int y1,int y2); n( r  C- x7 g4 R. w2 \
  {4 d2 N; b$ ^3 f8 u) u7 k/ }
  int i,j;
8 u, W4 P' b2 @$ @" M7 p  for(i=y1;i<y2;i++){
. O3 @* B1 A% b! _7 H: y) x6 Q    goto_xy(x1,i);
6 b+ l8 `! w! y  Q& M/ h6 \  putchar(' ');
+ i. Z2 u  ~: Z3 H  goto_xy(x2,i);0 |1 j3 m1 I, G3 c: Q
  putchar(' ');  J! K. m7 m; i; h" \
  delay(10);
, ^$ I8 N/ j7 x0 Y, |  }% K9 ^0 _+ U/ @, N+ t0 {
  for(j=x1;j<x2;j++){
! E; ]$ W; }% \2 h  goto_xy(i,y1);/ R) A9 o  g' @7 g: M6 V* f5 ^
  putchar(' ');4 Z, u0 U; M- r
  goto_xy(j,y2);
5 H" S: M% c: D" }3 _4 D  putchar(' ');, [: r& [. T8 t  p
  delay(10);- @! [4 z7 o+ k' X
  }7 |! \9 I  T7 k) `2 L! U0 I
  }: I: J$ r- g* V2 ^. \6 E% w
  /******************open screen clear(开屏式清屏)*********************/- H- l9 i% M( n- r
9 V  T% u" d) Z$ ^, P
  void kcls(int x1,int x2,int y1,int y2)
: P2 v( Y& b9 `  {
  |( \2 S; ~* I0 I" M( K  int t,s,i,j;- w& Z2 g) _9 H
  t=s=(y1+y2)/2;
5 R% a% C% K# D! b; x  for(;t<=y2;t++,s--)
, L: ?$ ^  x+ m( A2 v  for(j=x1;j<x2;j++){" {' M0 h/ S  d; [; f
  goto_xy(j,t);5 Y8 k. E& t4 i) D0 s4 W- _" z9 H
  putchar(' ');
# m( M/ F/ a' J$ R( D! U. B8 m% ?  goto_xy(j,s);
  A# o# [4 _9 F+ C5 z" \% N. l  putchar(' ');9 `" P% e% O- {
  delay(10);
5 b  w5 k0 t" ~3 f  }
9 K; d. p' w( }- q  }8 ~# r8 I2 k6 l' h* y% E
  /*****************close screen clear*****闭幕式清屏*******************/
. e- ^/ @  i$ U" p5 Q  \* y( {) Y5 P
  void bcls(int x1,int x2,int y1,int y2)* q) r% _: R( j3 Y/ Q3 M/ V  o
  {
7 r( z* g6 [7 O* _6 n  int t,s,j;
  u; C6 h7 V5 x7 X) n  t=y1;
, Y  g  u# O8 S9 O5 Y5 n5 N  s=y2;, w  q: \4 p9 d3 N7 Y+ Z, @
  for(t=y1;t<(y1+y2)/2;t++,s--)
- M9 s) w7 I2 h  for(j=x1;j<x2;j++){# [" ^8 Q. c* Z% D0 M9 M& O
  goto_xy(j,t);+ c: g9 f7 k9 g0 h$ g
  putchar(' ');
2 w: E2 t! C( A1 P  goto_xy(j,s);3 l8 r$ P+ R/ s4 a( x0 h
  putchar(' ');
9 Q, G- ?! m7 `# A8 q! g  delay(10);6 j7 b" B: B  L: X2 a4 Q. W8 ^
  }
* a* J. K4 T9 J9 m  }; R8 M; `( _0 O# I/ }5 I: S
  /******************bottom screen clear(自下清屏)********************/
" r2 i9 `( b3 @* Y0 C0 O) h/ J+ Q( p. O8 `+ N- n- `: x
  void dcls(int x1,int x2,int y1,int y2)
/ K0 j  V! d1 ]7 m4 l  {
! m% h' ]5 v2 q5 ?) F  int t,s,j,i;0 Q" @+ J; r* I9 P, W
  t=s=(y1+y2)/2;
# o$ S! S; e  s+ v, [4 E1 L5 c$ N  for(j=x2;j>x1;j--)' L, `: x7 y5 W7 ~# `
  for(i=y1;i<y2;i++){
& x0 h6 C/ Y# T; W& Z! E3 A, [* i% y  goto_xy(j,i);7 y  s+ X7 O1 U
  putchar(' ');
: N7 i6 v% H3 E- K$ x$ H  delay(10);* O1 G' c4 {% y( L3 k* r( t. F! B  P
  }
: k* `: }( B! r6 k2 ^: c  }1 s9 G* A7 b' \7 j6 O2 t
  /******************设置光标子函数******************/; g* f, ^8 Q0 C/ g3 y, L% j

/ h7 }! \% V% Z$ A; N  void goto_xy(int x,int y)
( X" a' J/ T2 ~0 O  {
1 }4 c. S1 \, C* n0 [5 ]( n  union REGS r;& b% c) r5 i0 E) Q3 V3 m
  r.h.ah=2;( Z6 c2 m6 A$ _7 A0 E; j! }4 T
  r.h.dl=y;
+ }& B4 h& ]8 M$ [% L+ g  r.h.dh=x;( @/ V6 _0 I5 Q
  r.h.bh=0;
  W5 P5 h+ l3 I, g  int86(0x10,&r,&r);; v- x* U" V; j( _
  }
5 E$ N  f8 }6 f" |! N6 T; G4 ?3 }3 `" J3 X7 u0 Q/ ?6 x: Y, ?5 h
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/, t" l- i2 {& w+ U' ]3 i$ U
/ k8 g5 o- F" u! v5 ^3 I! |+ h
  void puta(void)
- X$ Z4 q  Q9 C7 B1 h( {5 g# ^  {: ?0 x' q' h$ n8 r  W
  int i,j;( S* V) |% [+ ~! K9 s
  for(i=0;i<24;i++){) }- D1 `3 k8 {( b5 H" ~
  for(j=0;j<79;j++){
% o. G: ~) f2 H( d+ c1 K  goto_xy(i,j);; Z& J! ^- m6 v) w  |& Z( H" z
  printf("a");0 U- F% V" j) p) ~$ z) C; Y9 ^
  }" W7 X0 m2 Z9 u8 d( ?! z) }
  }) ?5 p3 g+ u* U6 b! ~8 q
  }

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