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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,  `$ x3 I) M4 `" T7 m

; @3 q) n: q6 I- f( c4 i$ Q5 c' \  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
3 d" ~  U2 I; U7 x0 T; {9 f: R
- g7 i% W3 v4 c4 S( O  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
* M& L0 r$ b! ~5 I5 ?& ^  子函数及演示程序:
/ t6 E% b0 \+ d" D' k% h5 ^$ T+ R
& a; _, _0 ~& `  #include<stdio.h>5 C9 ?/ i9 B' A" U
  #include<dos.h>. I) A$ F8 r$ `- j# {/ o5 A
  #include<conio.h>( Z* H( Q/ K4 C- t
6 u) E6 c- o/ `) v0 B" M
  void goto_xy(int x,int y);" |% S7 `( V- ^' Z1 c
  void dcls(int x1,int x2,int y1,int y2);3 k* h$ `- w: }% c' p- l  C
  void bcls(int x1,int x2,int y1,int y2);7 Z1 \6 c3 x4 [1 i7 T
  void kcls(int x1,int x2,int y1,int y2);& C! ]2 E+ ]/ p. Z6 P7 c
  void recls(int x1,int x2,int y1,int y2);! S7 Y4 w5 w# R# B! D
  void zcls(int x1,int x2,int y1,int y2);
, p; j* }3 T( d) A  void puta(void);
  k2 ]6 ^( d/ E0 @# p6 |$ h7 _. z6 T# i" o0 N' W- j

: E2 }6 h+ ~0 F3 D( ^; h% b! u- o- w  /*--------------演示程序---------------------*/0 F1 j' u/ |) Y  f. z/ Z" Q) A
  main()% Y( _+ K$ s* `" ?$ \/ T
  {
/ e1 w  g9 l9 R( D' _/ t" ?  puta();! m& Q+ W, D- J! j% |1 D4 ~# y; W
  getch();* r0 n& R2 R$ i) v  B1 g) f3 ^- }
  dcls(0,4,0,79);
0 w( e% A9 L4 W1 T# [+ l  getch();
. g% L8 P) a, v) @: S  d- B' ^  puta();
- ~3 |1 m3 K+ z- ], I, u: `* A  getch();1 ]( ~( O- X, H, U2 [2 R9 G2 W
  bcls(0,25,0,79);7 `7 m' J, v+ Z$ Z8 c
  getch();
. t) s" F! x1 h' z# s6 o  puta();3 h9 I( X2 u& X
  getch();
; a4 t3 I" D* Y. E: m  zcls(0,25,0,79);
! y, a% }$ U- }* f8 T! z  getch();" i- @4 g& t8 Z( _& E" _+ J2 N$ e- B
  }9 J$ h2 J# d' O' M( `# O7 f
  /*********center clear screen(中心清屏)***********/( W+ e0 O! H" q
  void zcls(int x1,int x2,int y1,int y2)  J& n8 a/ m$ e6 S
  {' ?0 l4 O# D! N- c  q8 v) [& l
  int x00,y00,x0,y0,i,d;/ u$ ]* h  |+ B( r. x
  if((y2-y1)>(x2-x1)){3 L8 S5 U! X6 u; B9 E' Y( e# n
  d=(x2-x1)/2;" |8 Z! n6 ]' N8 g, c1 C& m, I5 D
  x0=(x1+x2)/2;2 d  P8 Q6 y$ u1 S/ }( R" |2 i
  y0=y1+d;( C% S4 s; u. R: g6 i
  y00=y2-d;
+ ^& p) P! H3 F% |& v/ V9 z  for(i=0;i<(d+1);i++)9 I4 Q( G/ R3 Z. o
  recls((x0-i),(x00+i),(y0-i),(y00+i));
) {7 m$ d. o) q' U5 V2 r  delay(10);
& D& k! w1 m2 f5 C) A. c! V  }( K' j9 E5 W8 S5 ?
  else{4 S8 @5 }* B3 k. b8 E2 f
  d=(y2-y1)/2;
" i, l1 f- j( U# H8 W  y0=(y1+y2)/2;- v' u6 Y. W! E
  x0=x1+d;
" a. w$ H. a2 U0 I  m" z+ p  x00=x2-d;
5 v8 M3 }3 o% f6 e7 X2 a  T! w  for(i=0;i<d+1;i++)
2 b/ l' O2 ^" q! i" v- L0 O! E  recls(x0-i,x00+i,y0-i,y00+i);- t- O6 ^0 J) @; e) {6 \- n
  delay(10);
5 w( N: c  C1 _  }
0 ~& `' f4 y/ i$ G5 L8 z  }1 Z9 b+ }/ ^3 d1 J- y# Y9 T  Z6 R. u

" t0 Y7 f0 c! f0 a- N  /************* clear rectangle side(矩形边清屏)***********************/% R. q7 q: G. S

0 [% y/ v% F& h# {% h& J: \  H) N  void recls(int x1,int x2,int y1,int y2)
5 _' i% p3 @  I& g1 }, c  {$ z% S4 x4 u# n( [; K( R
  int i,j;
2 r3 [! H* Q6 u( o  for(i=y1;i<y2;i++){' a. D/ r, \; N! g# K9 L
    goto_xy(x1,i);$ j4 Z/ R8 ~, c8 k. P1 `
  putchar(' ');3 N1 z1 }  W, p( i8 m
  goto_xy(x2,i);
5 \( Q* V: y  G' e  putchar(' ');
, {+ @3 M- T, n# r; e  delay(10);; G8 c! ?9 Y* S1 R
  }9 B7 B& |" B: D7 y/ s5 W
  for(j=x1;j<x2;j++){
& ^8 S7 B3 P5 b  goto_xy(i,y1);6 S) W% N5 R1 `8 @- |0 @
  putchar(' ');
8 ~) [# }  ~/ B, h. r4 D! r! I$ L- L  goto_xy(j,y2);0 f1 r; Z! _/ W3 ~
  putchar(' ');
4 W: q1 \! J' W- ~  m  delay(10);/ I$ X( U7 o' }( k7 N6 N
  }3 Z; Q5 S& M* t
  }
" Q. n3 T; j1 _  /******************open screen clear(开屏式清屏)*********************/  S# V# u6 k/ E% j' ^# c8 y
* ]7 [& [# g4 ^: |" g. k0 e
  void kcls(int x1,int x2,int y1,int y2)
. j- x' Z2 ]) b- _( |! E4 e' T  {
, m$ f5 Y0 W. d. C; ?  l  int t,s,i,j;8 S: A3 P7 ?' I1 |7 S# b+ J
  t=s=(y1+y2)/2;7 F* y8 A+ Q3 \- Q. z- a
  for(;t<=y2;t++,s--)! w! H, Q1 A4 N, M2 }9 ?* \
  for(j=x1;j<x2;j++){
9 [0 {$ W2 l8 m2 @* ]+ E$ H/ ?  goto_xy(j,t);
5 D! i; r& p- Q2 U  b9 h) e  putchar(' ');
  ~9 r5 q4 B. l6 ?9 r7 G  goto_xy(j,s);8 x$ _7 i+ v' |
  putchar(' ');2 W% N0 c8 y  [! e1 l* z
  delay(10);
& W$ A/ d8 p; ]$ w2 {5 ]0 c' u  }" M- P% G. U4 O, J* D- ?  f! W
  }( i- P6 x- D9 J! X9 `& W
  /*****************close screen clear*****闭幕式清屏*******************/7 |* s$ w2 {8 F4 _0 e6 p( o4 K
$ @8 B  W# B: x
  void bcls(int x1,int x2,int y1,int y2)
" o) ~4 K3 i4 c8 a# ]! j7 K& C  {! g( L$ w, C/ L' ~
  int t,s,j;
: E+ s' R' }; p1 _' I  t=y1;
" _: T% [- F9 P* Y( j5 q! g/ l  s=y2;
; M- x9 n3 A! k" o' j& @4 u  for(t=y1;t<(y1+y2)/2;t++,s--)8 J, D4 N  S' L1 p  E4 c5 C( W
  for(j=x1;j<x2;j++){8 C( P* R, O! f2 n. T. \
  goto_xy(j,t);# U2 u- R9 ]. ~* L! b* T
  putchar(' ');
) [3 U$ A9 H1 F" d& G9 m1 R  goto_xy(j,s);
" D0 r( O2 @: F  putchar(' ');
4 k# ^: [) G2 z; s" |6 C  delay(10);
! V9 K  h2 b: Q. p  }
' ^  |- _7 t# i2 f. S2 x  }
/ u, j! d2 h$ L- r0 @( G7 L9 T  /******************bottom screen clear(自下清屏)********************/. F7 n: z7 l$ \) H7 t4 w! A
. A5 [2 ], y8 a
  void dcls(int x1,int x2,int y1,int y2)
4 Y; d: m* T% d2 c5 q$ Z1 z4 _  {2 L& s$ C1 H7 j8 O' U/ F0 g
  int t,s,j,i;4 ]* m& S5 O$ |* t' l9 P
  t=s=(y1+y2)/2;6 U4 y, c3 }6 X
  for(j=x2;j>x1;j--); H* Q7 e! B( [2 c3 L  Z
  for(i=y1;i<y2;i++){% c+ E. z' L! U: H# Y
  goto_xy(j,i);
& t3 A% k5 ~  T  putchar(' ');
; ^& y% n9 S% c7 b* a6 c2 b7 q  delay(10);, R9 d+ |! O% v% B7 i5 E- U: d6 N
  }+ S, ]5 S% S  w; C/ I
  }
9 O$ [9 D2 G2 `! U4 p  /******************设置光标子函数******************/( R8 U  N7 Y! c

: `" n7 ^: e" y+ s  void goto_xy(int x,int y)
9 d* Q8 o: o- F, V  {
" M( T3 _, E! U3 X8 E6 e6 @  union REGS r;6 y5 J4 r6 j% M+ U& N; E/ s) @5 L
  r.h.ah=2;
8 C) I3 D% q1 a1 Z' q  E  r.h.dl=y;
5 ?. C  J5 |  ^& g1 L' q  r.h.dh=x;
' L" m4 v1 P' _( A; j! D6 _  r.h.bh=0;
0 s: @4 M1 O6 l7 X  int86(0x10,&r,&r);+ ]8 z- s* Z$ w: [% U4 ~- q' Z9 }
  }
9 S' v" g! e* \& N9 ^
0 q; `0 U2 U* }  /**********************在屏幕上打出一连串的a字母用于演示程序******************// }- z8 t8 |7 @0 @" \1 o/ W5 H2 O

# r6 h/ w: y9 Q8 W3 Q: s  void puta(void)
7 u0 D) n) Z  |0 ^' d! I6 n  {  h4 l. x1 _) E' P7 k/ l
  int i,j;" [& T- A$ O; @1 |
  for(i=0;i<24;i++){
  R# F& ?  y; w( d  V' l; C; V) _  for(j=0;j<79;j++){2 ?4 Y" C8 |: A: g, z6 k( i
  goto_xy(i,j);
- m" i8 G: p. _. r4 m0 b& d- E# l  printf("a");
8 v( G( R: K" c1 f, U$ |  }/ p0 W5 C+ B# `  f8 T6 I/ _
  }! m8 U2 ?5 Z9 G1 \% C
  }

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