返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
, R! C' B/ |9 b8 {4 E3 P9 Y/ @0 s: L, _% E/ ^1 Y3 F# {
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
3 w4 _+ _( u; w% }6 Y) D" s# b9 u3 ?4 v- d1 a  R/ s" e% D
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
9 y& {6 w& M( a, n  子函数及演示程序:5 F0 K' V, H2 y, a2 z# O2 U2 B
+ |& b  I8 H6 Y1 L* ^! q% c
  #include<stdio.h>
  s: e* {. {) M, M. \. e  #include<dos.h>
7 M: i' s2 B8 b4 e) Y. f8 c6 X  #include<conio.h>
' I2 T3 g2 f/ ^: d) V, O" D! `4 M1 h
  void goto_xy(int x,int y);- `+ t8 l& k2 I
  void dcls(int x1,int x2,int y1,int y2);+ D: q* z7 S  L! R( b$ i0 _
  void bcls(int x1,int x2,int y1,int y2);* w- g. X6 S. @- `  \/ n% B
  void kcls(int x1,int x2,int y1,int y2);. B8 w/ v5 [/ ]% g# a: Q" t; g
  void recls(int x1,int x2,int y1,int y2);9 n0 |1 c% U+ w. T6 t  e
  void zcls(int x1,int x2,int y1,int y2);) E; p( }" A, [$ x+ N
  void puta(void);1 ?7 [6 p5 M1 K: C! `, p# W
: _" B5 W9 S0 J8 f
  [6 S3 ~) p6 Q7 K& q& ~
  /*--------------演示程序---------------------*/
: e  g5 v4 ?2 {8 G9 I9 S8 b  main()
8 G- @$ @+ [$ E# I- H* v; J  N& ?! ^( @  {( M' ^* s0 f6 D4 P: p$ V
  puta();4 a" z2 R5 E4 U2 Q8 ]* |. H
  getch();
5 g% t8 v, f2 {" N$ J  dcls(0,4,0,79);$ V; j2 i1 z! D! i( g0 [  _
  getch();
& ~- i# t1 G& l! u4 Z  puta();' ?0 m2 b: @2 v$ W4 I3 N0 D" h) n
  getch();* v0 Y6 p( Z2 V! O6 s8 S; \
  bcls(0,25,0,79);
+ w4 D6 t, d8 h5 v/ j. D4 E  getch();
8 B2 a6 c" \( x2 Q2 m$ [4 \  puta();9 H0 u0 D. q. M- w2 }
  getch();0 B: V0 L/ i  F3 W
  zcls(0,25,0,79);7 B' z9 b! t* j2 U* v# \: b$ A6 b( C# L
  getch();" Y- `, c1 M' ]3 S
  }" e# H4 f' K. d0 {
  /*********center clear screen(中心清屏)***********/
  k4 e! Z4 _( b- b1 \  void zcls(int x1,int x2,int y1,int y2)
6 K# f# A% [  v* V1 t" W  {
1 E. x$ I( u& M  int x00,y00,x0,y0,i,d;+ V, n0 I, P" g  [! f& C& M5 p
  if((y2-y1)>(x2-x1)){) U: }% r7 x7 T, k1 s
  d=(x2-x1)/2;
' k0 L1 E0 ^% e1 T0 P# P& G% p  x0=(x1+x2)/2;
/ `9 e. i  i% I: q4 v! u, p0 L: }5 c  y0=y1+d;' ?8 v6 i4 B. n9 a0 Z. F& {
  y00=y2-d;
5 o9 E! g5 Z1 x$ B  for(i=0;i<(d+1);i++)
4 w) W2 m+ {& d( F4 p* S, J  recls((x0-i),(x00+i),(y0-i),(y00+i));" ~* U3 x6 a5 W2 ]" n: N+ }
  delay(10);+ D% ~6 c$ O! Q; y
  }
; A8 g; x, a* S( d6 p. s  b9 `8 z5 y  else{9 x4 ^3 |) j' o% H% H* p$ c  b: c2 Z
  d=(y2-y1)/2;' `0 z) e6 x: c7 g
  y0=(y1+y2)/2;8 t5 u# j1 M" D/ _  U
  x0=x1+d;
2 s" H2 B. T5 C0 ]1 l3 ~  x00=x2-d;
. Y) H! }" G3 @. ]  K3 V  for(i=0;i<d+1;i++)
/ y: ?/ _3 ]# c) ^" m- F* X  recls(x0-i,x00+i,y0-i,y00+i);
& h2 g1 m5 k5 p" \/ q+ M  delay(10);* `4 O3 w8 f3 j' ?
  }" @: k4 I1 v0 w' C
  }
6 ~8 Z; }& Z9 L0 V$ h# H! C' v* Q$ m+ ?% @
  /************* clear rectangle side(矩形边清屏)***********************/
) U: s: T( \) `1 l8 F% O
! p" I7 _: a2 {) X' |  void recls(int x1,int x2,int y1,int y2)
8 x; p# b1 Q8 A: h- d  {
3 N: [5 r5 w2 F% y- S3 P$ N5 s  int i,j;
0 F" _4 W- f' b! L. y; H# i( B  for(i=y1;i<y2;i++){
/ O0 S0 A: C" I+ W) e1 |# G% t+ v    goto_xy(x1,i);
( U: k& P2 q0 Y) q- N6 l  putchar(' ');
* l; J! m$ z2 ^: G) C1 W+ z  goto_xy(x2,i);4 q0 g1 ?6 K/ C& ?( j) V
  putchar(' ');5 m9 S5 R" f' }" r" X  ?9 q
  delay(10);
: l; l7 E8 U8 ^+ j% L  }
5 x0 @4 N" D; x& P0 @  for(j=x1;j<x2;j++){% e  {4 \% ^' h9 E
  goto_xy(i,y1);
+ t: F8 U$ q" A; L9 Z  putchar(' ');
; b8 [7 h0 H& k5 {/ Y  goto_xy(j,y2);0 [. ~7 C) q) Z
  putchar(' ');; S' O3 [, [5 }* t9 H/ h
  delay(10);
0 E) I" \0 n& f4 m' b# ]1 T  }' D1 e; T# ^. C
  }
3 l0 r2 S1 @" o% x: y+ ~  /******************open screen clear(开屏式清屏)*********************/
) O5 ?  m% G7 ]; }# G. a) t) i
" k- n' D% z7 G" ?* K  void kcls(int x1,int x2,int y1,int y2)
1 i4 z/ n( S. o% {/ x# P! P: k5 z  {3 G4 u6 z. R. o8 C6 ^! m+ a
  int t,s,i,j;
; ]; v' N3 z5 c$ B9 x: M; ^  t=s=(y1+y2)/2;) N8 j; X) }$ [9 n/ m
  for(;t<=y2;t++,s--)5 j& O2 l8 f7 g# A
  for(j=x1;j<x2;j++){: ^2 W8 j+ c7 X$ t; [- r5 p# y
  goto_xy(j,t);
$ |3 E  y  r9 [- }  putchar(' ');
& _) V; m( {, w1 T4 \5 H9 n: z7 {  goto_xy(j,s);
9 V5 U8 P$ p3 T# V  putchar(' ');" b, e" X: m  X8 r7 h8 o. s
  delay(10);
$ [# R( D) X8 |% q  }4 b$ d. N8 F* x: d7 O1 i5 l
  }8 G$ T$ C; I; P0 Q  E6 h/ |
  /*****************close screen clear*****闭幕式清屏*******************/
: n* \% K( Z$ p3 G* B5 O% S% x( X3 U4 D
  void bcls(int x1,int x2,int y1,int y2)
; Y1 \% z  Y2 h- q- E  ?% G- y  {+ @4 R2 T- K- s! ^% n
  int t,s,j;" y8 v2 r& u! U5 P- E# J
  t=y1;
$ j) [1 x3 G9 C# {7 o. V8 Y2 ]  s=y2;) K9 u8 k- F" W/ z
  for(t=y1;t<(y1+y2)/2;t++,s--)
$ [$ {, d" m( e/ ]4 ^; z  for(j=x1;j<x2;j++){9 s! z2 n8 K& ]* Y6 H
  goto_xy(j,t);
  k) f5 G( }% @3 k  putchar(' ');6 C; n& R, L) K" j
  goto_xy(j,s);
9 \) b- w; M; ^- O0 n5 \  putchar(' ');
. S8 o; L. L4 R) W  delay(10);& W8 J4 s$ U1 d& l. V: R; B
  }
' \: b! h/ P+ Q% v# O! E) i' M3 y. X9 E' E  }
" Z  A7 Z8 k7 I$ |. a) ]- l  /******************bottom screen clear(自下清屏)********************/
5 L% q3 ~* I1 @6 U# _# q$ ]/ S2 S' m, ~: k$ S
  void dcls(int x1,int x2,int y1,int y2)$ f$ ~3 b  N+ k* C2 c# d
  {0 y: l2 i5 j2 z# I  j+ b7 X3 f9 B
  int t,s,j,i;
1 I* m" c/ ^8 @; n  t=s=(y1+y2)/2;; K9 d/ Q6 l& F, K4 t! A
  for(j=x2;j>x1;j--); B" y1 n" ^# @/ t
  for(i=y1;i<y2;i++){% N# H; m" f4 _6 H8 q; g
  goto_xy(j,i);
% \+ \$ h0 t+ z0 o  putchar(' ');2 |/ c( m% y8 R
  delay(10);
7 J. V) P& J5 ?" w. S5 `  }
0 d# c3 u/ V" L2 v* i0 R  }% y5 k# ]; y9 e1 h# a0 j
  /******************设置光标子函数******************/
4 e1 j+ Q# {: \1 d* n% y  E7 E
* x0 T. [; f9 u: X  void goto_xy(int x,int y)0 G9 M: {5 ]' W+ \3 {; i1 ]' }
  {( z/ _' d) P3 g/ _
  union REGS r;
: H+ |* ^# g) i4 E  r.h.ah=2;
4 y3 o# R: h7 p. r0 Y  r.h.dl=y;0 A' K1 j6 p2 a( H1 x1 }
  r.h.dh=x;
7 G) X' t# L( @2 [  r.h.bh=0;, ]& w8 O( T' m( R. r8 @
  int86(0x10,&r,&r);+ r: R$ J- N3 h7 i/ H* a
  }( G" Z* k$ [  Q9 O, s- J% X

" o+ k; C# `, @* f* d  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
1 N& A8 ?6 j1 ~' f3 d3 p0 d
/ ]$ {3 ?9 }8 E8 r7 a. z3 C, n  void puta(void)4 P9 I2 x7 t, |: Z8 L
  {
, g/ L8 z2 c( k, D$ r  int i,j;
5 U* W1 v: B6 A8 D1 [  Y  for(i=0;i<24;i++){
8 }! J  ]5 j2 Q7 C/ h$ _  C0 d  for(j=0;j<79;j++){5 v6 j; c; J- m
  goto_xy(i,j);9 f  L0 G, L0 n! D2 j
  printf("a");
% S0 N' z1 r3 h5 g* ~# [  }1 {( T; r) V% x; @; [1 s# z
  }
+ R4 ^, ~/ U5 {& f! ^) |) Y. b+ L  }

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