返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,- @; s% o2 _- o5 o' k
0 M  x( H1 m: M4 `, Y
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里4 n5 E: Y/ ^# h) k6 {" w
' l- v& q3 H$ [; s& r
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
- [' b/ ~! _( r# r5 v6 u: Q8 f  子函数及演示程序:
% f% a% S! S( L* F
7 b/ y! E1 y' g2 {5 N  #include<stdio.h>+ w$ D" \: Y' e) d( F
  #include<dos.h>
3 @' V% l6 Z" I1 A  #include<conio.h>9 C7 P# v- k$ U. W& F0 }

# |& K& h% K& V4 u; ?  void goto_xy(int x,int y);! B: c* F3 S) s; R
  void dcls(int x1,int x2,int y1,int y2);7 F/ i/ J9 u+ \' V) |
  void bcls(int x1,int x2,int y1,int y2);
; m6 r' S2 L+ W( w  P! ~  void kcls(int x1,int x2,int y1,int y2);
4 i! O; [; N4 M/ F: t* e  void recls(int x1,int x2,int y1,int y2);
/ A: q, q% j% S2 E+ H/ g  void zcls(int x1,int x2,int y1,int y2);
6 F4 M; |. T+ d2 J% M! o  void puta(void);
  M5 o/ }. `2 u7 ~
. {- J! }! y1 k. P
  z8 l  W* a$ f) D1 P  /*--------------演示程序---------------------*/* [( m6 v, a6 p
  main()
, x8 j# `0 C. u8 X8 d7 [2 d  {9 D1 u7 O0 |3 j
  puta();" K1 |9 i, _2 O4 v9 S1 H' \% ]4 s4 t/ u
  getch();
# `% S# |! r5 M4 p  dcls(0,4,0,79);: x: [  e+ J; H& \
  getch();/ Q5 u1 r2 V1 ]9 @( r$ m2 y
  puta();, `/ F+ _% W1 m& j1 W  }
  getch();  f6 t. V0 p  P# a: Z) t
  bcls(0,25,0,79);
+ d3 |  l4 `+ A- y  getch();
, o7 S) O1 A, J2 k  puta();
  A- q  j- @1 v$ P; L- [$ C# I5 m$ @  getch();2 F5 h: O7 J* G# @- G
  zcls(0,25,0,79);
# M% p* `; U) \; e. l& f( Y5 Q  getch();& @/ l2 o) {* m  Q6 e
  }
" _7 m  Y# I, P9 P: x, x9 C  /*********center clear screen(中心清屏)***********/
: _' f3 X6 X; t/ B& t' v0 Z  void zcls(int x1,int x2,int y1,int y2)
+ P8 c! E" w4 Q8 G0 o$ e: i5 f  {
/ s5 r$ @2 |2 g  int x00,y00,x0,y0,i,d;! X+ c0 N# v& a' A; n) K6 q* Y4 i
  if((y2-y1)>(x2-x1)){
" a6 @: j$ F1 v2 L1 V2 N  d=(x2-x1)/2;, Z; Q) \# c) {+ D& {
  x0=(x1+x2)/2;5 y6 ?( W9 k3 a4 f
  y0=y1+d;5 c- @+ g9 G, B0 t* _- H5 z
  y00=y2-d;! a: i8 s& d5 w8 B
  for(i=0;i<(d+1);i++)
+ F- Z; O  O+ W- }) T  recls((x0-i),(x00+i),(y0-i),(y00+i));
% k1 Z' ?! J3 b, ]  L' ~: @, w2 u; v  delay(10);
9 W$ o9 Q/ N9 m; _  }
: E# b7 V9 L; Q6 G+ z  P  else{5 |3 v: x9 V0 z7 U; b0 E
  d=(y2-y1)/2;
2 ]5 }% H2 b% g2 B  y0=(y1+y2)/2;
# S& }  f9 ~% w8 }8 r  x0=x1+d;
# j2 d! u" j- X4 ?% F  x00=x2-d;# x$ q. U3 K" [+ c3 F/ R6 i9 \
  for(i=0;i<d+1;i++)
- M4 p6 y& V& o/ `2 R/ l$ U. x  recls(x0-i,x00+i,y0-i,y00+i);  K. @" a- L0 r9 \( O3 j
  delay(10);5 [0 Y4 ~7 o( H# p
  }2 \, l0 }- u. E4 B4 z
  }
' n# v/ M) i! h
! j0 k/ x# p& S+ {8 x' _7 R1 g0 e  /************* clear rectangle side(矩形边清屏)***********************/
6 Q5 Z( ]* Q/ B; ?4 f% |3 {- c! Q7 ^- {- H
  void recls(int x1,int x2,int y1,int y2)
) D# V* e0 I( O/ H  {. V" V# R( ]) ~+ o3 b" b
  int i,j;9 z" q  P1 a  a" C: f# }, d
  for(i=y1;i<y2;i++){6 f7 Y5 n3 r% _0 F8 t* O3 G7 Y+ e
    goto_xy(x1,i);  F+ r( G9 X- N
  putchar(' ');
" v! G# R# U) [; Z, f, s  goto_xy(x2,i);
! Q+ v( D8 q8 D. L" h* D2 Q# L  putchar(' ');$ v- @) h. w. S1 W. I$ \
  delay(10);' G1 ~" ~5 U: E; a) K& S
  }/ }3 i. I5 a' C2 K9 y' i' t+ h/ X
  for(j=x1;j<x2;j++){
* f: \  }% h' ]  goto_xy(i,y1);
; U5 ^9 M1 O: E) l: q, o! e  putchar(' ');2 z/ \$ D3 P6 H/ C5 a1 g
  goto_xy(j,y2);6 W* c0 k1 i- P! `' |7 U: q
  putchar(' ');
( f$ W& p# S; t6 F4 Z3 ~, d  i4 u  delay(10);3 I! ]  w  t: X9 f" a2 y
  }& v. O  D8 u' T5 K- D' C
  }
" w* H2 C4 ^* k; ]& @# ?+ f  /******************open screen clear(开屏式清屏)*********************/
0 g7 }) k1 ~$ h. V4 b1 t, R8 q+ m: U; r6 H9 B% `' \2 f, M4 t
  void kcls(int x1,int x2,int y1,int y2)
* i7 I' w1 Z$ C5 c* N4 D  {
; t' q( O7 f" A  int t,s,i,j;
" i/ g( h, f! w$ L* K. C0 o4 M  t=s=(y1+y2)/2;. R% B2 U9 P8 [
  for(;t<=y2;t++,s--)/ [8 C+ t/ Y: A8 Q2 b0 y$ z+ N
  for(j=x1;j<x2;j++){
; v* b5 B2 j* E6 r" |9 Q/ y  goto_xy(j,t);
1 }' I: l2 Q) J3 n. i, A; l  putchar(' ');
" l$ l1 Z4 m: X4 b# C# `# g  goto_xy(j,s);! n' c9 o0 o4 d0 Y/ v( A& c; ?* G
  putchar(' ');
: {: Y% y$ [) g* I/ j+ Y7 R  delay(10);. X% H% k4 I4 _) o  u, D
  }
8 h* @1 q" R: N6 e  }# s7 p. g) R1 w
  /*****************close screen clear*****闭幕式清屏*******************/
6 L8 Y7 s7 P- z
5 D! L% e: f/ z7 W  void bcls(int x1,int x2,int y1,int y2)
. [8 j2 n7 t" |+ B% A. |  {% q( `5 O! K- j6 n2 A9 N
  int t,s,j;
+ u+ e+ H- s4 S9 B. d1 W0 |8 `  t=y1;
5 e0 S+ v& ]; |1 x" n2 v$ _  s=y2;( J3 x) A* D! n% V: N% S
  for(t=y1;t<(y1+y2)/2;t++,s--)$ r8 H1 J( H, ^  K8 N
  for(j=x1;j<x2;j++){1 b8 E* d7 f" l9 _5 t
  goto_xy(j,t);; r& `" ~9 ?' _) t+ `* i( G7 \% h
  putchar(' ');$ D/ F8 b" X5 N6 g$ @$ {8 w
  goto_xy(j,s);: q7 ?" S  N0 i5 G1 X
  putchar(' ');3 }& V0 u' n) s, t6 H* H+ }6 [
  delay(10);
0 ~1 t! T! ~; P9 X  }
9 h& k3 J% ]+ V0 ]1 E  }
8 V0 y& w: h9 s  /******************bottom screen clear(自下清屏)********************/
! k8 [4 C; t$ Z3 y" {& R# F% n. E4 X6 ^8 X8 o0 U' P( ]6 P% B7 `
  void dcls(int x1,int x2,int y1,int y2)8 ]2 b: M# I% u3 u
  {
2 W3 }& r7 Z' c8 `6 ^' ~  int t,s,j,i;
6 z3 I" P3 l# f$ X  Y8 c8 E  t=s=(y1+y2)/2;7 B% y: O1 Z/ ~4 ~  D( a. h: f
  for(j=x2;j>x1;j--)- J9 T% h, B2 Q
  for(i=y1;i<y2;i++){- ^& c  g3 ?7 f- i8 n- f- x
  goto_xy(j,i);$ C3 r7 ]( r9 [3 C& ~
  putchar(' ');
( ?# e% t! Q* Z# ^# k6 B. d  delay(10);9 @( g3 q. ^: ~+ \  t0 _! X
  }
' P- e6 D  e# P3 f  }
6 O/ S2 I9 T' ^+ f7 t/ v! u  /******************设置光标子函数******************/
6 f+ O# j2 Q* s+ u9 _; s- w" x! V
! j! l! j; k8 m* A  void goto_xy(int x,int y)5 d- D' u. k9 S7 u/ L+ ~& l6 {4 Y
  {
  C0 _9 X) l7 `' p# [- _  union REGS r;
/ i  F# X: F2 Q/ y4 h& M5 ?0 o  r.h.ah=2;) }3 o) B: ^0 {7 h& X/ f) ?
  r.h.dl=y;
; x: M4 r6 ?( k; I$ `  r.h.dh=x;3 u( L" [* y* g2 ~5 k! G$ Z
  r.h.bh=0;  q9 _( C) Q. @3 U
  int86(0x10,&r,&r);- v; l! ~( w( i. x9 \* y3 J
  }0 e- D! s5 I! Q, y7 k$ z

/ y3 A: W8 O" j  /**********************在屏幕上打出一连串的a字母用于演示程序******************/& `! Y# E+ d1 U- ^' E

( b: ~- L9 p4 C. F* J1 m  void puta(void)
+ T" m! J, I9 Y* w* \5 E: f* b  Z  {  ?& f5 k6 ^# _0 O7 A, e% R
  int i,j;
$ i* F9 I. @$ A  for(i=0;i<24;i++){/ \7 M# z" X. K% t9 G% \
  for(j=0;j<79;j++){
* ^& c2 V) N* R7 }6 @3 q" q  goto_xy(i,j);
! N, w" ~2 P( V' f% R  printf("a");
2 l+ h4 I' Q/ O* O" P  }
. _' R$ z/ t7 z9 O7 y3 o. J  }
- S, U  T) T7 J% P4 O' R5 S2 \1 d  }

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