返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,; R' d+ U( N; ^* E

) X; s) J5 h( |1 }' m6 a: \) Y  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里" G, X9 I/ s+ z1 e: W( @7 A

& V4 G! V4 ]$ Y" b& S0 Q* @, o  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
! r0 Y5 m$ U. T. D1 ?  子函数及演示程序:8 Q) A- ]# z6 N. |

/ O8 W( U. C0 E$ I; Y: e+ k: g& }  #include<stdio.h>6 w2 I) O, `7 b& N
  #include<dos.h>) ]! P5 o! r  q4 w; G% u) \" `' U% k
  #include<conio.h>
) ?7 \8 r/ W% [6 L" {- B; U7 |$ V" W! d
  void goto_xy(int x,int y);
( ?7 [9 y4 C9 [& R+ E  void dcls(int x1,int x2,int y1,int y2);
) {' j8 U; a  T" z7 J& `9 p1 ?1 G1 ]. [  void bcls(int x1,int x2,int y1,int y2);
, P' h8 E/ ]4 f! M' c: b  void kcls(int x1,int x2,int y1,int y2);
6 L; t8 ^0 A- ]" u, k  void recls(int x1,int x2,int y1,int y2);0 M9 z, g8 v( x$ `
  void zcls(int x1,int x2,int y1,int y2);
: U; ^7 e  k. W7 k& i+ w  void puta(void);+ f7 C" {- I; T, L

9 Q6 K( ?5 J9 }! K3 ]' j& u' B) k% G; I, m: I' k7 O7 S
  /*--------------演示程序---------------------*/9 @6 G* z7 @$ D# D
  main()
0 c. Y4 v3 F( `9 c+ H1 F  {
! |2 b8 P( t, G! z2 a  puta();( c6 j( M% N7 P$ Y  O# T
  getch();7 E+ {" p% Q$ E; I
  dcls(0,4,0,79);* P9 u) [1 L) K. B* q" g
  getch();0 \6 F9 U* w  f- L- [5 E( k. g$ M* A
  puta();
0 t* Q4 G8 S) Y$ v  getch();% J7 h) `0 P* E9 x+ P5 p' v: I9 f
  bcls(0,25,0,79);
9 k. x8 O% V3 k! B  getch();  ?% ^& \+ ?$ D: c' N; a
  puta();8 M$ u' D0 d+ L& w  `/ {9 L
  getch();7 M$ E$ R5 y' y0 y2 ^, \
  zcls(0,25,0,79);
" m; z0 N6 t/ A  ~5 {/ I. J  getch();
! C/ x" `& M5 O6 f% g  H5 E  }+ g$ U# U  p. B8 I9 _
  /*********center clear screen(中心清屏)***********/
' x. Q- K% y! T: |6 s  void zcls(int x1,int x2,int y1,int y2)
  m) M9 Q$ r. q# ]9 {  {' o# K; R" E  f  ~3 f
  int x00,y00,x0,y0,i,d;3 N7 P/ x* L) O5 _" G
  if((y2-y1)>(x2-x1)){1 O% l" b3 q5 g
  d=(x2-x1)/2;- u8 _7 ]8 @$ m' e- u' S# m
  x0=(x1+x2)/2;
- L. y* j2 V! _" f# H% N* J8 g7 z* N  y0=y1+d;5 H( O9 B& H. I4 Y" |
  y00=y2-d;+ X4 Z7 K: @. h2 W: F7 e- ?1 l
  for(i=0;i<(d+1);i++)
6 ]7 D/ {3 N. i$ O9 R& v  recls((x0-i),(x00+i),(y0-i),(y00+i));
7 h. u' N" {3 W: J# [) P$ z9 i  Z  delay(10);
# D0 N* X' a& Y2 U8 n  }: ~9 Q. G6 W. h% q# I7 e
  else{) u. h3 g* r4 v2 @5 U# |
  d=(y2-y1)/2;
/ o9 P( w  O* F- H* U4 L  y0=(y1+y2)/2;
7 Y9 C& j7 f. D, ?. E4 ?- A  x0=x1+d;6 r" }* ^; T/ R0 Q9 A
  x00=x2-d;
6 s3 n  l" @# Q) ?. w) q' }  for(i=0;i<d+1;i++)' R% z7 t' F- c8 g' X; p& j9 e
  recls(x0-i,x00+i,y0-i,y00+i);3 ~2 P  [, \& p6 F. p
  delay(10);
6 Y5 K, J3 h6 E4 ~9 x  }0 B0 e2 Z; w  I3 k/ t# b
  }
# ]; C2 m# v6 _* h2 L& o' u( A1 E- n2 }: F( n
  /************* clear rectangle side(矩形边清屏)***********************/0 q+ i7 _& E. W5 V7 d

( T& ^; ~- E9 P9 A# {; w  void recls(int x1,int x2,int y1,int y2)& M  C7 T3 h6 c  z* _5 \1 D* C
  {
5 T3 @- K5 g$ C: Z$ l- I( B* T$ P  int i,j;
$ W3 |& Z+ N; C. v$ i0 f  for(i=y1;i<y2;i++){
; m$ p7 ]( i( M2 p7 z6 ^    goto_xy(x1,i);" m3 f& s6 W4 L: S
  putchar(' ');# H) I# l! x: m8 `$ s. R2 P6 Z
  goto_xy(x2,i);
7 s+ e5 ~( L+ x1 u% g8 n& ^$ o2 c  putchar(' ');$ L# Z3 }' j3 H
  delay(10);$ e! u& {" A7 I
  }
3 k& R; |3 n. x7 F4 `" l  for(j=x1;j<x2;j++){7 e' h& @; ~8 s* J  M* O
  goto_xy(i,y1);
% F% G$ y. U* n" a2 r$ Q5 Z  putchar(' ');3 f  ^& }% }  Z- F# r9 j
  goto_xy(j,y2);
! [/ X; I' V" n# J  putchar(' ');
7 d: E9 s0 R# a0 O3 r  delay(10);% q# u% E/ E6 h$ n, y* d
  }, u$ b  t  G9 @5 f
  }
$ o6 C& ~8 S5 ^) ^- S" v7 t% c) O$ F, h  v  /******************open screen clear(开屏式清屏)*********************/
/ Z( a* w) J4 o' W. k5 }$ @' a" v7 y" A
  void kcls(int x1,int x2,int y1,int y2)4 z- @/ ?9 z4 r" v
  {
: R# {/ Z, k& T/ \. C  int t,s,i,j;
9 g: C+ D, x! m9 w1 o8 x: e  t=s=(y1+y2)/2;' g, b" p% k1 b6 d
  for(;t<=y2;t++,s--)- ]0 \4 S) s& N' f9 m
  for(j=x1;j<x2;j++){( B+ k9 N3 G' E+ _  l7 P
  goto_xy(j,t);' u6 r9 P$ R4 `8 \- `
  putchar(' ');( g* W/ k7 d8 @
  goto_xy(j,s);
6 B( D- |" ^1 R. c  putchar(' ');
: y. \" w! V* {! Z$ B' a  P  delay(10);
2 O, g( A2 ?7 n$ }4 H! Z  }
; B0 S! V6 \9 k  }
  a- `4 C/ M8 |' d$ g  /*****************close screen clear*****闭幕式清屏*******************/
: Z: T3 Y; v- C# C+ x6 w- W
) q* b! o4 V' ]& Y& z. J5 D1 _  void bcls(int x1,int x2,int y1,int y2)
# _! g  h, P( U, V- M! F* N  {" C" a8 Y7 s- X& V3 o
  int t,s,j;( t7 i! @% T' i6 N* l
  t=y1;
0 A' I% j, l2 |3 V; q" S  s=y2;8 O' W6 k: R3 F5 l: C; T7 {$ A; l
  for(t=y1;t<(y1+y2)/2;t++,s--)8 Y9 D. {+ D7 E+ x
  for(j=x1;j<x2;j++){
' o& U$ b& V4 K5 H" n5 }7 F) S  goto_xy(j,t);$ t' a, X: g) G
  putchar(' ');
8 L: X/ h; n- Z3 F" q: y, y% V  goto_xy(j,s);( y, W+ W" e  x1 L5 ^( O
  putchar(' ');
8 V/ C1 _" S' q7 M$ k' d  delay(10);
( F: E# D( a* U0 ^  }% P0 u$ e- o$ O! ~+ p; t
  }' B* A4 b7 u$ z
  /******************bottom screen clear(自下清屏)********************/' d3 y: f" j6 I' s& ~8 B

* M* X3 X# i/ w  f+ m1 y  void dcls(int x1,int x2,int y1,int y2)2 M: x  T8 H& A  t# ], S
  {
, C* w2 G. E. m* _7 Y9 @  H# v/ m  int t,s,j,i;
7 {! M( u. m( N4 w3 ]- }" i" `  \7 W, h  t=s=(y1+y2)/2;
. m% _/ _9 h& ~0 Q/ I  for(j=x2;j>x1;j--)& c. T, p0 ^6 `( Y, |
  for(i=y1;i<y2;i++){
& {  H2 ]6 Y2 a' j6 D; d' w6 o( Q  goto_xy(j,i);
% L+ e" k5 W9 }$ E2 s  putchar(' ');* J$ V/ C5 m& D
  delay(10);
7 d4 h0 M' z! G( Z  }$ D2 C# O- s, T3 D: b3 _# B
  }9 P. Q# ?3 _! w$ R
  /******************设置光标子函数******************/- D8 A- ~. C8 m& T9 q, n% l

% H3 k$ C- t+ ?* i' \  void goto_xy(int x,int y)# C/ ^, h. r7 O* X8 L7 B
  {
2 I/ t, S7 ]# r6 j  union REGS r;: j; X' _$ x( E5 |/ t! J
  r.h.ah=2;
0 D1 l; e. }, c: M7 |; m8 `3 B5 E. x  r.h.dl=y;$ p# I" F! r# f+ ?$ n( N8 r
  r.h.dh=x;! O% c6 C6 z; k( q' ^' J! I5 q/ \
  r.h.bh=0;  u1 i/ Z+ q5 y  s
  int86(0x10,&r,&r);
9 y& Y1 E4 m2 x  }1 J+ r7 U$ I1 y* |% K, ^6 x; h( @

/ ?$ N8 N9 C: r" g" I  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
& F+ m0 k) |, J0 o, [0 k& v2 W" @& E0 V3 T7 Z3 D) d! D
  void puta(void)( B; V( d! x# q
  {
5 }. P$ V* W7 q6 y! r  int i,j;
7 R, x# E0 Z2 l6 y7 p9 O% a  for(i=0;i<24;i++){! D. R# b8 n8 ?7 P" P% t
  for(j=0;j<79;j++){
, W: S# G2 H, t  goto_xy(i,j);
% t7 p8 C) S5 Z/ [; s+ s  printf("a");
) ^3 R+ J9 N* c, g; u7 R  }) }0 ^/ e5 i4 q" j. A: I0 F8 x' q
  }; t7 B# ?" v9 @) F9 d2 y% L
  }

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