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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,- N0 i* y- X& v8 {" Y
' e# f0 h/ X3 o) p7 k+ w
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里& ?! a- W) q0 S
: z0 C7 z, U# J2 c3 u5 g
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
1 Q. N- A3 m3 g) \! R  子函数及演示程序:
1 |  J. L3 R9 L* A% j
1 O' r/ c6 h; h4 ?9 R7 r  #include<stdio.h>8 d- [3 f1 i' D/ w$ F: p( Y$ @
  #include<dos.h>$ z* _9 S. h! K, h) o
  #include<conio.h>
8 t/ q  T7 |8 Z& D# ^% d* g0 I) ?! v( D
  void goto_xy(int x,int y);0 z# g# b: m" k/ n( H$ ?! ~
  void dcls(int x1,int x2,int y1,int y2);4 `( X2 a) n( }* J. W. j
  void bcls(int x1,int x2,int y1,int y2);
( ~! |0 t. j$ `" T- V, W  void kcls(int x1,int x2,int y1,int y2);
: |" ?9 Y8 R6 G; o% F  J  void recls(int x1,int x2,int y1,int y2);  ~+ q+ z7 {! W* @; I' A) `" m3 H
  void zcls(int x1,int x2,int y1,int y2);
! n$ V! ]. n5 j8 X$ p3 j  void puta(void);
' W! ?: P: S" Z; E5 H5 b
& ?1 ~! }9 v1 l- N! }+ B4 |( v9 U
  /*--------------演示程序---------------------*/
! _0 {  \2 Y7 B- q% \  t" `4 T  main()3 i- p7 g3 a4 S) C( ]
  {
4 c# x6 M6 }: q9 \9 B. K- u  puta();
+ x7 L3 e- ~  ^  Q) H( ]* U$ F1 p  getch();
& p5 H5 h: \5 ?, i8 E$ W  dcls(0,4,0,79);9 V$ l2 C' r- ?: l' R& ~/ U
  getch();
% T* o9 ~7 d$ k( M, ?; D9 r  puta();
% m1 J4 F5 Y2 ~: P2 V  getch();
. x+ F2 ?- f% C$ n) ?0 F( b  bcls(0,25,0,79);0 [* {2 t% L9 t% I
  getch();; r+ p6 f, {; Y# v# F: G. E
  puta();, I% y. ~& f; h, c
  getch();
5 G, h2 v/ a+ C4 d+ c  zcls(0,25,0,79);; p' {( Z0 i7 f4 b2 x
  getch();% A% E1 F6 P1 d, ]; X9 E5 X* m" m4 n$ t
  }
% e% g6 ?4 o3 X+ a8 I' I& N! J8 w  /*********center clear screen(中心清屏)***********/
0 n' c( k! u( O( L* ?( E  void zcls(int x1,int x2,int y1,int y2)
2 b7 z" N& {/ ]' ]; e; d7 {" H6 f  {
* d) z. c2 c; m; S0 U, u  int x00,y00,x0,y0,i,d;$ ]! u1 Y6 V% l) j+ I  J
  if((y2-y1)>(x2-x1)){
- t/ K) f( n9 o/ `% u0 U2 B  d=(x2-x1)/2;
' C% t5 C# h+ }( h. f/ F# _8 J  x0=(x1+x2)/2;
- L; m+ M- J6 h7 U  y0=y1+d;- k* x9 ~* r9 n) K/ q% W. E
  y00=y2-d;: E. f+ T) w% p) C  U9 T
  for(i=0;i<(d+1);i++)+ k* ], R# y4 N7 I* |) L. F$ p
  recls((x0-i),(x00+i),(y0-i),(y00+i));
' t9 V3 W. G# z5 Y3 t# x2 h  delay(10);! B% T, O% ^0 H; Y$ u- c
  }. {. c  K7 e* d
  else{
( u* Z, f/ A8 p$ u8 c9 I: T& D  d=(y2-y1)/2;& s4 h  k8 i0 f3 Y5 F
  y0=(y1+y2)/2;+ r% f' U2 G0 Q
  x0=x1+d;, f* |! q! V0 N9 y! ]" E
  x00=x2-d;
4 Q* v/ D) d0 B) M0 {  for(i=0;i<d+1;i++)! S) B+ `# Q& e0 }. X
  recls(x0-i,x00+i,y0-i,y00+i);
5 Q/ z2 I6 E2 g& E. Z  delay(10);! h6 Q+ n: P9 K% e5 L1 ]  B8 @, U% ?
  }
  H) R/ M/ F& \$ h$ z  V8 D. E  }4 ?) I9 e4 }* V  d3 M! T# P. d

& C: n: y, a7 F7 e, L  J  /************* clear rectangle side(矩形边清屏)***********************/
+ n. C, B; K0 p9 q
9 A9 Y% h8 h- ^# T) u( g' y  void recls(int x1,int x2,int y1,int y2)
# G' m7 R6 E# r$ b3 J$ c2 b  {4 p% a3 @2 D5 W' }; ~
  int i,j;* d; T; v; Q' l8 _: {' b9 L
  for(i=y1;i<y2;i++){- D( j5 L1 X6 L3 e
    goto_xy(x1,i);( w( o' V7 W2 C7 n2 h: G
  putchar(' ');
& U. c; d$ B* ?$ A+ @" t  goto_xy(x2,i);
; X8 u& W5 |: d% Y  E- k" d$ V  putchar(' ');7 Y$ A9 @9 O. ^0 z) ^0 g* q- i2 y
  delay(10);
$ [. G, F6 t6 ]* g# ?  }' u* S9 L! C3 G
  for(j=x1;j<x2;j++){
. ~. O; F" i" ~, M5 U0 Z7 Z  goto_xy(i,y1);) n9 F: F8 ]* o! O8 u# z0 G
  putchar(' ');; y7 W  U9 r; }5 h* i7 o6 G$ F
  goto_xy(j,y2);! k( z0 V. g$ `/ K* f: h/ o. S8 |* b% g
  putchar(' ');" x6 h0 n' H" U. z
  delay(10);+ E$ \% M* I* }- L' ?4 \- u
  }
% t+ s& P; Q9 o6 Y1 t+ C& f% D  }
, o6 v5 i% Y% [- ~9 K  /******************open screen clear(开屏式清屏)*********************/
+ k( M. Y! g1 e5 b  y! ?; X9 n. N8 Z( H- F% j7 U" T" d
  void kcls(int x1,int x2,int y1,int y2)" G; V  `4 `- T8 S% V2 w. n" D
  {
! Z0 F3 I* T6 u0 b4 n) ~+ ~, j  int t,s,i,j;. I7 ?3 W/ m0 u: H
  t=s=(y1+y2)/2;
  S5 z+ q& [2 }) d  for(;t<=y2;t++,s--)3 H9 v0 ^3 z& F( ^( r
  for(j=x1;j<x2;j++){/ z& p* G& ?5 J/ A. _
  goto_xy(j,t);
; n1 U4 I6 O' u9 G# m7 {  putchar(' ');
. r" T& T: v( C% n  goto_xy(j,s);
5 Q  V2 d* Q7 y0 |2 Y6 @: S9 s% ~  putchar(' ');0 m: x% t# @* C4 e0 o
  delay(10);
4 }1 c) H( _! s  }
. A( _+ u7 V* s5 B, a  }
( E  m: W" r. J% Q: H  /*****************close screen clear*****闭幕式清屏*******************/
! U5 u# c4 C* ^9 N* L
+ c8 E" {) j. a7 j0 [' W  void bcls(int x1,int x2,int y1,int y2)
! R6 E9 ^  ]. X9 u$ A% v# P, [$ }  {  L! c' P* ~' N( o2 {( a. M* d0 k5 K
  int t,s,j;+ l7 V; e; O% }& p7 k$ ?
  t=y1;
6 l# k' C* X" D! ^  s=y2;' u, P( X3 z  t) {, @0 s, X, \- V
  for(t=y1;t<(y1+y2)/2;t++,s--)# A6 V' ?- s4 ~2 y! v- \3 ~
  for(j=x1;j<x2;j++){
% C4 G7 s; K+ q( {  goto_xy(j,t);' F& [+ e! K" N
  putchar(' ');# I% A" {6 X' v4 z
  goto_xy(j,s);
  T, G) S  O& C1 E  putchar(' ');; A9 h) |+ ]1 m2 N% N  |
  delay(10);
* W4 R, r/ o* W$ e  }
4 n, ^! h$ P9 p8 ^3 y: c  }
1 t' L: F! q. O7 K# Z* _( b  /******************bottom screen clear(自下清屏)********************/; H# Q/ r1 e$ E0 r0 b# v, a
* O4 d% i" S4 L1 A. B/ o
  void dcls(int x1,int x2,int y1,int y2)
' l8 p' n$ `6 _: y6 _( o" ]8 P  {
  `/ q  v8 i/ g$ l" \  int t,s,j,i;# w4 e2 F( a# G7 s
  t=s=(y1+y2)/2;
4 T+ C) G  K$ M* V7 t# L  |  for(j=x2;j>x1;j--)
. _* R' H0 K4 N4 d  for(i=y1;i<y2;i++){
( s2 v' d0 A6 L0 h: y: u+ Y  goto_xy(j,i);" X8 X$ I( {) u) b2 w
  putchar(' ');6 _. ~( s1 o, P; P" C
  delay(10);$ {5 i3 L6 E) [9 e
  }
" f! P0 \3 X1 v4 S' c  }
! ?0 v9 G/ {0 n' R) Y0 I: S1 Z  /******************设置光标子函数******************/
4 ~' _% n, x$ `' J% t2 X( m* o  @# R3 R- K5 O& V6 h! A
  void goto_xy(int x,int y)
1 ~' R2 L2 S& V" |  {
: x5 L+ @) T7 b+ s" t1 M1 V5 b" x  union REGS r;7 V, i/ V1 ^$ x
  r.h.ah=2;
2 P% }+ X. X/ k6 g. U  r.h.dl=y;
! X: I( h5 u+ {* V  r.h.dh=x;
# o% a6 Y5 [0 U; P. i, `  r.h.bh=0;4 Q. J2 j1 M0 L+ |" K: Y% v
  int86(0x10,&r,&r);
/ r8 D; G9 b% ?  }% P9 W5 R0 ^3 W( |1 u9 l
  h' e4 l8 j3 z" T  G9 V  A
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
+ a& r- ~% h7 q+ ]! P% [4 s; |2 m$ y8 \$ c1 G& x! J& Z
  void puta(void)
+ k% z  y' T9 M: j  {0 d8 j5 C; |/ s
  int i,j;, b! e( k0 B* y
  for(i=0;i<24;i++){
, i# O7 \$ i& G6 d) N6 g  for(j=0;j<79;j++){
2 `' H' F* e$ f: U6 f+ L2 q  V  goto_xy(i,j);9 F# I$ U( Z0 q" s' ?
  printf("a");
3 `4 ~4 V1 V" |7 D, z  o  }
. K( S* H4 |9 N. I! @4 i( s  }: @% o% K/ }; Q  l3 `# p1 O
  }

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