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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,9 e& W' x$ G( U. q  p$ ?: D8 n

4 v5 u, ^) {9 i9 o9 t  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里+ {" h0 T5 A. [4 ~, M# x
6 ^& V4 p4 s' C6 m" @& o+ z4 m
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 5 ]& h' a2 d1 R  Z9 E
  子函数及演示程序:
2 c6 o7 }' D* t& ]0 G. k3 J
7 _( g: ?9 A/ B+ _2 E" T  #include<stdio.h>
' w7 \5 ~- N. b: J+ X4 W2 Y8 _4 q  #include<dos.h>
, n& U3 }7 @4 |0 [3 @1 ^- |/ p9 K  #include<conio.h>
# {: e8 G5 ^& R2 V+ L6 ~
6 j/ f2 G2 e5 v  void goto_xy(int x,int y);
; B& a* _  A7 o( a6 B& q  void dcls(int x1,int x2,int y1,int y2);! N- Q' A. d0 D. c* Y* Z2 L
  void bcls(int x1,int x2,int y1,int y2);( z1 o3 `6 g& E  g& |: \. B
  void kcls(int x1,int x2,int y1,int y2);
. e) d3 ?) d! i' @; B  void recls(int x1,int x2,int y1,int y2);! o! N3 r: i2 P. o& X3 }
  void zcls(int x1,int x2,int y1,int y2);- {) b4 n  L- ^" x
  void puta(void);2 ^+ T  C0 c4 \0 P' f/ u

# q2 Q& c# S4 t  l& Q
+ {0 x/ N1 ]/ R( A9 R. J* K& I  /*--------------演示程序---------------------*/2 b$ f) f" `7 U: G
  main()
' L, R& N3 J9 p: ?, p4 h( p  {
7 ]6 `1 O+ A' V  puta();# h) J& D/ `  \1 A1 f: `. z+ t+ o5 x
  getch();# L' E" R& s1 i& x
  dcls(0,4,0,79);1 r3 `5 u* ]. C) U7 |
  getch();
) k2 D( r& {- _6 t0 [7 S$ Z/ e  puta();
, M2 i6 C3 D- s+ k/ L! j  getch();
" S8 L; y; k; P  bcls(0,25,0,79);
1 _  j9 @7 W- ~  getch();
. S) e/ s$ ^1 L2 o5 o% a  puta();& u  Q& H& V) b# o
  getch();3 x4 M; v! }1 B3 p& p% h& G# y2 E
  zcls(0,25,0,79);% i& B$ ^8 x/ \* v* ^
  getch();
: b1 U( ^1 Q8 U$ y  }
8 _% S" I; j  i* p  /*********center clear screen(中心清屏)***********/
$ [3 k8 @; p8 p/ H% j9 G6 `  void zcls(int x1,int x2,int y1,int y2)$ J% A0 }- t* b2 O$ V7 ]  O
  {; _( R1 i! W/ S4 s
  int x00,y00,x0,y0,i,d;
  |' w( Y3 |. I4 }' g  if((y2-y1)>(x2-x1)){. u: V- v/ a, H- S2 ?$ Q
  d=(x2-x1)/2;7 f) r* _$ a7 g# j4 d1 M* D" L, |
  x0=(x1+x2)/2;
8 ?4 V( w  C# L: C6 |  I, F. x& U  y0=y1+d;2 X' q* ?3 T) V2 L$ S! |
  y00=y2-d;
. Q% M) X( Q: u( S  for(i=0;i<(d+1);i++)8 ]0 p  m: m( i6 K( c1 \) I
  recls((x0-i),(x00+i),(y0-i),(y00+i));" Y0 n$ u( b* ?! d$ `( c/ f' m
  delay(10);; R  M) [. q. g+ P/ e
  }
$ t; H9 N  W& C; E6 q7 a  else{
7 q+ X$ H. s! C, W7 p/ B$ U  d=(y2-y1)/2;: _" a7 W2 q% F. a" f, c
  y0=(y1+y2)/2;
# [- Z5 Q  |- o+ o/ [0 @  x0=x1+d;7 G+ S3 O# s* q
  x00=x2-d;& [* c: g3 a( S+ u
  for(i=0;i<d+1;i++)! h* U# G7 [7 m! a' d& \6 [
  recls(x0-i,x00+i,y0-i,y00+i);& j. F3 i0 a% Q  H+ q+ ~0 x
  delay(10);) @5 [* I' P$ P' J
  }
* }, X' Z; i- h$ |" V$ \- r  }7 U( {2 G2 e% x4 C3 ?

7 j: O: a& {- _0 b! H  /************* clear rectangle side(矩形边清屏)***********************/8 l6 ^7 e) B+ P5 m' T
: r9 M( m% W8 b) X
  void recls(int x1,int x2,int y1,int y2)
1 d5 j1 w9 m- L# o  {& s- j, A+ @: R  x
  int i,j;
; k$ K7 B& o# y1 X$ E  for(i=y1;i<y2;i++){
4 v8 c# b# a4 M* x6 V    goto_xy(x1,i);. U( Y8 f3 Z" e
  putchar(' ');
% V" B5 c7 p+ F4 N& p+ c# I' ?" K0 V# o  goto_xy(x2,i);% @% _5 R6 Y# v2 V$ l
  putchar(' ');8 ?1 q8 d% `4 ^
  delay(10);
# o3 {1 \" E0 U; h. S  }
: Q$ k  H4 Z0 z0 h+ W$ C  for(j=x1;j<x2;j++){
: B1 S3 H/ {: M" f5 C) O5 x  goto_xy(i,y1);
, n5 O! `! L/ f% Z' c  @5 K. T  putchar(' ');' c; E) Y  @1 W; y
  goto_xy(j,y2);
, f1 G+ @  M+ f% w) B  putchar(' ');
. s6 r) y, K' f1 H6 c# r  delay(10);# u) f7 R3 v1 n, d
  }1 ~1 i! {: h& v6 R0 F6 E( X
  }
) d0 P/ K# g3 m7 |8 ?  w5 n" O4 r  /******************open screen clear(开屏式清屏)*********************/
& [$ @# g. L9 E( `( i
, r/ R6 }) x6 R+ I$ z  void kcls(int x1,int x2,int y1,int y2)0 f' j/ {* d# J7 A6 `7 ~! T
  {
' M% ?2 ^5 i1 `2 E  int t,s,i,j;/ s) t. o% H8 K1 s( G
  t=s=(y1+y2)/2;
, N: h/ M+ t, C0 O1 k% l" U  for(;t<=y2;t++,s--)3 {3 O, b* k) G& Q" @, D
  for(j=x1;j<x2;j++){
. X7 [7 x/ Z4 W* [8 F' n  goto_xy(j,t);
# W; t5 j: p. B5 o4 b1 Q' n) q  putchar(' ');5 ]. A4 K* Y0 J' o* y, Y! L
  goto_xy(j,s);
7 c9 g1 G9 y/ s" E0 Q& V4 d: }3 K  putchar(' ');! \# {9 m. l% D- U+ {
  delay(10);
- V8 E' z" E6 m  }
! j; X0 h% o6 `  w' r+ y  }
6 X- J) T# N( M" t  /*****************close screen clear*****闭幕式清屏*******************/
- j) P. n4 ~2 P0 w$ W
/ @+ F0 c( g% M5 Y  M  void bcls(int x1,int x2,int y1,int y2)
$ Z' `  n) i& N  {
- m- {$ H, c# d+ g% J  C  int t,s,j;
9 V1 G4 ?: E2 W/ K  t=y1;
+ Z0 ^* d7 W. q  w5 n# j9 V% ^0 c  s=y2;& R& @7 K) `! m/ X: n- K
  for(t=y1;t<(y1+y2)/2;t++,s--)8 \- ~! A* `( w4 s# I6 a# c# _
  for(j=x1;j<x2;j++){
4 X, {/ c/ a) u( U, g  goto_xy(j,t);
& p$ T9 `( C, Z  putchar(' ');. }0 y# M# s/ M  G
  goto_xy(j,s);6 P' D' b6 ^# E9 D$ Y6 t( ^6 |4 y
  putchar(' ');
- I# d3 I2 t1 {  @3 W& V  delay(10);
: T7 r3 f5 S& u4 w3 T" }  }
6 ^9 O5 ~) x. }  o  S8 t  }
7 f1 n4 ]  r* v5 \, f# `  /******************bottom screen clear(自下清屏)********************/; O0 J/ _; z, Z. K

. L9 D) m. H8 t1 u0 I  void dcls(int x1,int x2,int y1,int y2)
/ o  y( w. z# _/ K9 }- w7 ~  {9 [$ H+ @0 f4 b
  int t,s,j,i;
. c: a4 ?) r+ O6 _: ]* \  t=s=(y1+y2)/2;
9 C  H7 S/ c& O' K* {( |' w  for(j=x2;j>x1;j--)( {5 b, l! J( Z. C# {! L7 |2 o
  for(i=y1;i<y2;i++){* |9 I, V! Y9 v6 Y$ Y: Z
  goto_xy(j,i);
! X+ j# r; ^6 v, @& s% g+ t  putchar(' ');& n0 s$ U+ M/ j& L( v8 d
  delay(10);
; |( u% R5 m% `& V& X0 {; h+ j8 A  }- K, m- A' V* q) x7 _+ s7 Z
  }2 E: i8 B0 ]& Z) L
  /******************设置光标子函数******************/% g8 u9 F0 p3 D1 V5 y/ }& v
; R! {* C0 x! |. Q
  void goto_xy(int x,int y)( T  o  a2 x) o! \- w1 X6 U. s) x
  {6 w9 B+ H4 z8 e
  union REGS r;
/ {! ~1 L1 h) i& H* @9 X+ t9 D  r.h.ah=2;
$ P3 ~: {/ {) `  r.h.dl=y;0 O& E; t4 B* }7 i
  r.h.dh=x;
5 N" t" D% h; s, I! h) r  r.h.bh=0;
9 a( f2 n7 o- W4 E) f+ H+ r  int86(0x10,&r,&r);3 o' Z1 C0 g7 J9 R; `2 R
  }
8 m- M6 b! ~( h' P3 W: l$ V8 V8 L8 V7 |7 |0 W& u- h7 J
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
, W% x8 q+ _$ g! w- b& B
9 ?% P% W3 f7 n' S+ t+ a! }' ]" N  void puta(void)
7 Z( x5 t/ A' v5 c  {5 e1 P$ V2 X6 p  Z. o1 A
  int i,j;
: @' @( {+ X* w% e! \1 \1 |  for(i=0;i<24;i++){
/ R3 _+ m+ z; y) v1 j& \  for(j=0;j<79;j++){; H, B3 \3 T% w; _9 i  n+ S
  goto_xy(i,j);
5 w$ r* t- t$ @; o; e  printf("a");, p4 k4 h* M' Y. P, b4 Y6 N
  }- e5 l5 E* w8 T/ e) y3 a
  }. ?. T3 m& M9 v) }6 \
  }

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