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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
7 @  {' M* R: O) }- D5 R/ Y7 F* y- V0 o
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. D9 g$ L9 x( \8 L# V& r% v+ R' f1 B
% s5 M3 S3 k4 x' s/ `3 K  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# l, ?, g# [9 Y; W+ `! C; D9 n  子函数及演示程序:
) P0 F  X9 |  C' B% y1 ?1 @+ [: h7 z# R. h" ?- @4 K
  #include<stdio.h>
8 M3 X% Z- s& w6 e  #include<dos.h>, G3 d, j4 H  d: B' d
  #include<conio.h>
1 E5 E8 |; t- Q1 W% e8 y; W$ x( ?$ U* a& G
  void goto_xy(int x,int y);# g: f: c, _8 G. i
  void dcls(int x1,int x2,int y1,int y2);; `1 j9 p, r8 M. s5 S' L* t
  void bcls(int x1,int x2,int y1,int y2);, ]* v3 o3 F/ r9 u5 R$ i1 z6 S$ r
  void kcls(int x1,int x2,int y1,int y2);+ I) `& D2 g, Y
  void recls(int x1,int x2,int y1,int y2);
' @+ S# y- m% Y3 ?& _/ k  void zcls(int x1,int x2,int y1,int y2);
" X/ H& j9 l1 U  void puta(void);( {& C+ ?/ E6 R( y0 S

' B% E# j8 V  N) Y% C  i
  h/ ^* V( O% D/ K2 I  /*--------------演示程序---------------------*/' l4 P* L$ h- q6 m- J9 h
  main()" b$ ^  J0 j1 b# i8 a8 l/ a; Y5 X
  {
! g+ b' {: J( W; X- W: ~) F# [  puta();( W: J# y4 x7 ^+ t2 ^6 g# E
  getch();' l& C& r& d" F+ H' o
  dcls(0,4,0,79);
4 t2 u$ Z* p) z0 w) y0 \5 f' y' @  getch();7 T8 K" u6 y# b1 p6 q
  puta();& J- T; T9 n! \1 r
  getch();3 M) P+ v# P6 ^8 [* O/ ^
  bcls(0,25,0,79);4 E$ e# e" W3 K: e) S6 N5 J/ U
  getch();
# D$ A7 Z$ L2 p! e; u2 g) P* U( r  puta();  Q6 n* N( B. t  _
  getch();6 k& y* K7 r. v* R
  zcls(0,25,0,79);
( i. y  ~( H+ @' J  getch();/ T, \2 o) y, S$ N
  }5 g0 z2 t( y( G: B5 f
  /*********center clear screen(中心清屏)***********/9 P- [: K$ l( n  p2 M% g
  void zcls(int x1,int x2,int y1,int y2)0 s9 n2 j3 S" g% |
  {2 K/ ?) m* B/ p7 l$ q8 j- \
  int x00,y00,x0,y0,i,d;
' V- G' Y9 y: R( Z; q( {% r  if((y2-y1)>(x2-x1)){
0 f' j- Z( ]4 b! o' f2 B6 d  k  d=(x2-x1)/2;
% G9 `7 F3 ^! Y+ R5 b  x0=(x1+x2)/2;
; g3 T' R! ~0 a0 u0 F& v* E, d  y0=y1+d;
2 X* S* z% n+ z  y00=y2-d;8 K- G! O+ Q* I0 s2 \( d
  for(i=0;i<(d+1);i++)
- q; N5 x) ~" j5 r* z& m5 `  recls((x0-i),(x00+i),(y0-i),(y00+i));+ I; G. \5 j- z1 x0 g
  delay(10);
! I& ~5 O: x4 k" [1 K& P, X  }
; d+ t. {; J3 z& a, R1 ]  else{
$ y1 r  E8 D4 q7 c: L  x8 W1 c  d=(y2-y1)/2;# L8 z, ?: ]2 E
  y0=(y1+y2)/2;  ^: r. q9 [3 L! F4 O( J  q' M* p8 [
  x0=x1+d;2 b% ~" b& q0 k% O$ G
  x00=x2-d;
$ x0 x2 G, f+ W) c; R1 X4 R  for(i=0;i<d+1;i++)9 Z! {% d# f9 r4 D5 `6 z# f
  recls(x0-i,x00+i,y0-i,y00+i);
/ r. {; G5 Z/ f9 e$ O1 h+ @" y  delay(10);
8 d& T0 h& t! F# Y9 K; X9 \/ ?  }
, f+ ^; t. v9 m  }% f6 ]3 x0 I6 n! E+ |4 m
' {! a4 l$ u" j# O. D
  /************* clear rectangle side(矩形边清屏)***********************/
# Y' B! C' f) c5 }8 c3 f' H5 j
( l$ g- D: w4 h1 |- _; K1 G  void recls(int x1,int x2,int y1,int y2)" O1 K) m+ L* p. G- @" B: F/ }( B
  {- |9 m8 i) Z' `/ I; m
  int i,j;
0 v* c7 Q( M# O# m( K  for(i=y1;i<y2;i++){
" p; p/ w, J1 ]+ d  A# Z* d6 W) u) r, m    goto_xy(x1,i);
% ?- r5 K4 ?' Q. u, C4 d  putchar(' ');0 s4 \& T: \; p4 p0 h- R2 x
  goto_xy(x2,i);. I. `9 S8 G3 I9 v3 g2 T6 B1 h
  putchar(' ');: @7 j. a, ^+ ^( f& n4 N: ?) H
  delay(10);
$ B2 E, \) K: d. y* g  }
% _/ y: j0 w# S7 D, l, Y  for(j=x1;j<x2;j++){1 E9 Z  x+ O. C  Q9 ^$ X
  goto_xy(i,y1);( B4 B* x7 }. p% x- X; l
  putchar(' ');
3 R0 h& J( K" R+ [: a3 P  goto_xy(j,y2);$ d3 n) ~) x7 I
  putchar(' ');7 A, H- X2 J% n& N( J6 j: c
  delay(10);
1 J6 N8 d4 @# S3 }& |  }
6 g- m. J+ I; a/ W  }! p  Y' {# E: y. K3 p+ ?9 a' J  p
  /******************open screen clear(开屏式清屏)*********************/( h3 s5 G( l/ `: v  f
4 }6 o! p) `2 v" P
  void kcls(int x1,int x2,int y1,int y2)  p2 R, L2 S0 F! \- t  D) j
  {7 e4 q8 q4 o0 \
  int t,s,i,j;" [7 ?) A, u2 D: m. T+ @( y
  t=s=(y1+y2)/2;
( M: U% c. e* G* M  G, m: N  for(;t<=y2;t++,s--)
& P5 [4 ]# f# g5 Y  for(j=x1;j<x2;j++){9 U3 r$ A3 R5 V$ S- S. n4 |
  goto_xy(j,t);' d" s- X# F8 a& D& H0 }
  putchar(' ');
" y% a/ w6 }+ Q) Y* d" E* Y+ ^  n+ }  goto_xy(j,s);
" Y; d0 J' ^  |4 u7 |6 R  putchar(' ');2 V& a" b* X: @3 U) r! ^
  delay(10);' `3 [0 |5 B( @: G' ~9 S0 T) Q
  }* e" o5 s/ T6 j& r9 ~6 y  ~
  }! a) ]3 o7 y0 W7 ]& A. |& x) X
  /*****************close screen clear*****闭幕式清屏*******************/3 O+ d- |& R( e. |% D) ]! D/ q/ N- S: k
' @* }/ z1 Y+ p( L% x( y
  void bcls(int x1,int x2,int y1,int y2)
- S- {& z' u: |# Z# C+ C  {
8 K' R6 d7 z/ Y! e  int t,s,j;
/ M+ _9 c% c, t5 q% {2 L  t=y1;) }" Q; h$ H. i% ^0 x
  s=y2;
, |. k! {% R& C( u9 s' I3 Z* D6 y  for(t=y1;t<(y1+y2)/2;t++,s--)
' n, s3 Y( l/ w+ H8 }, s' H  for(j=x1;j<x2;j++){2 m; R% I, D( o( u; j! Y3 p
  goto_xy(j,t);! N! Z' t/ \( C7 t* ]
  putchar(' ');7 w# [/ c& r, v. o9 o% V; l: i
  goto_xy(j,s);
3 t5 f  l' T6 M2 j! Q  putchar(' ');% y5 K# u1 J# Y* e" {8 a6 e
  delay(10);
5 l7 C5 S+ Z( i/ y& |0 b6 K' j! `  }5 H& B. M( ?& S! U2 M9 |
  }- K7 h5 Y, D5 W  a) o1 V) l
  /******************bottom screen clear(自下清屏)********************/
! _! [' P- b0 @8 R
8 s* v6 e- w( U' m  void dcls(int x1,int x2,int y1,int y2)9 c  n' t: o5 W1 s( J! z" `
  {
; V  B2 _' ]' V/ B8 q* o. O: ]  int t,s,j,i;
9 V8 [0 z* q1 B2 g+ }4 Z  {  t=s=(y1+y2)/2;
* W+ w8 v0 f5 e, ]' R5 C. V* j5 T  for(j=x2;j>x1;j--)
: }* b# ]+ t/ Y( m+ l4 N  for(i=y1;i<y2;i++){
) [/ r. W5 k! L7 U8 b  goto_xy(j,i);. @0 n+ C8 A4 i% v3 x# V- \
  putchar(' ');
; k/ V' d! X8 M/ z; G$ J  delay(10);8 q& I& `( J! s) g8 a8 m# m& T; K
  }
& x( ]9 q0 {6 U1 ~- {4 V  }
. c/ i! z( U0 h- N( S  /******************设置光标子函数******************/
% \6 @! J' ]9 D4 L& J  q
. E2 r/ g  c+ b  void goto_xy(int x,int y)) [+ y1 q# v; Q3 u! H9 Q# l
  {
5 F- ?$ M* @! Y8 W9 G& C  union REGS r;1 o! I% @# E: S7 j3 Q
  r.h.ah=2;
2 C+ i6 }- r$ |1 C3 k! X$ f  r.h.dl=y;9 C! `! `, I* L4 e7 V. c
  r.h.dh=x;
7 Q# \, G3 q; G/ {+ w+ G' c1 p) U  r.h.bh=0;. O4 j( o) ~" w" q
  int86(0x10,&r,&r);
1 h# S( I2 O$ }/ d/ r; [! c  }) B+ C# v$ h$ \1 y: I/ _

1 k; z7 q% ]# _/ C6 n3 C. x: V  v  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 N  U1 x0 t& z& V# K
2 l9 N& F, @8 H) Y: Y7 z# o* y5 _  void puta(void)
6 N$ a+ Q5 t. _5 x. X) q: q4 M' p% C  {5 }! {8 Q3 c9 \% G. t
  int i,j;) ]2 Y2 ^- R- ]2 d5 R2 u
  for(i=0;i<24;i++){
4 t$ K$ Y! _& K+ G! V) ]7 M  for(j=0;j<79;j++){' |3 K$ Z3 V) m5 c0 H* Y/ Y2 l
  goto_xy(i,j);+ n4 [8 D' v9 B# r7 A+ m
  printf("a");! e, j9 n7 ^2 Q' y
  }% p- e  K2 `4 X! ]' e/ D1 M' e1 Z: u
  }
% Z7 Q% ^  H- l% f1 O  }

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