返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
8 b9 k4 L  I8 U) G. S5 c
3 h# d/ B9 c7 i# Q- c; f5 \  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里" k- a' ?: p' ]6 g

8 C/ K3 o4 i' Z  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
5 G4 @2 W$ c9 U+ \, M  子函数及演示程序:
6 J/ W1 Y$ ?/ q6 \, b- {. {' i7 {( M* n' _
  #include<stdio.h>) V8 a3 p7 ?9 m( n- E
  #include<dos.h>
) ]' m0 ^7 n9 s0 u! M  #include<conio.h>
" n& d& W) v* m+ E6 j- Z7 I6 ^0 b. Q; C' ?- @5 `
  void goto_xy(int x,int y);$ k+ G" u  U0 D) i/ S8 i
  void dcls(int x1,int x2,int y1,int y2);3 ]& A* q' Q4 T, i5 I5 \
  void bcls(int x1,int x2,int y1,int y2);+ t" E( V0 P  q. W9 o/ m3 v# W, g
  void kcls(int x1,int x2,int y1,int y2);
2 c- M" R/ c* L! M( C( l  void recls(int x1,int x2,int y1,int y2);
1 l. O1 k4 m0 Y' K- n3 q  void zcls(int x1,int x2,int y1,int y2);. |* C1 m2 }$ h4 N3 a9 E, w* r
  void puta(void);
$ ]$ P/ X: j- E- I; t+ A- w
4 x- I3 K/ b" T! a. K: W/ p3 X8 U$ D
  /*--------------演示程序---------------------*/) i, {* f# S2 u2 R  A
  main()
5 X; t. `+ U: r  z* o) f3 m  {8 W: }; Y) ~8 R5 N) m
  puta();# r& t% c1 x% Q( b, Y+ J
  getch();3 c+ y! ]  K! A4 k" F& ~6 r: O
  dcls(0,4,0,79);3 c0 L2 W8 g4 f: R2 Y3 N
  getch();, g- T4 l% P% w5 w, m. M4 {
  puta();7 \( e+ [4 l* |8 X9 A$ ~4 c* Y7 g
  getch();5 v: Q# i- ?8 I, I
  bcls(0,25,0,79);
2 @& r# q0 f- Z5 P5 e$ c# |1 T# c  getch();
( ^$ L# N7 R( w  puta();- d; p8 o8 c. a- Z# \7 l
  getch();
$ ?' C$ ?0 s7 P5 ?9 ]) o  zcls(0,25,0,79);
$ u3 ~* S7 a: Z; I  getch();
* ?* j% t: g- e/ w8 _  }/ B% V. d5 i' H2 h/ h
  /*********center clear screen(中心清屏)***********/
: D/ a2 t/ X4 P- C4 z. p& F  void zcls(int x1,int x2,int y1,int y2)
5 {3 [& R. E7 y3 h( c" G1 ^  {( {+ E( N# s- ?$ o' p. B3 [
  int x00,y00,x0,y0,i,d;- Q; }$ y7 X6 r
  if((y2-y1)>(x2-x1)){
: \6 J0 I7 n8 T  d=(x2-x1)/2;
% @2 F( A% L8 j$ [" B; a  x0=(x1+x2)/2;
2 M" C" j9 z; Y+ ]8 b/ u! h  y0=y1+d;
+ @6 J# N/ @5 y0 k  y00=y2-d;
$ T: v0 {; h1 ~2 W0 |/ l* U  for(i=0;i<(d+1);i++)
' h3 b2 z0 `; r' D  recls((x0-i),(x00+i),(y0-i),(y00+i));: n7 E4 S# @3 l2 [1 E5 t
  delay(10);
& C( o  ^! q% L. f9 A8 }+ e4 M  }% K/ ~0 ~6 t) l$ S0 ?8 t# G* z
  else{
2 t/ ]% U& H! L+ s0 F4 k! n  d=(y2-y1)/2;- N, J/ ~5 v$ I7 q+ \1 c5 q  ]$ \+ m
  y0=(y1+y2)/2;
1 w2 u! d$ L8 C  x0=x1+d;: Z% l/ I9 Z+ H( o; \0 p
  x00=x2-d;8 r/ v, L2 d' m: l) @
  for(i=0;i<d+1;i++)% d( ~  n" X$ U7 U
  recls(x0-i,x00+i,y0-i,y00+i);) X% `7 D7 i( t7 |& R+ l
  delay(10);
1 x. n9 T- m* `2 \' ]9 j) U0 Q, O  }5 _% w$ ~+ q1 h9 N; S: j5 H5 I
  }
+ i9 u  n! M9 j! Y1 B2 h5 w5 h' x1 o1 L5 T; v! t# ^
  /************* clear rectangle side(矩形边清屏)***********************/" r" h. E/ y7 {8 Y# \
, s# M+ w' y+ L; }% M
  void recls(int x1,int x2,int y1,int y2)0 P+ P( H# o* A( R7 d! a
  {
* c  y- M! D- w. m  int i,j;
, |  U8 F$ q" A* q4 u$ s  N  for(i=y1;i<y2;i++){5 \) S; E9 l1 k. V* l
    goto_xy(x1,i);+ O3 }7 t) }" O; A
  putchar(' ');) z4 z! b; A& |# q/ K! b
  goto_xy(x2,i);
$ g" K0 z+ n1 F6 i# K  putchar(' ');
4 ~, e0 D& V9 \' J/ z9 X6 @5 M  delay(10);$ z  t2 R" J: T- o
  }
# J$ p! v; {& U. L  for(j=x1;j<x2;j++){
4 u7 ?, _) \/ J# t8 j4 H  goto_xy(i,y1);
  g" m/ }% r5 }8 w3 t2 D. m/ Z  putchar(' ');% k' G# N8 K8 l* B
  goto_xy(j,y2);
5 S& i7 D9 i2 m! d# f. z  putchar(' ');
) C5 u2 S8 T4 r! l7 G! {, ]) a  delay(10);
% q' Q% `; V% P- B- z0 e  }
! z1 ~5 u3 D8 s6 {* T! ^  }' C& s) ~% y/ ~9 B1 R) ?, y7 r
  /******************open screen clear(开屏式清屏)*********************/0 I" f; b; b1 `$ A4 Q& U

. K4 B4 ]' O& q" K) R  e  void kcls(int x1,int x2,int y1,int y2)3 T) d8 f2 C# n
  {
3 z/ C! |% n' e7 A  int t,s,i,j;
9 g1 j" d9 O8 S" I. N5 R  t=s=(y1+y2)/2;
, R7 g+ M3 Q+ D1 I  for(;t<=y2;t++,s--)
3 F6 |+ }' q8 _0 p  for(j=x1;j<x2;j++){
; D2 U! x3 E% o7 K  goto_xy(j,t);! x1 j1 H' ~/ r9 ]
  putchar(' ');4 f0 G3 c$ }( z
  goto_xy(j,s);
& C0 U0 X# Q1 X/ y8 D/ R2 w  putchar(' ');
2 e/ b7 `$ c, @. y  delay(10);
% {; i" W; t- ]2 S2 p  }
; ?  F# F8 ^, z& Z5 y/ q) {  }
8 x5 m0 d: ~/ D3 Z+ A9 j  L$ B  /*****************close screen clear*****闭幕式清屏*******************/8 S: ]1 r0 K) I( h1 `
7 b9 d& t1 p; K* d9 a
  void bcls(int x1,int x2,int y1,int y2)8 V  \" ^+ @9 N. ]# W; F
  {
# I" ]) O/ Z. O  int t,s,j;0 ^8 o: N3 B! U- Z7 ^! V: w' ^  r
  t=y1;
6 E7 Y- ?7 J$ w1 n' k2 ~  s=y2;7 o+ B% L3 {5 _7 w' l
  for(t=y1;t<(y1+y2)/2;t++,s--)
3 [* r% i7 q& ^  for(j=x1;j<x2;j++){
; B2 K- K' h* G! F0 l& r/ d  goto_xy(j,t);
& c* W; ]! d; Y& ~) \+ m  putchar(' ');
) V. \, {  J0 R6 \1 y  \5 b. e: k: `  goto_xy(j,s);9 `! c# |+ ~) |5 h0 `5 A* g; Z! c$ x
  putchar(' ');
9 U7 U/ e. h) e* L, z" I9 P2 l' P  delay(10);
& f$ [, a4 T' W( D4 x1 t/ z2 b/ q  }) S/ _6 p- `% B# r3 @, C! R
  }5 e9 ?) T, V7 Z+ @5 a/ s
  /******************bottom screen clear(自下清屏)********************/
# I8 v) j. C9 t, v) F# z
( s8 t5 p6 |0 ?  l  void dcls(int x1,int x2,int y1,int y2)
, t% Y- ?; T* R6 j1 f; a9 o0 Q  {
2 C  O* }7 ^4 k( \5 Q& @  int t,s,j,i;
+ V/ J8 c: y- I: }  t=s=(y1+y2)/2;
& p/ s: O& L' n; U( k, N* [  for(j=x2;j>x1;j--)
4 {+ I$ [$ n  s& K/ k; {  v# f  for(i=y1;i<y2;i++){
6 H$ J' O- h7 k" T& j* r0 q  goto_xy(j,i);. [7 T3 n, l1 R
  putchar(' ');
5 e% V( @, c; }  delay(10);7 u( v; |' E" y& E+ O! Z0 M( U1 l
  }
; [# K& Z) ]/ M$ M  }
% ], L$ U* {+ H& N4 ~  /******************设置光标子函数******************/& K7 n8 r, m& x7 S2 I2 v+ b' n) X
! m& T% |' ]0 Q$ G' \
  void goto_xy(int x,int y)
% J. c) U6 W$ a; W. i& Y2 W$ P) X% O  {6 v6 t' Y* P  S% m$ L0 D! M
  union REGS r;' Y" K0 V1 q% [( @- L
  r.h.ah=2;
7 E7 ?# f! C! J5 R. Q) I- b  r.h.dl=y;8 m8 W+ h9 Y6 b, G& \
  r.h.dh=x;
' F7 z9 N( y2 W% a! |7 w% G! d  r.h.bh=0;
- p, H& @# t0 l  int86(0x10,&r,&r);
; z# Y% i/ R& {" ]8 A5 Y  }
5 G/ E% k' y3 `8 r3 Z+ Y6 h( P6 f( K: w( J! [
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/( h" A9 P8 A& D3 K) t' X5 P

. ]/ L; T6 |  ]$ O" ^4 f+ q  void puta(void)! C* s; _- K. |7 _0 ~
  {5 w3 l5 h1 B1 V
  int i,j;
8 ?1 [) \0 i5 `! K  for(i=0;i<24;i++){
; i) g# E+ Y7 [% \' c9 m8 d% D  for(j=0;j<79;j++){
; e# g- t5 b; F$ }/ b4 E  goto_xy(i,j);) P3 o  Y% k# E4 D4 G! q
  printf("a");
, o3 @: h# v4 V7 F7 V9 P7 T  }5 f) \( q1 M( [* M
  }
( T* W1 C/ h, @7 o  J& d( F% |4 M  }

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