返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,+ H0 n8 t4 L) H. V$ I

/ F6 m8 q, y0 {' S( D% E  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里6 V# c: P/ r& l1 B) M' z$ O
2 J/ F* p! i$ n$ r- @
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
! u0 p8 g" B9 r1 q/ _  子函数及演示程序:
( L# ?6 x, [& }1 |6 @. Y, ^- O# M; m3 _, ]4 G$ s
  #include<stdio.h>) ]1 ]/ n* H9 L8 D& j' j" L
  #include<dos.h>/ @" K9 f) F/ L( ^0 J
  #include<conio.h>
9 m2 L+ ~" e# [- S2 v
" z8 }4 F! L1 T1 d7 J3 o0 ~6 F  void goto_xy(int x,int y);
4 w8 X9 G% B3 B6 o) s# r3 q  void dcls(int x1,int x2,int y1,int y2);
! b: J2 h! O3 ~1 p/ W$ o- p& a  void bcls(int x1,int x2,int y1,int y2);% |. p" B! ]* X, c
  void kcls(int x1,int x2,int y1,int y2);
3 o5 o% n7 v8 ^) r0 Q' U" d  void recls(int x1,int x2,int y1,int y2);5 l1 N8 p9 I- x$ p8 c% Y
  void zcls(int x1,int x2,int y1,int y2);
3 ]7 H5 f8 G% M9 \! ~  void puta(void);' h" r1 R0 }0 }5 `" H
. U- H  M7 F5 M& @* A: k# \

# x: [& b; o% W' p  G) Q  /*--------------演示程序---------------------*/
  t8 S6 V% L% K+ s  main()- L0 |5 ]3 w5 `0 Y% [) L
  {* j5 B: Y% a& s. @$ }" a, D
  puta();
; s5 B, n9 k* [- A; z' w2 H  getch();
1 Q& T( G/ S2 b% [) x  dcls(0,4,0,79);
( w! j3 @- w3 t# X: n2 {9 @' c  getch();
, M7 o. \7 \1 p  puta();
! X+ }# ], D- \7 {. |+ C  getch();+ a% U" z6 {' }
  bcls(0,25,0,79);
# p0 I( l4 R& i' `  getch();
9 I9 [; J% ]) G. s  puta();
; F0 \% \3 b& P4 ]6 i  getch();  T4 r1 \7 d) h7 E) l& O6 I
  zcls(0,25,0,79);
3 i7 P+ O: B" Q/ v* l, d  getch();
! _& ?+ E1 d& q# |  }
0 k* l* S& E- g( ?0 j  /*********center clear screen(中心清屏)***********/
" G7 ~# P( }8 c# {+ ]; ?: ~  void zcls(int x1,int x2,int y1,int y2)
: |1 X+ r% V9 M- y. E3 W& h. ^* c  {; F0 J; x# {5 F2 A
  int x00,y00,x0,y0,i,d;
$ k% H4 n% x0 ~2 S' p  if((y2-y1)>(x2-x1)){
/ i0 {2 K$ }' B! }  d=(x2-x1)/2;
  k$ V% f. C# X6 c' n; [# Q) ~  x0=(x1+x2)/2;
( m( h0 g' ^& C. B$ U. x) z  y0=y1+d;: Y$ H' m; I% e  I. E7 K
  y00=y2-d;# M, M$ y; d+ Z
  for(i=0;i<(d+1);i++)
5 A2 ?$ U: K" \. \+ M  recls((x0-i),(x00+i),(y0-i),(y00+i));* C' t6 |. U) z4 Q; n! u, d! G. |
  delay(10);
/ c5 T% o& k* q- v( I& p  }, e0 l0 M+ k9 d8 q. h
  else{
; N7 j$ i' Y* U% `  d=(y2-y1)/2;
/ G2 {2 ]! o" G# r$ T  y0=(y1+y2)/2;, u3 s& @! Y  g7 U7 G" [. J
  x0=x1+d;+ l6 u& c0 C2 d# y6 Z) _$ m
  x00=x2-d;
, j4 s& ?* R, Q3 L  for(i=0;i<d+1;i++)
  I8 C/ i8 w  N1 S+ h  recls(x0-i,x00+i,y0-i,y00+i);6 |; g2 E: ~# Z- G9 u% @) v
  delay(10);7 f+ S# Y# Y/ d2 o
  }
( S4 E8 p& O" Q5 n4 Q5 X  }
; g' |! E/ x4 p3 K: \& }5 a  |; V- Y: \, \/ N" F' X# l
  /************* clear rectangle side(矩形边清屏)***********************/% w' T7 M$ C# K  H4 N; O% |
/ `  I$ e0 G/ V
  void recls(int x1,int x2,int y1,int y2)7 w8 I' S+ H$ ^7 u, v
  {
& s  {& S: K" B- k+ s  int i,j;) b3 ]1 L5 c" ~  x4 M! a4 _
  for(i=y1;i<y2;i++){
' ?, i- [9 f: d# q& i! ^    goto_xy(x1,i);
3 p+ H! C9 R7 C9 R  putchar(' ');
; Z. X' [8 v( ~3 n. f& ]  goto_xy(x2,i);- q% T; b% n! Y7 e6 k9 J/ h
  putchar(' ');
. o2 z, C5 q( z  delay(10);8 \" }9 ~- c! z5 C+ p
  }9 B! r% R4 A6 P; F& q* k, k
  for(j=x1;j<x2;j++){3 O7 ]. I4 T' F" A6 ~, z7 G
  goto_xy(i,y1);
5 h$ y" ]- a  U$ [3 h5 [  putchar(' ');
5 y$ M8 I& j( [2 P5 U  goto_xy(j,y2);- s% y: r# u: H" M) Q
  putchar(' ');
/ M! y/ ~" ~, q! A7 D1 i$ z% ?  delay(10);" P. O$ m; `! t' b
  }% z* e* F* L( g8 X7 Q5 e% D4 W
  }
7 F+ P) I+ p& [1 {- `  /******************open screen clear(开屏式清屏)*********************/. B/ u7 z2 i8 x" x" p" {& s' t
: [2 B. K1 n" |/ {9 d# q: G1 B5 a' p8 G
  void kcls(int x1,int x2,int y1,int y2)
; n- ~) V5 E' Y4 N& q& U  {0 ~( u0 W, K. [  L; \) R
  int t,s,i,j;
0 l6 I2 O$ g& [/ @- p; z  t=s=(y1+y2)/2;
" U9 h$ k0 q" t) |/ l  for(;t<=y2;t++,s--)) _& i3 f: g. a  Q* Z  T
  for(j=x1;j<x2;j++){! v! M+ \7 X4 s9 b' t
  goto_xy(j,t);
4 P* |. E1 d3 D, n+ R( W# b  putchar(' ');
* l1 q! C' p4 U$ `$ O0 o- `4 V  goto_xy(j,s);! j3 I2 G9 B9 G) I, z; I( a
  putchar(' ');
* Q/ v! v$ a% L( }2 B  delay(10);9 @  A* v2 ^+ V/ J( }
  }9 @" U9 ~( D  n* ]! y4 p
  }
/ l" U4 J, f# H; v! S& `  /*****************close screen clear*****闭幕式清屏*******************/
6 u  ~5 r& S; Y9 u/ v% B2 b" A) b6 f3 `3 H  i1 M7 X- }* i
  void bcls(int x1,int x2,int y1,int y2)" I! H: Q; R: u1 s% ?% w
  {( q; e8 L5 ~  y4 Z3 v# {
  int t,s,j;
& Y% U4 w  u$ q8 ^$ a* T  t=y1;% x) F0 H6 m* j" a, a$ i
  s=y2;
5 S8 _1 E- _# h6 S7 M- V# |  for(t=y1;t<(y1+y2)/2;t++,s--)  C$ m7 @5 C- Y- {4 H6 ]% A1 n
  for(j=x1;j<x2;j++){! C- q! O' m+ n5 o: D6 Y# Z
  goto_xy(j,t);
* |: v' E, @, T; K% L% g) e8 c  putchar(' ');2 p) v, {: u% @
  goto_xy(j,s);" L0 N' H( ?) A
  putchar(' ');( z' `% }8 N( [' n. N
  delay(10);/ a( i1 N; ^; l# H
  }
5 U' h8 h1 |9 O1 d% N) i) N  }# p- l/ X1 N0 V8 i* M4 X
  /******************bottom screen clear(自下清屏)********************/
% Q$ B1 g% w" O6 n- l
* K* z. P+ B* L; }) C: N  void dcls(int x1,int x2,int y1,int y2)3 R. M- h5 c; }' `' s% U' a
  {
3 E& X; H( _7 F( P2 r- ^1 B  int t,s,j,i;
* D5 j" s1 C+ v/ e/ X  t=s=(y1+y2)/2;
' b2 E0 ^0 q+ L# K  for(j=x2;j>x1;j--)% ^# X, c& l# x9 a
  for(i=y1;i<y2;i++){0 t4 M7 u  ?, n# F
  goto_xy(j,i);
8 Q9 M% B* {4 \9 ?+ b5 E  b# }  putchar(' ');! d% P3 `( r  {# a
  delay(10);4 d0 ^3 [' U5 a9 r2 l; J
  }& s( M( b( s( y, N9 v0 c% D2 o$ w
  }! B: w8 ], l* ^5 W, s& A
  /******************设置光标子函数******************/
0 z3 u- N$ m4 o' X2 l, ?) ?9 @- \9 |& M5 f
  void goto_xy(int x,int y)
" r2 t1 B- y& R) @/ @+ N5 S5 t( W3 j& B! l  {
5 u1 ?5 J* R$ x  union REGS r;( u- I5 U+ @. G4 \1 u1 Z! U
  r.h.ah=2;
5 S$ s& c2 R; s2 f  r.h.dl=y;
7 Y3 X3 `' o8 K* U; y  r.h.dh=x;
, {" w- j7 h- k5 t" x  r.h.bh=0;
. M3 Z0 N, [2 m1 g% Z+ J  int86(0x10,&r,&r);8 v4 H- ^. G# H  X* j/ R' R9 J6 O
  }
1 y: r5 {/ G, h7 E# G9 l) C. L9 v# b1 ~$ S) O1 v' b
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
/ _8 z' j1 n( {) u$ v  G
4 m. t9 {3 q$ f3 w/ W7 [  void puta(void)& z3 t3 ?/ s; z8 Z  r7 i
  {7 V5 v( W* ]6 t: D' _$ W
  int i,j;$ M4 y+ @4 q. P4 p
  for(i=0;i<24;i++){
. o, R9 H/ e$ U3 R  for(j=0;j<79;j++){/ M/ u1 B* }2 X
  goto_xy(i,j);
7 S% t; i9 R+ P' ]3 w( X  printf("a");
/ L" |4 ]. N& P% e0 u4 @& a- b* J" m  }2 ^8 F  R' c1 D+ v9 H% o
  }5 h* c7 z0 E) Y( _# T, m
  }

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