返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,1 Q! G: Y  F# E' `2 W. k( S1 y
6 G( _8 B* i9 \. ]7 q6 G* J
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里$ q6 w6 ~2 o/ i) I4 S( e0 I/ \' L

4 {1 J  U: v" d$ }/ f  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
% Q# Z* ]! N9 J7 }$ S1 f  子函数及演示程序:8 k, ^( I6 X; D

. h  V3 h3 V5 {' d5 P3 ]+ \7 P  #include<stdio.h>
0 w0 }8 s5 m! l5 Y& F# J5 _  #include<dos.h>
" I" Q! P  G0 t0 t* V. t% j  #include<conio.h>; Z$ _9 c; [- L9 c$ p, a$ @
7 `* {# L- g: |6 [3 ^( V# N
  void goto_xy(int x,int y);
- }9 l9 z, A2 ?# n% F9 o  A  void dcls(int x1,int x2,int y1,int y2);
1 W2 ?& S! @6 [- _  void bcls(int x1,int x2,int y1,int y2);
' j* g: J$ a# Y( `: d6 @  void kcls(int x1,int x2,int y1,int y2);
5 A5 ^$ c4 y* Z( G% J4 {8 m  void recls(int x1,int x2,int y1,int y2);
. T0 G: |* e9 }# m  void zcls(int x1,int x2,int y1,int y2);: k9 n! ^7 Q, ^
  void puta(void);
, d$ ]+ s1 `; \
. e# x. C" W! b: B, \- r' S# I
# t& k) {5 I2 Y0 i: @- Z$ I  /*--------------演示程序---------------------*/" x6 r% A% L" c# ]
  main()2 ~8 p! B& a5 _2 A$ h6 o
  {
8 ^$ _" @8 e! }  Y  puta();- }% b: _) r5 j7 z& ^8 |  ]
  getch();; Y( i7 d/ j3 U; q
  dcls(0,4,0,79);
8 \7 ^+ [* J6 |6 c  }3 J4 t  getch();
6 z9 Y4 z0 {. g7 s0 ?  w) c  puta();
8 _/ f" v9 m" s0 k% R  getch();
, L- b5 ?8 e' I& k# m# c  bcls(0,25,0,79);! [0 K6 K, X# m7 {$ B0 Q
  getch();
, X9 B3 _  W' v$ s" s% o  puta();* x7 R$ X# X' _  n* L$ Z
  getch();
1 e4 S; A) o5 d4 e8 w  zcls(0,25,0,79);" X8 V& T3 `+ X8 n. x
  getch();
# x9 L( u# P& \4 ^7 O8 Q, a  }: R8 L) A, H( Z& w8 Z
  /*********center clear screen(中心清屏)***********/" F) t& _4 M$ z( H
  void zcls(int x1,int x2,int y1,int y2)) _$ i4 P; G: W/ K
  {
5 s- K7 @( `8 `+ ~4 _. `5 z  int x00,y00,x0,y0,i,d;) k- {- o! {- T- q+ m8 N  C/ A
  if((y2-y1)>(x2-x1)){0 j. [% e; T( b! A' C3 R( |
  d=(x2-x1)/2;
& [. a: \4 o! H; |& p' E1 ^  x0=(x1+x2)/2;. {% N7 F3 x  Z. m3 ~8 P
  y0=y1+d;
% k6 [1 l$ M- A& M. P  y00=y2-d;+ h6 I' b& N* M& [# E
  for(i=0;i<(d+1);i++)
+ |* w2 S/ `: p$ v' ]7 l, s  recls((x0-i),(x00+i),(y0-i),(y00+i));
( Z+ V) W; {: K: J0 K6 m  s" M  delay(10);
" f/ p6 O5 \* s% u1 r* }$ s  }: D7 L- Y+ o$ @" _( i' v4 [. T
  else{
( }% V) g. e" J5 D2 I3 h3 L: K+ ?  p  d=(y2-y1)/2;
4 }2 M4 Q- P: b2 I2 g: i  y0=(y1+y2)/2;: z! S3 W( C: Q! r+ \& b8 r3 P
  x0=x1+d;
! b. V# |) n& w4 N; Q8 \  x00=x2-d;
9 r* n6 F' s+ T1 f. n. E& C% n# v  for(i=0;i<d+1;i++)
; C" @) I# e4 R/ ?' Y  recls(x0-i,x00+i,y0-i,y00+i);
# Y* T8 a) U$ F: \  delay(10);
% v6 @  {1 K3 x- S' a) K3 r# ~, K  }; [: [3 C6 ~! s. m
  }8 c) A1 V9 V9 \5 h9 y2 x
8 i! ]" x8 v: c; N4 [
  /************* clear rectangle side(矩形边清屏)***********************/
$ C# C9 s/ c7 s! o: y
8 N0 a" o$ @. F2 R) `' U; a  void recls(int x1,int x2,int y1,int y2)
6 C( M5 U1 ~0 [6 h' D3 S  {/ [, ^& _: q* Y/ H
  int i,j;
% x# T5 `1 X0 T1 _) }! \  for(i=y1;i<y2;i++){; l+ H  R9 C7 L3 z2 ~
    goto_xy(x1,i);
3 J: P* b5 P& L" E! V  putchar(' ');
% a& R9 I; r3 D" a/ L  goto_xy(x2,i);
1 e) C% `* R8 @- Q1 D  l" P6 `" t  putchar(' ');; `1 K: \. X9 b& q+ R' l
  delay(10);3 C( S: n" z- |+ N! I- Q' O
  }+ ^% b; Y7 W5 y& R. I: x# z! O" {9 J! P
  for(j=x1;j<x2;j++){
, S# ^/ Q% t! o; l  goto_xy(i,y1);
9 M* C) V* f8 }# J7 O  putchar(' ');% n+ M3 G* v. I/ H* H; C6 H
  goto_xy(j,y2);4 b* u* f" l: R7 p2 {/ O* X
  putchar(' ');
5 r/ Z9 i, `! i* r0 _; L  delay(10);
( Z8 I! h6 h% l% E9 R' r; W$ s# ^% F  }
; p2 W# {% X- i( ]  }" T4 p4 W$ f- G  ?1 e* w2 t
  /******************open screen clear(开屏式清屏)*********************/
; E+ v1 E9 v4 ]3 R* N( j, j. ^6 h: X" v
  void kcls(int x1,int x2,int y1,int y2)
+ p# f1 W! k, l. q$ O9 v  {3 ^7 D; I+ Q* G
  int t,s,i,j;3 f7 }7 R2 ?' S6 _; u  p$ z
  t=s=(y1+y2)/2;0 ~2 J9 t, G! {; R
  for(;t<=y2;t++,s--)
. h$ P/ l( Z, b  for(j=x1;j<x2;j++){
5 V/ ]- E' ?' t- i9 Z" b5 i  goto_xy(j,t);
* V3 [. ?$ s. Q8 L  putchar(' ');
; L: ^2 x: c) x6 N% b7 R  goto_xy(j,s);/ Z! K( ~6 H! M5 b8 y3 A  X5 q
  putchar(' ');
# R0 E% [& o* j! z, t  delay(10);
( q9 q2 ]. Q: }. J( {( e  }+ K8 r' T% ~3 ?
  }
8 W6 y5 c6 Y+ o  /*****************close screen clear*****闭幕式清屏*******************/
1 A# R9 \" K2 Z. p6 ^
  J8 f; Z& g, y# ?1 l# V  void bcls(int x1,int x2,int y1,int y2)' \6 Y2 j* b6 r( M, r
  {# V5 O9 D, u9 ]' g
  int t,s,j;
2 B! T4 {. d& {' o( A$ ?$ `/ d% h  t=y1;& ^6 C7 u& N: @. P' b) g* s  ?0 j
  s=y2;4 z+ k1 ~1 c  O; Q( o) i' |
  for(t=y1;t<(y1+y2)/2;t++,s--), [% \0 s6 B- n1 v4 {" @
  for(j=x1;j<x2;j++){7 Q: i7 ^! t* t5 E3 a
  goto_xy(j,t);4 Q, G- i7 e( L
  putchar(' ');( _  F* y, m! ]
  goto_xy(j,s);) \7 @" |5 D* Z# _- b+ j/ a* r
  putchar(' ');" p3 b9 R; B! s- s# L) N0 Y
  delay(10);
& f0 X2 ~; V+ h- ~  }
. X4 \4 ^5 {. Q2 X1 c  }8 X/ I8 J8 Z  a* q2 G  K
  /******************bottom screen clear(自下清屏)********************/+ B1 l# Y. W7 s/ C# t0 D

) u5 p0 A1 a  \  void dcls(int x1,int x2,int y1,int y2)
/ n3 i9 u' @7 R* m  {
1 K: k% x8 H% {! P3 c& X' P, s7 E  int t,s,j,i;7 l+ e7 w; O! z, b8 J
  t=s=(y1+y2)/2;( ^, M) W$ ?% r9 m6 g8 Y
  for(j=x2;j>x1;j--)- h( P/ K! k" I7 o2 h
  for(i=y1;i<y2;i++){& I6 ?) K) p) I# E
  goto_xy(j,i);
- a2 d, h! t5 d  putchar(' ');
  r5 B9 ~3 ~* H6 Q  delay(10);
# E8 J% ]- e3 j9 A' C$ R" P  }" ]1 h2 Y, K# c7 n
  }4 A0 L" Y! q* m) |  a. ?, ^6 O
  /******************设置光标子函数******************/
7 X: Z) M4 q  Q4 q3 H
, k, p7 Q( _- i; d) s' X  void goto_xy(int x,int y)
- J4 |+ E6 q/ i2 z1 q  {
0 u0 F& e0 K; O' J, V- R  union REGS r;
5 Z; c: C& H( ?+ O8 k5 \7 t& M3 m: s  r.h.ah=2;, r! ?& S% z$ F2 ~" z
  r.h.dl=y;, O& f" B2 V! Y7 Y
  r.h.dh=x;7 j( k* l- M" b8 j" i9 \
  r.h.bh=0;
9 u" x& }0 S2 Q! w9 O. v" }$ B. }  L6 @  int86(0x10,&r,&r);
" H, q. d, D3 b$ w) R/ w  }: S7 {+ O  v  P6 q4 ?% D/ c

2 D: g4 H4 H: l/ y2 n/ X; }  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
* m: e$ Z7 d' p+ W/ G  M
' j: b3 ?3 c' Y! I9 S/ P  void puta(void)
; x4 d3 N, S. w0 C  {
0 k0 |# e6 c. I, S  int i,j;1 ^1 A" E7 c7 X# U0 f4 O
  for(i=0;i<24;i++){% m8 B- q% ]3 Z7 W( Z: l# v, X5 }9 I
  for(j=0;j<79;j++){
+ L' i! C  A2 ]1 B4 f  F  goto_xy(i,j);
1 H' T3 {% O& L+ }  y3 j1 `! U  printf("a");
8 w( ^6 w+ d6 e& S/ Y8 ]! V  }$ e6 J4 Y1 B! ]( B6 p, U& P( D
  }' \% T. V5 U3 u- [  F& s
  }

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