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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
" L0 o4 g; _9 F. L7 E: L. }6 w# }. c: X  Y, P1 G, b, D
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
. z- B, a4 |% `% O$ V# h5 F: I9 x* p, I4 \5 r
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
% k; R7 C, j1 [  w  H* i3 f! ?* K  子函数及演示程序:3 e. O; ^# @5 B$ d5 i2 V

. P/ w% u. ^1 M: W$ M; z$ s  #include<stdio.h>
8 \+ r- z) @+ `6 `/ v; O' u  #include<dos.h>  |" p3 N% b! x; y. }1 a7 @) {* c
  #include<conio.h>+ C+ K' a- d/ [$ |0 Y

; l8 d0 p. |* g& o  void goto_xy(int x,int y);
2 s8 Y0 H) B) D3 i/ A  void dcls(int x1,int x2,int y1,int y2);7 i8 U: N$ H8 T( v. ~
  void bcls(int x1,int x2,int y1,int y2);
, ?0 l6 \( S* u% a1 J$ q% t4 w  void kcls(int x1,int x2,int y1,int y2);9 u% F  y/ t. b* [8 J2 E( }; z
  void recls(int x1,int x2,int y1,int y2);
) r; v4 u( }8 J" o6 H* l( u  void zcls(int x1,int x2,int y1,int y2);
  C0 T. O( v: q0 ~  void puta(void);
. x* t. z1 a% j( T0 J
  f/ z0 V, A$ U' `
, t0 K' K6 K2 x; u9 I* [6 `  /*--------------演示程序---------------------*/
" a  X/ F% f1 F+ ]  main()
2 }7 `! [3 Q/ T  {
, g- `/ T! B3 }; i8 @4 b' w" C  puta();8 |* {2 g- V1 r8 P0 I; t+ d7 D
  getch();2 ]4 u) {3 w$ J# H& K: L, {; E1 P1 n; ?1 ~
  dcls(0,4,0,79);1 ~2 g6 u" @3 q! e. [6 v; ~' o+ I
  getch();3 f* ^9 |( v/ L, Z- T
  puta();- F6 G: k( z  A
  getch();' A& N7 o) S7 B9 O$ F+ o( U
  bcls(0,25,0,79);* t3 Z8 G! C  u5 S9 P, t
  getch();4 w4 M/ H% t  P: N) P
  puta();3 O% A/ Z* T/ c6 Z# @: R% S& m1 c
  getch();+ u9 |) D$ N" b& f8 F% Q8 n
  zcls(0,25,0,79);
- s1 F9 l; R5 |/ I2 j  U  getch();
2 N0 s2 |, b( |1 n  }
8 |. r1 ]4 c/ e  /*********center clear screen(中心清屏)***********/
0 d' N. o) {: {' S, u5 Z, u  void zcls(int x1,int x2,int y1,int y2)5 a$ I: {% d0 i( o
  {; |/ D2 i; G' D
  int x00,y00,x0,y0,i,d;; d' s9 B  l( k
  if((y2-y1)>(x2-x1)){
  T" p+ L# F* S. A9 P& T; x% ~  d=(x2-x1)/2;" ]. C, Y# m* ?4 K4 Z
  x0=(x1+x2)/2;
* m. F9 Z2 ^' h( r) N: V4 ~  y0=y1+d;3 L; r: l3 [2 O! I2 d
  y00=y2-d;; s4 ~$ U& M: n- E& K2 l
  for(i=0;i<(d+1);i++)
; ~6 a# n6 q" o2 S1 `7 P  recls((x0-i),(x00+i),(y0-i),(y00+i));( a, X4 V; G+ ~
  delay(10);8 ~1 j. D/ ^1 B: D
  }
' j9 b$ r3 n  L# M$ ~  else{  ?- C9 p. J9 A5 c; Y. A0 ?
  d=(y2-y1)/2;
; V. K2 _3 G# o3 l, K, g  y0=(y1+y2)/2;
2 _. Z2 \8 {" w7 u) n2 b0 U  x0=x1+d;0 i8 U8 G9 p) [# @3 W) z
  x00=x2-d;
6 q2 s  D. S6 _2 l$ S( u  j& Q0 K  for(i=0;i<d+1;i++)$ H; {% n3 D5 i; E
  recls(x0-i,x00+i,y0-i,y00+i);
3 G! E  K" q& e( z  delay(10);
" J$ P) J2 \* b6 i  }
% J5 a; e3 ^/ v  }: Z* s( I+ l0 _* }
/ d% w) K# r- D5 Z2 x9 r! L8 A/ h
  /************* clear rectangle side(矩形边清屏)***********************/
- S' Y6 k0 k. G
* h: b9 a7 N' U  void recls(int x1,int x2,int y1,int y2)& o0 [/ u* A; O5 ^# I4 K
  {' I' N7 i% B# @8 Y
  int i,j;- u/ [& a8 y) D7 s$ d3 n! u
  for(i=y1;i<y2;i++){
8 y4 t9 Z/ Q6 _, R! @( U4 A    goto_xy(x1,i);2 I5 X/ ?2 K# _
  putchar(' ');+ {2 o0 g0 y3 W+ B1 Y5 w0 @
  goto_xy(x2,i);2 V3 i/ u; _! b; N$ `6 l
  putchar(' ');! n/ a8 I/ J5 c( i8 }- T$ a
  delay(10);" o" P% z( @- s2 c# ?6 ^
  }
* o9 g) n: E9 z) y  D4 V  for(j=x1;j<x2;j++){  M5 |2 x* w- t. r+ r
  goto_xy(i,y1);6 Z* I0 p" Q1 L
  putchar(' ');5 |% y+ H! B. t+ Q( Q
  goto_xy(j,y2);
6 J- w( @5 f. L9 ^  W  putchar(' ');/ t6 |$ e. Z+ ]/ O. l- |
  delay(10);
# o3 y0 U  }1 E. D3 v: I( ]  }  o% a4 C4 X( `, `: D* {
  }* {8 `8 |  W# _2 L* M' ~
  /******************open screen clear(开屏式清屏)*********************/
: P, e' T, J0 w+ `& L% W+ m4 ]$ d) t- Q; m& P# L
  void kcls(int x1,int x2,int y1,int y2), J. n' \8 ^' Z" }* X% _: H
  {0 O1 I  L0 f- J- f
  int t,s,i,j;# |4 P4 I+ q5 R1 r
  t=s=(y1+y2)/2;) L: L9 a$ X* h' l1 I& }( f/ h2 G, q# t$ u
  for(;t<=y2;t++,s--)" {* l+ G0 b1 T" Z
  for(j=x1;j<x2;j++){& c' g: Y4 v1 m
  goto_xy(j,t);) J3 S: Y' Y, [% }- Z) H6 U
  putchar(' ');
2 c% u/ D' M; r: V9 E  goto_xy(j,s);
% \0 X( u* Q7 A+ p  putchar(' ');' r) Y* g+ _, {3 G
  delay(10);
9 P4 P2 M) T3 d* x9 G  }$ h2 ]: H, R# J; V- u' Z8 `
  }% e% b$ V# D2 ~& I
  /*****************close screen clear*****闭幕式清屏*******************/5 @; q: Q3 T" K* j

0 a3 G$ J2 Y3 c# E5 m  void bcls(int x1,int x2,int y1,int y2): ^8 ?, F# S: m1 t/ f3 d
  {
" X6 o# a9 w0 y9 v& U4 I  int t,s,j;
7 e1 G/ J2 S  [4 h) ~+ J  t=y1;5 e3 E2 }3 {8 s, {4 O
  s=y2;3 b9 F$ w2 L* R8 }
  for(t=y1;t<(y1+y2)/2;t++,s--)
$ z+ x4 h/ y3 \5 ^  for(j=x1;j<x2;j++){0 s* r  v+ n' x- |' V- N4 O1 l
  goto_xy(j,t);4 V2 P4 r5 J  Q7 x) G% N% C
  putchar(' ');
/ k3 W7 X! I) q0 `  goto_xy(j,s);
8 ~) N9 ?# @8 K5 x  d! J( z' G1 g  putchar(' ');
" z" l: M- ~, b/ b4 J) f  delay(10);+ w# R! [$ p1 k0 N9 D2 E
  }; V8 y$ H  K: G( c  ~
  }
8 j: W& J" X4 o. b" {' R0 }  J  /******************bottom screen clear(自下清屏)********************/
' J; C5 _$ R: k: H: M- v5 E1 s* O
  void dcls(int x1,int x2,int y1,int y2)
6 [, r$ T& a5 S! e( T& A  Y" J9 W7 x! w1 J  {
* [4 b. w+ [4 g: G  int t,s,j,i;$ P% h7 c7 b% y6 J- s
  t=s=(y1+y2)/2;
" j; a+ w9 L+ k0 z1 R) e  for(j=x2;j>x1;j--)7 f* @/ n7 I2 ~
  for(i=y1;i<y2;i++){
( \4 b7 D% f3 o5 y! \  r7 ?) W! s  goto_xy(j,i);2 N0 E+ R( ^9 z8 {; }6 i' W9 U' D
  putchar(' ');9 K7 o1 r4 v( ?! P
  delay(10);
$ x4 \3 s$ [7 R, x- B+ X; [2 A  }2 k+ K5 ?* R2 f/ `/ j; p4 u
  }
+ `2 I. B# o/ q3 ~  /******************设置光标子函数******************/
7 |" F' \% U0 f: @. q* t* B/ h: g' ~. m, F# p9 I
  void goto_xy(int x,int y)" @9 a: w9 O$ b) o/ k
  {
4 w; Q+ q. s9 e, _, b7 e  union REGS r;
: C8 g5 k# G: J9 b  r.h.ah=2;
. B' I$ }: v# y2 z& D  r.h.dl=y;/ K% D# d% _$ i  M
  r.h.dh=x;
7 I' @: R" X$ i' ~& o0 L* A  r.h.bh=0;
0 B" R& l" V9 ?; n: }3 R4 U/ F  int86(0x10,&r,&r);. }6 q, R( a4 v6 T* p/ E' }# V
  }3 ]2 @: P( [& E2 K3 w* g2 N

8 {% w  Z6 \( d9 E  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
3 G5 F4 q" u, Q0 v8 A" k9 r" k* g( B6 v: z1 j9 }, A# `$ Q& b( H
  void puta(void)
+ G1 K8 X; w3 C! Q) c1 I" O  {2 e9 G$ z% {& r8 I/ D! ^
  int i,j;
  ^4 b2 e7 h! {& n' F' U- A; ~& t  for(i=0;i<24;i++){
! h! }9 i* H4 e+ ?  for(j=0;j<79;j++){6 e. D0 P1 h0 ^5 U$ f' ?$ W2 W. [
  goto_xy(i,j);
5 }- V! @* y) {; N  printf("a");: w9 m1 W( s6 `
  }
, A7 X" y6 Z! q5 ?  }
7 Q: {) f8 E3 `$ |+ b1 g$ U2 b  }

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