返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,5 o* y4 q# V7 H9 R
  ~9 I2 o' f8 W( U
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
) L# e0 e/ V) x2 {( l: T4 ?& z* k* S+ ]4 t- I$ @6 U0 V
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. $ o4 j* p: u" ^
  子函数及演示程序:; p# l  L& C1 H4 R5 y6 _% e* W" G
  C+ X4 q: T1 f7 N$ w! G
  #include<stdio.h>
+ ~$ `2 `* a; s* U! u' _+ p" p/ C  #include<dos.h>
2 x" e$ c: C7 e+ Y' P4 m# g  #include<conio.h>8 e! ^* k2 E+ j4 G, }+ A

$ `5 F3 @$ k- {" c7 S; X( ~  k  void goto_xy(int x,int y);( a$ w0 Z, c- R
  void dcls(int x1,int x2,int y1,int y2);
5 k: g. i# @8 Y  R, h  void bcls(int x1,int x2,int y1,int y2);. Z: Q: s  T, h* u5 c: r
  void kcls(int x1,int x2,int y1,int y2);
$ ~2 O. `2 T/ A7 r  t  void recls(int x1,int x2,int y1,int y2);
7 x0 A; h7 f/ F5 h& U5 U" B  void zcls(int x1,int x2,int y1,int y2);
2 D7 f' @! F, [- S' ^# U  void puta(void);1 i+ k! u7 ?; M  F4 R

% v- R0 F5 {4 U2 w
- }, S% f. v5 z6 M  /*--------------演示程序---------------------*/
. R& |  U8 h8 O9 k# f+ s$ }  main()
! a. N0 z7 Y2 B" J! x  {
9 n2 `9 r; R0 R  puta();8 m5 R3 D! V# D. {2 u# w
  getch();4 }2 v9 {" X3 P- _
  dcls(0,4,0,79);
! s, m9 q7 z: `$ J7 x  getch();! B  V# a+ r/ P" e; Q! K; F
  puta();; Z5 F9 X, W  k8 C
  getch();
$ I7 f+ V% T; R0 i2 Z0 d0 s7 G  bcls(0,25,0,79);  m2 y* n8 B7 y. ~( ~2 S" ~
  getch();
3 W: N# ^( d% Z/ v3 O* m1 q  puta();
0 j1 [' u/ |9 @5 H7 H  getch();
6 B5 A- T" D* v0 W! A  zcls(0,25,0,79);( M; j) C  Y7 F: F0 i  ]
  getch();
8 D( O2 l/ H9 u  h: H6 o  }8 }6 U8 X0 P9 [' x$ C
  /*********center clear screen(中心清屏)***********/
" n% ~, s+ K5 b3 \  void zcls(int x1,int x2,int y1,int y2)
' V  v# b) j  d5 |. i  {; }# s1 j* a5 M6 Z
  int x00,y00,x0,y0,i,d;% }, U, Y  l; @1 z
  if((y2-y1)>(x2-x1)){
- B! V3 z0 ?3 r* V. c  d=(x2-x1)/2;0 l& w. s  c& E% k
  x0=(x1+x2)/2;6 X, F& i0 }# M+ A  A# l
  y0=y1+d;
* w8 a; V! g: m' E6 P- |  y00=y2-d;
) o1 z6 `% S* |6 ]  for(i=0;i<(d+1);i++)2 }" \3 {5 g  X8 F, I6 \
  recls((x0-i),(x00+i),(y0-i),(y00+i));: N" D6 R5 T8 h$ \' z" c( ?& o
  delay(10);2 `* e% r- b, z4 K$ |
  }( E. B  d  ?0 }6 _. `
  else{
' @8 G3 @6 l# |# I  d=(y2-y1)/2;* d% \# U" b7 P% T, k1 r* ~1 n
  y0=(y1+y2)/2;
0 z% r, U/ k) [0 ^  x0=x1+d;# m% c8 n* m% E+ K( r- q1 V
  x00=x2-d;
/ F% k6 M# V/ L2 L" p6 p) U3 q9 u  for(i=0;i<d+1;i++)6 t7 j, A0 T# U& F" F' U
  recls(x0-i,x00+i,y0-i,y00+i);% E8 e# U) o, ]( n# o
  delay(10);" L2 J9 ?7 {* {9 q
  }
( M- Y8 n3 [" z5 Q6 {- _: P$ b  }
& ]) v; a( @6 Y6 e: f9 q; l( }" P: V% F- f6 t. D9 I
  /************* clear rectangle side(矩形边清屏)***********************/
* x5 e6 e, x6 W% j- y& k/ v. ?. z5 z6 s# n! P% J% I
  void recls(int x1,int x2,int y1,int y2)
: m: e; y$ \: F" s: q: S# [  {2 |' F- `) X  R% [0 E
  int i,j;
& M0 i: k0 l& p2 s8 ]  for(i=y1;i<y2;i++){4 H9 v0 C+ d, A' S! P% L; i- Q
    goto_xy(x1,i);* w2 Z5 T- N4 s2 @- E( Y8 R( h
  putchar(' ');
+ U3 z8 d( V6 F( ]" v4 S7 T  goto_xy(x2,i);$ A9 c8 ?  q+ B) E& B
  putchar(' ');
3 S5 j/ T+ O- N" n6 R/ F$ u  delay(10);7 w) f( T. d% w9 g5 m. m8 W
  }. F2 E+ k9 P8 ]4 h$ p
  for(j=x1;j<x2;j++){
, J8 U- Q9 L4 ^3 v. a  goto_xy(i,y1);
  _7 j$ t- \! J; k' r8 i% F  putchar(' ');
5 }: f4 B# L+ G% V  A  goto_xy(j,y2);
2 [3 ?/ E  C5 o% }5 k# _% Z  putchar(' ');& j' N0 L. f6 Y! ]7 f
  delay(10);% F6 a! P+ i6 W3 _4 Y+ e3 d
  }* Z9 c# L+ D4 V2 r
  }
- a& i" u( V5 ]8 a/ d  /******************open screen clear(开屏式清屏)*********************/! b- Y8 p% Q1 y3 K0 _. g( o5 i6 W
$ P/ ]4 Y$ x" _" A
  void kcls(int x1,int x2,int y1,int y2)# T5 }& u' n" u% c- d" e% U, B
  {' f1 r  V# `1 B' \) E) x4 r
  int t,s,i,j;
) L9 |  j* a. k, I1 K( [  t=s=(y1+y2)/2;5 q0 v. u% Y& r) j5 d9 }0 V
  for(;t<=y2;t++,s--)
- L; D+ A! }0 q) a  for(j=x1;j<x2;j++){) i: X6 C! {, n: m2 K- t) m
  goto_xy(j,t);
. a3 L2 @* q" m2 j  putchar(' ');! i. h0 K/ Q6 K# F5 X# u( g& ~
  goto_xy(j,s);
4 M, L6 t7 p( p) U. i  putchar(' ');0 j' o5 k1 A8 V6 b$ S5 X+ T; O
  delay(10);% s2 A& A1 }$ h; E
  }0 y& E7 U  [+ _! o6 v9 f/ Z& }0 z( d
  }+ w# F2 |( b2 X! R. z7 }9 l9 F
  /*****************close screen clear*****闭幕式清屏*******************/+ b8 A, F, U5 n/ w7 y+ j

5 x. q& E+ r& J( I; ^  void bcls(int x1,int x2,int y1,int y2)3 o/ _* v# D) K6 s( D
  {
2 w! m2 x& v! |) B: o( O  int t,s,j;
+ r& D# C5 L. t" u/ G% i  t=y1;
3 L% O* \' c/ o5 w  s=y2;
+ z0 b7 y$ h; B8 o  for(t=y1;t<(y1+y2)/2;t++,s--)2 S9 g+ d# V4 V8 k' d
  for(j=x1;j<x2;j++){4 i1 i% v+ m6 _. V+ E
  goto_xy(j,t);
5 ]$ U8 I+ a* C3 X  putchar(' ');6 U( U; s7 e8 m
  goto_xy(j,s);5 \! H7 P# [/ M4 Y
  putchar(' ');
0 E2 b  H) ?/ E9 v- W0 f  delay(10);
5 j. `$ M' P& p! |  }
, i5 D$ `" ?& i  }# z% g7 W& E+ r- i
  /******************bottom screen clear(自下清屏)********************/
1 P( \2 R/ b, m) Z  m2 _* f: a* H! `  K0 y6 W0 D- W! Z1 F
  void dcls(int x1,int x2,int y1,int y2)
2 Z$ Z6 y* K7 M: @0 h4 I) |! l) _! {) A8 H  {# G, f* I& x& u6 Y5 o/ r( l
  int t,s,j,i;( u- s9 @1 }, t* u4 R2 g) m
  t=s=(y1+y2)/2;& r+ V: A: x8 K3 {1 u
  for(j=x2;j>x1;j--)  |8 ~  Y3 q8 }
  for(i=y1;i<y2;i++){
6 H7 |8 S* ]6 C9 }0 Y; b4 y  goto_xy(j,i);
! G+ b+ R9 g6 @' Q8 ]+ w: y  putchar(' ');3 z7 ~' ^' d( Z; @
  delay(10);+ r9 K! g  s4 W5 A" A
  }
( p8 s, J2 y8 p$ u! X2 n" ^  }
8 S  t5 |+ P6 E# N) N  /******************设置光标子函数******************/
# R2 u- L- e9 i% d6 g: z0 K4 \1 k* X6 V1 m& v" G6 ~3 k  D- ]+ u
  void goto_xy(int x,int y)% \( b* q  \( D- t& C2 K1 h" u8 W
  {$ J: |" p# I8 m& c  W
  union REGS r;# W. b4 N. c" J4 y2 t" Z
  r.h.ah=2;
3 D" T7 q+ G/ x" ^  r.h.dl=y;
# M" I* C3 ?# `/ N7 i" {$ L! \  r.h.dh=x;& s3 ~1 q% ?7 Q1 y# M, S& S+ F: V
  r.h.bh=0;
& O! G- h' p# P9 r3 X) y  int86(0x10,&r,&r);4 i4 h2 u/ `; s2 F
  }( d' ?# r) U4 S

0 h0 Y; C4 Z% [  /**********************在屏幕上打出一连串的a字母用于演示程序******************/( ?( i0 Z0 Y$ W2 U6 d( u8 {2 g
% A: o( g) D& I1 B1 j1 N6 z
  void puta(void)
, ]9 x, k+ G. y# x  {/ O, d. y6 |+ b9 x( f! s
  int i,j;  L! o& t7 O1 i! h0 P
  for(i=0;i<24;i++){
" W9 f) u' J6 |: I( Z8 D& `3 g- `+ X  for(j=0;j<79;j++){
7 V  L6 G# Q) b8 q( ?' x  goto_xy(i,j);1 I$ n8 G+ s8 T3 O1 D
  printf("a");
" g2 V; P5 k6 y5 @  }) H/ M( i# r- z: t
  }3 j; N# K8 p- K) @
  }

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