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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,+ b% k  u* q; q  @
5 r' h. F7 P% }9 p' e
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里- K1 o, r$ M( s( ^# E  f4 `
% F* C3 |, T' ~; k
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
9 M; c+ \0 e- z  G  子函数及演示程序:
8 q; t. J1 n' m, X1 r8 B; Q3 a) w- O6 U% T5 q8 J
  #include<stdio.h>8 h4 d4 F- B  A" @  r' w7 h! a- x
  #include<dos.h>
. e6 J2 P( R1 N  #include<conio.h>
$ E' @+ F+ E: k0 |" p! v: k/ |7 O; ?, v- @2 ]
  void goto_xy(int x,int y);
5 N7 h" p& S9 Q4 ]$ r$ m  void dcls(int x1,int x2,int y1,int y2);
- m2 b' M' G" v7 F0 s3 l8 i1 d  void bcls(int x1,int x2,int y1,int y2);% T6 S  G% \+ R: ]" ~8 ?# Y
  void kcls(int x1,int x2,int y1,int y2);7 F! i5 ?7 c2 z' M) P
  void recls(int x1,int x2,int y1,int y2);4 x( O- E1 h  W% t! f
  void zcls(int x1,int x2,int y1,int y2);
% B) _$ J6 S) @) M7 o! p  void puta(void);* S0 z! u, k. m. v* P
/ {! ]  z+ A) f' N+ S6 c
7 r# B2 y: ]; y6 q; s
  /*--------------演示程序---------------------*/1 x" _! Q- `, c/ E0 x- b, t* V
  main()
# D2 C* B0 k% q  {0 l# \  P( s6 H2 Z2 X1 N
  puta();  f5 n9 f; t+ \8 [* b$ ?
  getch();4 b, Y  M5 n3 U" z
  dcls(0,4,0,79);
5 T; @1 y$ s, O2 {6 O: O4 H  getch();
6 x: S  N9 m4 }' c  puta();6 i$ R+ v, U9 Y# P$ N' A& X  X! S
  getch();3 _# l9 e/ x* Z# [
  bcls(0,25,0,79);
" F+ {0 K1 v- C+ {  getch();
" {- f# x9 O( L% z9 R1 i  \  puta();
4 v! f9 w2 Q% D! c9 p* w# y  getch();' f0 T0 T+ D# L+ Q7 Y
  zcls(0,25,0,79);
4 A! S3 z1 q4 l" \: U7 A" K. K  getch();( q' `7 A2 \' d: \  }
  }. n0 o$ u7 ~4 G. `
  /*********center clear screen(中心清屏)***********/" z) \) v3 V& X6 |9 ^$ U
  void zcls(int x1,int x2,int y1,int y2)
6 i2 z# M8 V1 P9 K  ^  {+ D5 \9 K- l3 B
  int x00,y00,x0,y0,i,d;0 G. `! S# @: U9 ~+ A/ G$ ^" U, Q
  if((y2-y1)>(x2-x1)){$ F8 g1 z; z$ v5 B, m0 o4 G
  d=(x2-x1)/2;
- {7 Y# R5 q8 w1 q  x0=(x1+x2)/2;9 B( t7 r6 ~* I
  y0=y1+d;
7 n) [. z3 A% \. L+ D  y00=y2-d;
! Q$ E+ u& x$ t: e4 S* I  for(i=0;i<(d+1);i++)) s! b6 T" F; q: g
  recls((x0-i),(x00+i),(y0-i),(y00+i));
% g. s# |/ x4 J; ^( J  delay(10);
; s* v5 p$ r( R" s2 c( W; X  }
9 t7 w# H  ^1 z$ S  else{& f7 M. `8 R) u$ w4 a: [
  d=(y2-y1)/2;
( e1 c0 K7 g/ p3 d/ V( f1 `: Y5 N  y0=(y1+y2)/2;
' U' q6 X9 `! O8 V- z( a3 w  x0=x1+d;
# \1 k) Q0 S7 L; C  x00=x2-d;3 F2 H7 |  L) q1 I' O
  for(i=0;i<d+1;i++)% S% R, R, {. f6 ^% M. p
  recls(x0-i,x00+i,y0-i,y00+i);6 D6 b6 {9 a# M7 e3 j6 n
  delay(10);* q" A* K: y! l- m& A( g9 I/ u
  }
4 j$ a3 N8 s! X- R( Y  }
% ?& c0 b' r8 ]" B$ S; O8 l0 {4 {3 H( e) [- y  S4 [, y4 \
  /************* clear rectangle side(矩形边清屏)***********************/
  ^% g, X9 I! A
! d' t- h) r% h: Z  void recls(int x1,int x2,int y1,int y2)7 X8 K- c4 a5 O4 v' m
  {
& u; c6 \2 R+ D! D' Y  int i,j;
& t. [# g1 {0 t" J  for(i=y1;i<y2;i++){
& }; ?& k" l& t: x    goto_xy(x1,i);
3 r4 H/ R5 X& E+ l% \: J  putchar(' ');
! s+ q6 R, ^  o9 S# B  goto_xy(x2,i);+ u! {( b( W9 `' a
  putchar(' ');2 P9 \, t0 a0 Y
  delay(10);( u0 M. W2 q) W. ?( x
  }
5 k  c9 ^2 @3 n& k8 d6 [: d9 _, M/ W  for(j=x1;j<x2;j++){* n# T$ ~1 f: _' E# ~! N; ~, T' y
  goto_xy(i,y1);
/ U8 K8 |$ ~9 g' k3 A" M  putchar(' ');7 l/ f" M. L+ ~  Q3 x$ ?
  goto_xy(j,y2);* M; O& q8 A+ w
  putchar(' ');) ]9 A7 T' e* _, p' ^8 _7 e
  delay(10);
* U- m3 c, G9 U; M* W  }
4 K5 S2 r  v- b8 W0 v1 R0 A  }2 G- d' E0 P  H0 g5 h, j; M* p
  /******************open screen clear(开屏式清屏)*********************/% i1 n) t: X9 j% v
' e1 V$ \! M  c, M
  void kcls(int x1,int x2,int y1,int y2)7 k1 ?- `$ @$ {7 b1 b( F- h
  {+ g' t- z1 d% Y9 A- B) R
  int t,s,i,j;1 d& r) i' s+ T; L& J
  t=s=(y1+y2)/2;! r; p! h, E# p" o: y
  for(;t<=y2;t++,s--)6 s! @! U) i' `+ q) U3 y0 H! j; i
  for(j=x1;j<x2;j++){3 \+ x+ g7 n0 G9 x- N
  goto_xy(j,t);
' n. a/ i- ?  a1 t  putchar(' ');6 G& I$ y$ W; S  W
  goto_xy(j,s);
7 f5 |; C& g2 J" c  \$ q  putchar(' ');
* `0 ?4 Y2 @/ B3 y6 H- q2 i) R/ ~. o  delay(10);. ^# F) I, Z1 ?/ s2 H! d
  }
) ^1 E- ^% F, g( _+ z  }9 T7 I: T  V: O! n9 }" @) h% D- F
  /*****************close screen clear*****闭幕式清屏*******************/3 `0 d; v2 Q8 c7 ^) o! T
' C( |" i3 q& T3 }2 |
  void bcls(int x1,int x2,int y1,int y2)# g2 S# y% Y4 Q2 t' ^5 `) {
  {2 y% O+ ^4 p" Q! }
  int t,s,j;
8 Y' e5 x) r$ ], C/ G4 h  t=y1;- n. e9 d5 X. g5 Z
  s=y2;; I" w0 K6 W% {8 ^
  for(t=y1;t<(y1+y2)/2;t++,s--)- J4 x0 [( s% M8 I
  for(j=x1;j<x2;j++){
+ j' J" ~$ {9 e% c3 {  goto_xy(j,t);
7 E- Z+ s3 U) z9 L6 W- y. R  putchar(' ');
* D" D- _& p; ~5 X, X  goto_xy(j,s);7 g6 I, x2 G# j/ _7 b9 |
  putchar(' ');
! W0 Y6 [1 V7 j& [; h  delay(10);- C0 Y1 r; k) M# N) \
  }
1 W( @) [$ u2 \2 c  }
; p. d( ^3 `. j3 _! a' Q  /******************bottom screen clear(自下清屏)********************/
, S% ~' i/ E. ^1 G" e4 Q
3 b5 N* Y( E& ?3 |2 c" g. }  void dcls(int x1,int x2,int y1,int y2)
  l/ N7 D! o5 E3 p8 j% y  {1 V2 z) t# S1 A- x
  int t,s,j,i;( X5 L4 w% T. @( U7 C
  t=s=(y1+y2)/2;) k# B$ X  _* J* j
  for(j=x2;j>x1;j--)! ]$ H4 D5 a, [+ K8 c" n
  for(i=y1;i<y2;i++){& {: b7 ~  E% M0 Y5 q' D/ L& Y
  goto_xy(j,i);
' t" O! S! ^& C  s# ^  putchar(' ');2 Z# }) Y+ e6 C) m( Q, N/ u
  delay(10);2 _7 e9 C* `2 @
  }
* d; M) U* u& u! O0 h5 A! H2 d9 x1 N5 j  }$ N6 E7 d5 Z+ ^
  /******************设置光标子函数******************/
+ C; w2 g4 G) ]* F, }! f2 y" W8 ~! N# D, D) r  ?* l% _
  void goto_xy(int x,int y)
0 G5 Q! \2 x4 v- S! [  {8 Y) s* R$ N2 H' r" F2 P
  union REGS r;) ^% ]5 [4 _+ B  C$ D5 X6 q8 x
  r.h.ah=2;
3 H' [2 M9 |  H  d  r.h.dl=y;
' [& H$ L! j2 l8 l! E  r.h.dh=x;
& V, Q" i" {# I( q% A  r.h.bh=0;7 m3 S: G9 Y0 O/ b/ f" g0 l# K$ ~
  int86(0x10,&r,&r);
0 N! v7 m& |9 G. _4 e5 [' y  }( z; V" c& d5 e7 |- Q5 X+ w
* E+ Y% K% P" C! X, c8 F" ?
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
" E) u/ {7 Q$ S% v* ~- l6 y. Z+ t) q
  void puta(void)
* t0 e: k) o9 o3 n6 |6 u$ h( N3 b  {" T& N, {# e9 u2 k2 j
  int i,j;$ C! B  S7 M. p5 r6 r! W
  for(i=0;i<24;i++){( a& v; a7 Z. {: D+ J7 q% E7 ^
  for(j=0;j<79;j++){
" [6 Q- e! Z; @6 U  goto_xy(i,j);
7 |0 U) E# i3 b* g8 b) u  V  printf("a");( Z" m/ X8 w3 z* q8 {( X
  }
! \) z/ L; M2 x9 r! w! g  }
# \2 S0 W1 N& G( x  }

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