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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,$ p  }' q) s; c

( p& V- _3 K% Z  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里/ @/ h6 `; M3 }8 B* N
! }3 k: f! x1 `/ a
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. + s( A5 o1 S3 u9 c5 e6 T! j
  子函数及演示程序:
- W9 D! u% J/ }
7 l2 {3 @, o( Q  o1 h7 D  #include<stdio.h>
  w6 w7 [7 K3 d$ k$ R3 q6 j  #include<dos.h>
8 x. g; c+ U& a) }! A0 n  #include<conio.h>$ e2 ^! {5 ]# j2 D" @* m' I; r

6 K, _! ~5 Q3 [! ^# v) B- g6 |  void goto_xy(int x,int y);% K! L. o2 r- @( s
  void dcls(int x1,int x2,int y1,int y2);
2 h9 |" ^' w- ^; {  void bcls(int x1,int x2,int y1,int y2);
! f1 w$ @1 _. ~" R9 ?4 r+ [! ?  void kcls(int x1,int x2,int y1,int y2);
& }: t3 P9 l/ J  void recls(int x1,int x2,int y1,int y2);" Q# s: j2 W* U4 Y* S$ S0 L& P) I! Y
  void zcls(int x1,int x2,int y1,int y2);5 T1 \  L6 J* \8 ?7 S
  void puta(void);
1 X" [  O0 ?& u; ?2 t$ Z, p
* Y- R5 |; l* t( D$ \: r/ C) Y. {+ L2 U7 o. D% o* J$ m, j0 [) L( }! j
  /*--------------演示程序---------------------*/$ n) h! L1 b  o% |
  main()' m1 ~. `& N- M
  {! M( l" g, z, v9 W$ f
  puta();% ?3 I4 Q* G6 z! u
  getch();
/ v* f  Q- v# `/ U6 V3 r  dcls(0,4,0,79);
& E/ E& M+ U( k( ?  getch();
( o7 N) _0 n" {  puta();
! n9 m$ s, X9 @3 ^& z  getch();( o5 ~: x0 c" E6 \
  bcls(0,25,0,79);
5 u* \7 T7 B* R4 F' ~  getch();" H( _9 C2 y; Q  g0 _
  puta();, o( y; T, l! H
  getch();5 P' N1 r1 Z0 p( c! n" z' j; k  C
  zcls(0,25,0,79);9 `& E0 g6 u0 x! s
  getch();$ P6 X3 W" e& u! |/ T
  }
. S: C. }9 L# n8 }& ~  /*********center clear screen(中心清屏)***********/
% n7 F+ k* G4 I( h  void zcls(int x1,int x2,int y1,int y2)
7 ]2 l7 e& U$ @4 l  w$ S8 j% Q  {8 W$ c+ Z! X9 s, f' o  l
  int x00,y00,x0,y0,i,d;  w5 z  X2 l1 m- j' }$ r* S
  if((y2-y1)>(x2-x1)){
( n9 X. A2 ]- ]$ D, @4 H% t  m  d=(x2-x1)/2;# h$ |: w6 I5 w! r
  x0=(x1+x2)/2;
9 Q6 J; Q) \1 ^, V  y0=y1+d;
* ]/ U1 l5 j6 V' K( Z5 p  y00=y2-d;  r% S/ p( |1 x& [) {7 g8 j0 G
  for(i=0;i<(d+1);i++)
3 u+ b0 L  F  I" D  recls((x0-i),(x00+i),(y0-i),(y00+i));
, x$ e. A( K$ |% u  delay(10);+ M  o8 ]5 Q( a" ^% g8 ^0 M
  }3 v% e$ O/ X3 \/ V8 f2 Z& H& t
  else{
$ B, Q4 n. j, b! M& Z! X  d=(y2-y1)/2;
4 g% g; w8 V; j8 X* O  y0=(y1+y2)/2;
# g; U* `8 r) S  D  b% {3 v  x0=x1+d;  d7 U  j  V3 R) G/ D4 }( I
  x00=x2-d;$ b- s/ r" b- [7 Q, K/ L/ z
  for(i=0;i<d+1;i++)
1 H, w; F8 t; Z  recls(x0-i,x00+i,y0-i,y00+i);0 x( A7 R( S3 U' c% I
  delay(10);
! m9 e: [6 r& I  }
1 ~( [( i1 N# ^+ l) N, w: H6 h* ^  }2 K( s: |8 H# n. ~: C% `, @* h! H8 s

8 d' J5 F& E7 o  ^* d  /************* clear rectangle side(矩形边清屏)***********************/0 D$ t& x: B! N8 z* X5 h
+ [* s8 S/ }( \9 v; q" {
  void recls(int x1,int x2,int y1,int y2)) p5 i. t1 E8 k/ Z! f  }
  {
; z- ^# X+ x, z2 x+ b% G. l  int i,j;7 K7 x& R5 O0 B9 d( P
  for(i=y1;i<y2;i++){
- M4 r6 Q7 v6 T7 h    goto_xy(x1,i);& B- c& {( n% ?% q7 Y8 s3 P
  putchar(' ');
7 Y% X% _7 \4 M7 H9 Z+ G3 C9 ?  goto_xy(x2,i);
2 h( K" O5 D0 g% T# i& H  putchar(' ');. I" j. |4 F7 I
  delay(10);0 G! |5 q  \* |7 w- o" {. _
  }
7 x3 H+ b- B' H7 P# N/ {  for(j=x1;j<x2;j++){& t/ s' c0 N+ t
  goto_xy(i,y1);! p8 l& J) |5 W* s, {$ e3 f
  putchar(' ');
% }) ^% K  M+ V) I$ A. M- `( n  goto_xy(j,y2);
  H0 o: b( O3 V- j2 i. a+ b  putchar(' ');+ J3 u$ x, R/ u7 U
  delay(10);
8 a" i% d& ]- e- s' V; q8 i: v  D0 [  }/ m3 A3 Y+ g& \( [, F
  }
0 O0 N/ T: c; `1 e3 u. @$ K9 G  /******************open screen clear(开屏式清屏)*********************/
# S3 p4 `0 h+ Z4 |, B* A3 h4 T8 ^/ N/ `3 G$ _% ]
  void kcls(int x1,int x2,int y1,int y2)
  F# b/ A" |( O* E; a  {
) m2 e% R) K7 C/ E0 ]# j6 K  int t,s,i,j;
' f" V# d1 p& g, D) T  t=s=(y1+y2)/2;2 Z  s- t2 H* E
  for(;t<=y2;t++,s--)& p, ]* j4 x' A5 Y3 ^3 R" [
  for(j=x1;j<x2;j++){
4 e3 [  w: s: g/ Y( P6 [  goto_xy(j,t);% T8 P5 J( Y$ z9 H2 p( S6 ~2 G
  putchar(' ');: u. \/ b/ |' W% [
  goto_xy(j,s);
; \( q& `2 V# G- o  putchar(' ');5 F$ @7 u1 \+ s7 u/ {
  delay(10);  U, v! D5 g3 y- K, t: q; `
  }
8 M- f2 s* l/ D1 o' f  }
3 m$ y' n$ @( E8 O) c, J$ U" P* @  /*****************close screen clear*****闭幕式清屏*******************/: Q2 ?* Q5 _$ c; s
6 r4 O8 T; ^, \. o7 j
  void bcls(int x1,int x2,int y1,int y2)2 o$ O8 l" B# h! |
  {
9 o- a7 F7 \( q/ Z, l5 [' a  int t,s,j;9 O/ d# C+ c  i; s; b3 r
  t=y1;9 l: N3 `2 ?* ^
  s=y2;
1 @1 E8 O6 v7 g# r: O, d  for(t=y1;t<(y1+y2)/2;t++,s--)4 @% z! o6 S! M5 w& k& N+ Q. S
  for(j=x1;j<x2;j++){
9 `, f7 M  y8 W" f6 c' l- S/ x  goto_xy(j,t);4 @9 A, \& v8 w2 H3 N% @: j6 p4 F
  putchar(' ');
: F3 L/ ]4 x, o5 R) \; W  goto_xy(j,s);# @5 ~. u) m. D! H
  putchar(' ');
3 N; n2 u: ]0 |6 j" r  delay(10);6 K: L- x/ v  K6 {
  }: p) f/ O8 i& N6 l& }; |  }
  }; k% I$ B3 y4 K! `# c" W
  /******************bottom screen clear(自下清屏)********************/
3 o: H( ?: ^! X; g7 q0 E, j7 ^
6 k. R7 k5 B, x  Z# i; o; T  void dcls(int x1,int x2,int y1,int y2)
0 @. h& b& `" e6 K  {$ L4 U" j' {4 R/ [
  int t,s,j,i;
! h$ ^  x  N0 H7 B! H5 w/ O  t=s=(y1+y2)/2;+ ?% v3 |( @4 O* F: o
  for(j=x2;j>x1;j--)( V7 n; T: s% T; N; Q3 i( g
  for(i=y1;i<y2;i++){
" _  A' T0 ]9 l# B: r9 n5 i  goto_xy(j,i);
: `. f( s. N& y; |9 q5 `' b9 g  putchar(' ');% u' M5 R* c, T' g# o2 K
  delay(10);
8 G9 N% y6 M5 D" _, J$ S! }. n  }2 N2 o( d/ L/ v" Q( ^
  }" f5 h# e& U) u; `! X2 `
  /******************设置光标子函数******************// I# `% a8 l+ ~/ s( E0 \

% J# z# I( @. e  void goto_xy(int x,int y)+ p, t9 O& k2 \9 \& I7 T
  {% q. q& ~, T2 t- s! U% \
  union REGS r;
5 \$ B; C, K: x5 e7 @; D  r.h.ah=2;* n; u* N) R0 t4 w
  r.h.dl=y;
4 z* w, \6 m* l5 z7 T& w. D  r.h.dh=x;& U! R( _: s# P5 d2 m
  r.h.bh=0;
' L; H5 ~5 F% f1 o& x2 i- U  int86(0x10,&r,&r);& X) f, Y1 V! Y( m9 x
  }
4 e; I' ~( @1 d3 @( ~; }9 W) M
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/! Z5 `! r8 s9 N5 Z9 G5 Z% g

; P8 c5 P, a" D' x, F% D/ d* G' M  void puta(void)
( T" e  c, G" x. ]  {- q: M8 e% O( T7 H
  int i,j;) Q* ^" t" M: [  |+ v" u  o
  for(i=0;i<24;i++){
9 M# D- g. y% j& D2 D  for(j=0;j<79;j++){
  q2 m8 _! ~5 R0 m  goto_xy(i,j);
$ h3 e" m: k8 \* z- L  printf("a");
" t3 w! A* r7 j0 Z  }, A( }+ Y0 W! u" d" u+ r9 ^
  }9 l3 K/ x8 |7 U2 ^  i1 U! @
  }

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