获得本站免费赞助空间请点这里
返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
$ u! n# V3 j- q) R* s5 |2 Y5 G  c4 Z6 k
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
' r- N2 L- W( r) G% A1 i) J
# y- X: a' C5 A  P, }  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
9 ^* }: o- K% p: Z# U  子函数及演示程序:
. V4 U; A( H/ {: d) i; W9 O
- F" o( Z" N3 H  #include<stdio.h>) Q+ [5 h. A1 I- U5 [6 {
  #include<dos.h>
9 ^+ |) G& o" p5 }) R  #include<conio.h>
* U; H1 H% D+ `. W2 \) {( L7 E, t' Y& B: L
  void goto_xy(int x,int y);
$ l% |) U) [% G3 _5 K1 W  void dcls(int x1,int x2,int y1,int y2);
" x' D( n6 I" R3 {  void bcls(int x1,int x2,int y1,int y2);7 A% ~/ `1 C- u/ U8 h6 {
  void kcls(int x1,int x2,int y1,int y2);6 \5 N. l) A$ W& m, |5 Y& }8 m+ Y- i* ^
  void recls(int x1,int x2,int y1,int y2);9 J- Y. R  N( ?$ |* C: ]
  void zcls(int x1,int x2,int y1,int y2);
  X! G6 h, {  U, a; r* s" o1 j  void puta(void);
0 N0 ]2 {  z/ @% F  ^. p) e/ [# e4 P8 }4 M3 K" G7 D
& _8 v# B$ P9 t& O' n6 H$ Z+ Z
  /*--------------演示程序---------------------*/
5 F6 d7 a* ?  A3 V0 @  main()
1 [7 r6 d0 B! l4 j7 Z  {
/ A7 r3 M/ l0 h( N  puta();/ n6 ^7 ?+ z, E) }& k2 o$ O0 T
  getch();
$ u& j, G4 w8 i- j% d8 i& P  dcls(0,4,0,79);
( S* a7 b! o/ s2 D) a$ u. |8 H  getch();; V9 p  `( I! |$ w3 a6 r: Y; m$ k
  puta();
* s2 z2 |' v; @0 ~5 h; R  getch();. ]2 v- c  m  v
  bcls(0,25,0,79);- O% `( l2 ^" s: ^  p) F: v
  getch();) F/ S. d; K3 F) Q# L  B, k
  puta();
3 \, D3 t* Z, Q! }. k$ u  getch();& W" Q. C; I. J
  zcls(0,25,0,79);
; o" }; B& C  Y3 t8 v% E' j: k  getch();
- O; J- C0 _% h. S: w! C7 L  }2 p3 h! S$ h- e+ Q: i' v! O: z
  /*********center clear screen(中心清屏)***********/
/ G2 c; T0 r! b3 W% ]  void zcls(int x1,int x2,int y1,int y2)
3 E. _" j+ x) X  {
: ^) u; i8 G2 X7 v, n5 p! o0 E  int x00,y00,x0,y0,i,d;
! A9 R2 J) A$ q3 R6 M0 q6 L! D) |  if((y2-y1)>(x2-x1)){
! O" A1 R2 _2 _+ s/ u- e- O  d=(x2-x1)/2;
8 q1 v4 u6 \" z" p/ f6 p  x0=(x1+x2)/2;
6 k1 H! P  t+ Z- j  y0=y1+d;' H" C, d4 }" t6 N8 O, }$ ~
  y00=y2-d;
8 g8 R1 b: j$ k7 F* `$ t  for(i=0;i<(d+1);i++): I* ~9 A9 T( }3 i* `
  recls((x0-i),(x00+i),(y0-i),(y00+i));
0 o; U- e0 `7 ^) X  delay(10);  r1 T. e' V# D0 r5 }9 P
  }
( Y" z9 M1 ~' m4 c* Q, W  else{4 Q# Q1 i" c0 p. F" x
  d=(y2-y1)/2;# j5 |( h) n! f- a
  y0=(y1+y2)/2;
) P5 x* q5 t, a* H5 z" g  x0=x1+d;
7 l4 c  j/ {* ]! i; \( J+ m. G) N# r) K  x00=x2-d;5 b- m, n6 f5 B( T3 z: D7 x
  for(i=0;i<d+1;i++)% I3 k, R5 e% Y( a& u5 i
  recls(x0-i,x00+i,y0-i,y00+i);  S! |. }( a- q7 H( N/ g+ z  A
  delay(10);
4 {1 K- _8 M" Q4 ^0 e& c  Q+ q: {  }+ T* C. V; T' q% O
  }
+ N1 A. S$ {  o1 A0 m  s
7 d( h( V% a9 ?: K  /************* clear rectangle side(矩形边清屏)***********************/& J+ R" ~, a5 E! h( g

: [+ w5 ^( m+ v  void recls(int x1,int x2,int y1,int y2)2 }3 a4 V0 p0 N6 m6 o
  {
" P- }& a9 I! {3 q  int i,j;
7 a! l% S% D( k7 ~$ x  for(i=y1;i<y2;i++){. y) j. H* h! s  \
    goto_xy(x1,i);( M0 U- [, o) ^7 k/ C
  putchar(' ');" H! v5 B# S9 a/ w
  goto_xy(x2,i);
6 U" ]& j  h/ I  T; {9 `; ]  putchar(' ');
& d9 w1 M5 I5 A! O! W  delay(10);$ d8 I, P( b! k$ E( B% ~
  }
6 b; N3 t* Q: r0 O1 [# W  for(j=x1;j<x2;j++){
/ `# e: s" c1 D  T  goto_xy(i,y1);2 ]& S  h& G$ q( P6 ^& l
  putchar(' ');/ r7 d5 V1 j9 S1 {3 K
  goto_xy(j,y2);2 P; ^! d1 y' J' l: B
  putchar(' ');
# B% A7 p" }' z% S9 s9 l" M* [- K  delay(10);
, j7 q( g$ \& _  }
. o( ^  }! W  G$ o! i+ t) `  }# F  a/ |/ I# {, c% ^
  /******************open screen clear(开屏式清屏)*********************/7 g- d0 `8 }  t9 W; p. B
% s: w0 z* `. g* x( T7 x+ P+ z3 m
  void kcls(int x1,int x2,int y1,int y2)7 _! Q+ T: z  S/ l) h
  {# ?4 z; q! }0 A
  int t,s,i,j;4 o$ l6 x5 r* U( E0 F, \5 g
  t=s=(y1+y2)/2;
5 I! N9 G. R3 r$ c  L; s  for(;t<=y2;t++,s--)$ J+ _( d# r+ [$ I$ g
  for(j=x1;j<x2;j++){
- U$ ~) L( i% b) J3 L  goto_xy(j,t);
2 B. U# t- `+ z  putchar(' ');2 H3 W& x1 ~4 L: o4 w- L
  goto_xy(j,s);
, J# [6 i. Y+ D' T1 ]2 _2 Z  putchar(' ');
1 l' |# {! X0 [* {% A  delay(10);
! B+ v4 t+ R1 S; c# I, m' c. I. o; Y  }, ^: z5 b* n+ a
  }% c4 B* C- e9 h$ o& z
  /*****************close screen clear*****闭幕式清屏*******************/
/ l2 y9 ?  r  s% R  [+ s5 ?
$ X8 \# ]4 ?- I; \$ ^* ^  void bcls(int x1,int x2,int y1,int y2)8 n/ X$ Z( i/ j$ L
  {& x8 `' l; L0 Y
  int t,s,j;
! G* E" E: e( c6 `0 j  t=y1;
1 U8 p2 u- d( y7 {' Y) R! J* Z+ j  s=y2;: |. F) {1 H8 \3 c
  for(t=y1;t<(y1+y2)/2;t++,s--)
1 T$ o) q2 K: ^  for(j=x1;j<x2;j++){9 I6 h  ], H. c6 J4 [
  goto_xy(j,t);5 ]* b8 e0 i2 k  |7 g
  putchar(' ');. s7 C3 H5 C" [2 D
  goto_xy(j,s);) V4 f2 y% n8 ~0 d- S' G
  putchar(' ');
9 t. ]+ T& R  }. k3 x' K) L  delay(10);& w& O- I/ X0 b5 t  [( r
  }3 u0 G- }2 r$ J$ n$ v7 @1 \$ F
  }
3 u4 j$ A: J: q# V  w' e- O  /******************bottom screen clear(自下清屏)********************/
% E- c/ g* a! n/ q* u
6 B+ P$ \1 W5 ~3 F( m  void dcls(int x1,int x2,int y1,int y2)
5 a# C& @6 R- Y4 b  {1 O+ z/ D# n! F
  int t,s,j,i;( G! C$ R$ p( L( m
  t=s=(y1+y2)/2;" i4 k7 }* _; G2 F4 _5 n# }
  for(j=x2;j>x1;j--)( u1 F" }: h; W0 w- W
  for(i=y1;i<y2;i++){
% c0 S( s) A8 P  goto_xy(j,i);( w' h  x, M9 q. `
  putchar(' ');
. ?! d: i. |& y3 u( q* ?  delay(10);/ Z- W6 [) {" {1 B8 T4 D
  }8 {. {" |* F2 y7 T# u5 d: s% l
  }. F& Z6 e2 e' C& d! Y, Y
  /******************设置光标子函数******************/5 w+ T1 o" i+ @. U0 m
- k; g4 a% b- M2 g
  void goto_xy(int x,int y)
. |) `: I; B: Q$ u) t% K1 n  {
  e* y+ B, {- {9 l& d# A7 A  union REGS r;
' A7 d% w8 p( Z* o2 ]- Q, Y1 N  r.h.ah=2;
/ K5 z+ d" W3 d2 \- u" S+ Y  r.h.dl=y;* X" R+ _! A. b$ q! ^
  r.h.dh=x;
5 O. a9 ]$ B0 u4 k0 h  r.h.bh=0;* F( o7 W  o  v. e
  int86(0x10,&r,&r);
- C1 t3 C9 e5 G) c+ j- K+ A  }
1 [0 J( O/ T6 v! ]9 N7 j
/ {% X' w: L6 I& A5 K  /**********************在屏幕上打出一连串的a字母用于演示程序******************/% K8 E6 A/ S# n9 i
( [8 W+ j( Z- ?8 H) f# m
  void puta(void)
0 Z9 b7 Y& |7 L; x  {' ~* k4 q9 |  l9 C
  int i,j;0 E7 A% o0 M6 `: I
  for(i=0;i<24;i++){2 i% U7 W  @8 v
  for(j=0;j<79;j++){% L5 G7 g! o: Q0 l  d# {0 ^2 Q" y
  goto_xy(i,j);! n! ]1 Z  ?' i, S# J3 R
  printf("a");7 G3 c. z/ z  K* ]1 c, V
  }
9 t/ o9 K  u+ R  }
; c0 p7 f2 {/ `9 @6 p  }

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