返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,5 Y$ P& q9 a5 }* H

6 u  I6 R, k4 v5 j; I  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里" L  P6 H3 T. V1 T; Q% x
) }/ u0 J2 W4 B
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
1 I" B6 p) \  [+ k  子函数及演示程序:
0 a( p: ~) @  a. g. `" z- T6 y# Z( m% U' o8 A; Y  F
  #include<stdio.h>
4 N, z% O3 }& a/ m9 \6 d* A4 P7 t  #include<dos.h>
/ A7 _) `. o0 G  U. D  #include<conio.h>
* m3 `' o) P8 @! U) N+ e0 C* t
  void goto_xy(int x,int y);" w  _4 V. Q, @7 U4 }* [" j
  void dcls(int x1,int x2,int y1,int y2);: B- ^/ X* z4 H0 V  K9 J
  void bcls(int x1,int x2,int y1,int y2);) z+ y* a5 W6 V  S. G
  void kcls(int x1,int x2,int y1,int y2);
9 ~( \8 c6 T# a: u  r" h' T  void recls(int x1,int x2,int y1,int y2);' d& N  |1 h! h* e  a! i0 C3 }/ o
  void zcls(int x1,int x2,int y1,int y2);" d+ E! @3 D' X. b; P8 G
  void puta(void);
- O7 ]2 D: `2 L5 t! q3 @+ o# t) h  j* `% `+ D
. e# H6 s1 y2 f! S6 B- H
  /*--------------演示程序---------------------*/* ?) `: b3 J. m& o
  main()
: W) i5 F3 o* @3 B& E  {
+ e, i3 m( p1 C' `1 D6 X  puta();# K0 c, F' T2 h4 J
  getch();
; s# E* j# s1 G( o) L, X! c  dcls(0,4,0,79);
# L7 y, K8 p3 D  getch();
) h' z% z% N) f, O6 }& ~( J$ ?  puta();- _( N/ X0 A; @' D
  getch();, Z* F' b+ `+ i0 Q
  bcls(0,25,0,79);
' o2 u$ g4 C4 n' K9 |9 S  getch();
  Y2 i+ F, K- z+ J$ f# q( ^, x3 f/ c4 X  puta();
5 M. a* n8 E5 U; W+ c  getch();
9 d* R. S( w  m) ^( p  zcls(0,25,0,79);
( g  _/ N7 m; x* p1 K: W) X- X  getch();; H3 ]! Q* |7 z
  }
+ \7 A/ D  f6 r. g  /*********center clear screen(中心清屏)***********/
1 P5 h3 `$ N- m+ V1 t  void zcls(int x1,int x2,int y1,int y2)" P+ }5 X: _" v! b& f2 E% l
  {
2 m; v5 ^$ X$ X, g  int x00,y00,x0,y0,i,d;
0 i# b$ U  Q* L: z8 j1 Z6 L. V  if((y2-y1)>(x2-x1)){9 t4 h) X( N  ^1 n
  d=(x2-x1)/2;
/ g) a) i1 n, n3 R: N7 g  x0=(x1+x2)/2;5 G+ T1 L* Z) ]- L
  y0=y1+d;) j% i* x3 x$ f3 Y3 e
  y00=y2-d;
! B4 P! U6 ~$ b. @  for(i=0;i<(d+1);i++). l6 q, J9 g: C8 ]! S
  recls((x0-i),(x00+i),(y0-i),(y00+i));
/ [  C) ?4 @* q3 w" r  delay(10);+ y% @9 Q' |) [
  }7 u( U, [. j  I  M* p- }
  else{
6 ]" o0 R: @5 u( E. \+ H# y  d=(y2-y1)/2;% m8 S' ^+ j# {; B$ A) T4 w/ h
  y0=(y1+y2)/2;! X" b+ r6 g5 J; v
  x0=x1+d;* i- ^0 M, E% |) x& O9 \7 U8 O
  x00=x2-d;
2 O' p4 X: v; N, P* y/ Y% M  for(i=0;i<d+1;i++)! `3 l: @" e, I+ }2 E0 {  M
  recls(x0-i,x00+i,y0-i,y00+i);
- t( p3 b( y' P/ g3 G! `  delay(10);
/ g8 ?' L& S1 \* ^: W. y) V  }! Z! _7 Q9 p& ~! Z0 r) R
  }1 A. c4 E7 ~. p

5 E0 p5 n5 c) Q: J' J, z& `4 g  /************* clear rectangle side(矩形边清屏)***********************/
0 n8 B# C  g8 S9 }. r  n, S4 d. G( m" R9 @8 ~2 u
  void recls(int x1,int x2,int y1,int y2)
5 n) p: H  B6 {% s  {
) q* N  o% k# k& m. C9 n0 j  int i,j;
/ M' X$ @; t- G1 ?9 L2 Y1 P  for(i=y1;i<y2;i++){
7 V; L3 \* p1 H/ Z6 n    goto_xy(x1,i);
+ A7 g. {# }- s) P  putchar(' ');
' R# k0 R& b$ y9 w+ P; X4 w( T  goto_xy(x2,i);
  M+ T3 N; `& K9 w  putchar(' ');3 i1 m+ @/ \  {) ^
  delay(10);
4 F% J2 b( A. R0 f; ?  }
9 k9 r  w5 y. x  x2 ^  for(j=x1;j<x2;j++){0 O. s1 Z, Y7 \- ?
  goto_xy(i,y1);
' ~) p+ n/ M& \; `" J+ g( u1 S  putchar(' ');/ T3 Q/ ^( e0 y
  goto_xy(j,y2);! z1 }( Z, m! y: f  r- D
  putchar(' ');! _8 J& L* D0 {  a: U; G8 v
  delay(10);. @3 C" H3 M# s* A; \
  }
! q2 g& v8 g7 b4 S2 ~' L4 U  }( S9 W" Q5 ]+ @5 \9 ~
  /******************open screen clear(开屏式清屏)*********************/  h8 K: }* c3 M" H7 x; p

" M" a; S* {1 g( e5 x! V9 F$ |  void kcls(int x1,int x2,int y1,int y2)" b! ]  M' p6 F; P0 x' P- c2 Y
  {
& G: c. J/ s2 g$ g. V- l  int t,s,i,j;
$ c/ x. Q$ c3 u8 B7 z  t=s=(y1+y2)/2;( j0 g8 q) _0 @, e! w8 u( z
  for(;t<=y2;t++,s--)
* A4 ~5 _; J  |9 I  for(j=x1;j<x2;j++){
0 ?$ W+ l, _  [  goto_xy(j,t);6 l; @2 J1 [* a$ O1 H: e
  putchar(' ');
5 F3 o9 u9 b6 }" C. P  goto_xy(j,s);
5 A# O0 ]9 q% Y  M0 S( S& [  putchar(' ');
6 [" e$ Y5 s) T2 P  delay(10);/ x& Y. p  l; f4 B$ v" O
  }. s/ h, O  s% h
  }/ X" b; Z& @( ]$ k; P7 V
  /*****************close screen clear*****闭幕式清屏*******************/
9 B$ D# ]+ E4 d$ z; S
% J: H$ u# q. n5 L/ Q# @  void bcls(int x1,int x2,int y1,int y2)
. X2 t4 K8 {" _9 i+ |2 q6 v% X/ d  {* |% h. D5 b2 ]8 w6 }
  int t,s,j;
* `5 M) D6 H+ |+ J" m  t=y1;0 P# R0 U* s! k3 c% _5 J7 B
  s=y2;: _* B' t" Z& U. i; D
  for(t=y1;t<(y1+y2)/2;t++,s--), r, B; M! }! S, R; s3 O
  for(j=x1;j<x2;j++){2 Q1 |7 m, Q  q$ P
  goto_xy(j,t);
+ {/ P% R. V  y' [* {, }  putchar(' ');* m/ E6 Q. H: y3 H
  goto_xy(j,s);
9 X& }6 V8 y, s! _8 p* I2 ~  putchar(' ');
, |: e7 }, M8 |  delay(10);
1 g+ `2 j+ S& b# V& H  }
" i* |! l: U. v  }3 S* U1 Y/ g/ u: ]% @5 p5 H
  /******************bottom screen clear(自下清屏)********************/7 f! w7 G. W/ P/ J2 p! R3 m

1 c* M6 d. F: R2 W& o( }) d1 A  void dcls(int x1,int x2,int y1,int y2)
$ u# g8 P2 g$ e2 T1 E- a  {
' G' T: d* Q; J) j1 d9 J  int t,s,j,i;* J! K9 n* k, u7 \
  t=s=(y1+y2)/2;, w& b& b3 J7 J$ l8 `
  for(j=x2;j>x1;j--)
7 t3 q$ G5 A. s  for(i=y1;i<y2;i++){- c! Y, X) V5 o' j) g
  goto_xy(j,i);
# s3 j" l( B- O" V$ @  putchar(' ');
* d1 y+ r' ~) m( n( x2 {  delay(10);
( U( q+ C' O, P9 Y- |% H  }2 D4 ]) b* j" k) o& W  v
  }
: r1 q, k# v# Z2 ~! R' `1 X6 D* {6 \  /******************设置光标子函数******************/
$ L4 N* {  p# ?' y; J' W( L: F5 N2 f( N" p+ Z1 h: ]: u* L
  void goto_xy(int x,int y)+ X, D. w( s( I' ^, d2 o% j
  {
3 {' I' M" J0 a+ ?5 Y7 L$ K  union REGS r;
" z1 q1 w9 i( v- m% a: P' U  r.h.ah=2;
3 p3 U: g7 [2 I& U$ t- S  r.h.dl=y;5 F4 ~& l! ^% ^) |: _- t% I
  r.h.dh=x;0 d% c$ j" |1 e* `/ y; A, n; C5 o
  r.h.bh=0;
2 z- S3 S3 t1 F( }! L( J  int86(0x10,&r,&r);. ^" \" E; L4 @8 e/ V5 _
  }/ z7 Z4 v6 K3 M) h$ l, v, l

4 S6 n9 T, g, Q9 [  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
% O+ F( R+ Q( T2 k( w$ W' t4 G
; K" T6 M# Y. b  h$ {7 S  void puta(void)
5 h. P$ m) f  G$ y2 H* Y  {
% t9 k4 k+ P. R$ M0 W* X1 R  int i,j;9 ]% N; I0 U8 D* N
  for(i=0;i<24;i++){: P5 e7 {+ l& y. T( R, O& H( `
  for(j=0;j<79;j++){
* O- h/ n  }8 _+ N4 n4 H9 r  goto_xy(i,j);( w2 A) _7 d6 j- @/ u; W4 N
  printf("a");
2 h( N: g- m! k4 u  }
+ V% L. a+ E7 O  }
: ~4 D% w1 d' E& ?  }

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