返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
3 z2 X* a- r" z  H! N1 W) h- e+ M% V/ @
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里" q$ ?( d% D/ Q1 i: U: q3 J. |
! a! t6 b# E4 M7 }8 i% q
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
) P! N/ r  Y8 Q7 `8 s: }  子函数及演示程序:
0 R6 A5 O0 \" ]: J# h) Z; h" F! i4 N. A" ~% q3 L( ^  O
  #include<stdio.h>
/ W8 r+ Z& t, c& `/ T  #include<dos.h>5 C6 R( X. B' U) K/ b+ o, ]8 U9 v; J* ^% ~
  #include<conio.h>+ {- Z1 A) |0 o/ K- m( |/ `! `
- y$ l# o! z4 u# c$ ~, [
  void goto_xy(int x,int y);  N9 k: y+ l; `& X
  void dcls(int x1,int x2,int y1,int y2);
2 c* y2 `1 U0 j7 G4 Q3 O  void bcls(int x1,int x2,int y1,int y2);
8 {" J" h# Q8 y1 M( E  void kcls(int x1,int x2,int y1,int y2);
6 v! G+ n2 _) R; Y+ ^  void recls(int x1,int x2,int y1,int y2);  ?7 g* r, r8 L" [! m: K3 R
  void zcls(int x1,int x2,int y1,int y2);7 h- W5 M4 D! W
  void puta(void);# f9 k" z' ^, C8 h3 ?' u
0 u7 _% I+ H6 W6 e2 t6 o! {

) c9 Z4 g3 G: S! W  /*--------------演示程序---------------------*/8 O1 H4 x% W: `
  main()
8 L3 Y: b/ ?2 |' m: P  {% A( x9 N, R) @- K) K' s) {5 I5 M8 ^
  puta();1 g: ^; r- P+ q7 C- h
  getch();
& X: Y0 l* T( ^0 S; D  dcls(0,4,0,79);2 U& u: r0 e7 m0 I
  getch();& s; ]+ a" V4 p) U! \) V; b' }
  puta();2 _9 I! D$ [3 \7 f
  getch();! T; |/ p* n+ z* F, d6 v% @
  bcls(0,25,0,79);; \2 P, F+ `, m& D  o
  getch();  z# @8 `6 c5 O% n" v
  puta();
4 ?& D# W. h5 ^6 ?9 i  getch();, t6 i# j2 Z8 n; M4 i: O4 z
  zcls(0,25,0,79);
9 m( h0 S+ M9 ]$ h1 v) Z  getch();
% E" E2 j9 D& Z  }& J- G' S& l: i7 b: h$ |/ P( \
  /*********center clear screen(中心清屏)***********/2 [* Z# u: _+ ~8 I, u) ^* M7 y
  void zcls(int x1,int x2,int y1,int y2)  z( ]9 L! S' ?9 c
  {$ b$ U5 V6 L# g" q0 A
  int x00,y00,x0,y0,i,d;
$ c& w) E6 z  \6 A2 [& Y  if((y2-y1)>(x2-x1)){" z0 |5 x: ~/ x9 m+ z7 P; r% r
  d=(x2-x1)/2;! ]2 _* l$ C/ T- h1 m( H  X9 y
  x0=(x1+x2)/2;" F: c/ C7 h4 }  n
  y0=y1+d;3 N0 h8 j8 m& v; j2 F
  y00=y2-d;
+ K8 }' B4 t- N& T  q; L+ {3 e  for(i=0;i<(d+1);i++)
1 O; Q9 u" [6 {# v  recls((x0-i),(x00+i),(y0-i),(y00+i));
( e: }2 \. E) s$ R  delay(10);+ T: c% ?, Q3 A* {
  }8 P' S, ~" a5 U1 Q% |, ~
  else{$ B& ]3 Z5 E6 V. ~& V( K8 R
  d=(y2-y1)/2;4 @3 Y' C* \" V
  y0=(y1+y2)/2;
8 e" u7 _. v9 d' i- P8 C  x0=x1+d;
% s, k/ l7 E/ F! T4 f3 o- c( e& E  n  x00=x2-d;
, ^# J* l7 G& h/ i$ d  for(i=0;i<d+1;i++)8 A4 S- W6 ^9 H0 @, v( v! {3 L
  recls(x0-i,x00+i,y0-i,y00+i);
* o3 w+ \( g" K9 V3 Z9 S$ j- v  delay(10);
. \1 |) \# m/ G- n  }$ ?( m+ [: L% m8 D1 r; Y4 R
  }
& t. v3 K: X' r3 C/ e# K/ z
& Q# R' Z/ j4 Z1 V& X  /************* clear rectangle side(矩形边清屏)***********************/% B/ B: C, C( |4 F

  k  R% q) V0 ?" I/ t  void recls(int x1,int x2,int y1,int y2). \* ~1 T5 h2 B% c6 G- Y  _
  {. r$ F: k9 u* t6 R, \5 A+ Q! n) ~$ M
  int i,j;& ^4 O* g) c% X4 r' @
  for(i=y1;i<y2;i++){
6 ], r8 M- o# U( e$ H7 R! `% j6 e& R6 u    goto_xy(x1,i);: k& v. v9 ]6 E
  putchar(' ');
& s1 w8 k$ h+ N. ^' Q  z+ G1 K6 e  goto_xy(x2,i);$ L& ]! u: z! {% r4 u4 U! e
  putchar(' ');; Y- V3 F& v; h" O0 }; a/ ?
  delay(10);
; n3 o) X) m. Y) H( ^8 i  }7 o7 \: P4 Q# r- s" k0 c
  for(j=x1;j<x2;j++){
  m5 I' j5 o# A, z1 F( Z  goto_xy(i,y1);9 v4 V% s$ W# K- j" n3 m9 O
  putchar(' ');- ?1 N/ H# o3 e3 D, I2 S
  goto_xy(j,y2);
1 o( u4 _2 d$ O  X  putchar(' ');/ H( [7 J( v5 b, a3 X' S% F  w+ e
  delay(10);3 [; h! U1 d' v
  }
" B3 t$ `7 E( |4 r) V  }
9 v& K' _* z% S( J2 m  /******************open screen clear(开屏式清屏)*********************/
6 Q- `7 u) ~& L/ C  T3 G5 J
" q& t. z$ i; c8 T. x& s4 d  void kcls(int x1,int x2,int y1,int y2)5 q7 T% y7 m9 p8 Z: P. t3 Z. H. P
  {
8 G7 @! n' c# @  int t,s,i,j;; h6 J1 u% P; w( M9 E
  t=s=(y1+y2)/2;$ _, H9 ^1 c, [4 n2 U
  for(;t<=y2;t++,s--)
! q- R- d% P% B% V  for(j=x1;j<x2;j++){8 B0 K( ]+ ]0 W2 R
  goto_xy(j,t);- {0 ~* @! K8 W7 d% L
  putchar(' ');
" Q  H8 i% L8 e$ t  goto_xy(j,s);7 {- |6 h5 i; W/ Y+ c( Q
  putchar(' ');) L! A" L8 U. S% a
  delay(10);# q; H& ?- o* {; b9 i: X3 ~% d4 S2 t
  }+ q- B: p% q+ p$ x. i/ Z- p# z' R& c
  }
) o; O: U5 N1 m9 q  /*****************close screen clear*****闭幕式清屏*******************/
: d, K2 g- f* Y, X9 p( I1 K  H/ S4 ^( O: s
  void bcls(int x1,int x2,int y1,int y2)
. }7 n+ B3 W' `, V) y  {
% b" C: d3 C$ e  int t,s,j;1 p. S0 n% z& y1 b$ L9 W- O/ p
  t=y1;
& r6 j/ g: M; [8 V( R# e  s=y2;
* a4 y3 z2 E0 e/ j( b6 Z0 K  for(t=y1;t<(y1+y2)/2;t++,s--)
) l( N: {3 J1 `" F$ p: B  for(j=x1;j<x2;j++){
% X8 O7 U& u$ Z$ ]  goto_xy(j,t);
  N8 _# _/ T" L: i0 o3 `  putchar(' ');) ?1 ~$ p* t' s5 F$ B. L+ p
  goto_xy(j,s);3 M, P# l. S; L) o& }6 N
  putchar(' ');9 [- i7 K  P+ {; b3 F
  delay(10);
7 ~. s" `7 P, ?4 S' b. w. {  }  ]3 v- L/ f  m! }: y
  }5 }8 N3 t2 a* S0 v# \' \  b  u
  /******************bottom screen clear(自下清屏)********************/
: b1 {+ \7 G5 v! E) X. |
% E) {) ~$ U8 C8 \8 I+ V2 U  void dcls(int x1,int x2,int y1,int y2)
" ^4 |1 R3 H  M- n1 z- c, Z  {
! R- E5 g: H" j0 d; h& ?  int t,s,j,i;
; c, l) f+ G. C  j' ?+ Y  t=s=(y1+y2)/2;
7 d2 m$ V2 Q. n4 ~& g8 f2 k( N  for(j=x2;j>x1;j--)# i* M% `8 R8 ?
  for(i=y1;i<y2;i++){
% X1 i0 _1 C8 P  goto_xy(j,i);
- _0 }' n; ?! [+ _  putchar(' ');' h: V* N- c% w0 ^" ?/ Z
  delay(10);. E. Y' x! D1 M# C! X+ l- W
  }9 ?6 M# s# H: T; [$ u6 e: K
  }
! D6 |0 j, t5 Q) l5 m* D# k3 x  /******************设置光标子函数******************/3 L+ f- q, A  M5 j& s6 M' x+ k* R
9 f3 L5 E2 N# a& N& M3 `
  void goto_xy(int x,int y)
9 }+ |5 F* ?: ~7 i* I% W7 n  {
4 c, b' N- G; e: O, O  union REGS r;( j! |: l4 f8 o! K, ?  m, \# u
  r.h.ah=2;9 K) E% v3 f6 m3 y( u/ [
  r.h.dl=y;
: [" m' U' f0 k  r.h.dh=x;
4 F& A1 e9 J( }2 `5 J; X  N  r.h.bh=0;9 p, {- U4 k- n* Y9 |! k) I) H
  int86(0x10,&r,&r);$ ~# _: S5 S& `' W: ]
  }
/ i5 |7 H% D$ C5 Y' i' K* m
2 X' i' J! K+ Q, L% i  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
+ S5 m; b3 X8 E4 {  x. W% U
# N  c0 D/ B6 Z; L# l( v& a  void puta(void)
- a+ t3 x: P% ]  {! J0 d5 a3 h, O  f$ g! S" y
  int i,j;' b# u! h$ }% ?7 M
  for(i=0;i<24;i++){% \* u1 w1 B8 `4 R, ]3 @
  for(j=0;j<79;j++){
2 {, F* V! D5 @! J  goto_xy(i,j);; I2 V3 H7 f7 \: ~2 l
  printf("a");4 G" X! K7 D& E3 D) A1 M
  }' ?- F4 Z  |' [! }# `
  }
" v8 n. G+ C  X' p. r# \. _* S. |  }

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