返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
+ {, j% {3 e/ Q* B' [
# Z  M4 Y$ z' q: r  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
7 H' P) x8 D' H0 c. f/ m  i- k8 ?9 F
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. / ?7 i. I8 h& H- Z2 c1 G4 r
  子函数及演示程序:
  r# w( U3 V* B# @8 p- I0 a% g4 Y1 C$ k# Y+ u( J1 P
  #include<stdio.h>
) K0 e8 u4 }$ U; j: S& u  #include<dos.h>
( ]( t- D& E' m, R  #include<conio.h>
6 Q5 v+ _2 v4 s  ^0 h% c: e" x+ \- o6 c  o! J& M
  void goto_xy(int x,int y);
9 a- h* s% M9 @  void dcls(int x1,int x2,int y1,int y2);( ]. w2 s- A; S  p2 `
  void bcls(int x1,int x2,int y1,int y2);( G. `$ f1 r7 o) V" X: [
  void kcls(int x1,int x2,int y1,int y2);* [+ k6 Y0 q" C
  void recls(int x1,int x2,int y1,int y2);' ~7 m6 M& p9 l# {2 l" t
  void zcls(int x1,int x2,int y1,int y2);4 R9 I% V% c1 G/ \2 i# B5 d; b
  void puta(void);/ h! ?) z2 s" `: ?3 ~) M: v# R* }
8 L, ~. `" x2 T: s: A
3 @9 r7 Z8 p8 |( l5 ~1 y
  /*--------------演示程序---------------------*/
; ?# h5 ^. J1 e) e% R2 l" i: W0 z  main()! y) @2 H" Y+ o! x9 m1 c7 }- ~
  {+ s+ Y/ g# y( l( b
  puta();( t; {+ p; q- l6 M
  getch();
  s' J* s. ?; w0 k, |6 A/ D3 @' A  dcls(0,4,0,79);3 ?/ c( P4 U( B; r/ a* V3 T- x
  getch();
( [$ l: a6 ]) n  puta();
4 F1 i3 Y- D7 g0 ]* H! Z7 S  getch();
  }; P8 y) W7 y  bcls(0,25,0,79);
% S9 J: r4 w3 ?  getch();6 l" j) j" u0 C) R/ r
  puta();8 J/ C9 r! m9 C6 [; c
  getch();
; r7 o6 d3 D: l$ q5 L4 w  zcls(0,25,0,79);+ r" _" _# p8 h% {0 z/ a
  getch();0 w* |# I1 h/ |- X' S* x# h
  }
7 B* R8 f  R2 e  m  /*********center clear screen(中心清屏)***********/' x# r3 e9 }2 {
  void zcls(int x1,int x2,int y1,int y2)
7 @! x  D7 k6 `& E- R0 j# m$ j  {
3 z) s5 S% R% J( {& O$ j  int x00,y00,x0,y0,i,d;1 s8 U1 k' R& @. X9 C3 @
  if((y2-y1)>(x2-x1)){
: I, X0 v. u4 O; Y/ i" W6 k. s  d=(x2-x1)/2;
& e4 H+ S# i$ T2 ]1 }' R  x0=(x1+x2)/2;6 E! k- S" X$ i( p. r$ m
  y0=y1+d;7 v% E1 v1 Q0 i. x
  y00=y2-d;; L6 |  F  e6 k* ~
  for(i=0;i<(d+1);i++)
: F/ g' F& s% H( h  recls((x0-i),(x00+i),(y0-i),(y00+i));
3 z( x+ ]7 R7 K  delay(10);# B) R" O6 L9 k  O$ X( x: o0 T1 h- \
  }
7 }' T) k1 _& ^; C1 I  else{4 j: e2 L: q. ]  l$ ?/ ~
  d=(y2-y1)/2;- E7 o- P1 Q: w, ^4 O' t+ r7 R) J
  y0=(y1+y2)/2;/ h$ n  o! Y" [  c, [% N
  x0=x1+d;
$ ~! K$ ?" ~+ h) b3 N  x00=x2-d;2 C+ g4 Y* B0 o* e7 {5 N1 ^
  for(i=0;i<d+1;i++)
$ ?2 V4 L- ]# x, L( F; ?  recls(x0-i,x00+i,y0-i,y00+i);, _" G. w/ G( X+ i$ O0 M/ o
  delay(10);0 `1 p3 m2 g% O" Y& u& T" v. ?
  }. h9 g9 g: R( `. d2 v
  }
) X2 z9 L. ~1 D, \9 v2 V
/ W0 o. d3 _& e  h5 ]! y  /************* clear rectangle side(矩形边清屏)***********************/: I3 J, Q( v1 q* S" w

2 I; H+ _# X& U* H  void recls(int x1,int x2,int y1,int y2)3 T' f1 T+ W- t6 z
  {( M2 R' J2 J4 ^' I" R$ v
  int i,j;
+ u" ?! y, d0 f0 u# ]5 T5 I  a  for(i=y1;i<y2;i++){
7 L/ s% u! [  p3 u1 c( v    goto_xy(x1,i);( N1 Y" C. `% L  @' g
  putchar(' ');
; |3 q0 \2 c# h8 O1 V8 D  goto_xy(x2,i);
3 q0 [3 n: J" {/ @: s. J# A: q  putchar(' ');/ J1 F& R! Z; c" |, h2 I
  delay(10);
1 f: `0 U4 N: i* c+ P) U  }3 G0 C4 h- u8 b5 P2 w  R
  for(j=x1;j<x2;j++){; X3 u: t; F3 ?4 f
  goto_xy(i,y1);
2 L0 w& u' Y( n  J* T5 |" X  putchar(' ');
9 X' @5 ^5 V! }+ t" Q, h  goto_xy(j,y2);) O4 _  h& E* m  z2 H, X1 L
  putchar(' ');, |. n" g3 z4 a2 S
  delay(10);
( D4 f( u5 B) H: m4 [1 `  }
; J" C& b6 Y, _7 z& y  }
; R: F! H( w; Q6 h  /******************open screen clear(开屏式清屏)*********************/+ S$ G( n' v1 n& \* h

' h2 E6 A, E8 S+ I6 L  void kcls(int x1,int x2,int y1,int y2)( x4 N4 }. ]2 c/ \( m; ^0 y9 P
  {& E2 N0 I5 F6 T2 x
  int t,s,i,j;9 J9 Z! m' c" ?" V  E  J
  t=s=(y1+y2)/2;) y3 m. M- F) E$ u# ?
  for(;t<=y2;t++,s--)2 o  k! M0 Y9 t( L6 x
  for(j=x1;j<x2;j++){
4 O2 g7 U; Q5 u  goto_xy(j,t);
: ~2 G" m0 e/ K9 h! ?: t8 i  putchar(' ');7 O6 v' l# O+ C/ z: C! r
  goto_xy(j,s);
! s& l5 U( L/ a& N1 z  putchar(' ');+ A2 H6 a' |5 s$ q! K
  delay(10);
* ^7 L# U: d+ H% F6 ]6 A  }
0 W# `5 P" z5 A. i0 _3 U2 k  }2 c/ G: I) I: i8 c1 ~6 `7 T
  /*****************close screen clear*****闭幕式清屏*******************/
$ b# U8 p' G) o' y/ D, K3 o/ e* v3 I+ e) X' L- w$ @
  void bcls(int x1,int x2,int y1,int y2)
1 R6 A7 J5 r) `; {  {3 {5 j' {$ E( N: H
  int t,s,j;
% ]" v! @2 I3 |, E- ]  t=y1;# ?4 j% R4 M+ {% m- Z6 [
  s=y2;
3 m8 m1 g7 N6 s( A  for(t=y1;t<(y1+y2)/2;t++,s--)
/ R1 v. a: P# U7 n3 n5 [8 W  for(j=x1;j<x2;j++){
5 A& q/ p: M. j: W- V  goto_xy(j,t);
! K' k- Y' k& A2 ?. d7 O6 ?  putchar(' ');1 I6 t; O. Y& T% n" p. e7 E! c
  goto_xy(j,s);# z9 j& X! |5 s7 l
  putchar(' ');/ r* T6 E# x4 Y
  delay(10);
4 d3 i+ L$ t0 \& M4 E' I, v1 a7 B  }
, D6 @& ]6 D6 s+ Q/ u$ k  }
' d" V# |% S* T9 _0 @3 R  /******************bottom screen clear(自下清屏)********************/
" U, ]! P% i+ Z) @' l6 T
& s; g" t! J% N9 _! T  void dcls(int x1,int x2,int y1,int y2)
: I$ }8 E6 l- ~8 }! Z& O  {6 j* y2 y0 }4 G* l( y, |, r
  int t,s,j,i;0 I2 T# {  c7 t7 C# A" K
  t=s=(y1+y2)/2;
0 f2 y4 d* p2 h5 w$ I  for(j=x2;j>x1;j--)9 g, w5 K. V% E5 [& C4 {
  for(i=y1;i<y2;i++){
" k, \% [6 z' d  Y8 D: J  goto_xy(j,i);
" G$ w5 t6 F* q' W3 l/ h" u  putchar(' ');% e  B: G5 d4 N: _1 E( u
  delay(10);
" I. O4 o5 }. u/ ?" \  }; L2 [& H, Z% I/ y8 E. S
  }
6 |: T* L% k( m  y9 N4 {/ k1 \0 i  /******************设置光标子函数******************/
$ [' v9 k# ^  ]/ q- t7 U$ L. k( p8 K7 f8 O) S+ y
  void goto_xy(int x,int y)& y' I) {2 m# S" G
  {- x& @8 J' c7 `$ {8 R
  union REGS r;; Z6 |: g" c, _8 {
  r.h.ah=2;  b# ]: O2 D( K6 p( ~
  r.h.dl=y;
0 a7 U1 R3 F7 }8 `. v" q  r.h.dh=x;# @2 z3 X/ a; J; w6 t: Z# ]
  r.h.bh=0;$ F! Z. O6 C$ l1 S, X' n) ^3 p
  int86(0x10,&r,&r);( Z/ A) ]5 l) P8 W; t
  }
1 d3 a7 ?8 J! F+ J2 y4 c$ k
7 k; Y- Z6 p5 m- E+ [# d0 q( v  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
% C7 }4 t9 p3 M8 t' Y' ]7 V' c' x" J, e2 ?& a3 R3 W
  void puta(void)
6 q9 n3 Z* [/ x8 |& X8 |* V- N# t  {3 l5 [- }; @3 G8 `+ a& Y
  int i,j;
, Y4 |! h: ]  y  for(i=0;i<24;i++){5 J9 X6 X8 q; q" C- A4 ]% l; |
  for(j=0;j<79;j++){
: ~+ M* K! X$ x( Q( K7 H  goto_xy(i,j);+ l3 D" d# M9 n" F
  printf("a");
+ b( V. K5 j4 w+ [! ]) a) I* n  }, K+ L9 x- G' z- S# N
  }+ s8 |4 L% J5 t! v! }3 }. j
  }

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