Board logo

标题: C语言艺术清屏 [打印本页]

作者: zw2004    时间: 2008-1-21 17:14     标题: C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,- j5 D, c& }6 m, k) O
3 h7 L7 W7 {. b6 h& G  d
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
5 d5 m4 e$ _- m! f" Y8 O$ e# p$ W# A  D& G: I9 P2 g! b4 o7 S3 s
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 1 W! ~# Q, m. _0 B3 J: V- _
  子函数及演示程序:3 ]+ f/ b! G+ l+ n( o! S
, P! Z( U, y0 s5 A( K7 t
  #include<stdio.h>
) W  J% w" L, x- `+ P  #include<dos.h>. u  m+ k  Y& N9 z
  #include<conio.h>
6 m$ R" O- P( q' d2 x
0 L/ d; c5 U! D1 b; K  void goto_xy(int x,int y);6 V0 h) s; N& o
  void dcls(int x1,int x2,int y1,int y2);
5 S& ^, Z: s( M2 z$ {  void bcls(int x1,int x2,int y1,int y2);; z8 [: V1 n1 L+ \' o4 @' A1 i2 E
  void kcls(int x1,int x2,int y1,int y2);$ Y9 ^+ ]: \. s+ p6 {2 \
  void recls(int x1,int x2,int y1,int y2);
7 l" \0 b, a* h" ]& y2 s  void zcls(int x1,int x2,int y1,int y2);
8 Z. r  N+ L. a- A- v1 a  void puta(void);
9 s  n5 L+ Q: Z$ [; [" A
- G( _' a- ~/ y9 t
- T) B* Z( y- W% s  /*--------------演示程序---------------------*/
- M/ x" A* D: Q  main()8 ], `. P; x4 q% N# m
  {& N+ z! x3 O4 R* N( G
  puta();
& r6 i) R$ V9 a  getch();! i7 P0 t+ }% h2 F# T; T  S
  dcls(0,4,0,79);# x9 e2 D$ M0 e% X
  getch();
2 R& w4 M5 X6 w( Y# z3 u  puta();
' Q; a3 M5 v" r: a  getch();
: L; m# \/ i7 O5 \  bcls(0,25,0,79);& y7 _/ R& ]; Z, `7 R& D3 W  w# R' M
  getch();9 }- e7 d& O9 K* L* c" k
  puta();5 H3 G0 Q9 l5 w
  getch();& K1 Z3 {+ z- y( |+ g8 Z- C1 S
  zcls(0,25,0,79);
' Q4 U+ s, t: z, Q  getch();/ c0 F8 E6 S; O! I$ P+ f& h: l
  }5 v/ G; M) A+ K& p1 _7 ]0 M
  /*********center clear screen(中心清屏)***********/
7 @: k* _$ T& E/ J5 q" L. A  Y  void zcls(int x1,int x2,int y1,int y2)
1 T+ M) R, v# H# V3 N  {
  _" Q1 k4 m# T  int x00,y00,x0,y0,i,d;
/ G- c9 Y- l+ p1 F7 T: x  if((y2-y1)>(x2-x1)){
/ ]& z) a/ x& C0 C! k& j0 Y5 U6 q  d=(x2-x1)/2;! x' q4 |# I$ B8 A! _
  x0=(x1+x2)/2;( L5 I7 I+ O0 e  _
  y0=y1+d;
6 u9 D3 Q# S- x  y00=y2-d;
# C2 Y" u6 h0 q6 s5 m1 m9 P  for(i=0;i<(d+1);i++); Q3 _& ~6 V" j! Z; ?' A3 v
  recls((x0-i),(x00+i),(y0-i),(y00+i));
' P1 L, \! C* N8 s9 K  delay(10);9 d: b1 l% r* ~( Z1 T& d! T
  }0 x" e; k( t' S* k* }( t0 R4 ^$ k
  else{) H* C1 l7 S) E# u# m3 {7 ~
  d=(y2-y1)/2;
6 L% X3 h4 i$ [2 A9 X  y0=(y1+y2)/2;- O" F2 L4 n, w5 T5 L) h) K
  x0=x1+d;/ r- K1 S: P2 }3 e3 Y6 ]7 f! b" h
  x00=x2-d;" n8 @4 {* o# I
  for(i=0;i<d+1;i++)0 T1 g) N. H: H- D
  recls(x0-i,x00+i,y0-i,y00+i);
4 e& M0 l3 _5 M% m" V5 O. Q  delay(10);" Y+ j5 _2 T9 ]  N8 }7 ^3 b  p
  }9 C& P( t' m, B! E4 A& n1 q
  }7 `" T$ j2 ?9 T% ~8 q) b; m+ ]
% X' c" O, ], z: @" o; S( q/ `
  /************* clear rectangle side(矩形边清屏)***********************/
" |- {% g* j4 E. H7 q( i3 B% ]8 M) _& o- ?0 t# s/ ^: f
  void recls(int x1,int x2,int y1,int y2)
7 x% l, q  O' z" R, G  {
& u) ]6 }) g6 c- E( \$ v2 k( i4 W  int i,j;: ^1 Q( g' J9 q
  for(i=y1;i<y2;i++){  M" E2 [* ]3 F7 [9 i
    goto_xy(x1,i);
/ o) r3 ^0 ]8 @- h% Z4 V( A  putchar(' ');2 F) `- r0 e4 A( H" {9 Q9 S# _
  goto_xy(x2,i);* t( P5 {1 D1 b4 \  U3 ~9 z
  putchar(' ');$ ~2 o2 Q7 B& w3 ^( T/ E
  delay(10);4 P& q, d+ G3 ]5 M6 a4 {
  }
5 d! s+ S2 \+ r' E6 _8 c/ v  for(j=x1;j<x2;j++){
5 F' v! G6 v. `9 R, J# ^  goto_xy(i,y1);4 Y- W! a+ @2 F, H
  putchar(' ');
: N& M* [" M( \6 b# j3 D+ L  goto_xy(j,y2);
+ S" C, r2 r0 N( r5 J  putchar(' ');4 s8 D4 H/ j# f: T( K6 I0 s  a
  delay(10);; O6 Q4 |, t: ?5 {) }
  }  T2 g6 }6 |) ~6 u1 x) R# b
  }
0 s7 H. x4 c; T6 w, F  /******************open screen clear(开屏式清屏)*********************/
0 y, g* [4 r9 a, y. B% b1 C2 I3 M
3 x% D. b( G) d2 N4 w  void kcls(int x1,int x2,int y1,int y2)
; J9 h. i; T, E# I  {
. F' G5 j* w& b: D  int t,s,i,j;! a7 L9 y4 X. k  j- N: ]* l1 ]6 {+ q
  t=s=(y1+y2)/2;/ U, Y; i* ^. W1 Q7 d) r& t/ c
  for(;t<=y2;t++,s--)& T' Y4 R6 j, [' S
  for(j=x1;j<x2;j++){
8 c; t' `. b6 J& J( o; Y9 `  goto_xy(j,t);
8 A) G. ~" A  j# n/ a$ k! n  putchar(' ');7 Y; Y$ P6 X$ r0 T: o
  goto_xy(j,s);7 k6 C" N& k3 ~; h# M$ w( e
  putchar(' ');8 A8 ^3 I* F0 \$ [7 M8 E  E
  delay(10);4 U  W1 T1 T1 V0 H* ]
  }
. V: x1 U8 F1 ]: a' Q  }+ P/ {7 M1 E$ y3 Q+ }2 ]% Y7 p3 Y
  /*****************close screen clear*****闭幕式清屏*******************/
& k5 U3 q/ h3 \9 c( h3 v- }3 ^3 l/ }& T" {  r, Z0 Y! F  [
  void bcls(int x1,int x2,int y1,int y2)
3 c$ O7 x! |5 @/ h% z  {
# F6 \+ b& a7 f% D$ x  int t,s,j;
& F$ o+ w- F5 O) c# C0 w# e* z8 Z  t=y1;
2 |* ^1 ]+ Y6 C. V4 F& i  s=y2;0 E! ?7 A0 d0 O+ L$ f3 P) S
  for(t=y1;t<(y1+y2)/2;t++,s--): p0 Q  X; B( t& M* q
  for(j=x1;j<x2;j++){
& I& e/ C: B2 b5 y* e  goto_xy(j,t);# i) R" s+ t4 E. E+ a! \3 |2 g
  putchar(' ');
& G* R$ U3 r3 l  goto_xy(j,s);0 m6 Q& }' }: {# r2 n0 ?
  putchar(' ');9 L( I4 F5 q2 m6 F! d/ `6 |
  delay(10);
% X& q/ m6 O* G  }+ c4 ]$ |; W9 I' S% S0 W# E; d
  }# i: k. d0 U4 |) w! q% E/ w, b
  /******************bottom screen clear(自下清屏)********************/
5 V$ v* i4 r4 O3 R0 I/ p9 R. ]; @: _  k5 b" v
  void dcls(int x1,int x2,int y1,int y2)
' n+ Z4 x) V( h$ J! z  {" Y! E/ [' o- ?7 }  S2 q; |* Y. q- F
  int t,s,j,i;
6 b  l: k0 Y5 ~: @& w; O. s  @- d8 l  t=s=(y1+y2)/2;! k3 ~1 g7 R1 n8 H; K7 F
  for(j=x2;j>x1;j--)( g1 g, E5 L6 |2 }( r4 E7 h& U
  for(i=y1;i<y2;i++){# `2 Y% ?# }  ]+ T: e, ~
  goto_xy(j,i);+ B0 K/ g- j  u& j$ {6 s7 Q5 D- [8 o
  putchar(' ');+ j3 O$ j2 I# t7 O; ~
  delay(10);* `; }$ f+ I# X2 w
  }
4 v8 w$ T  X6 W/ G% M5 q  }' X0 H: Y8 Z- D. ?0 I1 V
  /******************设置光标子函数******************/8 K/ W' _. Z6 i$ p0 O( G! B

2 C1 M; {( O& |2 X9 T  void goto_xy(int x,int y)
% }6 a. g! S% k' S' }  {
( U8 a4 e: k9 I/ A( b* [  union REGS r;) |* b4 \  w) R
  r.h.ah=2;
& ^) Z& z! G1 o) B  ~  r.h.dl=y;
8 l' I1 E* `3 s, C2 b+ J  r.h.dh=x;
* d, f( C: r0 h% |  r.h.bh=0;' c! d' }3 ]% N4 q
  int86(0x10,&r,&r);+ W- U$ }( j" }7 D2 x1 k
  }( S# ~6 Z1 q9 G

# {, _% b5 X5 y- X6 {  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
! X0 o, n% }5 V1 r: T8 ]! B
3 I/ w+ Y! p! E; p0 N" u+ Q  void puta(void)0 \8 I6 h5 M- W) `
  {
/ e' `9 E( z2 H, b  Y  int i,j;, n4 H8 T% q2 X) O. {* ]/ X, P
  for(i=0;i<24;i++){% b' O) Q( s% e0 S, C, K6 O
  for(j=0;j<79;j++){+ s$ V+ `2 {! V0 ^& [8 U* o
  goto_xy(i,j);; A, ?6 \! ^* N( F+ ^7 W7 h) I
  printf("a");3 x. H; k! o( P* b$ D8 M
  }
7 ~+ d9 `( z3 K2 V" B  }
5 v% r3 h1 {. ]  }




欢迎光临 捌玖网络工作室 (http://89w.org/) Powered by Discuz! 7.2