返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,; [+ V- ~5 c/ l- D: }

& M+ |7 `6 D4 Y- F2 `! n. s  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里: M; U2 e4 H" p: A) Y% P3 S
' L6 d5 h1 f  M8 B7 x1 a4 `
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. - F3 s% d5 V2 V# L+ _
  子函数及演示程序:1 ^0 D% {* N9 W$ O$ `. \( J" l

9 `! ~) c9 I* a5 e! q  #include<stdio.h>
4 x1 X3 Z* X( l) V) z8 v  F1 \: ^  #include<dos.h>
' s1 h! I( R3 B2 S* q( e; @  #include<conio.h>
& ?- U) h& x7 y# w
4 X" s; [7 H) f7 r  void goto_xy(int x,int y);
4 Z/ ~, q6 d2 O* N  void dcls(int x1,int x2,int y1,int y2);
4 y) F6 Z  l% p  void bcls(int x1,int x2,int y1,int y2);  ~3 H3 V- W6 |% W
  void kcls(int x1,int x2,int y1,int y2);2 y' _! Y& d/ _0 [# P- h: q! p; O
  void recls(int x1,int x2,int y1,int y2);
  v& Y. s+ w: J3 L" t  void zcls(int x1,int x2,int y1,int y2);
! Z3 c0 S' I% v7 }; V  void puta(void);
" W2 z& z- E; T/ P
% Y5 L( [+ w$ Q. B: u
1 Q+ I) |  p* q7 L  /*--------------演示程序---------------------*/
: _7 U  C0 F6 m1 m% x0 A, n5 x  main()
/ c, `$ G- p+ q9 L  {
  `+ a+ s9 L. k  puta();
) |* C8 N1 Y2 t1 T! _  r  getch();
, d4 h3 K' U- @7 W6 `  dcls(0,4,0,79);
4 K( O( L* f7 A  getch();
, E& ^, E( F0 T4 U/ {  puta();/ R% W( n3 P6 C7 r7 V
  getch();
3 ^1 w; d, r# r  bcls(0,25,0,79);
# z) P. s- e5 L. _! ?; k( s  getch();  J* n( B* W1 \; |
  puta();
5 ~4 R, x+ Q: \. i9 }  k  getch();9 n- B  l1 ]! _$ T0 M$ g
  zcls(0,25,0,79);
5 K. R5 w- U8 U( E6 c  getch();
: f6 Z- B# q) y2 c  }
  V, P( \4 ]9 Y, Y# |  /*********center clear screen(中心清屏)***********/
+ f/ g3 D" v# L  g$ u  void zcls(int x1,int x2,int y1,int y2)
- g6 |8 ~+ f, @  \  {
) M% `) N# a) _3 f  [7 c  int x00,y00,x0,y0,i,d;
5 B+ W: p5 i; X4 O  if((y2-y1)>(x2-x1)){% c8 |7 p& v2 m7 c  v9 [
  d=(x2-x1)/2;; f: k4 W) r/ ]- l- t
  x0=(x1+x2)/2;: q/ h3 O& w& ]* B$ C
  y0=y1+d;
: m( s% D8 _7 R0 }7 L; F+ |  y00=y2-d;* @/ Z0 g+ Q# O+ u2 P/ L
  for(i=0;i<(d+1);i++)5 J/ Y9 n' t+ q" w
  recls((x0-i),(x00+i),(y0-i),(y00+i));1 n* u3 V$ f' D& n( }0 G9 i
  delay(10);
; H& Q, z) `4 B& M5 S  z, u  }9 M9 g" H% I7 x) v" i
  else{
; ^- {6 I$ ~% V+ i: M  d=(y2-y1)/2;8 v- R) H$ g' w3 A6 o
  y0=(y1+y2)/2;+ e; x1 Q6 ]$ V. x" F
  x0=x1+d;
( Z! y0 e, N9 j0 \) h  x00=x2-d;9 D8 a; p& D* P+ u; I0 P
  for(i=0;i<d+1;i++)3 {& C: o' H% W4 A
  recls(x0-i,x00+i,y0-i,y00+i);, H8 I1 ?8 Z6 T  D
  delay(10);
* V- O- i) `% T  }
2 z2 G" ]0 u6 t1 h" b& _& A: [" {0 n) V  }
9 t' U( h9 w! [5 z, v2 \' j# F7 ]- P: u1 G9 W, o5 |" y9 o& z! [
  /************* clear rectangle side(矩形边清屏)***********************/
. O6 A- @0 n. n/ N/ C; f. ~1 x
+ |# D& Z! i/ S( {$ e0 z  ^  void recls(int x1,int x2,int y1,int y2)
& b+ l" ^2 {% C  {$ `& J7 ?6 A  v& a8 _
  int i,j;
1 T$ h% e1 }) P, D: k, p  for(i=y1;i<y2;i++){0 f8 L: q& }- ]4 q# J$ `
    goto_xy(x1,i);6 F1 `' S2 B$ b3 f' T3 b1 u
  putchar(' ');- O0 I) f5 `( y) c# f- j  O% {
  goto_xy(x2,i);6 L4 V2 ?7 A+ `: |3 i% m( C/ A% |
  putchar(' ');
$ x* i7 S6 B/ t  }' o4 M% b6 P  delay(10);
8 H$ s* Y" _- b  }% X% N1 h4 P1 C: _) \5 o
  for(j=x1;j<x2;j++){% S/ p, o! R; @* h0 M4 I! V1 L
  goto_xy(i,y1);
1 v, N4 |; Y# h9 u" s3 A( m  putchar(' ');
" J# b+ ~+ v7 h  goto_xy(j,y2);
, ^$ i: {6 M5 x  putchar(' ');
1 p& S# t# I: f- S# C  delay(10);6 f: U2 ~- s7 v1 S8 k) ?
  }
; b7 s3 j8 q: x; N0 @  x  }& Q9 I% E. I6 |4 {8 G( P  g' A
  /******************open screen clear(开屏式清屏)*********************/
5 M$ s/ V, _' S. S
1 |& c  I& e6 v9 b  void kcls(int x1,int x2,int y1,int y2)
, O+ e6 S/ Y/ |* Q/ c4 F  {
9 y) [% T5 A* _6 b4 O5 K  int t,s,i,j;
9 N, V( i  p# {/ _: h  t=s=(y1+y2)/2;
- q% x+ ^0 v" \# v- W  for(;t<=y2;t++,s--)6 j, F% |& a- a7 m
  for(j=x1;j<x2;j++){
" e' o) \. C6 i  goto_xy(j,t);
1 G8 C% Q; l0 Z  putchar(' ');
* g) e6 \" D. d  R5 f- e; y  goto_xy(j,s);
& `4 S# L: e, X0 j/ T/ L/ [  putchar(' ');
+ `, f8 ], j  U  delay(10);
" K+ ^* c! e0 B/ y  }7 e4 B! D5 x, x8 O' p
  }
, |1 u5 G- y9 \# d6 b% c; s  /*****************close screen clear*****闭幕式清屏*******************/
' n) V2 Y& E: n1 ?2 u, M0 _" P& e$ _
  void bcls(int x1,int x2,int y1,int y2)
; e3 i6 X1 X7 T( c4 E  {
, c( v% J0 V# P1 _* W8 H) U  int t,s,j;
6 M: l* j- y% |  t=y1;$ c# i& B3 X5 l- k; b4 ]
  s=y2;9 y" I$ q3 v! [% t. b5 Q; K2 p
  for(t=y1;t<(y1+y2)/2;t++,s--)
8 h- R( T! {4 B: J+ q% ~  for(j=x1;j<x2;j++){$ ]- @% {5 N" n* [6 H! y
  goto_xy(j,t);
& r. P: n, ~: l, N; T2 s  putchar(' ');
7 A3 p0 S! z) h! h+ O# ~  goto_xy(j,s);
; v( L. T- _) h  putchar(' ');2 ?, ]' W' E; u8 ?+ o
  delay(10);$ q7 Z5 j# w6 @' b
  }
) k6 \7 q, a4 K3 S* P- l  }
3 y: T* {6 j' z8 ^! a7 i! e  /******************bottom screen clear(自下清屏)********************/1 {' M1 K5 r/ H; w

5 ?7 b# G; _) e$ E* Q  void dcls(int x1,int x2,int y1,int y2)! L; [% J7 b4 S+ e7 }: p
  {, ?: ^0 d9 S, k$ j4 [1 |
  int t,s,j,i;, d/ V5 P' ^+ C3 U$ m
  t=s=(y1+y2)/2;  b  T3 U* k+ S! i4 f
  for(j=x2;j>x1;j--)
( p4 V; H/ r4 A7 U  for(i=y1;i<y2;i++){9 b& a" h4 g; k
  goto_xy(j,i);3 u: {0 @6 K1 A4 G3 q/ E
  putchar(' ');
  x0 M% l1 ~# T% y, p  \  delay(10);8 v* C/ L) m; M8 n5 o
  }9 {. G; N/ {! }
  }
' v' a( g; I* R& t  /******************设置光标子函数******************/
# s5 Z( O) E1 l* I0 B: m: |4 l, M/ N  j
  void goto_xy(int x,int y)
9 A5 ]/ i: q* Q5 F; |  {
4 l7 R! n- ]9 V7 a! `" n! @  union REGS r;8 B* C$ a' R( Z1 ~' n
  r.h.ah=2;
6 x/ L4 x3 u4 a1 i5 p6 W0 K$ i  r.h.dl=y;
& J+ Y' D" W- D5 ]  r.h.dh=x;  N6 H1 z6 X% z
  r.h.bh=0;
/ {8 g1 u. b$ S3 i  int86(0x10,&r,&r);/ `7 M! i- e4 B6 k1 }, f
  }5 y+ x' G2 q# y" r6 [0 ^$ g# {/ T

3 T9 D  j6 a" f- l  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
6 A) G) y! s, D. N+ B  }+ ~( [! z+ w7 d% \9 o# H: L- e( m
  void puta(void)! S) G7 V3 V, f% ]
  {
1 p( y! ]0 t! o: d9 l6 @. x  int i,j;/ ?4 a- o# x* I+ Z! O
  for(i=0;i<24;i++){
* i9 q2 e5 z. U  v  for(j=0;j<79;j++){
' c1 l& x1 v; v  w2 q' P  goto_xy(i,j);
$ v# a% M" f, S2 ?  printf("a");
% S# M- o1 ~1 E# a# A# L  }8 W  L$ e& h8 ^
  }+ w2 A3 |6 ]; s/ m( ]
  }

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