返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
& b2 c& O+ q" d, g$ N& J+ |. C* \9 ~* e
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里  {2 ~! L4 v- ?) }$ K
2 y1 N2 V# W3 O7 y* k  Z
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
# {3 i: z7 a) @& ^; h6 C  U  子函数及演示程序:
' v# t: Z  i* M- H# D* W
; B# g6 |! |) I: H: N* q) m  #include<stdio.h>
( p* R, a4 ?" t* ~. w8 H7 R( a4 Q  #include<dos.h># |' a! J' r, X
  #include<conio.h>
6 N0 P2 q9 }' H
& p% h8 ~9 e( _4 ?  void goto_xy(int x,int y);
, k1 a- `( V- f/ W; J" n) _3 D4 E8 b  void dcls(int x1,int x2,int y1,int y2);/ `0 S, H) B( N
  void bcls(int x1,int x2,int y1,int y2);. {1 ^/ J2 X5 c) Y$ H
  void kcls(int x1,int x2,int y1,int y2);
# A6 h+ _+ \/ j# _2 J  void recls(int x1,int x2,int y1,int y2);( j3 p, y$ P( [- h8 _/ e9 ]) P# n8 o
  void zcls(int x1,int x2,int y1,int y2);: A7 A( f8 f1 r: c, c& d
  void puta(void);6 M$ q6 Z7 L) f- r" U1 F2 d" ^

4 G! T. w" A1 E
4 P2 @2 n6 _; i/ V  /*--------------演示程序---------------------*/; D0 O: X( C2 A" x% t! C* M
  main()
6 T6 D. S$ w( j% m# _  {
% ]5 g3 v. o9 v1 y( {  puta();
0 Z$ c, o2 J' l, I1 `  getch();5 `2 \4 K. L& ~" y$ E1 E; L
  dcls(0,4,0,79);
5 o* o# F( |, e, w0 G* k2 N" @) }  getch();, `0 r" n* v8 |
  puta();1 f) ^: c7 ?" ]# K, O2 ~6 U
  getch();! {0 I4 F4 E: q  l2 q. h* W
  bcls(0,25,0,79);
1 A0 ^. b1 j# X0 K3 Z  getch();  ^7 n0 E% r, _0 ^1 p
  puta();
: o) w1 W% A# K* ?& e# ?7 \  getch();
! b# P' h% M1 {7 ^  zcls(0,25,0,79);
1 j4 Y; N- P; f; x  getch();
0 j# U( i' l- v/ l0 N5 v% n  }
) ?3 x6 [. v( x  /*********center clear screen(中心清屏)***********/( A% N, i; a5 Y; ^+ N& N6 k! ?
  void zcls(int x1,int x2,int y1,int y2)1 ~& i0 H3 x8 Y& y$ n  [
  {9 H7 U7 Z" g! u( t& t( V* w
  int x00,y00,x0,y0,i,d;2 e" v; I$ P, p$ y2 m
  if((y2-y1)>(x2-x1)){* g( h, x0 ~3 s/ Q/ X
  d=(x2-x1)/2;+ y7 m+ f0 A1 X* p7 F9 b3 y2 l
  x0=(x1+x2)/2;9 J9 D3 ]" f5 T
  y0=y1+d;
5 q: S; W2 _6 w# \  K, h- s, V: _( j" B  y00=y2-d;& \4 {, Q- R; t. `
  for(i=0;i<(d+1);i++)
  \1 H1 B! y6 i  [& e. S& a  recls((x0-i),(x00+i),(y0-i),(y00+i));; z0 F$ j6 `, R" H
  delay(10);
1 b0 F. P" a6 M  }& u* ~2 I1 T* }% o
  else{
! G, n4 U# v- M0 S# X3 x) `: W  d=(y2-y1)/2;
8 k# y$ p" t1 Y7 B  U  y0=(y1+y2)/2;
( ?+ m6 ~+ p5 T* h# q8 R  x0=x1+d;
7 O6 S. d$ M8 D9 }3 f  x00=x2-d;
: N/ f: B# f/ Z  for(i=0;i<d+1;i++)5 S2 a; g' Q% ~) C( L
  recls(x0-i,x00+i,y0-i,y00+i);9 G/ [' j3 H6 s- W
  delay(10);
* j2 C+ i" b) [3 `- f0 x8 \  }
2 o* m6 S. s5 B& H; D  }
( b: Z1 p: o4 e$ O# y/ x
: B) Y8 @7 K% L2 D5 T  [0 U. n  /************* clear rectangle side(矩形边清屏)***********************/
7 X. M2 M1 W" k( K5 I5 q$ @- v& q; S: i2 s
  void recls(int x1,int x2,int y1,int y2)0 w! q3 }" H( f) y1 D6 y$ d3 M
  {) g& |& w. M1 r( g$ Y) C) i
  int i,j;
2 Q7 ?5 P2 r3 W  for(i=y1;i<y2;i++){+ Y. R+ R8 \6 `8 Y3 o
    goto_xy(x1,i);2 {3 ~: {7 G3 g3 z6 H
  putchar(' ');, y* c- q. y9 E  q$ S" H
  goto_xy(x2,i);5 k- h0 _" }0 O3 Z$ h( S: y
  putchar(' ');
% n! P9 m5 m; u  delay(10);
6 Q6 M( @( J0 C. q  }
+ v. F' G$ _, }- y( D) }  for(j=x1;j<x2;j++){
: }* m6 ]1 M3 O$ n2 j7 N  goto_xy(i,y1);
3 @% j' `5 I/ X  putchar(' ');" ?' [, W6 H1 z9 I8 w% f; Q
  goto_xy(j,y2);
  B# @1 p0 d* |4 m  putchar(' ');  t* [* w) [% }, G/ E
  delay(10);
1 ]" c- u& B# z4 ?5 t  }' A5 I2 ?( W6 {. r
  }' F4 r, l2 o! B! v& k1 j
  /******************open screen clear(开屏式清屏)*********************/( {+ f% V1 P! r8 J  ]
2 v( y" D3 o* H) L, K
  void kcls(int x1,int x2,int y1,int y2)3 {6 S* g; G- d9 k0 `( n2 n* P: Y' Z0 q
  {
& [! f+ P& P5 v8 A1 a3 b) C- b8 Y4 w  int t,s,i,j;$ F6 h- K9 X3 b! C! Y/ j
  t=s=(y1+y2)/2;+ a' A! B/ N% ^/ T
  for(;t<=y2;t++,s--)
0 A4 t1 u2 l4 x- J8 G! y$ P" H3 [, i  for(j=x1;j<x2;j++){! [6 ~$ G* g6 b
  goto_xy(j,t);1 U' f+ |4 s2 @/ p
  putchar(' ');& M7 t) ?* P# `/ G0 y0 \
  goto_xy(j,s);9 }/ y  [" T' |+ _, G/ O( t; l
  putchar(' ');
4 V1 N  u4 c4 h  delay(10);
6 N# K$ L9 ?4 p6 Z  }
! G: H% T7 S/ `, I  }, a4 k3 b' d8 L" u: z: B- N
  /*****************close screen clear*****闭幕式清屏*******************/
' E3 F9 I  a1 r. ]
( Z( R3 j0 {, u3 x4 w  void bcls(int x1,int x2,int y1,int y2)
- v. N2 _1 t$ P3 ?, [2 R+ X  {4 G7 q4 h' U6 z6 Y' i7 u6 P
  int t,s,j;
/ T& {: o: k: h" |  t=y1;
  e. s# }9 J2 {. N  i  s=y2;4 B2 a' X, {7 W9 [
  for(t=y1;t<(y1+y2)/2;t++,s--)
5 k8 R7 v8 Z4 K  for(j=x1;j<x2;j++){; R5 |, ^5 R4 Z% l8 N9 i! Y
  goto_xy(j,t);' A4 W7 U0 Y& c4 ^
  putchar(' ');/ ~; Q% g$ i5 v. [! L
  goto_xy(j,s);
) g* b: }' O1 G  putchar(' ');
9 {% r. |$ r- s) S' j! P( c4 J" k- |. e  delay(10);* z; \: r, I2 I. k5 _
  }9 j. u  K  H; p6 X. S% }0 D3 u2 R$ L
  }' k! F- E8 _, h, m
  /******************bottom screen clear(自下清屏)********************/& U8 ]: E- I$ L* K( P  W) x

$ H5 _8 }$ G1 k2 K, G  void dcls(int x1,int x2,int y1,int y2)
8 T; J: M. U* U& y  {7 p+ ~) w7 l" o1 V5 u, }. ?0 ^. L
  int t,s,j,i;
9 p7 n5 s+ _1 S, C1 V  t=s=(y1+y2)/2;
$ q. ?; `  s' w" q" ?  for(j=x2;j>x1;j--)1 j+ l* `* M; J
  for(i=y1;i<y2;i++){! D9 u0 V" b( G% s
  goto_xy(j,i);. ]2 b, f6 K9 v* \; t: m  Z5 A& w
  putchar(' ');
) _0 B$ o( j2 m  n3 f' f  delay(10);4 v$ s* C4 M0 H2 B' z0 j9 B, \
  }  L0 s6 H3 b3 e3 _% a" D! W# S1 W
  }
# ^9 Q4 L& `% l% }/ H+ ]9 t  /******************设置光标子函数******************/
; b" D% v# E' z( c
8 B: M  q. j6 r# c. o& e/ L  void goto_xy(int x,int y)
1 Y, i6 J6 B8 T3 m/ n  {
8 w# {% e( w4 ~7 U. A  union REGS r;
8 U, G0 R+ H# I; W9 X% l  r.h.ah=2;
& [6 Y$ U1 S% X4 t8 t( q  r.h.dl=y;$ G4 l: c: o1 Q( a
  r.h.dh=x;: u1 r  t5 l- |- L  l- n6 W( {( k
  r.h.bh=0;' h( X* p/ e9 G
  int86(0x10,&r,&r);( u) |% @6 L# ~5 j
  }
) Y% z% A. ?" I- b) H3 P% H6 S! W
6 j' Y* ]. l6 @1 P$ W9 k; R  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
$ Y( ]8 g, D8 {: b* H% |
; S4 Z+ \  h: f* S* N- c% r  void puta(void)
3 w7 u& A0 `  ~1 g* f  {
+ I/ T2 [& G7 V1 G( r) Q. }# Q  int i,j;2 c+ c# x$ |4 m; U7 d1 X8 n
  for(i=0;i<24;i++){' |7 y$ T0 e, _% ]: ~$ P7 }
  for(j=0;j<79;j++){( t$ r2 F6 R; y+ ?+ }/ `0 x
  goto_xy(i,j);: Y# L$ [# H! G7 ?6 c/ E
  printf("a");# g) b  K, x0 p( A- b
  }. R8 R2 Z8 K+ b* B8 p
  }4 y1 i% B5 R$ c$ J0 f2 W; U1 ?% ?2 J
  }

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