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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
& P) m7 w, r3 i2 o: F. X$ h1 Y" w8 s
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里& O9 Z$ E: @8 P
5 \5 l1 W3 k7 F) u( ?2 @$ Q
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
) V5 K8 a  t% w. i9 _  子函数及演示程序:- p8 W7 N" _& f+ a/ Y
8 R3 B6 u8 O( t$ F/ f5 i
  #include<stdio.h>! J1 d  r5 b* X& d! t
  #include<dos.h>
+ j/ a+ h* }* p; m  #include<conio.h>  G0 G6 p. a0 u7 i

. o$ h) y" H( A3 i3 S  void goto_xy(int x,int y);! Z/ K# C; A$ C5 `( t8 A
  void dcls(int x1,int x2,int y1,int y2);
5 R  q% E' j. o' O+ V4 y6 t7 d  void bcls(int x1,int x2,int y1,int y2);. t7 k9 N- E5 j5 T# v" Z
  void kcls(int x1,int x2,int y1,int y2);
& e8 K+ a- U" d  void recls(int x1,int x2,int y1,int y2);
5 S" C- M) H3 b  void zcls(int x1,int x2,int y1,int y2);" E& }7 h' {# y* X( }
  void puta(void);
. G0 F/ l! }5 y. Z
- n5 ~: c1 Q5 R  \' G  C0 f( q! _/ o4 d0 P9 }
  /*--------------演示程序---------------------*/
) C: x/ K1 x  p  main()
5 H. t7 F. v" t  ^9 f  {0 G) d9 R' _0 ?+ j" j
  puta();# j) r$ S. q; q* e; @
  getch();2 p4 j) |1 w& x) u- J; X! {7 r
  dcls(0,4,0,79);; N! W$ L, Z8 r0 y: r1 z
  getch();9 C( Q. l: @7 o3 L  }; W! @
  puta();9 m: s& a/ ]: e( w, P6 d
  getch();: \; s6 z  K# v0 T" z2 S
  bcls(0,25,0,79);
  P! n0 D. _6 X8 \, _, G- i/ k  getch();3 S: I; T! @) J4 R9 B( ^' m3 ^
  puta();
$ m# n+ s( ~- h3 f. ~2 A1 n  getch();
9 b3 \! y+ G0 z  t; x+ t  zcls(0,25,0,79);
0 P  C' |" V9 X. S# G  getch();
/ `6 s# c: h) Z6 ~  }
3 E( K+ m% P& y% \; [% n  /*********center clear screen(中心清屏)***********/
, D9 T/ a4 M* B* X+ g2 Y  void zcls(int x1,int x2,int y1,int y2)( d! ~5 A6 a! [' Y
  {- M" c! h+ x; X& t' t3 c% b2 ]% m
  int x00,y00,x0,y0,i,d;
% x2 |, w/ i" }5 d0 H( \  if((y2-y1)>(x2-x1)){( p  ?+ t1 g& O9 v; `
  d=(x2-x1)/2;
" |" S/ C* ^% ?( Q' g. ^% {+ Y$ x  x0=(x1+x2)/2;
( v) v8 n& u/ C6 |3 i+ W1 y2 j  y0=y1+d;
% q, l9 M, T: ~2 D$ a: W; }  y00=y2-d;  j! f  _1 T3 L5 \! S
  for(i=0;i<(d+1);i++)
9 \$ O" ^4 v+ g! f  recls((x0-i),(x00+i),(y0-i),(y00+i));
! Y2 l& c; }. {8 Y4 x" d  delay(10);
8 V5 e! E0 \  b  }9 `& ^& ~: w' Q2 W- I: k3 {9 v7 T
  else{
# h" ^& e- ~9 F6 C+ v4 \% X& A8 H  d=(y2-y1)/2;7 f+ V1 ]- b: H
  y0=(y1+y2)/2;' S4 v6 \6 j8 O* |% U- ~
  x0=x1+d;: K& u# z9 C9 ]7 ]
  x00=x2-d;
: {9 x7 g8 Q0 w! |0 v  for(i=0;i<d+1;i++)# O; L/ v. I( I9 t1 e
  recls(x0-i,x00+i,y0-i,y00+i);
& a8 t7 z- L1 ]0 F: x  delay(10);
! f/ f& ~! w4 w+ e  }
( s; a7 _. T; G& V& J! S" s  }1 B' F1 p% D0 S+ e* q

2 H6 E0 ~+ p% }7 u" {9 p& G  /************* clear rectangle side(矩形边清屏)***********************/
1 O; ]" q2 u9 F# V
; k5 |: e9 K" C/ d: P: h. J  V  void recls(int x1,int x2,int y1,int y2)
$ P8 Y: L* m8 ?& c6 Q% [  {, g+ R3 d2 y: |# n
  int i,j;
% o9 ?  ]8 [3 C2 V3 i5 s& @  for(i=y1;i<y2;i++){
7 ~- O$ {! a0 L8 e# p% e+ n- ~9 D    goto_xy(x1,i);
5 K4 l+ q1 Z; H/ K  putchar(' ');
: G6 c+ W$ M9 J$ h  goto_xy(x2,i);) X+ q0 R& x, ~: n
  putchar(' ');) t- C" k, K& J
  delay(10);
- T: c9 C" S/ {4 C, e  }
. @! @0 M; G: T  for(j=x1;j<x2;j++){
. Y7 d) e9 c4 M- q' |2 ]  goto_xy(i,y1);
. ^4 J# t! c/ T7 p2 n  putchar(' ');( Z$ O3 }& e3 X, M
  goto_xy(j,y2);
/ i" i) V& [& f$ {& Q+ z  putchar(' ');  W9 d1 ?! r9 r4 g% Y4 B' \
  delay(10);0 |" v4 [3 V( i3 c: n* o
  }
% s3 i' T& u+ h! g  }
; Z5 P  }2 K. `4 S, D; p  /******************open screen clear(开屏式清屏)*********************/
& O; P; Q5 \' q/ U
; W; V4 c; e" H7 z8 I  void kcls(int x1,int x2,int y1,int y2)
; a% V( k" G8 D8 }" K/ g# i+ q  {, q# @3 w/ d! C. x" n
  int t,s,i,j;& r  x% v) M& i. g. h
  t=s=(y1+y2)/2;6 V% F: C' _" _7 F! Y
  for(;t<=y2;t++,s--)
- ?0 T4 m7 C- G0 d  for(j=x1;j<x2;j++){
! k: ^' I; g0 i4 Z  goto_xy(j,t);
% q4 L8 u7 M1 Z: u* o. i  putchar(' ');
$ @. s) A5 P0 v3 t* @5 d1 K/ h  goto_xy(j,s);
4 c7 C" L; s& ]# [  putchar(' ');
* C$ z. n, o# |. I  `- G* _  delay(10);* Z% [8 Q* v+ }* C, t% }
  }
- H3 H/ I  v8 t( N: }  }
' t+ Z9 k, _" V7 s; z( b' W  /*****************close screen clear*****闭幕式清屏*******************/. o! [# I' p. E! W

: T0 B/ W! ~0 }% Q' C# a; q2 d% {  void bcls(int x1,int x2,int y1,int y2)
7 p9 a) H0 j0 U& {# d8 N  {
3 j( |- z6 z: k1 c  int t,s,j;
5 W; J6 W% K! O! a  t=y1;
* }9 {; |2 I: @8 q6 b( K  s=y2;$ z+ E3 Q8 R6 ^% L7 A
  for(t=y1;t<(y1+y2)/2;t++,s--)
. Z1 a9 d4 W8 V; B5 c2 a. P  for(j=x1;j<x2;j++){
2 a9 K! T+ s! A  goto_xy(j,t);
: ]# @0 \  _  M& t& @+ z  putchar(' ');. p$ m5 Y5 T& @. j1 ]' j
  goto_xy(j,s);
! ?! A( \4 Z* ^6 |$ L  putchar(' ');4 O7 b  ]. Z( ?$ o; N* m9 R
  delay(10);
) l1 t  F; h( u, \1 h+ L- t  }" J& Z( S. M" u' E
  }
( U+ k# \$ @$ F* I: e  /******************bottom screen clear(自下清屏)********************/
5 R4 ?! _9 G7 G) Q/ J# U, ]# C
3 h9 P% }2 K6 D& m* S& ~4 I; j: Z. m. ]  void dcls(int x1,int x2,int y1,int y2)6 a) U" P5 t6 o. Y
  {2 U9 w, b3 q/ u% \& c
  int t,s,j,i;
0 l" p5 n0 t, f' V7 w  t=s=(y1+y2)/2;+ s, c/ p9 a7 S8 L% I5 W
  for(j=x2;j>x1;j--); }" z9 z# b! a! i6 Q9 [1 R) I0 s
  for(i=y1;i<y2;i++){
: X+ o) ~. q) S- ?7 a7 b$ u  goto_xy(j,i);; c5 }* a! z7 m% G
  putchar(' ');& l, C& M' t) P
  delay(10);
' b9 A" w# F; G: }& _: R  }  @( q* z6 d9 i1 b2 {+ G
  }6 T$ T* J5 R2 d! U8 l
  /******************设置光标子函数******************/( E8 C# m- r4 A+ q$ L& f7 B- O
4 c- y( A( _5 w; A& Y8 R6 I9 C
  void goto_xy(int x,int y)
3 u) H2 o- A( `9 n  {1 n' s, x/ F$ z0 r
  union REGS r;
+ Q; o7 l0 l  d$ \$ |5 o! `  r.h.ah=2;) o" J: u0 q" Y5 W
  r.h.dl=y;) P  V; l, [, }
  r.h.dh=x;2 z8 S5 Z; i/ I3 E, i- j
  r.h.bh=0;  K3 S( }) _: }2 }! |- ?; A
  int86(0x10,&r,&r);" j0 ^0 e1 S. @6 [8 m7 h( b
  }+ R( s& i7 V$ x. e3 I) G/ i

: J6 Z* Y  t: Y9 i- J9 ^  /**********************在屏幕上打出一连串的a字母用于演示程序******************/$ q  N' h5 Q3 K) B; P5 C2 e

1 z( E- t: |5 w- u# y: F  void puta(void)
( I7 }. e! |' s  {
! Y. U0 Y3 Z) h, \  int i,j;# o. l8 u/ i; {1 W4 K+ p" U4 G
  for(i=0;i<24;i++){
; K* j4 @5 K! L( m  ?3 D& a7 F  for(j=0;j<79;j++){6 P$ j( M" r# @
  goto_xy(i,j);) C- I  `. |' k" T. h$ p
  printf("a");
3 a9 @. b5 {; B% X  }- G4 w, r# ]8 G# b- }+ j
  }. m7 O% v1 M8 D" H, T
  }

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