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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
" K9 N, t9 c- x- j. @0 }: Y
: c5 G8 j7 P" Z9 N  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
9 [  `# Q) ?  L! m' |
. \: P2 R0 j$ I* Q# }2 d  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
+ A/ J. y7 [* x* a  子函数及演示程序:% H/ H3 M2 q/ E# V' N

& t7 A) e1 C' z0 |; L' j8 M  #include<stdio.h>" j. q3 V; ?( t
  #include<dos.h>! ~8 @) p8 w& t" J
  #include<conio.h>, D$ p3 E. x' D$ _) M
- y3 C; n' _: D8 N/ B$ f
  void goto_xy(int x,int y);
1 b0 J' L; y' H8 }7 F  void dcls(int x1,int x2,int y1,int y2);7 M; ~( {2 d/ H7 S* A3 B' z
  void bcls(int x1,int x2,int y1,int y2);
; k6 Q8 A6 }6 s, c( p' ?0 }! f  void kcls(int x1,int x2,int y1,int y2);
+ `- Q- y& e1 x$ \+ y  void recls(int x1,int x2,int y1,int y2);4 w0 |- o& ~3 t% J1 r3 p( r
  void zcls(int x1,int x2,int y1,int y2);
# c1 e0 p  F$ k) z. [/ Q, U  void puta(void);
2 q4 h& @4 P# M$ E. L+ B/ g( B) H! Z+ C! K  R) ]- w
& V; R$ e0 F2 I+ c' @
  /*--------------演示程序---------------------*/
4 j5 @$ g: b, s2 c% v# W  main()
4 k5 M0 u- j% C5 s1 T  {
" E' ^! T3 b$ ?: a6 w7 _  puta();: m/ T* a! G6 H+ ~' y
  getch();6 C, M( D% [4 D- [, p6 q. H
  dcls(0,4,0,79);
# @+ r* f+ w" c9 h  getch();
( c4 U- G0 w- N. W9 m7 ~1 M  puta();# j5 |! |% R% m
  getch();
% H/ P; ?- S$ [  Q  bcls(0,25,0,79);3 r- {0 Y+ z4 E' j/ g$ U3 f9 X. }
  getch();
+ i9 G" N7 k5 C! I, a  puta();
& y0 Z; O( r) l- z4 Q' y1 A( B, ]! y  getch();5 Q1 N* X& V2 ^
  zcls(0,25,0,79);
5 ?2 I" Y; P( E' [  getch();0 E; I7 D" W, r+ E  `9 C
  }
' v8 u6 W% C0 B2 r8 A  /*********center clear screen(中心清屏)***********/1 f% E; |! l& m! ]. z- i
  void zcls(int x1,int x2,int y1,int y2)) s! `& ^# B' c/ ^0 U7 w
  {/ n0 i) Z4 M! U
  int x00,y00,x0,y0,i,d;
. Y, A* p+ C: w! t, B8 |* F  if((y2-y1)>(x2-x1)){% U+ ?( L' b1 p( [
  d=(x2-x1)/2;
. W- E7 I8 W, R! [+ \$ I% t  x0=(x1+x2)/2;
- X2 `) {  S8 I8 F  y0=y1+d;; O3 y' A3 M* ~  d' u0 l0 Q* v
  y00=y2-d;
' ^  O# _/ w& h, T6 K9 b  for(i=0;i<(d+1);i++). Y) n4 h, |; _7 T; r
  recls((x0-i),(x00+i),(y0-i),(y00+i));
) c: O4 P9 U0 t, j; L5 q8 \* f2 r4 T9 G  delay(10);  {3 O% i+ h7 @4 l. h& Z4 W
  }
0 V7 `' z. ?* n  else{4 n$ O* ?: W$ F4 {) m3 y) m
  d=(y2-y1)/2;
; b5 p- ^7 Q( C8 k  W& e  y0=(y1+y2)/2;
7 Y6 ^2 o$ C: \! d  x0=x1+d;
  H5 h6 [6 ]: u& E' V  x00=x2-d;9 N4 R) K" c" Q$ z
  for(i=0;i<d+1;i++)
5 g) a% Z- `) Q; ?+ b7 o  recls(x0-i,x00+i,y0-i,y00+i);4 Q4 V5 o4 B9 I
  delay(10);. L. W( r3 r& W4 Q6 ^
  }
" t6 @3 v( p# ~: b  }
( v$ r+ T" c7 P  ]
+ I( L$ z3 y% h& c0 Z  /************* clear rectangle side(矩形边清屏)***********************/
/ R5 p+ H: h. M) ^  R' e' O
+ Q& a: J. O% n  void recls(int x1,int x2,int y1,int y2)/ H6 B9 M" a  J
  {
- |9 c; K+ v0 {+ s, _  int i,j;* b5 V% `# X& \. q
  for(i=y1;i<y2;i++){; r/ ~+ u0 |% h8 M) b4 {
    goto_xy(x1,i);8 P8 w7 U; A9 \6 Y1 D
  putchar(' ');- T5 `7 ~! L5 a4 [9 e  b
  goto_xy(x2,i);
* z! J& I9 X3 L  putchar(' ');
0 R+ I1 J$ q- B- u  delay(10);3 d7 D* D6 o2 N
  }: m7 h3 v" E( ~
  for(j=x1;j<x2;j++){2 |# M- M* |1 {) P) i( Q6 E3 j! ?
  goto_xy(i,y1);" ?) [, x- m! k1 l1 K
  putchar(' ');0 ~4 M( J+ T/ Z3 n- o
  goto_xy(j,y2);
$ K, V; m  U$ m. k  putchar(' ');1 ?- X4 |/ n0 n# ^1 W- ?
  delay(10);/ ^% @% {5 _+ e* U$ E! s0 G( n$ U
  }
3 X) a  e$ D/ s+ `/ h- o* s  }
8 s1 }+ l5 w7 r' t& \  /******************open screen clear(开屏式清屏)*********************/
. F) X% J. e2 h
$ h) C5 r* }* y' D1 x! a  e  void kcls(int x1,int x2,int y1,int y2)- M2 p, i; q7 \* o2 y3 y
  {
! U/ I/ |7 h% B8 Q  P. h% W4 g& k  int t,s,i,j;& e/ o2 ?, E' d5 @! }
  t=s=(y1+y2)/2;8 F6 i+ i6 T1 G9 `( w) u
  for(;t<=y2;t++,s--)
6 q& R3 @; H+ Q  for(j=x1;j<x2;j++){
; [, s2 c1 H# p) h( j7 _9 N  goto_xy(j,t);
% ^& @+ T( C9 q7 v  putchar(' ');$ f2 w3 H9 D$ a' x( H, P% d
  goto_xy(j,s);0 o: t. d8 b0 u) i( B& }
  putchar(' ');: L2 X) ~% j+ z& H
  delay(10);! v6 Q* P* ?( p6 `
  }. s/ K: Z8 p2 c( S: h5 s* v
  }2 S4 f: n8 p: e" E) X7 N
  /*****************close screen clear*****闭幕式清屏*******************/0 N9 U, i8 Q' f# d3 |  ^
9 Q* A" `+ o. w6 o8 m. x7 A
  void bcls(int x1,int x2,int y1,int y2)( H. ^8 n6 w8 C& f. L
  {7 |* D: {- W% j! I9 O1 o
  int t,s,j;
: T. D+ g* o  k7 M0 N" W" i$ j  t=y1;
. T8 G7 w2 Z; D& z- m" ~6 B  s=y2;4 V$ q0 i/ P9 Q* U1 L
  for(t=y1;t<(y1+y2)/2;t++,s--)( p4 `0 Q$ S, a! P/ Q; r
  for(j=x1;j<x2;j++){+ x3 X  u& H% N( @# W1 U# a
  goto_xy(j,t);
, I. h% }9 f. i+ u: W  putchar(' ');5 _1 X" h; t; \4 _8 g' j. R) [
  goto_xy(j,s);7 }8 ]( D9 D" R+ p) ~
  putchar(' ');
& l8 R' B& b  B+ E0 f6 V2 F  delay(10);9 D! s" m1 Y3 o3 k$ ~
  }9 l& r- u# G+ w2 d; A& D, F7 }
  }
$ O' E7 n2 @$ t- J  /******************bottom screen clear(自下清屏)********************/" ^/ x4 d1 N6 [0 }2 m) W  w- O
5 u; B# O7 U( J; L( `8 Z
  void dcls(int x1,int x2,int y1,int y2)9 B- h5 p% J( g5 ~; K
  {
" u) k9 b: f+ a3 L* y% \  int t,s,j,i;' I- \0 A: e* k5 F: @
  t=s=(y1+y2)/2;' o: G3 ^/ F! `1 o4 z
  for(j=x2;j>x1;j--)$ \& x/ p4 \4 _+ a9 C" s
  for(i=y1;i<y2;i++){
  S7 @- p0 h- |5 i$ p5 p. a  goto_xy(j,i);
, O+ @/ R6 [8 x8 _  putchar(' ');
8 v6 }$ X/ ?* D/ W! j0 }: n  H  delay(10);/ `8 y/ b- G. H: Y
  }+ }3 ^- ]9 X. U! T% q1 f; i/ M
  }# b7 v7 y+ N! I' h
  /******************设置光标子函数******************/
, H8 g) ^1 i0 |/ q' I( w4 j# {. @( A9 n/ R8 c" ?% \
  void goto_xy(int x,int y)
% D6 q  O# Y8 e& z% ]4 L9 u/ a/ u  {0 t- Z# Y4 X, Z. Y
  union REGS r;
$ H( a; H1 V5 P2 g2 v5 O  r.h.ah=2;# i/ R+ u" E. b6 W
  r.h.dl=y;
3 `% |/ |7 C2 }1 `  r.h.dh=x;0 _7 a- ~5 W- g# O2 a: g" x
  r.h.bh=0;% D# d: ^/ K# d9 P
  int86(0x10,&r,&r);
5 R) q4 J: j  g  X5 Z  }5 ]$ ]" w; s6 B( k$ }* x7 r
0 Q* \2 N6 x: M2 X* i5 e& Y+ \
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/; {  k1 D" J# y* ~9 O

  J- Q% }  M* [/ p% B% h  void puta(void)  ^- H6 B8 S& Q0 O  a' R% m
  {
' j6 A4 N- H6 x  h& w% B+ U  int i,j;6 [: c0 d4 \6 H6 {: b* f
  for(i=0;i<24;i++){2 S( W( U3 t  \) M/ O7 |6 C3 f, ~
  for(j=0;j<79;j++){
1 J- k2 F. f' P7 w. O, I& ~# V/ T  goto_xy(i,j);2 t3 C6 A- }3 v( k
  printf("a");. f9 q% T5 w) ^5 l1 S
  }
2 U  |% Z! y3 h0 ~1 S3 Z0 ^* W  }
4 b& d+ r$ |. R1 s" C$ K# v" Q. z  }

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