返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
" |( \/ [. k  k' I5 K& n: L. t
. x2 o3 _0 g. A5 K8 @  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
, X5 d# t# u2 W3 V" G; K; ?% C$ B  }
9 J; r; e, E$ D! B1 |, h" t  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
' n; L! z; P- E$ k8 f8 K  子函数及演示程序:
% S* d1 ]# p* Z+ f
3 B: y" \% u; t- q  #include<stdio.h>
$ h  O  [' P' Q; W5 u  `0 @$ A  #include<dos.h>; Q- ?, n6 M' m* j6 U# P4 s7 d2 G  t
  #include<conio.h>
! z$ T  a/ z* g+ T
' Y3 f( B: X) c- {8 N0 p6 w: p4 k  void goto_xy(int x,int y);5 Q/ N% p; i; o  R
  void dcls(int x1,int x2,int y1,int y2);5 w- }& \& t  C% N; f7 s
  void bcls(int x1,int x2,int y1,int y2);
) I$ C' O$ C% q) ?! F  void kcls(int x1,int x2,int y1,int y2);
! ?7 p/ U  t. L  void recls(int x1,int x2,int y1,int y2);* T. C$ Y+ B7 o% x
  void zcls(int x1,int x2,int y1,int y2);
3 }, P9 b. o" [, Y# n. M: U8 V0 }  void puta(void);2 r) \# j) A+ \' L1 f% e# e" Z

+ o" Q, M4 `) \+ u  u( k7 k  ~" O* {+ [
  /*--------------演示程序---------------------*/
# ?0 w4 S. g* U$ |5 F. i  main()
6 W3 K) C+ |: @* p" y- f  {  r# R4 k) {/ ^3 G8 l; ~, m
  puta();' s: q& I; ?0 E% [/ Y
  getch();* Z% U0 W8 D& n% A
  dcls(0,4,0,79);9 k* h  ]% ^3 u; _
  getch();! w( Y/ d3 |6 c$ T3 V% D
  puta();( ^* S7 t1 \2 u; C0 H7 M
  getch();& @" E4 x3 i; [6 w# e( a
  bcls(0,25,0,79);4 N$ W" a2 R: R- D4 S, j0 O4 `7 j
  getch();
/ h9 S2 m$ B) n7 U* f$ n" i  puta();
8 c& J8 [' X0 \1 `$ [; m  getch();, H, m, R) Z: N
  zcls(0,25,0,79);# |, v7 }; h/ r: I; o7 o* [
  getch();
& y- G+ c4 m6 n3 ]7 U' V8 W  }
/ J/ q. B4 C  N# h( y, @  /*********center clear screen(中心清屏)***********/
) x% Z1 \! f# i5 J5 i2 f) W$ U  void zcls(int x1,int x2,int y1,int y2); O$ y# {" [" G+ _" l
  {
2 A+ X" z, F+ _2 y$ L) L* ^+ F  int x00,y00,x0,y0,i,d;
" K+ {, p6 X# Q8 V0 \) v9 y: t  if((y2-y1)>(x2-x1)){
! m5 C; K: {6 \+ h" j, J7 j  d=(x2-x1)/2;2 F5 o% |( |! g3 Z
  x0=(x1+x2)/2;
6 D( N% Y: V: X& }( a. u  y0=y1+d;
4 e7 V7 R  z. i' b. s& y  y00=y2-d;
5 ^& G" S8 ?9 A+ q5 j  for(i=0;i<(d+1);i++)4 e& Z* d* y" G3 c7 @+ e
  recls((x0-i),(x00+i),(y0-i),(y00+i));
; o1 R9 Q% E% z  delay(10);1 H9 f- y! k" _6 d9 D, o
  }
5 K2 \  z; C* e( H1 `. @2 C  else{
2 B( T: H' f8 u- X8 b6 d9 W/ U  d=(y2-y1)/2;: d7 n2 q- F% i3 A) D
  y0=(y1+y2)/2;
6 x2 n5 Y4 H0 O( o+ A5 F+ W  x0=x1+d;
$ P. V: [  W# a9 R3 m! }" V! ^  [8 I  x00=x2-d;6 C. N# u. ?3 D% ~1 ]
  for(i=0;i<d+1;i++)
4 v; h: e% D8 F& n; n  D* z  recls(x0-i,x00+i,y0-i,y00+i);
* c4 t" t4 ]7 y, W  delay(10);1 ]8 t9 K- e0 f/ m
  }
0 V& @- j% Z- V( N6 T0 F! o4 x  }
3 j3 z+ m, L' S7 O% S" c) f6 y* F  f0 T$ A# |! G
  /************* clear rectangle side(矩形边清屏)***********************/
% L) u5 v" h7 J; k# D& z) E' s# y, r, S
  void recls(int x1,int x2,int y1,int y2)
2 t, B3 X& ]2 E5 X4 c# w2 |4 y  {
4 X9 L8 \3 w1 \/ e/ ], J# p) @  int i,j;6 e4 [5 [: Y* d6 A
  for(i=y1;i<y2;i++){
( Z4 j, m  f# e$ b" n    goto_xy(x1,i);# `) R) K0 E2 G, T  E
  putchar(' ');
: ]" i6 F, B+ x  goto_xy(x2,i);
( O9 }) I$ X! Z" b: A% A6 \  putchar(' ');7 }$ D: i- W" b
  delay(10);
  [9 |9 \2 g2 V5 b  }( Z1 X( o) ?% M* z% @' e
  for(j=x1;j<x2;j++){
5 Q6 R! h% i+ D$ N  goto_xy(i,y1);
1 T8 Q0 ?; b, `& p& \( }$ E9 h% G  putchar(' ');
4 C4 R4 Z" ?, z4 S4 g  goto_xy(j,y2);# |. _2 ~; @$ `4 I; v9 |, P4 t5 c
  putchar(' ');
. j0 e& W# e, m, S9 {1 C9 e  delay(10);$ W. R! w. y9 Q: z
  }6 @: y- U$ p( h2 k' [7 z8 P
  }  T6 |: Y2 t6 w' ~8 f
  /******************open screen clear(开屏式清屏)*********************/2 W$ }' v( G, D" ]5 D

, |6 T3 l+ O! V  void kcls(int x1,int x2,int y1,int y2)
, K3 c; |. `# P: D! h  {+ V( c5 Z) i; _% }. i% ?5 Z7 T
  int t,s,i,j;
% h4 p4 C5 A/ b& H9 {" ]0 A! r4 e  t=s=(y1+y2)/2;( }5 g2 y' @/ a- R' }
  for(;t<=y2;t++,s--)
2 j3 ?2 @3 \* {* L  for(j=x1;j<x2;j++){9 j. n% r3 i+ X& |' _: P+ `/ y! w9 ~
  goto_xy(j,t);
4 ?) O. K% @, l* q7 q6 A# y  putchar(' ');: e( l+ _0 e2 ~* o8 c9 O1 ?
  goto_xy(j,s);9 [9 b2 I" H( O( T
  putchar(' ');
2 g) e4 I) `, p  delay(10);
% g+ I2 p' n; @9 S) Z  }6 X6 V% N6 i8 x0 k! p: k" |
  }
& L8 f" M, Z0 P. G0 }/ d, b& [* ]  /*****************close screen clear*****闭幕式清屏*******************/
( z. C+ f, g4 a8 O, s- y. [6 L. |
# X7 |$ @4 f1 D) S' O$ S  void bcls(int x1,int x2,int y1,int y2)
8 V$ S/ E/ \' Z9 I9 ~2 A  {
+ q! x1 W# z3 g! k  int t,s,j;
0 f$ p& ~8 u+ S' c  t=y1;
* n0 x2 j, o2 o9 Z  s=y2;
) c0 V2 {% {( C4 K# C9 {  for(t=y1;t<(y1+y2)/2;t++,s--)
& e" ?8 N' _1 }2 l6 {  for(j=x1;j<x2;j++){
/ C6 P+ o' Y. m3 l* `+ R  goto_xy(j,t);
" [3 s3 O8 J( x7 s+ X& H0 c  putchar(' ');5 Y' e5 c; F9 k" z
  goto_xy(j,s);
4 ?7 d2 L% E# y5 V8 h9 O  putchar(' ');# T( C# `4 @! w$ E( j- _
  delay(10);
; C( f0 d+ a- G7 V. u% L9 N% r) g  }
0 I) V3 ~- q0 X8 y  }
, r9 `* d3 M5 ~* p, M: N  /******************bottom screen clear(自下清屏)********************/# z) Z% N" c+ H& X# K

6 |- P* g# a& @* E9 T. L) u5 J; W  void dcls(int x1,int x2,int y1,int y2)
. U' f! ~1 J* ]$ q" c  {
, G8 o& X8 M( p. v; g  int t,s,j,i;9 I  A/ r7 U' |" D8 z; [
  t=s=(y1+y2)/2;9 s. d6 J) r1 O3 D: s' c! H
  for(j=x2;j>x1;j--)" J% O) L- i% o$ P, ]
  for(i=y1;i<y2;i++){5 B/ f$ ^( X# G# H' G: X
  goto_xy(j,i);5 F: V2 m0 v. N
  putchar(' ');
6 T: l1 }5 [' d$ x, V  delay(10);. z( y' v$ {# |, E6 M( p
  }% [% E9 G) H- b! ]+ I
  }
# H4 c" f: E; h" T& c4 h2 A; L7 P  /******************设置光标子函数******************/
& L& i  }: ]- T" o( s9 @) A) Y% X( O( I& Z5 f5 `
  void goto_xy(int x,int y)$ H* n  ~8 K) V: W* o" @
  {
* T; V) A( y  q2 t6 B$ e  union REGS r;, T3 K4 G5 p6 k/ Q0 ?) `
  r.h.ah=2;6 k6 a+ f+ S% {( K
  r.h.dl=y;' k8 D* W( d( j) C
  r.h.dh=x;' M( P7 T! Q3 {9 ]5 P: f7 u# w+ {
  r.h.bh=0;
6 ]" e# T, u% Q4 U7 Y% J  int86(0x10,&r,&r);
2 g) Y: q3 E8 U4 ]1 \  M  }! C' H: p, N; F* p, G7 Y

; F3 M+ ?) E$ ^7 I  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
, |4 m8 R; o) O0 t; X0 P
5 V% ^5 Y. W& E9 i$ z8 v  s0 Q  void puta(void)
: P+ j4 x# E/ T) D0 w  {
: g- e* [8 V( e3 c  int i,j;
/ G" Z; U; c; m5 F$ z1 q: p% G  for(i=0;i<24;i++){+ w# w1 Q+ p6 N
  for(j=0;j<79;j++){
& U; ~6 K7 e: I3 H, k  goto_xy(i,j);
* u' m1 ?! _: s0 y  printf("a");
  z9 ~! q2 U/ K1 @  }7 k6 ]4 Z4 K4 a" B/ b0 \) Q4 _
  }
2 P! y, G7 t: f" M! [0 V( J  }

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