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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,, t$ ?' Z+ [+ }( e6 K* G
4 v! T' S3 T) G6 R7 w& _
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里3 z7 D8 x) N2 n" s# r

: J% i) b! W: D& R6 [  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
0 d+ x7 k5 e) v/ H9 f  子函数及演示程序:8 D: B" E5 i% E3 s$ e
1 l+ I3 m! ~' ~( }) K  |. ]( L
  #include<stdio.h>
  C4 A& ]7 K9 z  `! D" f' c  #include<dos.h>
2 T" Q5 \+ d: o7 E8 g+ G, M1 E; F9 c& T  #include<conio.h>5 p2 e& _& |/ o4 L6 g, I( N

; L0 {6 }2 z7 }) L2 V1 J7 O  void goto_xy(int x,int y);! k- ?& G! \% i
  void dcls(int x1,int x2,int y1,int y2);
) c: @5 J2 L- T: D' o- j0 @  void bcls(int x1,int x2,int y1,int y2);
+ X  h2 C$ G: [: K8 E  void kcls(int x1,int x2,int y1,int y2);) I4 x2 e" S! l; R' A! q, L) Z
  void recls(int x1,int x2,int y1,int y2);
# H# ?! e7 z5 U$ o+ w8 w# \# t. k  void zcls(int x1,int x2,int y1,int y2);
% ]$ G* J& |- ?+ j# k% H* R  void puta(void);/ v9 g0 i8 x/ t

# ~0 P6 i+ H+ {6 z7 {, G- }) D# i# S* B: b) ]0 x
  /*--------------演示程序---------------------*/
+ z' y1 n- y' g/ K) x' d5 l  main()/ Y  o* h0 L! @6 A* I. [8 c
  {1 _& \* Z! R6 l* O% `" b
  puta();
& I9 y  f# v; ], j  getch();/ @6 m* g* G9 G: p2 e; a
  dcls(0,4,0,79);4 y7 U, |$ y8 T. _, e8 W% v
  getch();
2 {/ y6 W* r& j5 [7 c  puta();
8 y& U1 H- l% ^  i& {  getch();3 z4 a# t# o- ^/ ?, T
  bcls(0,25,0,79);
7 U; e$ d+ o. Q  p  getch();4 J/ z" ^3 V: L; \, H% t
  puta();% T, e3 `% c2 y8 x1 w; a1 Z, N0 m
  getch();3 n- {7 v/ W$ A3 @' C! S3 E% s
  zcls(0,25,0,79);
$ Q' Y- s: c/ \, |; t  x  getch();0 f( a2 \; }( f# b' c# p
  }! m4 g: J! {% J; L& k
  /*********center clear screen(中心清屏)***********/
7 W- S8 ?  t) K1 u- k& \1 |: d  void zcls(int x1,int x2,int y1,int y2)4 ?5 u  e3 v# P- F7 U' q
  {
9 W( W% r  w# z  int x00,y00,x0,y0,i,d;
, B9 w6 V  S; X0 K  if((y2-y1)>(x2-x1)){+ w3 D0 D7 s$ s: n) ^% A7 w9 o
  d=(x2-x1)/2;+ C$ r6 V0 Y, ~6 f3 F
  x0=(x1+x2)/2;
" @  V0 C- e5 K* S' K  y0=y1+d;
. _5 H" t& j& \0 j  {" Y  y00=y2-d;$ m9 ~: T7 s( `' d) a3 Y
  for(i=0;i<(d+1);i++)
" a1 p$ c$ x" w  recls((x0-i),(x00+i),(y0-i),(y00+i));
( I1 S$ D; g+ a6 E6 h  delay(10);
; P* z7 @+ d  d$ B# {- ]  Z  }- P1 h$ M# A% W( @7 W! A& W
  else{
1 a% }: q" L/ T# o3 D, u2 H/ z) ]6 T  d=(y2-y1)/2;
* U" q7 O: S2 u8 y" R2 [8 p4 a  y0=(y1+y2)/2;+ s: G6 S! R) B6 S, {
  x0=x1+d;
5 L! }0 F" U- P; w1 b  x00=x2-d;/ p' i6 ^1 Y- h7 E: P" p! V
  for(i=0;i<d+1;i++)
2 l9 N& h& j: o: `. S+ Y. g6 A# \  recls(x0-i,x00+i,y0-i,y00+i);1 _& a: N) I& Q& d8 G' X
  delay(10);
/ k! X* H0 \% u9 |  }' K9 `5 v- r3 S9 M
  }
0 P' H; M. B/ H, y& d
* o- n5 G. X6 c/ p. w. Q  /************* clear rectangle side(矩形边清屏)***********************/- h* W1 `% L5 y% [) |% J

* b8 V7 w; m7 H5 E: \  void recls(int x1,int x2,int y1,int y2)
9 S( m9 A* d+ z8 i1 H  {5 E* E. F2 o. t& f+ ^8 G' ]+ ^
  int i,j;( s7 _6 @0 ?- O' I9 a
  for(i=y1;i<y2;i++){
3 E/ A3 \7 k/ h- y* i    goto_xy(x1,i);
$ w* V* Q2 T5 q% j  putchar(' ');
  c/ c8 ?7 T( e( l9 k  goto_xy(x2,i);
6 J9 Z& u) Y2 }; |  putchar(' ');
4 y9 W7 X9 V( x! t2 K# x  delay(10);
2 L) ^8 F: t2 O' W1 R0 F  }
* Y4 |4 ^0 X3 d  for(j=x1;j<x2;j++){% M  F" R$ r3 `  ?$ X# ?
  goto_xy(i,y1);
2 N/ q0 i. g4 o6 ]  putchar(' ');
' K6 v9 z( A# t9 [# I0 X) p  goto_xy(j,y2);0 @; S5 N( V+ D: C3 a# w# @
  putchar(' ');# V, _& f! r* v6 |  a, X
  delay(10);
7 s$ ?0 ?* m/ {  o6 T/ j  }
* ^  p* p1 A! d# \" q! d8 L, A  }
! @, s/ X8 v2 T9 M2 ]; w; W% w: Q: M  /******************open screen clear(开屏式清屏)*********************/+ |" q+ P0 q# Y9 ?2 Z8 S! Q  f

+ I7 e8 V# ^# e  z6 l( y  void kcls(int x1,int x2,int y1,int y2), \9 U7 ~. k8 X, ]' J
  {, `2 ^6 A! q- v
  int t,s,i,j;
+ E! k" {9 j1 _  t=s=(y1+y2)/2;
' E$ _5 n# F% Y6 v. c  for(;t<=y2;t++,s--)' c2 i- D" w; o/ y
  for(j=x1;j<x2;j++){6 R+ D) `- S8 g; ]% a% W7 x
  goto_xy(j,t);
9 y: c% H% F! |6 R3 Z& n  putchar(' ');
- D( d8 l5 ?8 ^9 w6 U4 g7 Z+ v' _% j& {7 F  goto_xy(j,s);
# n$ q+ U5 {/ o6 I6 r  putchar(' ');
; f$ P" A  I# I# C/ g  delay(10);& p7 O4 l( q, m
  }
" h7 g& |. X/ p6 G$ e1 R  }
: S( T$ b5 A$ w% a" }; v  /*****************close screen clear*****闭幕式清屏*******************/
  K* f/ h; p5 q5 ]
8 ^& c5 S, i. k- R  P3 F  void bcls(int x1,int x2,int y1,int y2)! S# F: Q0 T9 d2 z! N
  {
, D$ q8 x: N' f$ y6 V7 w  v  int t,s,j;
& G& q' G( [3 r2 s  t=y1;- G: A) G. d. [& P% n
  s=y2;9 o4 J5 Y. v# R# x3 M) {
  for(t=y1;t<(y1+y2)/2;t++,s--)5 U; T1 h3 e& ^7 `
  for(j=x1;j<x2;j++){
. H1 Z9 o, ?, W3 A  goto_xy(j,t);
9 H8 ^* I# J% C6 C) ]) }  putchar(' ');3 w2 j( L- R4 i( B+ Y1 f
  goto_xy(j,s);
4 T2 t" p- [- |9 O8 p  F2 I1 R* ]% x# }  putchar(' ');
& x3 R0 u  }& G  delay(10);" y) A/ }& L, e0 ?
  }, l4 k+ C1 c2 b' p1 L' g" y6 H5 B
  }
/ U5 n  K3 ?0 T, ]7 s  /******************bottom screen clear(自下清屏)********************/3 [" C" I4 t5 m! _6 ^" @
" K& ?* @0 s6 y* c# x6 V2 m
  void dcls(int x1,int x2,int y1,int y2)
$ P" h. v" j: h& g  {
+ h  N& b$ K' y  int t,s,j,i;- H! l* N  G  h- `6 o( w
  t=s=(y1+y2)/2;
4 f; X9 X- o6 c6 f2 X+ x& k  for(j=x2;j>x1;j--)
' a, Q2 \5 g& ]5 K  for(i=y1;i<y2;i++){( n7 b  F, c0 b: J' r' l9 P* {0 \. f
  goto_xy(j,i);7 [3 |. Y$ |. z  u7 U0 q. z3 b
  putchar(' ');4 p# e  h' M) `- l$ a% Z, H
  delay(10);5 x! U5 {' Y, J, x, a
  }. l6 H) U* P6 D6 S: i/ X( f
  }0 x7 m% a/ D8 y% C
  /******************设置光标子函数******************/
/ `1 s  E; l6 b6 O. G! }( \, J( o% p2 F. g3 v3 C
  void goto_xy(int x,int y)
  m4 ]+ j- O1 j# g# z8 K. F, s  {
" r; Z% D! n# x: p  union REGS r;1 D7 c( E/ S/ B  P2 E
  r.h.ah=2;/ _+ g3 Q: _$ u( P$ o2 D- O# {
  r.h.dl=y;% e7 L9 O' _' y! o2 B3 Y" V/ M' S
  r.h.dh=x;
# R9 y9 h% V* {) q# U  r.h.bh=0;# B  \- k6 B* D9 V) r) `
  int86(0x10,&r,&r);
9 f8 P  \" w6 y3 `7 P  }6 j) @* c0 s* u7 l
" Q3 r5 u9 M' Y3 m
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 Z5 B' o1 j2 [3 b/ h' ~7 I
3 D# [# n5 o' H  void puta(void); m5 a; I  ^6 e7 @. E
  {
; B- d7 H! D1 ^' d0 b$ r  int i,j;1 H( q5 P; R' |/ {
  for(i=0;i<24;i++){8 `' G4 J  [, e+ f+ D3 d8 r6 R
  for(j=0;j<79;j++){7 {& {$ N8 ?9 l1 D. N
  goto_xy(i,j);
0 N! q. l/ k+ }2 Z8 {+ C2 h  printf("a");; S! H# i+ a+ M) Y* x
  }
2 R9 g  x& R7 W/ {) v! T/ P  }; A+ F- ^# B+ v: {' U9 p; P6 [- J
  }

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