返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,1 [/ j5 y$ f- r5 O

" |3 ~' C% H3 Q  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里3 T" P0 v8 X  `0 _8 a% z
/ ?) ^# D* p! }+ C! g3 `7 M
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
- y! y' k$ {4 j( g* K4 K  子函数及演示程序:
; J5 R" F0 t' Y3 V5 a: ^1 w# V# N0 d
  #include<stdio.h>( p/ F& D# ?8 I9 F8 i# H8 B7 S+ A/ i2 P
  #include<dos.h>% K& {) s/ w7 d" e8 g2 a( l
  #include<conio.h>
' \. M' ]5 |3 l3 D4 F% E5 ^, I6 p/ \' u
  void goto_xy(int x,int y);2 F# d/ P' a, P' C
  void dcls(int x1,int x2,int y1,int y2);
  p* a0 C% K) a  void bcls(int x1,int x2,int y1,int y2);) N) h6 N$ V8 X
  void kcls(int x1,int x2,int y1,int y2);& m  C4 ~& A2 `  T. g5 l2 d
  void recls(int x1,int x2,int y1,int y2);4 C( M- }8 W8 z0 W; V3 S! U6 [7 B! |. q
  void zcls(int x1,int x2,int y1,int y2);9 A6 V! q/ Z, L/ K2 i4 Y
  void puta(void);$ `, I; \0 H7 C" }" W2 F; E  h

: q+ w: r. M5 @7 v0 g) O. N9 z7 j* a
' D" C7 b$ _, Z* v* j. f9 V5 d9 B  /*--------------演示程序---------------------*/
4 k; P: N% i/ {0 T1 w3 O& g. I  main()/ f8 h) b: Q+ z' R6 B
  {
/ K4 X$ Y0 S# M/ Y0 J  puta();& M- k4 l" n6 k
  getch();5 s2 o# I+ Z5 [+ m- R1 p
  dcls(0,4,0,79);
" l( w) `7 W3 G, c! q) g9 A  getch();4 a8 |' x- Y. @% X; x/ c5 _
  puta();
% X: n) a9 D1 d% L& ?  getch();% ~  A$ j8 ]6 d1 L
  bcls(0,25,0,79);
5 {  E) b. h& e  getch();/ I5 w" w2 @% P: j
  puta();
- f, i1 G1 K# x4 D4 h: q* M% @1 y  getch();6 M  e2 A% R4 a9 i% a1 D/ R& J
  zcls(0,25,0,79);* w3 {/ w' @* J
  getch();* P8 K  `  ]$ H; Y) i+ A0 g$ J
  }7 H2 M* `: a/ Y# ]
  /*********center clear screen(中心清屏)***********/
% P- `, i1 }) S* H4 a  void zcls(int x1,int x2,int y1,int y2)
/ p" c2 [6 M9 m  {
& f. h( {" Y) h- e  int x00,y00,x0,y0,i,d;" V5 k3 c2 n# Y
  if((y2-y1)>(x2-x1)){
7 n' g4 Y2 u9 ?  d=(x2-x1)/2;
- G5 E  @* F% u- |  x0=(x1+x2)/2;- M7 ?, M/ V% T
  y0=y1+d;
3 ]4 `6 G7 q+ t  y00=y2-d;# Z: |! i; z- g" p% V
  for(i=0;i<(d+1);i++)
2 ]/ X; [! w- [6 T) ?, i  recls((x0-i),(x00+i),(y0-i),(y00+i));0 c9 J7 N. ~* Q) v- U% u+ l' w
  delay(10);1 `- ]$ [( ~9 J% E9 E: E
  }, X6 f' f+ v8 N, ]
  else{
- t# Q7 w6 H6 e  d=(y2-y1)/2;7 ?  q8 l6 a/ N& U# {
  y0=(y1+y2)/2;
, u0 B- t1 r  s! {9 S4 f( y  x0=x1+d;; A+ Q2 F3 k) K# {- ~. }
  x00=x2-d;) ?: [" b/ k7 k& K, w
  for(i=0;i<d+1;i++)
" w) l9 C6 }0 x, K5 F  recls(x0-i,x00+i,y0-i,y00+i);
+ q6 `# f$ H" _' E2 H; p0 E  delay(10);
9 f. h7 B9 {; K; [7 h2 d9 l9 |1 L1 {  }3 c! ^. o2 M2 h/ x$ a2 ]5 l6 t
  }. h; r) ]5 ~3 }0 Y+ |7 j

6 s& g# ^6 S6 x6 M8 g  /************* clear rectangle side(矩形边清屏)***********************/
( X$ O* p6 T* \) `, i) U! E
+ \, k% h" W- j- V  void recls(int x1,int x2,int y1,int y2)  p, o# X" A+ |9 i3 F
  {: |; b) X% f! ]' W- B% U
  int i,j;
# _( N, ^7 y+ a5 c2 P  f  for(i=y1;i<y2;i++){
" U5 N  G# k: j9 t5 e    goto_xy(x1,i);
7 \2 K8 b" e4 i! T7 M. o) G2 P2 e  putchar(' ');
0 P8 m3 c3 _; b  goto_xy(x2,i);
3 N) U9 d" |: ~6 j1 f/ q  putchar(' ');
' H/ J% c4 _# O' _' G, H& _* f! O  delay(10);) b+ p  i( d  @( m: d9 c
  }0 Z. d3 M3 F* Q! k; n# C
  for(j=x1;j<x2;j++){5 v9 _( A6 N9 [
  goto_xy(i,y1);& @. m7 \/ w. C  }
  putchar(' ');$ w9 U2 ~0 g4 K! Q* e$ H! i: j
  goto_xy(j,y2);
2 x$ N6 V; ~/ ~* J5 J  putchar(' ');
6 `* L: g) W1 @$ k" R  delay(10);; Q/ b, F) @6 o, v1 S
  }
9 S1 D0 q, ]6 V' \; E/ A9 N  }
1 x( ?+ u9 E  ~& u  /******************open screen clear(开屏式清屏)*********************/1 x' _" C/ o% ~* `3 b
% v( n* W; j: {: |9 d- d0 @
  void kcls(int x1,int x2,int y1,int y2)" r  r% q0 W- X) Y% N
  {
" i- d" {6 n1 M- o  int t,s,i,j;
0 D  a! v# o3 ]% Q7 e; [' {' t) \  t=s=(y1+y2)/2;' L' j0 `( q) U, O
  for(;t<=y2;t++,s--)
0 g# S: S8 r! X( _& S  for(j=x1;j<x2;j++){& H7 P/ I. g( s3 {" P# _
  goto_xy(j,t);
+ l" L" b* e! |+ p# K5 J  putchar(' ');
  I, B( r. k: X  goto_xy(j,s);  P* E- l4 ?" e6 L" A3 @
  putchar(' ');
& x  a' F4 p" Z. Q# ~1 j1 i  w/ C  delay(10);8 l0 |3 G3 n; Y
  }. b' C# J5 m- X. u
  }
, Y0 Z* V. i) ^* v  /*****************close screen clear*****闭幕式清屏*******************/8 N- D5 ~$ |* v1 l* i/ b; c
3 c7 o0 u, J3 V% m9 m. Q
  void bcls(int x1,int x2,int y1,int y2)! e/ Q9 F8 C3 `8 v1 W: `( d1 B4 J
  {& d* A5 O7 l- U) v4 M  K
  int t,s,j;
+ q- M" d5 s2 o  L6 ?  t=y1;
" ]9 b9 g2 @0 @4 r" C: o  V  s=y2;
) m3 w0 c+ {3 D  for(t=y1;t<(y1+y2)/2;t++,s--)# _; y" F" `! Z$ E* T9 M+ ^# U' P/ l+ J
  for(j=x1;j<x2;j++){; q( }% C) N4 L  y! d; a% g* s
  goto_xy(j,t);3 ]' p) _( P. V! u3 K; K! D$ o+ I
  putchar(' ');) t" p' m! T% I6 [
  goto_xy(j,s);
: i# T5 y  a- Q- X3 L* Z# X" M  putchar(' ');
5 z( A+ R8 {% k5 ?  delay(10);
' T) {% `- |8 B  }
5 a! G! B/ O0 M* Y  }
9 i4 C9 f" b! T6 C  /******************bottom screen clear(自下清屏)********************/; W2 l: n; |4 N6 N. G" u! U

- y" s( q" ]5 v- S  void dcls(int x1,int x2,int y1,int y2)
! V' @5 |" t3 _/ l) e6 T) f( b  {/ Y8 V) m/ z! C5 x2 i1 H+ `
  int t,s,j,i;
% U# [5 V2 D7 |5 I  t=s=(y1+y2)/2;% N" Y, u( c% d
  for(j=x2;j>x1;j--)
; V5 X. _0 v0 O/ ?# P" }, ]( s  for(i=y1;i<y2;i++){
* F  k7 }# S  A8 a" D' D/ ]  goto_xy(j,i);2 i. q9 e) {* c- U$ I
  putchar(' ');
0 w% v/ F. [. s  delay(10);0 y' |( p( _$ j! J) n& y
  }
0 B% g" g( t5 z" l  }; E% f4 h7 ^$ F- j
  /******************设置光标子函数******************/* l+ E1 T, k8 d5 a

- T8 d, l  b. r% s  void goto_xy(int x,int y)+ @- U, {' O( l) O, z
  {
; F* f5 U2 x9 c% Q! H+ y/ m1 v. O( E  union REGS r;
# z( M' E+ }: W" L  r.h.ah=2;! v3 a% f9 }: S% Y& a
  r.h.dl=y;: f" F3 e0 c& P
  r.h.dh=x;/ F& X" N1 |8 X
  r.h.bh=0;
+ o6 W. J8 v) _; N$ g1 ]8 p7 d! N  int86(0x10,&r,&r);8 `, u5 m5 N! b/ v0 F, n. z  r) A# x8 l! z
  }" o9 ]7 c; `* V0 ^- v- \0 Q/ S! _& D
2 A! ?( L, ~' T- h/ S/ @% G0 X% f3 B
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/% C7 b5 s; F5 t8 I, A& k: t2 J

! V- p: c) M" K  void puta(void)- t# v  d, x- j' I- |
  {7 I3 F7 T3 X1 b$ ]) e
  int i,j;  V- |% u: d) J" |* \/ c' ?) k
  for(i=0;i<24;i++){
$ G4 d' z- r' b1 I9 |! W$ ~6 i  for(j=0;j<79;j++){
! ^( i0 j/ S  Q1 h9 [2 f  goto_xy(i,j);' ?% f6 j: H3 k: X
  printf("a");
: j% P- y, K( h) N: o) t  }
, F% X; g# ]1 T8 A( w  }
* T/ [* p  {* C# h$ j! c2 l$ c% V  }

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