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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,4 I9 G) J; `: e9 Z8 \

; N  |( H  {4 x) ~" X3 Q$ @  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里6 A) ?: E$ W. S9 l. F! v: F
. o+ E$ \8 J, B
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 8 t7 w- Z5 S+ ?% R, u* i1 Q
  子函数及演示程序:
+ I$ b1 f+ b4 k$ N1 `  A: N! p9 H1 d2 \# j/ J5 ?
  #include<stdio.h>5 R" a2 J) O' d! N/ y/ V9 m7 y
  #include<dos.h>9 I5 F9 [6 f. c5 M* L+ H
  #include<conio.h>! I4 o6 ?; @% G  \+ {

) p6 U. I9 u( k$ W' o" j+ A  void goto_xy(int x,int y);
: A) e# G. C' m1 u  void dcls(int x1,int x2,int y1,int y2);
( }( C: T& M& ?  void bcls(int x1,int x2,int y1,int y2);
; C5 p5 O( Q; b" B, X2 @) |2 k' U  void kcls(int x1,int x2,int y1,int y2);
% E8 i9 m0 H$ j% G1 _6 M% ?: r  void recls(int x1,int x2,int y1,int y2);% n  ]6 o# B5 f) M+ N  b
  void zcls(int x1,int x2,int y1,int y2);
7 i, A+ L3 v' v! g' ~; M' p  void puta(void);6 f! r& b: A3 ~5 L
: J- |# o& p) k( ?6 Q
; H2 a6 V" ?! x0 `/ L- x' L. d
  /*--------------演示程序---------------------*/$ j, B, v6 j1 M5 c
  main()
  [' H& o; |  J) P: G( k  {
/ N0 T' l3 ~" @  puta();
9 s' ^% T- X4 n) G  getch();: ?! d1 Z& a0 U  |  Y6 {! d$ E0 r
  dcls(0,4,0,79);( E, i0 N1 e! q# g$ m' J
  getch();
' M: {% J; X( Q/ ?0 i  puta();
. K' l- A: h4 W* N  getch();& l4 u8 _) K* O
  bcls(0,25,0,79);
. q/ l: V) D2 A. a+ \0 H  getch();
) M# z; _5 I- x$ ^% ]  puta();, B  V0 I, I3 H; g3 D1 a
  getch();4 ?& B: ~0 S! ^% b
  zcls(0,25,0,79);
9 Y" l5 C: {% H# X/ V  e% A  getch();* }. u3 O  l( c- t9 {- A  Y" z; T
  }) _( j' h6 N( l1 c  ~  l/ v2 [0 M
  /*********center clear screen(中心清屏)***********/* E2 J! e& F/ h  a; [" e
  void zcls(int x1,int x2,int y1,int y2)  t+ Z! k/ p+ g9 ?/ T3 [
  {
$ ^: A1 g2 W2 \/ {7 M+ R  int x00,y00,x0,y0,i,d;) r1 F1 K: o3 y) N% [- K' d9 h: s/ k8 @
  if((y2-y1)>(x2-x1)){
; R( i; o: _3 `+ E0 @  d=(x2-x1)/2;/ F9 y2 t% |7 e0 b+ n) x
  x0=(x1+x2)/2;
% A8 g0 `+ @9 {  V, B9 r  y0=y1+d;
# L4 ^4 |; j: f4 y  y00=y2-d;
' T1 D# I0 o/ q6 X2 B: e  for(i=0;i<(d+1);i++)
( ]$ ^4 `; y, E+ v* x  recls((x0-i),(x00+i),(y0-i),(y00+i));
& @4 J9 M) P! A3 v1 J  delay(10);
8 Z% x; ^# S. a& @2 ~5 Y( Q  }
8 ], p7 }& o2 \: {  else{9 u* n+ M1 g2 F" g$ d# h. }
  d=(y2-y1)/2;
; p% j* B& J; Y; I  ^; u5 s  y0=(y1+y2)/2;
& I. c, l* j6 a2 I7 q+ D' {& x* l" p  x0=x1+d;
' [2 p! T* L' w% J' D3 g  x00=x2-d;
; @% \+ `8 [9 ~) V0 O  for(i=0;i<d+1;i++)% w. w* w* f& u* \7 u) @# V; F9 w
  recls(x0-i,x00+i,y0-i,y00+i);
' M# z, @8 w4 h0 J3 M' ^  delay(10);
: M. ?8 e- G: c" p2 b) m  }
$ B  m* ]; G' ~" _3 L! @  }
8 D0 y, G0 u7 ]2 l8 q) a3 g
) ?, Z0 o0 p& j  /************* clear rectangle side(矩形边清屏)***********************/
4 w) Q2 X9 M* i8 g) E' f! ?3 V( f. D. w7 \  c  a3 i
  void recls(int x1,int x2,int y1,int y2). i( D* m9 J+ _9 R" N# t" F) U
  {5 O" R9 d% H9 ^; W: f
  int i,j;
$ w7 }3 W9 x0 [  L/ S( K0 w  for(i=y1;i<y2;i++){
* L* V+ ?: ^' R& I    goto_xy(x1,i);
2 C/ m$ N+ `& g0 e- `  putchar(' ');: w/ n/ q  p. q# R  ]& f6 T
  goto_xy(x2,i);+ {2 n. o2 [. l7 W7 g
  putchar(' ');
, z5 Y, A" l8 D! I+ N  delay(10);
% X& Y2 O- x5 O  }$ b3 ^, R$ M$ d- Z4 \' P& ~: \
  for(j=x1;j<x2;j++){
) ]4 R7 U0 ?( M5 u% p& ]& B: o  goto_xy(i,y1);
; Q" |1 E4 c3 E+ x9 R  putchar(' ');
% N; C: T: V/ ~3 u  goto_xy(j,y2);0 M' E" Q& d. |$ G- @7 x9 s
  putchar(' ');
% d7 g0 }" U% z8 l  delay(10);
& X# J: @% m) c  }
( R% s! U7 M3 ]& X4 W  }# n, v" y7 R# B' S3 y: K7 t
  /******************open screen clear(开屏式清屏)*********************/3 E, l  d: D4 L# n3 Y- {

5 \& _( A3 Z7 Y! s. q  W/ k7 G  void kcls(int x1,int x2,int y1,int y2)
2 J* T# j1 b; R% J3 U8 V  {0 G( p, O" W3 D9 H. h+ o+ l
  int t,s,i,j;) j! w7 m% W$ c4 f# A$ J4 s
  t=s=(y1+y2)/2;# t7 n+ k% `8 _# |/ S
  for(;t<=y2;t++,s--)
- q7 s* c! Q  f& {# W) r3 s  for(j=x1;j<x2;j++){' j8 Z; w8 j9 v. \' S+ J5 U
  goto_xy(j,t);
4 |/ \5 o* E! D1 Q) U3 n4 A  putchar(' ');/ f7 f1 J$ B* |8 ^+ \- ~
  goto_xy(j,s);! I: t5 [9 L! a
  putchar(' ');
$ ]* I: Y6 L3 @0 e' I$ N5 d* e  delay(10);
4 M; v) r) n+ f. j' g  }  x. t0 }# C  V$ F
  }
0 d, S$ n! C' Q: S2 a! E  /*****************close screen clear*****闭幕式清屏*******************/
6 \- D, L9 c0 |+ g. b# l# R: D5 q3 F% C/ s
  void bcls(int x1,int x2,int y1,int y2): @! T5 o( v: e* ?: b
  {5 f% C0 @* \/ ~
  int t,s,j;" |/ n- U* T6 J1 ]* [
  t=y1;. S! J9 l' k; T& J6 x- |, M" d$ e
  s=y2;) j: e% w4 s! y+ c/ d7 C
  for(t=y1;t<(y1+y2)/2;t++,s--)' H8 n( Y, B9 F% T  F
  for(j=x1;j<x2;j++){- J% o" ~# S* t5 h3 u5 R7 a, O/ ]
  goto_xy(j,t);, a2 ^& {; }9 ~2 p# n9 C5 Y' t
  putchar(' ');- _( p) U9 _! q( J
  goto_xy(j,s);0 i, i/ f' e# ?; L. Y: R/ ~
  putchar(' ');1 ^. `4 f. b) w+ j3 l6 t/ m
  delay(10);
$ ^2 U8 @  M. s& H3 c: ^  }0 v2 K7 x, T' _! Y2 D
  }
0 E+ V$ B# H3 ]' f* k8 i7 [, \: f4 N  /******************bottom screen clear(自下清屏)********************/  |7 w1 v4 ~; ?) R
: M0 n5 J4 ]; z- f
  void dcls(int x1,int x2,int y1,int y2)
9 }' W9 \7 N6 d  A% l& k  {, q7 N4 p& f/ ?
  int t,s,j,i;
, G& ]8 A+ g% G0 U0 ^2 ~  t=s=(y1+y2)/2;5 ~) f" y! j( D
  for(j=x2;j>x1;j--)
+ m7 c. R! @  z' @" a! U  for(i=y1;i<y2;i++){" q4 U( u* [/ U( ~
  goto_xy(j,i);
2 g) N1 a4 u( Z. [0 ?3 @2 u/ \3 Y  putchar(' ');
/ \+ J( D+ T) Z. S$ a. {/ W" A) L  delay(10);# k" a6 [& \' s! X$ @  c
  }
& g! H$ M  r3 I6 y& r8 Y/ G2 L8 }  }6 q/ n/ C8 H! ^5 v
  /******************设置光标子函数******************/0 r+ d1 K. D8 y0 L; L$ _( I( [4 ~
: b6 l# e# S9 O+ Q' u( J4 ]
  void goto_xy(int x,int y)# N. C) V9 F; x/ S7 @; S, ^" s
  {0 n1 e! j, |+ Z- m( j
  union REGS r;+ k. x+ M6 a2 n8 S: o
  r.h.ah=2;
# a# F7 G$ V& F0 D: `7 p  r.h.dl=y;
/ v' Q/ U; n& O/ b  r.h.dh=x;3 y( ^3 U4 u' l0 e; S$ K
  r.h.bh=0;
7 E: D1 {" A# G5 s; A! p  int86(0x10,&r,&r);
4 x) E& A& v6 _( B( E& N  }0 Z& T" L! k/ ^5 F9 Q

: ]. H8 ^! J* a& Y4 J  /**********************在屏幕上打出一连串的a字母用于演示程序******************/, ]- `1 X+ c1 N9 K) }

2 O: ?4 A, i" e$ ~0 x$ o# Q9 L  void puta(void)
' A4 Z$ f4 z  O( N1 w% c2 r9 o$ o  {& Z1 e. h5 M1 _3 y
  int i,j;8 t6 ^6 u2 y: S
  for(i=0;i<24;i++){0 K5 s7 B, r. F2 ^3 ~9 a2 |
  for(j=0;j<79;j++){2 A2 c& C6 k' C  b) g# z
  goto_xy(i,j);$ |) c& Z  [. G
  printf("a");
5 i: n3 S0 S8 J! Y& ^& l  }
' {: X' Y" w# _& n  u  }+ }& v* S- ^7 z" ~1 S0 O) e
  }

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