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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
( ?$ f$ E- x9 R) F$ u- m% E7 @$ Q# I  u/ b9 q% i5 H
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里- h* e8 d9 y$ g: Q7 M/ n
; [  D. x3 s' m& ^0 w0 a
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 2 y. k9 }$ j+ R) h8 }; t5 m
  子函数及演示程序:' e6 d+ m6 W9 F" l

2 C7 ]7 s; o4 L% h. X' \- F  #include<stdio.h>
% a. F" p/ P4 N# \% H6 B' h  #include<dos.h>
9 E$ Y1 O2 j* f  #include<conio.h>( y: o7 g- M7 Q2 \2 l- H" d! s7 @3 ]' h
6 L! G1 i7 S& r8 Y" _3 G  S
  void goto_xy(int x,int y);
* a  U3 r, P/ G0 y  void dcls(int x1,int x2,int y1,int y2);6 T* T" _' D# u, O, B9 r5 L
  void bcls(int x1,int x2,int y1,int y2);
, ]" O  S/ t2 y  void kcls(int x1,int x2,int y1,int y2);4 N$ E0 m1 o5 y3 p- v+ Z
  void recls(int x1,int x2,int y1,int y2);- r0 C$ V; R1 A# T/ r9 z2 I& }4 }
  void zcls(int x1,int x2,int y1,int y2);
! J1 s. ?5 Y) [8 ~7 [3 D! M; i  void puta(void);4 b# v2 _( K: y/ g5 m2 f( \1 ]: E
( k5 F7 L$ v# n5 _- [) u" d

+ M4 H5 ?$ @, P* @0 \, E9 W  /*--------------演示程序---------------------*/7 z$ a6 \/ D7 J0 I( Q8 P3 v
  main()* g* x3 Y! E8 k/ H  g; u- e5 ^
  {
& s* h! }, Y  w+ r& h  puta();
- V" X1 q- a9 ~+ A6 M  getch();5 m" f9 s  k7 P0 b; O4 F& S
  dcls(0,4,0,79);- f0 F0 c8 S; H8 v0 L" _3 \5 i! ]4 m
  getch();
4 W! o* }" H- F" B4 v. Z# h. N  puta();' g6 ]! i3 ?# h* b0 v7 c
  getch();
2 A/ P: ]5 q) X  bcls(0,25,0,79);
. j, K" J" V, Z; g( ^0 t  getch();9 k5 L+ ~9 I0 \
  puta();7 V$ T% x0 @9 \8 c
  getch();
+ Z1 Q& N: K4 g7 o  zcls(0,25,0,79);6 Y, _  y; S+ ~. E' h
  getch();
0 H% Z/ [, a# r# A* x/ x  }
$ e( G& ]- w* ~& `  /*********center clear screen(中心清屏)***********/- L" s8 i3 {+ X
  void zcls(int x1,int x2,int y1,int y2)
0 E! A, V8 L/ D" ~' l9 c* F  {
# e1 v" i2 h4 n: K- y1 y  int x00,y00,x0,y0,i,d;2 d! D" {# t7 D+ h# B; |; I
  if((y2-y1)>(x2-x1)){
# L/ u5 B4 z1 l' R' l1 ]  d=(x2-x1)/2;8 H2 o  W9 O: T' c  A
  x0=(x1+x2)/2;: [% Y3 [; b! m' D6 Q- `+ M) n2 d
  y0=y1+d;
- z9 j8 D5 r# r: f7 D  V  y00=y2-d;
. R8 c, @, j+ A1 J  for(i=0;i<(d+1);i++)
: P9 f5 K  S. E. y( Y* b& d( W  recls((x0-i),(x00+i),(y0-i),(y00+i));, [4 z, I7 \0 |
  delay(10);4 I) H9 v2 i2 P; @' W
  }3 f/ ]/ l9 N  @9 A; R$ ]
  else{# v% k0 u8 B5 u# o
  d=(y2-y1)/2;1 g& M8 w  }4 B1 L7 s; y
  y0=(y1+y2)/2;+ W3 \7 U5 ]' O  t' V! T% _
  x0=x1+d;
1 j1 a( T% b) f* ]9 j& x  }& S8 }  x00=x2-d;
1 q, k, v0 m& u; T& R- i  for(i=0;i<d+1;i++)( X. V; l7 C7 Z% R: @/ @$ b8 @/ D
  recls(x0-i,x00+i,y0-i,y00+i);: |0 H; G' h! ^) ?2 ^
  delay(10);, L2 i1 }' R) p6 F% N( T5 s
  }
( n# @, B, l8 w: |3 j4 w  }3 e. `- y% v6 X$ B$ B0 `  t

/ `2 e* I; s1 [/ q- g  /************* clear rectangle side(矩形边清屏)***********************/
7 }1 Y0 G/ J  a! x& L; H6 C3 o+ a* A5 c( S
  void recls(int x1,int x2,int y1,int y2)
2 L: T1 d* S' e# c3 i  {0 S) ]; N+ n* h2 {  U* x9 m/ W
  int i,j;
/ p3 [9 y1 ^+ h0 J, E/ u, [  for(i=y1;i<y2;i++){; h: Q% s* j2 k" p9 o6 b
    goto_xy(x1,i);- g( {5 ^) o7 l& {; o
  putchar(' ');
7 b' u. A. L& @) M% h2 X  goto_xy(x2,i);1 b  q6 V$ b& X) l# c$ f. k) \
  putchar(' ');
$ T. F* k5 d. ^9 u+ @8 l3 B  delay(10);
  M" Q+ D1 g0 R# l  }2 B" ]5 v7 O6 u$ d, s- ^
  for(j=x1;j<x2;j++){5 Y' E, G4 H4 H3 |0 V
  goto_xy(i,y1);
& b7 b1 A, _9 u! s  putchar(' ');
9 @: T/ u, q$ D. L$ E" b  goto_xy(j,y2);
* e( J* u: \$ y  putchar(' ');
  f# F- Q9 {% w4 s& O  delay(10);$ e0 y1 ?# ^, n- Q
  }
) R7 B, @; E6 c$ e3 @  }
# o! L* `* @$ [6 t7 G/ w  /******************open screen clear(开屏式清屏)*********************/
. r$ K6 v+ n, x% ^: U2 H3 a) o% L9 s. Q6 \/ J- `5 e
  void kcls(int x1,int x2,int y1,int y2)
; B7 H4 L  K  {# b  {
7 u7 l; {; a$ `  T  X9 ?  int t,s,i,j;
+ t: B6 ~$ }5 U6 B  t=s=(y1+y2)/2;# z. j( Y, u- @0 e2 U1 R0 \
  for(;t<=y2;t++,s--)( N+ n9 D5 \* q
  for(j=x1;j<x2;j++){7 j4 Z+ S3 A; b0 }% e( o1 C
  goto_xy(j,t);! k; r1 v& }( \+ j- ^, L
  putchar(' ');" c( [- }. i$ Z/ e3 j% h( J
  goto_xy(j,s);
# u: f) }$ u% @0 u4 ], D  putchar(' ');
# _" n3 c* p$ |! u) z- b! o  delay(10);! O3 `! _) q6 \) I: ]5 _/ I# |
  }) B8 r1 O! z; y& J- E/ L, }9 k. d
  }! _  y2 l, W4 i
  /*****************close screen clear*****闭幕式清屏*******************/1 D" {+ m0 `  Y. K: J1 u" ]( g
; S3 S% ]5 A7 [! ?1 Z
  void bcls(int x1,int x2,int y1,int y2)/ [; p8 f+ F! ?$ u  r! r
  {
3 k8 g3 K4 y% u3 u) y$ V* _+ E- [  int t,s,j;5 x) y' z  a3 S# ?. T+ i6 ~
  t=y1;
2 W$ H# n! s- X6 y: K2 ]  s=y2;
& ]4 f3 v" o4 w1 J  for(t=y1;t<(y1+y2)/2;t++,s--)  ?! A6 |9 E4 I6 J
  for(j=x1;j<x2;j++){- F: o; ?( E# r
  goto_xy(j,t);) A8 R" F. ?) c2 |; x% `+ w; _
  putchar(' ');: r; e$ a3 f- i: F- O1 a! h/ ^
  goto_xy(j,s);
: X5 j" W2 p9 k1 n2 z* u2 ]" f  putchar(' ');
& g% A  @3 Q/ b- A( P2 b- G  delay(10);2 U9 J6 N& z0 Z6 P* C2 Z
  }
  V8 F* i4 D- y3 L  }
7 i! ^0 V: d1 Z+ J% u, A. {. Q5 l  /******************bottom screen clear(自下清屏)********************/
+ ?4 ~9 V2 G4 S7 y% x6 t( s4 ?) N3 l' ]' n, |* X! x
  void dcls(int x1,int x2,int y1,int y2)
6 o" X1 C6 O8 T9 J6 l0 i6 y! j3 G) ?  {
& q% Y! p, d7 \# q3 n- l% b; ]* @  int t,s,j,i;* k# Z$ c" @" [+ p) k0 F  K6 W
  t=s=(y1+y2)/2;
; w; K0 K+ ^9 L8 X  for(j=x2;j>x1;j--)
- O' [; P% D' W3 J  for(i=y1;i<y2;i++){3 K1 @1 L- q% C1 X
  goto_xy(j,i);
4 X7 y& M  p8 q2 Z9 G3 N  M; R! f  M  putchar(' ');8 z& Y6 }) @+ t+ I. k. l
  delay(10);$ z( A1 T7 g% @2 r) z/ p- w
  }) v0 w+ N' Y9 v( s7 ~
  }( J# e: s( e, s0 O. u4 g
  /******************设置光标子函数******************/2 P, N- t$ _% H* j5 e4 C0 ^

( \9 m9 p; Y$ L5 w$ e9 b  void goto_xy(int x,int y)
' I( g" I0 E; r+ h6 g/ ~  {
' ~6 u2 ]) M( L  union REGS r;3 }+ i# [5 `) Q" ]
  r.h.ah=2;9 z8 m( M$ }' S' M2 P) V
  r.h.dl=y;% v. H  y, ]+ B) ^4 L9 k- J" L' K
  r.h.dh=x;7 }- e2 B/ }( p/ o5 B0 _! z* a. a
  r.h.bh=0;
  h0 p& W% [& p( k3 w  int86(0x10,&r,&r);
7 J* R! c2 Z+ \5 v' H7 C+ B% Y  }
! X; F& B: l" o2 V" c) W# {3 |: A9 S
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
/ b- f3 T9 W6 D% \. p+ B" G5 J4 c" K7 Q
  void puta(void)' q6 ?3 O) ?0 v! j7 g/ A5 [/ R1 u7 n
  {
9 T$ G  p5 s9 W  int i,j;0 O# @+ d& A4 o; f
  for(i=0;i<24;i++){
3 M9 v0 Y; x" F& h; z. @( w  for(j=0;j<79;j++){
- L* `& [/ [. f; I6 O& u; S  goto_xy(i,j);
/ ?; k! i& Q9 j& w  printf("a");7 y) I! x! R8 _3 E5 K
  }7 }4 O3 O0 x0 \( f
  }
) ]9 q) z: _7 G7 n0 I- z' l" R  }

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