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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
( b5 ?6 A. c. l2 f0 O& \1 a6 q9 ^; ?9 G' }4 C" z; \3 J
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
- d" \$ x. A" g8 a. ]2 \) Y# s( H$ |: H% L$ y
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
: a0 C- r7 G- Y( c4 P; Y- m' H; D  子函数及演示程序:
0 M* u, N( r8 q+ Z* X% }$ }. u8 o8 N% f& Y& F
  #include<stdio.h>0 i8 C% n& e% g* L
  #include<dos.h>  S2 k. d$ E9 P* c" E9 I0 ~
  #include<conio.h>
# r/ }/ {! @, E1 [8 `' ^7 H: P
2 v: s$ a$ y) J- Q. J  A, @1 t  void goto_xy(int x,int y);
) W/ q( Z# u# M7 W; Q: X* B  void dcls(int x1,int x2,int y1,int y2);, Y/ a+ m5 l3 V7 d
  void bcls(int x1,int x2,int y1,int y2);& A2 d* @: J* o( {: b$ x7 n: P
  void kcls(int x1,int x2,int y1,int y2);
0 i: R2 ^/ M) \  void recls(int x1,int x2,int y1,int y2);
" _2 y  `( h( `% f- i  void zcls(int x1,int x2,int y1,int y2);
6 z3 ~4 [: B. E8 l! `4 f; G  void puta(void);
, I6 N4 i# l; n$ H
2 G8 l" [1 [& S' w2 R5 N+ n1 h2 p( F5 N
  /*--------------演示程序---------------------*/
; y* \/ |  G5 d  main()
! t  f0 `7 g- Z# n2 a% ?  {4 L+ e: k! v* Y! b& k
  puta();
. ^. D7 Y8 D' x! o8 S2 T$ Q  getch();9 @% g! f0 I0 p+ ^$ ^
  dcls(0,4,0,79);
( ?4 h) L8 x5 \6 i4 m  getch();
3 q! g/ I1 L4 b9 G  puta();. x/ Q  C+ Q0 O$ p/ ]( l
  getch();
! j# ~% y- Z9 A" T1 y0 e  bcls(0,25,0,79);
5 p/ M9 j1 q# n. @$ y9 Y3 m( E8 Y  getch();; t; z- j) U0 x4 X* p5 J3 [
  puta();  {) U) {4 A9 ]% ~: u
  getch();
( R1 X6 P$ k  R3 K; U& @6 V  zcls(0,25,0,79);0 e5 X! @% p# o9 b( L6 @
  getch();" o& |  U0 J# [! o9 t- _
  }
' m. I- r7 n9 R4 b$ N  /*********center clear screen(中心清屏)***********/2 i, h6 R# L$ a; ?  g% e- J
  void zcls(int x1,int x2,int y1,int y2)
" L: q( K, v9 \( G. F  {, p; @& N# Q2 K" k- e
  int x00,y00,x0,y0,i,d;* w3 d; Z  E. Z( e5 `
  if((y2-y1)>(x2-x1)){
6 x* |- }2 M; J8 T/ h/ p6 I) P  d=(x2-x1)/2;, I+ s( n2 [. d1 ^
  x0=(x1+x2)/2;
0 C8 Z5 T! i( U8 w3 C& U' R  y0=y1+d;
3 W0 }1 ~4 G7 W) j$ ^- h0 @9 E: p  y00=y2-d;
/ f& f. Q, o' M; i, I  for(i=0;i<(d+1);i++)
3 m/ X+ F3 G! f2 n2 x" z  recls((x0-i),(x00+i),(y0-i),(y00+i));0 ~6 d# p% Y: Q; ^, _+ u# q* }
  delay(10);
0 D( N+ T' a" Z; D0 m8 A  }2 \7 K: T6 C4 ]! w. e
  else{$ `, g$ z  {% ]' @: {6 t. J" S" b$ p1 l
  d=(y2-y1)/2;
) Z9 a* Z9 e7 t" J& ~0 n  y0=(y1+y2)/2;
4 ~9 ?; V3 ^2 @: s; R. x0 O  x0=x1+d;3 ~* T) K( }% Q1 Y, T3 @
  x00=x2-d;
  q+ B7 X4 o7 [% G: ]( {  for(i=0;i<d+1;i++)2 K# w/ a" z6 r$ q
  recls(x0-i,x00+i,y0-i,y00+i);4 V( l7 X; C6 f$ P+ c/ x
  delay(10);
; M5 F) Y$ ]# ^( n3 ]1 f  }; s5 W* w2 N; a- [# |/ ]* ]
  }
3 n( J6 d0 b1 _& q" m
/ `7 R/ Q! y+ O  /************* clear rectangle side(矩形边清屏)***********************/
8 L, g- R2 A  W- O4 f4 J5 L( b4 \2 r9 l2 @6 I
  void recls(int x1,int x2,int y1,int y2)2 Y. \' N1 \7 d: ~! o: u+ Y
  {
: v4 P8 @2 d! f% h  int i,j;' P3 F% j) c7 l4 E1 ^/ r- S& d
  for(i=y1;i<y2;i++){
8 u- V; h' ?% E/ ^0 C    goto_xy(x1,i);$ r+ l% d! ?% ?0 p1 P7 j
  putchar(' ');
0 c/ _/ b1 v4 F  goto_xy(x2,i);: }! }& a# m( P
  putchar(' ');
! L; C' u% x4 y; I9 t' M& C( B  delay(10);
, g7 P, D! u. P  x# v  }
% z5 u! O8 p1 ?7 _$ k+ s- o  for(j=x1;j<x2;j++){
& A% S4 O/ B) [. L! E  goto_xy(i,y1);
# {+ P: ]! d2 \  putchar(' ');' k- K7 C# m/ L3 y( {
  goto_xy(j,y2);6 P8 P0 F2 ~- B/ i1 O* r
  putchar(' ');
$ \) n& V$ J8 c  delay(10);$ U) v+ q3 Q$ x- J5 C  V9 Q! M
  }- W& I) N' {1 {
  }* P2 ]  J: o. ~" {, R
  /******************open screen clear(开屏式清屏)*********************/; T5 |4 Y" ?9 `

6 C5 U  [9 z. _- Z. J) s1 ^4 e  void kcls(int x1,int x2,int y1,int y2)& v! F8 u/ w! |5 [6 n" l7 T' T
  {+ w7 @8 L8 n" r- b* O& B
  int t,s,i,j;" q, W! B# b* f$ M
  t=s=(y1+y2)/2;3 y0 r$ s/ Q# Q) o/ [* b
  for(;t<=y2;t++,s--)
, h) ?/ X$ q+ l. |6 l) D6 l3 E  for(j=x1;j<x2;j++){
/ t$ k: ~: @! z  goto_xy(j,t);
1 u5 j9 U" }- w- V" _% Q  putchar(' ');' T$ K; d) ~+ h; V8 }7 h# m
  goto_xy(j,s);
4 E& u& u! C8 d  putchar(' ');
2 ?3 {& m1 ~# x6 Q  delay(10);
% e5 J/ O" a# \& O9 d: \  }
5 W" g) W) b# Y: a% k; C/ n  }! z- {' w+ C! [4 `
  /*****************close screen clear*****闭幕式清屏*******************/
* Z  ?& L) F9 P6 S4 Z& \- n- n! W) a. K* d& f' @
  void bcls(int x1,int x2,int y1,int y2), U( _$ Y" f! k" K6 A% v
  {
2 |" S" d9 D: ]1 z+ _2 x& w  int t,s,j;
9 S7 H6 Q4 I1 H' x& G1 {8 b% t$ Y  t=y1;
2 I- z4 O1 R6 C, e, C5 h! L  s=y2;- Q$ g# O, U# ]) O5 x" ~, }) Y, P
  for(t=y1;t<(y1+y2)/2;t++,s--)
# z* O5 e  r: ]& v  for(j=x1;j<x2;j++){
. k; _. Y9 F2 O! P( m6 B9 I3 h  goto_xy(j,t);- H6 U) c( X0 M$ m7 s5 S! w
  putchar(' ');( C- w+ }' i% E( E% }
  goto_xy(j,s);
* R- w8 u1 T9 M  putchar(' ');
# G- I1 ^6 @1 ?- }- ?0 n  delay(10);2 @$ z& b% M$ `" d. ?0 H% w3 P  Q
  }% {. w: e' K2 Z' y1 H  R+ i3 \& T
  }; s' H$ Z+ s; t& X$ K0 f4 u
  /******************bottom screen clear(自下清屏)********************/
. @0 j$ c. x; ?4 Z; M1 R. k! m  Z  l' U
  void dcls(int x1,int x2,int y1,int y2)
$ a  k& j; J2 M  {
& [: Q! d. ^% j  int t,s,j,i;
& T, N# u2 @' }/ w  t=s=(y1+y2)/2;
7 I8 J( e6 b- R0 P. _  for(j=x2;j>x1;j--)& h  g, x  s7 D1 S# Q7 Q9 I
  for(i=y1;i<y2;i++){" n$ R+ ?* D6 T6 |2 Z, n" k
  goto_xy(j,i);, Q) u, }/ ]4 h, |$ I
  putchar(' ');
( }/ _4 h7 j$ X6 D$ t  delay(10);* p2 ?- Z3 o; X% b
  }1 M5 b! \# A' z* o" p, ?6 U
  }
" S3 J) J2 ?6 t: R2 x; f  /******************设置光标子函数******************/3 v: P0 ^( Z. ^9 a

( \  w5 l0 I, m9 u0 m( v& _# u  void goto_xy(int x,int y)/ |8 p/ i: G( k3 c/ r- F9 ], l
  {
% Z. d% G6 _/ [2 d, ?  union REGS r;
% _+ r+ |+ N3 \( e: g! C8 T  r.h.ah=2;
5 u" K  {/ U/ g" P& R" q% U4 R  r.h.dl=y;, z" p" G4 n! Z
  r.h.dh=x;
' z9 W' f) C8 m1 `  r.h.bh=0;
! v* W0 h; l4 g" \5 z' W% A9 c, A2 }; T$ o  int86(0x10,&r,&r);
1 C3 g6 K& |2 A+ I& g  }6 h+ P0 j% I3 z# w6 D9 O

; m5 o) F- f: G* Y' E) t8 ]% Q0 c  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
) Q: V! ~7 W9 ?2 [9 X! J9 W/ o2 D( |
( y4 `* l. I1 C( K5 x) L' _) P  void puta(void)1 }  W* B3 C- N, h0 {
  {
9 ]' q7 l( K% v" }! V* }7 U  int i,j;0 x5 e1 r1 A7 ^# `! V8 Q
  for(i=0;i<24;i++){8 I3 B' p* C: R! x7 I7 X) }
  for(j=0;j<79;j++){
3 k' j  L9 M5 ^: b3 A; X% Y$ l  goto_xy(i,j);6 p9 s- e9 x- M8 U+ W! S* ?$ A6 V
  printf("a");
; Q# g) i; A- o) d- I5 P- ^" \  }: q0 e- W1 Z/ t. n' q/ K& k! P' {
  }% b% ?5 }+ X2 \9 V" X
  }

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