返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
5 |6 f" s3 z6 q
" Q$ ^. t3 W, Z* w" N  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
0 {1 D& `; F1 V8 x* j2 d" u, L! A7 T7 j5 {3 S2 Z, O; K
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 4 v' b) g* K& I+ Y; c5 `: z9 J
  子函数及演示程序:
8 N- H' n3 \0 }9 c+ [5 h# P/ h0 W+ b
+ R, g* J; k4 H6 Q2 m: B  #include<stdio.h>
' a: {8 W2 B+ h# t; M  #include<dos.h>/ {5 i5 d! f- r5 b- N
  #include<conio.h>) l( P. j, b) A) g

/ x' h8 y9 f5 }* A1 e+ f4 N  void goto_xy(int x,int y);
% Q% }& v# a: ?% _, b  void dcls(int x1,int x2,int y1,int y2);) [/ _5 M# t' P0 E. G
  void bcls(int x1,int x2,int y1,int y2);& G3 |/ }# d: K) {% t9 G; r: }
  void kcls(int x1,int x2,int y1,int y2);' s6 Q1 r1 E- v2 f
  void recls(int x1,int x2,int y1,int y2);
" X5 a$ X# |9 M- w: k% g  void zcls(int x1,int x2,int y1,int y2);* l: E6 ~- l9 [' |
  void puta(void);
/ U* h, @. s, `) B
1 v( E" D) e. w7 _4 ^9 l( r, S1 \4 Z. @5 d" [% F/ [
  /*--------------演示程序---------------------*/
3 R8 }8 m1 i4 E- }  main()6 x9 N/ }/ n  I% z/ n. T
  {
7 O/ y7 f- @" ?, j  puta();- ?- X# ^- |  I- C
  getch();
; ~1 @3 ]5 Q  k( C, [# X  dcls(0,4,0,79);. d/ S: z! @$ H* |
  getch();. x) g, m; T' o9 W; `1 _( Y3 j
  puta();4 a3 t' G7 \+ v
  getch();
9 }# g8 U9 b% v; v+ ~& a  bcls(0,25,0,79);
1 Z  {3 P2 H/ p. n& x0 D3 {3 G  getch();5 h2 _! N9 V% c% K. Q, X* J0 i( x
  puta();
' w) D; A' A) ]$ {, F5 D+ P( f  getch();9 t: e( H) ?5 Y- W! g' P1 L! N
  zcls(0,25,0,79);+ I" [4 Q) o3 o+ {$ [9 v6 q
  getch();! Q4 o- N0 d6 G" @. {1 {4 O
  }7 {2 s, s4 F8 X& [9 J
  /*********center clear screen(中心清屏)***********/
5 W( U8 P( H2 b  void zcls(int x1,int x2,int y1,int y2)4 w$ s8 S. ]- L$ ^
  {% `& Q8 f/ j! `
  int x00,y00,x0,y0,i,d;. z5 q  \$ G+ i: l
  if((y2-y1)>(x2-x1)){% B$ p6 S) I5 q: ~3 b
  d=(x2-x1)/2;
# H0 i$ g* h% w2 a7 f, P, n4 y5 x# ~  x0=(x1+x2)/2;) |, }$ b" q$ C+ M2 F3 j! G7 H. b
  y0=y1+d;
  U! q* |& ~$ n& @+ S9 M  y00=y2-d;
3 O0 P& P! T" a' @% J; g4 k  for(i=0;i<(d+1);i++)3 ?. y6 F7 h2 W& B; M6 Q8 s
  recls((x0-i),(x00+i),(y0-i),(y00+i));8 ^* c! }6 X5 y
  delay(10);
) G% C, h. k7 \: s  }6 G- O0 a% g! W7 f0 m8 g- h) L
  else{+ z# x% k: v! b+ L
  d=(y2-y1)/2;
9 Z$ B" p+ o' }: }  y0=(y1+y2)/2;
4 v" ]( d, N# A; L+ S  x0=x1+d;
6 y# e( U' Q, e: n+ M% W1 l  x00=x2-d;4 E/ S: o5 k( w
  for(i=0;i<d+1;i++)" Q. r2 }) l; n3 `  G8 K
  recls(x0-i,x00+i,y0-i,y00+i);; k0 M$ f6 D; o( v: ^& e! z
  delay(10);
& Y6 V5 L. r- O- R, U' F& d9 A3 W$ }/ v  }
2 t7 _2 L8 z( X. U$ E  }
& u' c% q: E9 m0 p5 h- _6 m9 U2 w! z1 |$ o' b, K7 [9 v0 T$ N
  /************* clear rectangle side(矩形边清屏)***********************/
; M/ s( l0 g, l6 r  b* D5 V9 q  Q( @1 c8 |5 U3 c9 A4 O
  void recls(int x1,int x2,int y1,int y2)! |# z1 }& q7 i4 M% o; @6 i/ R
  {
! N$ U3 s( j3 Y0 l  int i,j;
) S) F) @! @, [* N9 w, {1 K, X: l  for(i=y1;i<y2;i++){* B$ Q) Y. j4 o
    goto_xy(x1,i);
0 n( l1 z2 L: q$ B" g! l- c  putchar(' ');% t* \; G3 A7 U  U# M2 s, W
  goto_xy(x2,i);
( H  h, o; C$ k# T% J  g  putchar(' ');: O, z) g% q# q) U, u) H
  delay(10);
3 v' o- W- N% E. C; z  }
' W7 Y( }3 n* n( B7 k  for(j=x1;j<x2;j++){
- o- b% Q4 R( K) J9 Z  goto_xy(i,y1);
, H% Q, r/ ~3 J( T  putchar(' ');0 p8 j, @/ q- u6 E4 s/ k
  goto_xy(j,y2);
; B2 F0 y/ b0 k" o/ O  putchar(' ');
' x  M+ r$ n( T' W; [: v  delay(10);: W/ |* Z( v2 l. h& P9 q' ^
  }; ^$ \3 ]% ^. H) V0 M; Y
  }# V3 y3 K2 ^. ~3 [. b) S0 f
  /******************open screen clear(开屏式清屏)*********************/
8 t% e) e: p, ]9 I8 X5 D) V2 @3 O7 c: ~
  void kcls(int x1,int x2,int y1,int y2)4 r7 S5 }3 g3 E/ y' g* z! O- L
  {
" N4 \8 K! W. E  int t,s,i,j;
+ B4 w5 i- l7 S  t=s=(y1+y2)/2;7 O. h6 r$ ^8 M2 x4 p: b% C  M
  for(;t<=y2;t++,s--), b1 ^* `; ^+ z2 ]! f
  for(j=x1;j<x2;j++){
3 U9 u8 i% }" ?  goto_xy(j,t);$ z9 A6 M: {1 A0 K
  putchar(' ');3 E2 H( s2 K: a/ [& C
  goto_xy(j,s);' U; a: h* p8 C8 d3 w* W& ]; l5 ?6 U/ X
  putchar(' ');
2 X: e& E$ b; k  delay(10);
6 [* w# _$ @9 U3 p5 Y  }
7 w! E  X3 d: g% k: E, A, Y1 A  }' ^' |: g1 f5 y* b; K$ q
  /*****************close screen clear*****闭幕式清屏*******************/
/ |9 _4 n9 @* {4 j% }, ^7 ?
/ C6 |# X. A# y& _' i1 g  void bcls(int x1,int x2,int y1,int y2)% V' o8 s' o) c8 H2 ]: ^
  {+ R2 r" H  V3 h2 [% x  a
  int t,s,j;
4 B4 r+ ^) ]+ q; \! O3 S# B0 M4 }# n5 k  t=y1;! A# W# D8 Y# V' F+ f
  s=y2;
  w/ k* J' J. x# |  for(t=y1;t<(y1+y2)/2;t++,s--)9 c1 Y' y6 }& {7 p9 S
  for(j=x1;j<x2;j++){
+ O9 Y0 h' M- a7 z. V  goto_xy(j,t);
1 V) O' J1 s& `  putchar(' ');
/ D7 u0 a- }+ F; {  goto_xy(j,s);) G) R% M( v5 l# R
  putchar(' ');
6 w0 u' L/ ?4 |6 ^  V: s6 x  delay(10);
2 Y- l$ m6 F9 {/ n- F) C  }% n4 e4 l. m( g: w6 I0 w! {
  }) s6 ~9 \( m& W! A
  /******************bottom screen clear(自下清屏)********************/
! K4 R# e+ s0 G6 i0 ?  z+ j1 d1 I0 o: G8 g* Y) s
  void dcls(int x1,int x2,int y1,int y2)2 H0 V% r6 U# l* @* s9 d
  {0 h) S" C' |& R  ~
  int t,s,j,i;
: z1 k# F! k; u3 A3 G  k# I( f6 X  t=s=(y1+y2)/2;: }% D" r7 A+ S3 a
  for(j=x2;j>x1;j--)( {6 u* f: @# k- N( F7 H. F( f
  for(i=y1;i<y2;i++){8 g: m9 K& I5 ?! E" L; A  C
  goto_xy(j,i);; q. R- |& N: d3 |& y/ t: l+ S
  putchar(' ');
  k! j) r/ ]9 S  delay(10);
0 B/ q6 Y) L6 g# }. p; a( r  }
. N: Z7 E, c: C  }
& G+ `0 w: a9 r" e8 T+ Q( q  /******************设置光标子函数******************/9 e$ k7 F3 L% U+ J. o5 `1 g, N
5 }" q9 O( r2 ^! @+ `' b  O% B
  void goto_xy(int x,int y)
' }8 ?/ u" b( y  {
( r8 U# U% v+ U7 Y  union REGS r;
8 R& R0 Y7 [& M' X4 l  r.h.ah=2;& T" ^2 H; y6 e
  r.h.dl=y;
0 b7 Z4 f/ N& S  r.h.dh=x;# ^, x4 _, ~) b( |8 X- ]
  r.h.bh=0;9 U6 ~8 B2 e# Z& E$ F4 F0 e
  int86(0x10,&r,&r);
! H, w/ R0 r9 m2 n% ?  }
- t/ }# S# S( x* Z. L4 n# {# L* A% X- S# }4 K
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/0 }, e3 B% {2 z% t, Y$ O# ]6 }3 W
' M- P4 V& |9 B8 k. `( l3 C
  void puta(void)
8 h8 ?, s3 _" g7 l; {* Z  {7 }$ o" K2 q  e) F
  int i,j;
% H6 K" b& o  O5 x3 Q- F0 g  for(i=0;i<24;i++){
9 S$ w4 X  l' e  for(j=0;j<79;j++){' ~% L* Z( W+ X+ c
  goto_xy(i,j);; q) v) R. t! l) G4 [9 a& V
  printf("a");
( r! _! h) G4 ]1 J  }0 F, g7 U$ y6 p+ B3 `# `
  }7 i! |; a4 t, }" G5 G
  }

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