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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
! a- Q! H7 S* Y& D, i6 @& w4 O9 b7 f# S' g
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
# y' P+ J% O" g+ }3 z* O7 \( |$ Z4 k9 x: A! W( e# n' b7 F( |
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
  z2 @! ^- z8 h: N4 c- K2 @/ B  子函数及演示程序:8 i& U* h2 n% y( A

; P9 p: Z) q0 `: w+ H& J  #include<stdio.h>2 J- g3 }. ^; X( C2 z' L; p
  #include<dos.h>( v4 Z" t& a7 ?2 ?8 L$ Z9 e
  #include<conio.h>5 C& \& F0 g! \# \6 E( H
" |1 a4 L8 }! D% [2 \; s8 M
  void goto_xy(int x,int y);4 h* V. Y# f  u( y4 b5 j
  void dcls(int x1,int x2,int y1,int y2);
/ q3 Z$ v, J( f! y. e# b. m# j7 g3 q  void bcls(int x1,int x2,int y1,int y2);
/ _1 F- C& m& M( j) V" I2 I* F  void kcls(int x1,int x2,int y1,int y2);6 \. T1 W& c7 j9 X* {% s
  void recls(int x1,int x2,int y1,int y2);
( m3 b( {  p3 v2 L% _7 I, z9 p  void zcls(int x1,int x2,int y1,int y2);
% G# q% H# G( U  void puta(void);
4 z  K# R1 I0 h
! |* Y9 t; b, `) F4 S; k- _& t  d/ t8 p2 Y7 [; l3 |/ J
  /*--------------演示程序---------------------*/
% v: O1 v* R1 k. e8 l/ T  main()# f3 A* e' M" S; i5 y
  {- R! {* V6 M6 O; v
  puta();
- R8 W- t7 Q$ Q! k  getch();6 z* ]5 T* V4 f: |2 J
  dcls(0,4,0,79);" U, x( b5 a8 J7 [9 D
  getch();! D" K7 j$ E) ^9 F, z& _
  puta();
9 m: t( y( p, G" `% F  getch();+ g2 m3 j6 e& [* O; `) I
  bcls(0,25,0,79);" N8 t* Z5 n: \7 G3 G* n
  getch();6 O; a( p% l- b9 s1 v, j- T
  puta();
3 H1 p  ^2 ]( z; ]+ E2 L  getch();1 s# G" W  Z. o% j
  zcls(0,25,0,79);
* s6 \9 I5 n2 V  ?2 C( `  getch();
3 P' B+ _& L2 G. w5 }  }' o  F" a+ c( N+ ]  `' A; O; R
  /*********center clear screen(中心清屏)***********/
# ^$ w8 Y' s0 d2 ]4 a  void zcls(int x1,int x2,int y1,int y2)
& q. b. G  }3 m- i  }4 X  {# Q* \, x2 ]9 G, M: v8 n1 ^
  int x00,y00,x0,y0,i,d;; A+ r7 W$ @2 M( W: t
  if((y2-y1)>(x2-x1)){* o4 i. {0 ?! Y0 Q& l
  d=(x2-x1)/2;
3 ^8 B+ d. C/ t+ `  x0=(x1+x2)/2;
: ~7 a% B6 w) Q  y0=y1+d;
. B( {. o+ g9 m8 r; N% W  y00=y2-d;1 \/ i9 W* |4 `/ `, o2 U  ~: ?
  for(i=0;i<(d+1);i++)6 s( L8 i# e/ |- w+ u) |  Z
  recls((x0-i),(x00+i),(y0-i),(y00+i));* ~. _+ E5 g( H: Z
  delay(10);8 Y$ U* j0 ^2 n' B
  }9 b  j/ N) _- P- ?6 h% S4 x
  else{
  e* p# P4 n5 l0 V. F5 P( [2 e! B  d=(y2-y1)/2;, f2 X0 X$ {+ v& r2 D
  y0=(y1+y2)/2;
' }/ z* t4 w9 `  ]: S4 o  z, d$ _  x0=x1+d;
: O( B* X4 A; A  p/ M( |  x00=x2-d;
! r+ Z' }) X2 y$ \0 V; p- O* H  for(i=0;i<d+1;i++)
3 s8 q2 b/ U: t- C& l# R  recls(x0-i,x00+i,y0-i,y00+i);) n  Q+ F1 }; L. S/ T; |# F" ^' R, h
  delay(10);
7 N* T! V0 m$ w% k6 l" ?  }
( H" V* a) [$ b6 I3 y! g4 I4 M% D" o  }& Y  U$ o% b% I: y# @' D

8 F0 ~7 O) C7 g. {* m6 b1 N) t* Z  /************* clear rectangle side(矩形边清屏)***********************/
1 V  |- q: a+ B# V' G+ E2 S- U0 I2 H3 N1 _
  void recls(int x1,int x2,int y1,int y2)
7 m4 q& I/ B8 d# P2 L; k6 D! W  {% f- g2 e3 R  `! g
  int i,j;6 C5 G4 s  H, d5 Y7 `
  for(i=y1;i<y2;i++){
  N) ~7 h6 F/ D. W    goto_xy(x1,i);, N9 k. d% k9 h' K1 Y
  putchar(' ');
$ j$ ?- r% w  N- L  goto_xy(x2,i);  ~- Z$ Q1 B0 Q$ z6 ~
  putchar(' ');
' Q1 G7 W2 R4 g  delay(10);
* c- H3 F0 W4 j& j, U  }  i' v* R- q9 p0 ?/ |. O
  for(j=x1;j<x2;j++){) P5 G% P$ m3 O+ S' \
  goto_xy(i,y1);
) T7 _4 x; P/ q5 f+ U. u1 [  putchar(' ');2 {9 ]) d/ ^8 m7 V0 @# x
  goto_xy(j,y2);
; L% r, F. F- R  putchar(' ');& C; m, G* C8 C+ g3 g6 k0 y+ z
  delay(10);
) Q0 E" |$ ?9 i+ h- @( n  }
; m: z" k5 E* e: p  }7 x6 w: v6 e, P4 }
  /******************open screen clear(开屏式清屏)*********************/0 w) r; Q2 I: H/ Y/ L
5 V$ x" _9 N% @0 i! |$ r! D' F
  void kcls(int x1,int x2,int y1,int y2)
9 X% }  P3 u& a( \- V  q  {( a- n) N% w% _  j/ Y& |2 e* W3 U" z
  int t,s,i,j;
& U1 O! [- Y1 F3 L3 r  t=s=(y1+y2)/2;
: J" R1 l/ s" d" c% R! X  for(;t<=y2;t++,s--)
% a2 C& m' x2 d  for(j=x1;j<x2;j++){
4 ~' u$ y2 d, a, p( y  goto_xy(j,t);
+ A" ~6 S' a; g/ Q5 c4 Y  putchar(' ');
8 N2 C2 ~, C9 H; g( ?2 o  goto_xy(j,s);2 v1 n; m+ a3 E* i7 V6 ~/ b
  putchar(' ');
/ d( j. x" f% S) X" u7 V  delay(10);' M( d/ P$ ~! H: r; h
  }
# U) X, Y# j  O# l% ?  [( S  }1 `  c# D2 N% @5 R
  /*****************close screen clear*****闭幕式清屏*******************/
) U5 p! R; \3 H, j* t
2 m* l- t' n7 ]" B4 e  void bcls(int x1,int x2,int y1,int y2)
) H: B% d) i: X8 l; }  p) Y0 {. I  {2 m" Q6 j/ x) k+ A$ E
  int t,s,j;
4 t7 J( E6 e7 G- v5 b  t=y1;
& x- j( q% ^* O% d( S( }4 i  s=y2;
3 N4 T( Y- N8 D* ~  f  for(t=y1;t<(y1+y2)/2;t++,s--)
- I. l3 w) C/ I' y% S; c  for(j=x1;j<x2;j++){
' ~3 e1 j  o+ I  goto_xy(j,t);( Z5 D. D0 a( p# K) w7 w
  putchar(' ');1 ?6 P8 A. X. [" N8 o) h! @
  goto_xy(j,s);. o' c$ w# d% ~4 ~3 K' w
  putchar(' ');5 ~$ ?1 p5 u* r5 X  o# T" e# e; Q
  delay(10);
) z  |1 s  G$ _  }" a: ^* k4 L) Y" W; A
  }% Q2 m4 T8 }7 ~  h) @4 L& t7 l1 {
  /******************bottom screen clear(自下清屏)********************/
( V6 e" ?) j% R' T# W  t: \
% O4 M( j) b5 P" |. M0 q  void dcls(int x1,int x2,int y1,int y2)( V. B4 F$ U# r& N
  {7 ]) k' X5 q2 ~: ^; A
  int t,s,j,i;
+ h2 R3 h( C  S/ _  t=s=(y1+y2)/2;  z* N; Y" c9 _  J6 a$ {
  for(j=x2;j>x1;j--)# s2 \5 b! c/ E2 C8 ^+ v. V- ?
  for(i=y1;i<y2;i++){5 N: Q. v1 f$ P  J# q4 _! ?
  goto_xy(j,i);7 d% H3 M4 ~" \# Y# s% K# |/ |
  putchar(' ');
, i4 m* h7 n7 l& x5 Q1 p  delay(10);
1 N* |. o% v  ?  }
" O% i& d# O% H) D4 D7 I  }
0 {: L+ I( S; }" c+ \+ @  /******************设置光标子函数******************/
( r9 S1 n* z. C/ v" ~; ~; M3 X6 K3 f
  void goto_xy(int x,int y)1 B! K* B. O; ^& M. z% v# m3 m
  {
( y5 H& g  X# y$ t9 e- g1 J  l+ H) [/ M  union REGS r;. `% g+ a! G+ O9 v# l
  r.h.ah=2;+ G& U) G+ i; G) C, |% L1 A9 m
  r.h.dl=y;
  O% K, d0 p) f# C2 d  r.h.dh=x;
: N" M4 Z8 T, r6 x/ q/ a' [# l  r.h.bh=0;, r. E0 i7 K" y
  int86(0x10,&r,&r);7 u; O6 F- y! N
  }8 B+ j. [& I/ \+ r; M3 d

. k9 v" j( C8 ?  /**********************在屏幕上打出一连串的a字母用于演示程序******************/$ ]  v" E& J. l. a3 u% k3 |  X
5 ^" m. f" ^0 W0 ~
  void puta(void)
: W' x. h$ C' M+ i$ N  {
) ], F( I0 z* t" Y2 z0 T  int i,j;- ^9 q. w6 v, i- p
  for(i=0;i<24;i++){2 M& E, |) L+ U1 J- F( s
  for(j=0;j<79;j++){1 h+ T- I. }% N, _; P  c
  goto_xy(i,j);( }  p8 \% O" ]$ ^! j/ G
  printf("a");
6 S, u- m* b3 [& k  }& N! y  H$ `8 \/ `4 _( o
  }
+ ~# B6 j5 @7 s- `  }

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