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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,+ ^8 @+ }6 a  I/ O9 N0 ~! ]! {, Z

, U7 c7 ?/ @# }- o  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
' C% Y5 e& R+ n' i! X
  N+ [, z# a2 q# W  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
' Y9 S8 n) \( ?" H  子函数及演示程序:
+ v6 F8 n0 T1 [/ S2 ~- Y6 ~: S2 {8 A% I  _1 }/ L
  #include<stdio.h>
9 j+ o2 A' D1 }! A- Y. K  @* q  #include<dos.h>
; P4 G( ]) C4 `, Y. k9 ]; E0 J  #include<conio.h>
+ o( `# Y8 F: z5 D
8 A6 K% ^/ M9 B5 f. i% C  void goto_xy(int x,int y);) q6 t* B, t7 k3 _+ Z! Q
  void dcls(int x1,int x2,int y1,int y2);0 n, z+ Q1 f) ?3 l; [) n" m; ]3 W
  void bcls(int x1,int x2,int y1,int y2);
4 _+ a+ i9 R1 l( m  Z  void kcls(int x1,int x2,int y1,int y2);. [6 u9 F% }8 N1 ?+ g
  void recls(int x1,int x2,int y1,int y2);) R& t' U, s" o& B6 r# b5 p
  void zcls(int x1,int x2,int y1,int y2);2 l. T/ E" }+ H* T" O9 H
  void puta(void);
: f0 C% Z  {+ ~
9 s- f- x2 v) O; P4 g& r4 j
; b) t) [8 s8 v, O' a1 g7 e8 \  /*--------------演示程序---------------------*/( q7 F# d& V. I
  main(). b+ r2 v& R! ~. c
  {
2 O; L  q3 E; t- P9 q$ y' w# J  puta();% w0 P+ x7 x! Q9 ]
  getch();# i, L( V/ ]2 B5 z. C" U4 {  b
  dcls(0,4,0,79);
) `( O1 S/ l. J  _0 L: A  getch();
. x- t# n$ O8 h, ]3 ]  M  puta();" V7 t/ Z* x* @2 H
  getch();
9 Z4 [/ o" p$ u  bcls(0,25,0,79);% `1 @6 ^# \8 v1 C. g) F# e
  getch();
: f: H9 Y  S& ~2 J8 U, k  puta();( O; n# N) _% s+ L3 T! r+ t$ }4 Q$ G
  getch();
6 c% u5 m+ l" b- n/ q# S& n  zcls(0,25,0,79);
2 F6 u- m/ Q; t6 U! d5 s  getch();
& X' C" T" T4 p4 M9 A  }
" f; C% \' ^3 R8 M/ z! t% q9 B3 [; ]" U  /*********center clear screen(中心清屏)***********/
3 x9 C0 H# a: H1 U7 v) r  void zcls(int x1,int x2,int y1,int y2)
. K0 @4 z4 ]  a- F7 A  {
# ~: k9 z5 D4 t( L, H/ [$ o  r7 q  int x00,y00,x0,y0,i,d;* N9 _- u% _' R8 T! c4 @
  if((y2-y1)>(x2-x1)){& \; E. x' I( a( ^3 {/ m
  d=(x2-x1)/2;
- B& B' m  M* P: @  x0=(x1+x2)/2;
, D2 C+ X! \5 j! ]1 ]3 T  y0=y1+d;& i/ L1 _' d4 p; \  Y
  y00=y2-d;9 y* y3 a0 @' _# D+ ?4 b" \
  for(i=0;i<(d+1);i++)) E% z' c8 C0 P0 y: @
  recls((x0-i),(x00+i),(y0-i),(y00+i));1 c' }$ p8 C+ q( \$ E
  delay(10);
. f9 s- R9 R8 {3 ]! y; W  }/ {  A1 g& s: {5 B  X! o
  else{
  |% H" k; Y0 T, H8 ^  d=(y2-y1)/2;
7 K" I$ r& {9 x  y0=(y1+y2)/2;3 ], C; O% W, B! G3 m+ o  @
  x0=x1+d;
: _: i$ V6 ^% P) p  x00=x2-d;
5 J9 Y# N! k! r9 ^6 ]  for(i=0;i<d+1;i++)9 J2 n3 B/ f  _1 o! s8 P
  recls(x0-i,x00+i,y0-i,y00+i);/ k, d/ a# V/ C+ x- f
  delay(10);
8 z# N7 n. o( P% _; X  }
, ?2 n) a/ E% {" \  U  }
$ v" F4 I) O5 |' k$ |, C- P) S: v) F4 x
  /************* clear rectangle side(矩形边清屏)***********************/9 K* {3 V% A( L6 Y' w

/ Q* ^! ?/ s4 M% j0 N* ]  void recls(int x1,int x2,int y1,int y2)
6 C" Z! k! M* x% \7 |; \& p$ C  {
7 Q* Z2 \2 l' G7 @9 K- g  int i,j;( |1 x! g* N1 _  X6 R$ Q) D
  for(i=y1;i<y2;i++){+ v. v1 P/ M, \1 f
    goto_xy(x1,i);
+ A) L8 H$ @* u3 z1 C2 L- Q  putchar(' ');2 H% ~7 H" H. e% @: [. J* z2 X* ~
  goto_xy(x2,i);# A0 i8 R$ G7 L7 E; r0 l. u3 K' b
  putchar(' ');
( {, ?1 l. B/ a* O7 s* G  delay(10);& E; Q4 X* D- |# c) g- ]
  }
' c2 F! q2 C7 ^' M; E7 h# M8 ~  for(j=x1;j<x2;j++){/ B' \; v- [8 }9 x
  goto_xy(i,y1);
4 d# M8 Q9 p, Z; o! h  @  putchar(' ');# j3 M( K0 s: W: l
  goto_xy(j,y2);
2 t/ b$ y" }& N' G1 ]; z, f  putchar(' ');
, J) P" c) a( e7 X: f3 {  delay(10);3 Z5 s. X6 R; Y
  }8 B. A/ W& J% ]6 H0 _) v
  }
, ]1 Q2 ]# Z7 G  W: B1 Y; m  /******************open screen clear(开屏式清屏)*********************/$ j& L( @, B# F# i. a: Q
* N5 O5 M/ y" a- C3 z
  void kcls(int x1,int x2,int y1,int y2): W+ A+ X% l+ L5 x" I$ d2 H
  {3 `5 J# r$ q! P) l3 w
  int t,s,i,j;
' H4 _/ J& B: ?- a  t=s=(y1+y2)/2;9 a' l. H+ S% Q2 `* C# l
  for(;t<=y2;t++,s--)
0 D+ ~& ?- X  J  for(j=x1;j<x2;j++){/ s# B5 s! s7 L  c4 p! {
  goto_xy(j,t);
- n4 b% _' O* `" O+ H0 v5 `& u  putchar(' ');/ [$ H2 A% q  v3 [7 i" l4 Y
  goto_xy(j,s);
$ G  Q" q( h# h$ h  putchar(' ');1 l5 {$ m$ G2 S/ e
  delay(10);
& e1 F% L: n6 }8 T# Y! H8 m  }+ [$ J6 h5 s' t1 }
  }; H. ]- G  h+ E
  /*****************close screen clear*****闭幕式清屏*******************/
5 i: f+ Y0 o. Y! F1 j# `
( z1 B8 u+ U5 G* v/ a; E7 p1 e" B  void bcls(int x1,int x2,int y1,int y2)
# n% a8 P& _% O5 y2 H  {
$ Y& g/ l( U' \1 W! a  int t,s,j;* @8 e2 f6 }  {! ?5 `0 a
  t=y1;
- y  \7 P0 _& e# [  M& d$ `  s=y2;1 \3 \- o! W9 Y6 }
  for(t=y1;t<(y1+y2)/2;t++,s--)1 D$ N/ G; o2 F) o
  for(j=x1;j<x2;j++){
9 e. q! {" ^. U- i- ^  goto_xy(j,t);
$ ?! i$ Y% _6 o- I+ G  putchar(' ');
9 h6 B5 ?9 M2 K; p  goto_xy(j,s);* X% o* F8 b& F
  putchar(' ');
' v8 a4 u: {4 M  delay(10);
# h: K3 |- L4 L9 X5 N  }) Q. ~; }  E( y5 G% z
  }* `- G* G# s; I) J
  /******************bottom screen clear(自下清屏)********************/
% H: F! U+ \) [& j: [! j7 G' z  e! f. W& R( \  \( ~6 e
  void dcls(int x1,int x2,int y1,int y2)( n3 x  n: k# s: }, y
  {
* P+ x; u  u/ R0 u  int t,s,j,i;! r3 `3 ~$ {, Y- e2 z* J
  t=s=(y1+y2)/2;
, J9 B+ M0 ]7 n( M8 Y# v" p  for(j=x2;j>x1;j--)4 j+ E9 o  \+ v
  for(i=y1;i<y2;i++){
" u" @$ `9 ?1 _* ]6 K; T  goto_xy(j,i);
! |9 d' _& r+ S6 ]& N" t! j  putchar(' ');( ~- _& ?" ^5 p$ z$ Q
  delay(10);
6 l0 e9 R' ~4 d% K9 j) m+ h  }0 G$ A; a0 [4 x9 h# U7 L
  }6 A0 E5 K3 T1 k6 `% W( k
  /******************设置光标子函数******************/
, K$ [- X& E" v9 `' n( }$ |8 Y/ M# l" u7 k6 f1 P; f' r7 i" b! b7 j
  void goto_xy(int x,int y); G7 i1 Y4 i0 l( U. R/ t
  {
, K$ n+ V$ H! |, a5 _$ Z6 {4 z  union REGS r;
$ C; W4 I: n7 m) ^5 j& e  r.h.ah=2;
7 n$ u0 d- L" t* x4 d5 t4 W& I' e& }  r.h.dl=y;
* H7 r0 M  ]% G. o! E8 ?/ `  r.h.dh=x;
! D+ ]/ b, d7 l0 A1 J3 ~; k6 ^  r.h.bh=0;# \  j# H- u9 N2 z. g' W
  int86(0x10,&r,&r);7 Y" U% [  b5 e6 Q
  }
5 v0 g( j# P# {5 }; G0 o
3 n( H, |+ o7 S3 E  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
$ S# U/ j, L- r5 I" c: m
& l3 j4 \1 H% u, h4 s5 H! a, K1 o: k2 X  void puta(void)
1 F' A+ M! y$ H0 @  {
( g% N" ^1 F! ~* [  int i,j;
; }! D8 J; i: I- z  f5 _( U  for(i=0;i<24;i++){
) B) h1 O( \' R, M. b  for(j=0;j<79;j++){
: e7 _8 ]9 \/ V8 s/ q% l! G; _  goto_xy(i,j);
8 B8 @% n1 I4 t4 ]4 K  printf("a");
/ p! Y% \9 [- r. @) B3 K: ]- p  }+ W$ x$ T! C# C# F: n  i  K
  }
5 d! h( d& s% B% M$ y  }

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