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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,6 N. B+ j1 O; A  l' e# _
1 x* m, J! W5 b$ M
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
( n2 u; C- }$ b. v) y. H
: N5 B+ `( ?1 l7 H/ @9 y  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
0 s7 \% R  C: }, ^, U5 y: b  子函数及演示程序:
/ h5 b- d+ j; v0 `. D
! Y4 e$ h8 p  g/ {6 [. }5 Z! S$ B3 ~  #include<stdio.h>0 C  F) z' U5 H# ^( r: I
  #include<dos.h>, Y+ R6 m2 _. |& p' @$ ^
  #include<conio.h>! V5 n  L4 x9 ~# O' n# |2 E- B

9 l* |0 Z  B3 V5 L1 G  void goto_xy(int x,int y);
( G, v* m6 a# ~2 V6 t0 l  void dcls(int x1,int x2,int y1,int y2);
" }. F5 m$ w7 H0 T1 c% S; I! ]  void bcls(int x1,int x2,int y1,int y2);
3 x8 s- P) ~' Y! L5 R' q0 m; F( F# D  void kcls(int x1,int x2,int y1,int y2);
: X; D* p* C+ d# t# z- |$ B; N* ^  void recls(int x1,int x2,int y1,int y2);% z% V. _: Q& q
  void zcls(int x1,int x2,int y1,int y2);
/ \2 }6 @6 E# L! b9 M  void puta(void);% v" i( p6 i$ r% S" z* K
& i1 j0 p, n# v: o* c2 i, f4 @' x

: t% T* `! B1 `7 w* b4 B  /*--------------演示程序---------------------*/
: A! U- t4 k  n9 E! \! `  main()
4 A" S! Z) _, S2 B  {" l3 j6 c4 a, w  f& z4 g5 S
  puta();9 ~) n! C: N1 Q% c: V
  getch();
% R5 Q& g, q( d- ]& @* f% @5 R" U  dcls(0,4,0,79);
: I6 k0 O" q0 c& d; V$ ?1 @0 U  getch();; r3 k. ?9 q( a/ M
  puta();& B5 B! d2 c5 F: k" P
  getch();
8 [+ K- d/ a$ U8 o5 G$ C# C  bcls(0,25,0,79);
0 C) p7 P2 |" R6 {5 A& ?& C  getch();1 D( Z3 c8 Q: K3 l
  puta();+ Y/ K+ O: g5 y' M
  getch();
9 r$ A  m9 a! K4 @  zcls(0,25,0,79);
) {: C& k# P, g& m0 t3 L  getch();
) s" J4 c& j& T5 P' T  }
1 T( V5 R! I2 H" w' c4 h  /*********center clear screen(中心清屏)***********/2 w* j& T8 J) q- k" U9 K- f  u; ]. z
  void zcls(int x1,int x2,int y1,int y2)6 l! x- Z3 `  p1 U' j- Q
  {) T  V9 ]5 K" I
  int x00,y00,x0,y0,i,d;/ T5 F* E1 S# _3 h' p; R- G( @; f
  if((y2-y1)>(x2-x1)){; A- i5 s. P/ @% t, b" D
  d=(x2-x1)/2;
- k7 Y' @5 B1 v8 @+ w  x0=(x1+x2)/2;7 c9 L! C& m+ G5 C. l
  y0=y1+d;
8 I: t6 Y5 V! z; b6 \# e. S( J' A  y00=y2-d;( m3 p6 A; C5 G8 S
  for(i=0;i<(d+1);i++)
) A: M$ T7 o. M5 s' g  l  recls((x0-i),(x00+i),(y0-i),(y00+i));
$ F9 r3 \: P7 c- d+ V% r! t! h  delay(10);
; n8 X& p1 E. Q- a" \* u2 h  }
( W9 I0 s4 [4 ^$ d! v$ v  else{
1 _; c3 t. G. W  d=(y2-y1)/2;
9 u, p  ]6 E  v# u3 w& U  y0=(y1+y2)/2;
# T8 r- {  c0 E' u  x0=x1+d;( G' G5 N4 Y; Y2 I, f5 h) J0 q
  x00=x2-d;8 w1 p: R% \$ P1 x- n
  for(i=0;i<d+1;i++)
- m& Q0 z! i& y# _# d; ^0 t' e4 \  recls(x0-i,x00+i,y0-i,y00+i);5 x4 E* i8 f' O- L, d# L5 ]
  delay(10);. Z/ C- j! l4 a: [" B
  }
3 B" N: n9 i' L- u  }
5 C5 |( T8 }" k
/ q/ ^) |2 r- L  /************* clear rectangle side(矩形边清屏)***********************/
6 G* u+ A5 D' B5 j3 D
5 M0 J' I% ]$ S) y  W1 u4 f# O0 ]  void recls(int x1,int x2,int y1,int y2)% b) M$ P: K3 V* b+ B" E; X
  {
7 F% |0 e( Y  Y$ V% g  int i,j;; S) ^* ?* O+ b% {& s; t# z* ~1 f( {
  for(i=y1;i<y2;i++){. D( c% W: [5 D5 F* q6 ?
    goto_xy(x1,i);
' B8 y6 _$ F0 n9 a. U* i  putchar(' ');2 k5 R* X( _% N+ }0 m( U
  goto_xy(x2,i);6 Y6 s% e  `+ v! U* B
  putchar(' ');$ k- ~# N: i; r  _" c  T! V- H
  delay(10);
. T1 y1 Q+ G4 p- Z, K/ z' f/ i  }3 ^: t+ B6 y0 z& E& D; @& u
  for(j=x1;j<x2;j++){0 f- m8 P- m1 r! O8 Z) @$ ]* y
  goto_xy(i,y1);& `) F" D3 l/ b- z' s
  putchar(' ');
. O, s- p& T( m" L5 c3 B  goto_xy(j,y2);
* ?) ~/ o7 ~. |3 \/ N' @  putchar(' ');
; P+ j) d% v  J. ~  delay(10);! Z/ {9 M  @! n2 t
  }/ P& {7 U+ T, }% Z+ }
  }
3 w- v7 M7 I# s) a' L: v5 T6 ]  /******************open screen clear(开屏式清屏)*********************/
3 _4 ~2 y! j) j; w2 V+ f3 v0 R+ _
& m0 s  T2 ~: |  Y2 Y% x  void kcls(int x1,int x2,int y1,int y2)
) s, j2 v3 S3 N$ ?* b( k$ v7 }  {& ^$ ?4 \1 U, r/ ~# O: T
  int t,s,i,j;/ }7 e9 b2 e' E* L$ g
  t=s=(y1+y2)/2;
7 V. ~$ ^& m  t) `  for(;t<=y2;t++,s--)
% J+ ]+ C9 {& _4 n- D  for(j=x1;j<x2;j++){2 R' E& D( t' E* \7 e
  goto_xy(j,t);. b! {+ `2 J- w+ D4 H+ V1 ^3 {
  putchar(' ');: O1 i7 b+ S7 c1 @
  goto_xy(j,s);
6 M" Z; t! B* T/ S+ C) Y1 M# J  putchar(' ');, l% h3 S0 ]2 X: o5 X
  delay(10);* _  s, }$ g# I* Q- S
  }
6 h$ Y2 Y" i0 k8 A, Q  }' @; I9 @" ^% j9 `# U& p! }
  /*****************close screen clear*****闭幕式清屏*******************/
- O7 e3 u# y( L) N% W& r" i- B8 U6 G
  void bcls(int x1,int x2,int y1,int y2)
5 N3 R4 s! N) o. E; N# m  {3 I" o  h8 z& H4 D
  int t,s,j;6 F3 }% [- w  w# m
  t=y1;
+ J( f. W- b- Z( w3 D) T8 f  s=y2;
' G1 ]; n/ [" Z  for(t=y1;t<(y1+y2)/2;t++,s--)/ T3 r2 @3 Y( _9 Q- h2 N
  for(j=x1;j<x2;j++){2 N: h8 n2 t; F; C# v1 f8 p
  goto_xy(j,t);
  a6 S7 v# K+ t( N/ X' l  putchar(' ');
! v$ n6 m! s" \. {& V' X( I  Q  goto_xy(j,s);3 G6 q4 F8 c2 {1 F' D
  putchar(' ');2 A: |  d3 B4 O
  delay(10);
* ^$ E  z+ k/ r  }2 T- U  e1 m1 O; ?
  }
) N! \* k: Q+ C, S  /******************bottom screen clear(自下清屏)********************/
7 h& G" ^( |0 e) \% Y5 i- r) ]
. h* `# p1 U8 h) M  void dcls(int x1,int x2,int y1,int y2)
0 K' q3 `9 b; R8 K  {
& x% C" y; K9 ]% Q( J7 D- M  int t,s,j,i;: h0 V3 H; u5 ^% L
  t=s=(y1+y2)/2;8 @. r8 I- W& O4 r0 Y
  for(j=x2;j>x1;j--); M( r; |( Q3 U% ~# M
  for(i=y1;i<y2;i++){+ o$ \0 ?, Q8 {8 A  y
  goto_xy(j,i);. R$ [1 y) q% j# L+ Y4 k4 T
  putchar(' ');; u* Z, O! X# f+ ?1 L
  delay(10);$ |3 N! n+ }- V+ _$ d
  }( _+ v7 p* q6 [
  }* O4 G# s6 P1 z) m
  /******************设置光标子函数******************/* e, D% s7 T8 f8 |/ |0 s
" k, }0 A8 Z) s( c) n- W0 O7 k) o# C/ J+ \
  void goto_xy(int x,int y)
3 L+ N* u0 J* ~  {
- |6 v2 A* P# `! v7 k9 D) r  union REGS r;
( ?7 s) M% A4 Q. g8 }  r.h.ah=2;
* X. f- U* Q. Y9 u! ]  r.h.dl=y;
+ \- \# J5 K/ O) Y/ p# S  r.h.dh=x;
' j+ @! |( ?# Z/ m) q$ v  r.h.bh=0;' `& q3 m8 i; h. s: H
  int86(0x10,&r,&r);% _4 x2 R7 k2 [0 c
  }
- ^2 i" J5 z# @8 E8 ~  o# V; X' N& i- Z
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
& y* c8 t7 }- N9 E1 T* n$ [* U: @3 S
  void puta(void)# i/ Q& G4 z, ~* G2 O4 b
  {
+ r* Y% n8 U$ d" Y- {+ `  int i,j;
! i# u8 ?2 V. z& d. B/ a  for(i=0;i<24;i++){
% b* l( n" T/ E' x* ^  for(j=0;j<79;j++){8 s3 X9 m/ r" x) W9 @
  goto_xy(i,j);& N: j5 f( p% l, K
  printf("a");" ]* D% h2 D- b4 u' R5 Q. }
  }5 J' T4 g  p* z  H  _2 h1 b
  }- Q5 C3 N2 a! V' q4 H, p
  }

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