返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
$ l' S1 R/ v; Q1 [6 ?) t
' `1 ~5 H" m6 l. ?4 M" A* {  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里% n. m2 s4 O, B" o% t

, k5 @: p2 x3 T( S/ P7 @  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ( ^0 Z" F2 R1 y8 S3 i$ B! @, k8 `
  子函数及演示程序:4 y2 |% v$ W6 [% q1 A9 V# z

5 |6 q) s. p# p3 @5 w: p$ D! h- I. R  #include<stdio.h>
3 t* r- d3 }( x5 H3 B9 ?& ~  #include<dos.h>
% |( `6 M  S* y  q7 _3 ]0 f  #include<conio.h>3 t& Q: I- B4 H

" P- m: N. j9 C. m  p) \* I  void goto_xy(int x,int y);
8 R; a6 m$ X* g  void dcls(int x1,int x2,int y1,int y2);
( x/ S4 m# m! l# v  void bcls(int x1,int x2,int y1,int y2);
- E2 E) b4 {1 ]' L1 Q7 ]  void kcls(int x1,int x2,int y1,int y2);
8 }; Q4 Z' z# o4 i8 D5 n" J  void recls(int x1,int x2,int y1,int y2);" G& \, |) J! F1 D, T
  void zcls(int x1,int x2,int y1,int y2);9 u6 T: P# z! v/ w
  void puta(void);
: T) u: a1 H4 S0 D4 j  F6 d2 z" d$ j* D* n( t

0 D1 B& }6 I, l* |  /*--------------演示程序---------------------*/
9 c" \* }+ R) ~! X6 E1 j- Q" F  main()5 |$ L! q- \. f7 v$ L
  {
) O6 \; w3 S4 [$ W$ f+ S6 f  puta();
3 K2 c6 U: [" {$ W) E  getch();* y8 h4 s, B0 y: X
  dcls(0,4,0,79);
# f  F7 C4 M$ q1 M1 F5 n1 M) Q  getch();% i) v& G5 B+ U
  puta();
+ M2 B* _: N4 b3 F3 `7 V  getch();
* {$ x- s5 X' c  bcls(0,25,0,79);
# s& O( P2 w" F  getch();
( X6 H- `2 L$ |% L" S1 Q6 u+ v! p  puta();, ]. w6 }5 B' W+ O# h0 B
  getch();
0 q5 m, P  N% E9 A& A/ x  zcls(0,25,0,79);
8 e5 c3 J. h0 \4 @1 {  getch();
! x3 ]8 \0 E- z6 ?& m* v  }& g5 b$ T8 B5 Y2 e4 x/ ~( K
  /*********center clear screen(中心清屏)***********/
: j0 _3 D# \2 E. j2 ]$ |  void zcls(int x1,int x2,int y1,int y2)
2 O+ H& H: Q! D! U6 U# V  {2 K8 [) y" ~6 R1 d* ?
  int x00,y00,x0,y0,i,d;
3 F0 X; U; U$ ^% o  if((y2-y1)>(x2-x1)){
! X; K( c/ J  r: l  d=(x2-x1)/2;8 c( }8 \4 }* v6 e( y# N/ A) N
  x0=(x1+x2)/2;! h4 s0 k! o3 _! j
  y0=y1+d;3 i6 h6 U8 T3 M, z( U& C( G6 B+ E  M
  y00=y2-d;
" x1 x* g, b6 K) y; H  for(i=0;i<(d+1);i++)9 W/ m3 B4 N# l; I( {
  recls((x0-i),(x00+i),(y0-i),(y00+i));. E* t" O- S  t; D
  delay(10);, M) r* k6 d+ T1 f, \' c; o
  }9 n+ M9 k( p% m, E# |
  else{
: J. T. f6 X0 {3 q  d=(y2-y1)/2;
' p' m" ^- f+ ~" z1 ]9 W! A9 n  y0=(y1+y2)/2;# @$ c/ d. z0 m, i& _8 j/ C
  x0=x1+d;5 y/ C& K& z# m# B$ _1 M
  x00=x2-d;
+ v; Z$ J: ~. W  for(i=0;i<d+1;i++)& p, j7 v) _& u* z$ V6 W  {; J
  recls(x0-i,x00+i,y0-i,y00+i);
. I* o  D9 `. @5 o% Y7 A! f  delay(10);2 M. o6 ~& _/ S; g
  }
$ W, F; B7 P$ {  }
6 {! ?+ k) b6 s& p% A+ t# K( q; x$ ]: Z. o) i3 b2 @
  /************* clear rectangle side(矩形边清屏)***********************/
: S! I3 l  J4 {! a3 {1 _) s+ r0 w9 w2 v, \( C& ?) k9 t
  void recls(int x1,int x2,int y1,int y2); z; |6 v3 ?1 g" T3 ^, C
  {
2 p3 ~" B  v* \( v$ ^  int i,j;
$ H# E# B) {7 u6 Q* ^  for(i=y1;i<y2;i++){) c2 q1 {: y6 U6 h, I
    goto_xy(x1,i);
9 a, L. ~' j9 K  putchar(' ');$ A! q: Y1 F0 |6 [8 Y/ C( J# V
  goto_xy(x2,i);7 @* A4 i4 M; r8 S( v* f& T
  putchar(' ');3 O2 R6 s5 z$ ]' n' v* j
  delay(10);) C' f0 c- i- ^' a; H! g
  }" _3 o- C! j8 M6 m% A, r7 `; |1 p* e
  for(j=x1;j<x2;j++){
& ?# P! _7 e; |! _3 E( N( F  M# Z  goto_xy(i,y1);  c0 n- h' @4 u. w& U* Z
  putchar(' ');3 a- X5 g# k4 A/ E% \( O
  goto_xy(j,y2);9 `! V5 Q- O6 H5 h
  putchar(' ');! f3 m& j/ ?. y! O1 P
  delay(10);
0 f: i5 A0 i9 Z2 K' H" p5 B$ i; ~  }
) I; u) L+ e0 v$ L4 f9 L  }
8 C* u, H/ y# Z9 H( j  /******************open screen clear(开屏式清屏)*********************/3 H1 z. K& {- z& O) I0 `

3 ]/ _! Z) x- L( P- c3 |  void kcls(int x1,int x2,int y1,int y2)
& v2 ~/ H) k3 v$ g) t  {
" X2 d) l! Q( p3 ^7 p% b. I6 K2 M  int t,s,i,j;5 ?5 S$ n0 h4 K+ n. V0 F9 M7 _3 @
  t=s=(y1+y2)/2;2 O) r  H2 k0 g' _+ C6 `
  for(;t<=y2;t++,s--)
$ ~: D, i7 q2 U, c  for(j=x1;j<x2;j++){
7 }; k( s$ U/ K" R0 h/ k2 X+ C6 }  goto_xy(j,t);5 t& f# _8 m% T# t+ m
  putchar(' ');
1 j& t. {5 b) W1 a0 E. n  goto_xy(j,s);' ?. @. h8 Z3 H! y! w' [9 y
  putchar(' ');
. Z" N  C8 ~1 u$ }# B+ L1 P8 n( @  delay(10);
$ w2 c" M8 U, d1 q0 q5 A. ?) l  }6 r- d* z/ U! g% D- y9 A3 }8 Y
  }
/ z9 f) M+ r( H" D$ s, T# S0 [  /*****************close screen clear*****闭幕式清屏*******************/
$ p- U  @  x# u! W: h) H4 V, h# T+ B7 Y5 O' D. L
  void bcls(int x1,int x2,int y1,int y2)( ^4 T  U9 Y  y
  {
, {/ L) Y1 N, S  int t,s,j;) g: d8 @3 M: ?7 j5 R  V; G* A
  t=y1;# G# d  b# q; @+ U
  s=y2;
. ~) Y& [. b. P& j0 T  for(t=y1;t<(y1+y2)/2;t++,s--)# F# s  P7 \0 D; `* d
  for(j=x1;j<x2;j++){0 ~' `, w5 O! M- P
  goto_xy(j,t);! G2 T! W" N0 W3 x
  putchar(' ');
# i8 v$ W8 Z; R! J  goto_xy(j,s);
: g, Z( L8 G! Z! Y  putchar(' ');
+ h0 p* [# a8 X+ l& b  delay(10);
  a5 |6 o: c) L6 V6 K  }
# j: e, e+ f+ P/ F% [  }& S: V2 I3 s% v/ l
  /******************bottom screen clear(自下清屏)********************/
9 Y5 g* g$ Z0 v5 J
/ e+ o4 F7 n$ p) a1 b; `6 x  void dcls(int x1,int x2,int y1,int y2)  O9 E4 L) |! j- g/ ?  [! L
  {4 p/ }# G- X2 w) e3 z
  int t,s,j,i;5 s7 R% J9 E( w% B6 c/ i* q% a' H' P
  t=s=(y1+y2)/2;
2 U, `) q. Y9 }1 l, l8 v- R  X2 J7 V  for(j=x2;j>x1;j--)
  v4 Y* G3 I6 `9 u, r  for(i=y1;i<y2;i++){3 S: z5 w9 `9 j# w
  goto_xy(j,i);
2 ?9 i$ C2 Y0 m# ?  putchar(' ');  o# b/ y/ [  I2 m
  delay(10);
& K  M, J1 u. w( Q' Z  }
  }0 I. r; G" [, s  }
8 N% f' v- E$ [* c2 \$ n* B* q  /******************设置光标子函数******************/
) |2 Q2 ^( {3 {6 a8 K
1 z+ E7 [/ |! O' u  void goto_xy(int x,int y)& J9 V/ \# k( v5 {1 P# J1 b3 A6 ?
  {
  F* p, m9 f% K8 [  U- H  union REGS r;
1 W( B. r0 U- r: }+ T4 e- r  r.h.ah=2;- Q/ O- @, N+ K
  r.h.dl=y;' x' c. L% N& Y6 N8 z% \; S( k
  r.h.dh=x;, ]  ?2 q8 ~9 K: D2 O
  r.h.bh=0;
# r, V3 R. k7 h5 Y  int86(0x10,&r,&r);
# Y* k7 G3 z9 R% P" C/ p  }
! }: v3 Z# U1 {$ ]7 J- K8 b! L1 ]+ c+ r$ ?) M& [0 ~2 x
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
( Q+ `' T& W& b/ _' E% D9 i# G; @% }/ D6 r5 P
  void puta(void)* i9 ]+ k1 l. ^
  {9 K7 }( m0 ]$ k2 a3 {1 X+ I: M
  int i,j;
# O7 T" T4 ~8 b  }  for(i=0;i<24;i++){
1 y0 R7 b9 E5 L4 J  for(j=0;j<79;j++){
* H+ |+ ^& S, a5 L$ C  goto_xy(i,j);# r, _- W3 q3 c* a4 o
  printf("a");
5 M( A( |/ X$ G  }5 m8 J. t8 J$ }
  }, }% A% M, Y# z3 B+ W3 ?9 V  |. e, B
  }

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