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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,7 m$ O: {0 q  g1 ?3 f+ _
1 X* Q& s9 d' ~: w) }$ L
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里, K, w% H9 {- H+ }( N. a( A) I! S3 l
5 f4 p9 l7 Y+ {% {& G
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. & B3 @* p  ?: C, \) O
  子函数及演示程序:
! {) |7 g& I8 m' M2 Y9 X9 o  ?* t! s5 _1 e  _+ F
  #include<stdio.h>$ n, d4 |7 g9 t- @( L$ J& x
  #include<dos.h># D  I% \9 e1 p2 S1 U5 O. g" e
  #include<conio.h>1 W$ a/ n- D# `; ]

& j+ A. I$ q0 y4 v8 d( ~. \8 J* w  void goto_xy(int x,int y);2 c6 k( P; g' V+ D6 d+ f' S# v. B' Y
  void dcls(int x1,int x2,int y1,int y2);
5 t! S- v8 ]# X4 U# M! q5 ]& J  void bcls(int x1,int x2,int y1,int y2);
0 C; a7 @) A' v) G  void kcls(int x1,int x2,int y1,int y2);  t  v0 L6 {9 o: j* B
  void recls(int x1,int x2,int y1,int y2);% _6 \% {3 ]  n" M& X% G. U( M
  void zcls(int x1,int x2,int y1,int y2);
( I7 \5 u; [# w1 \0 o  void puta(void);& y1 K/ {. O6 K% _5 _

" B  W* D8 `: [" F  s
) Q$ \8 i7 u; V& M9 [  /*--------------演示程序---------------------*/
1 _# |& h) ]4 {' ]4 ?, j% d  main()8 @& t9 p- [8 [$ L6 g% a+ U
  {
1 c( a1 M7 b8 ]/ H0 g  puta();; i. y/ c" ?$ W4 U9 p. a- w
  getch();
3 e, H5 C' y7 S" @  dcls(0,4,0,79);
( N9 X  V" @: m3 Z) _: _: F" |; R5 e  getch();
0 n# D; l7 K9 }( I  puta();
7 s9 Y0 a; \4 `  getch();
2 I+ @* u5 b$ Q1 }) j) a  bcls(0,25,0,79);# }9 ]3 _) e) M+ H9 [( T
  getch();
+ V! b8 K1 w2 [; X$ `  puta();+ P4 R& [8 A& a7 ]/ s8 V1 u
  getch();
4 z8 I) r/ T! M( v2 @  zcls(0,25,0,79);# e9 `. b4 }. |% l3 e7 k) t, P( z
  getch();
) {1 M$ _- w7 l% S  }
2 B$ C+ ~- b6 `. B  Z6 Q  /*********center clear screen(中心清屏)***********/
, `* f1 h! v/ x, z+ V3 I  void zcls(int x1,int x2,int y1,int y2)
) A: }8 J0 W9 `' W( Y* ~8 o  {! }  M4 q; [* M) S# x
  int x00,y00,x0,y0,i,d;
9 b- y% y3 m0 s* j  if((y2-y1)>(x2-x1)){
" J! C3 u6 J  m5 ^; ]" y; P  d=(x2-x1)/2;3 F* ~- j' c( U, }
  x0=(x1+x2)/2;3 a2 D& t( J: z" @. [
  y0=y1+d;( U0 w$ G5 F2 x
  y00=y2-d;
) K0 h- T$ u" _3 t4 Z; P  for(i=0;i<(d+1);i++)
! x! L, ?+ l' n# w5 S" F. {5 ^  recls((x0-i),(x00+i),(y0-i),(y00+i));0 C5 y/ h2 h* A. I& b: j( n
  delay(10);
/ I; B/ c' n9 @8 v; e+ e4 V  }
" |5 j. Y) e3 i& W  else{
4 d! E7 y& s: a. H  d=(y2-y1)/2;2 A/ D1 L& S& B, i4 _" d
  y0=(y1+y2)/2;
- n( z, Y" k/ r7 e2 ^  x0=x1+d;
: p% a+ V9 C9 g6 y6 y  x00=x2-d;, ~" e4 Q3 u! [* N! L4 A+ n
  for(i=0;i<d+1;i++)
& X7 M! s& d5 o6 H- B0 g  recls(x0-i,x00+i,y0-i,y00+i);
4 f& `/ f& x* z. E' P. a  n; `  delay(10);! i% K5 d5 X# [! _% {
  }
7 x. Y8 m& Z% c0 z  }, |% _) O+ V6 b' L( N. x: E

: e8 M2 L2 N6 z  i5 O! [) Q0 F  /************* clear rectangle side(矩形边清屏)***********************/
8 i6 l  G7 ~1 Q5 P% m8 u, Q/ y7 h7 a( g4 N, a3 Z
  void recls(int x1,int x2,int y1,int y2)) B7 ?7 w  w' T* K) R( f: G
  {. B' v8 f. z/ m( c  W8 y
  int i,j;7 ~: M" s# T, [9 }7 G
  for(i=y1;i<y2;i++){
' N' r/ U' J/ D3 D, h. k    goto_xy(x1,i);8 ^) R0 m! g$ `; u6 A
  putchar(' ');
% e3 V5 n' ?$ T3 y$ B+ m( W; q  goto_xy(x2,i);
. h8 r; t0 s/ n* {- O  putchar(' ');
; c- o8 I# k) N! s1 ?! a  delay(10);
) x" ~$ M. b- _1 r  }$ B* Y$ e! c2 @5 p0 a
  for(j=x1;j<x2;j++){
3 U5 e& F. V8 N6 b4 h  goto_xy(i,y1);# W$ H2 J  `( T! _
  putchar(' ');
! \1 j2 ]' f2 Q  goto_xy(j,y2);+ _9 ~) I! L0 x% X5 `; P/ M3 a- N
  putchar(' ');+ t/ M7 {( j% S) Q# V, f$ A4 ]3 c
  delay(10);$ a! M/ k) [. o
  }
' {( l/ `& W& k' R  }
' c. D# A& c, `* S' I$ K  /******************open screen clear(开屏式清屏)*********************/
/ f% {* s0 }' X' N5 c0 q  Z0 S- E2 p: ^: R
  void kcls(int x1,int x2,int y1,int y2)8 ~2 \: b# O% l
  {% w5 x$ _# Y( Q6 F5 l
  int t,s,i,j;
9 s5 b& @( c& U, O7 [  t=s=(y1+y2)/2;
8 v% S2 U4 V6 `, d- W0 A  for(;t<=y2;t++,s--)4 l% s% F: ?- X2 k
  for(j=x1;j<x2;j++){
  p, c3 ?) W- _7 |+ R' e# T  goto_xy(j,t);5 v+ y8 C* }  R  |1 C
  putchar(' ');
5 k2 c7 q' V1 z2 g6 O7 G  goto_xy(j,s);
' [  M' i& ~; T, Q' x" C  B  putchar(' ');0 p% q, d- d8 c) I0 @( b
  delay(10);
9 Y- H4 k# b* x; e, h' D  }% d% f, r, d! p/ j9 _% a, u% I
  }
! X7 j/ h8 J2 c  /*****************close screen clear*****闭幕式清屏*******************/9 l5 L4 @5 H6 q
& A" e! D0 |7 k$ `8 x
  void bcls(int x1,int x2,int y1,int y2)
$ v8 F+ }3 `7 Q7 y  J  {
; E& _1 W: ?8 ~+ g8 o/ l  int t,s,j;
' l$ n7 v' t* M% v4 u  t=y1;/ Q8 x5 L- q, Z
  s=y2;
1 q& p) |3 K6 X$ J' I' Y% o  for(t=y1;t<(y1+y2)/2;t++,s--)  L7 _# j$ t" \1 m& i
  for(j=x1;j<x2;j++){5 s; b4 y* Y9 Z9 Z' [
  goto_xy(j,t);$ i, C( N& x1 G3 ]3 Y- X7 E1 q3 z
  putchar(' ');
, R" Y) ]* o( P; Z  goto_xy(j,s);5 j$ Q7 I( A. Z( q6 z
  putchar(' ');( k6 w) o2 B7 [+ h- B2 F  n' b* {
  delay(10);4 h9 G( ]7 F# @2 Z2 w5 [
  }. k; y8 f4 P$ `+ i
  }
4 a  B1 O  [' I1 B* U  /******************bottom screen clear(自下清屏)********************/7 l: ]* p' W# |) j

# ~7 C) W, x9 ]3 o  void dcls(int x1,int x2,int y1,int y2)' m/ D! r% F1 q* m+ `
  {0 s4 Z$ p5 y% y+ `8 _7 f! w
  int t,s,j,i;
9 ^; `9 N: ^! G: j# m" v( U+ m& i  t=s=(y1+y2)/2;' N. E0 Q8 _6 L2 M
  for(j=x2;j>x1;j--)
* `0 a) I: t# S9 _: V, A4 f1 ]. j  for(i=y1;i<y2;i++){  y3 Z: `8 |$ v, Y
  goto_xy(j,i);. I( V; _7 P) W2 F
  putchar(' ');
- _( M% W, M  C! H% @" [  delay(10);4 P- G4 h/ v% Z+ N" P
  }
  q" V3 B: V$ ]/ q$ c  }
4 f5 C2 `! A# @  M4 |) \& W  /******************设置光标子函数******************// C5 J* D4 e, |2 p3 u

3 s( Q2 o6 x) A! j  void goto_xy(int x,int y)9 u3 r/ Z% `9 T4 Y
  {
) z" }- V" s( m7 W0 o8 R* m, `  union REGS r;
. F# k* u1 j* m1 q2 X' f  R  r.h.ah=2;
4 k9 ~4 [) R# v5 l5 I' q  r.h.dl=y;! F$ Z5 T' ]) g$ w) J
  r.h.dh=x;! H2 D/ W% t& m
  r.h.bh=0;. K. h9 o# e' k) t1 S& ~  J! `4 E
  int86(0x10,&r,&r);
  `5 ?  z) j! X+ f$ @6 x1 T  }
& L6 ~# K" W! ?
0 N2 ^' K: z7 c6 Q! p' H  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
& O9 e8 N- u2 u% a
3 x0 p8 f; u6 Y. u* X. R0 E6 Q; S  void puta(void)
+ h+ A8 g4 O- O2 j* l  {$ T8 k& e' Z$ l' b+ n
  int i,j;
' \: V( }5 o5 g: }; D) t8 M  for(i=0;i<24;i++){
* s- j6 O, `$ `3 s. B3 z( ?8 o8 H$ ~  for(j=0;j<79;j++){
# g5 B  P2 S# T5 N  goto_xy(i,j);
5 T+ X; |+ L5 m! y9 C5 E) I: g  printf("a");
, ]8 h. i2 `7 W1 O1 E8 |  }
, j* _+ Y% ]. g  }  X1 H, b+ g' u* h* C' `
  }

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