返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,. n& {' R  e, W5 O

+ K; ?( R0 P; b  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里& ^7 `* ?* @3 r! \! Z3 C; C
9 h  ]1 K! ^/ i. Z
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
/ O6 l4 Z+ N' W5 ]5 i  子函数及演示程序:% |0 `( T# e& ?4 E: g& Z
( X" j% ~4 t% A. E
  #include<stdio.h>; T# {# `$ Q1 d9 F8 p% `
  #include<dos.h>
% j+ D' V+ `! c7 d2 z6 A3 Z  #include<conio.h>
3 g1 M( G) U" i( w; O6 N* \/ T$ X8 M
  void goto_xy(int x,int y);  y* D0 `# V$ K* |. L4 C
  void dcls(int x1,int x2,int y1,int y2);
4 y/ X, D5 Z7 f( t  void bcls(int x1,int x2,int y1,int y2);1 R5 E" T, n2 ~' I2 E
  void kcls(int x1,int x2,int y1,int y2);
9 P$ Y- Y! W, p3 M9 B9 Q  void recls(int x1,int x2,int y1,int y2);
& Y# Q) B0 [% G- z* m  void zcls(int x1,int x2,int y1,int y2);9 `5 e3 K  o0 O  X7 `& \
  void puta(void);
9 r: r8 |2 D! q% Y" ~
% G2 h% H% d6 L4 I# w" n: g
3 U3 A; o2 p- u  /*--------------演示程序---------------------*/% p  @% ~' [8 H8 k6 Y6 O3 `
  main()5 i9 f& a, ~1 P7 `( t1 D( s
  {" N- z$ Q! ^# Z# V; i/ ?7 Z
  puta();
) o" ^! t: {* U$ F& p3 C  getch();
! x' x! {. }, {- E* h! I  dcls(0,4,0,79);
+ ?/ Q3 ^8 P: ~7 d  getch();( X9 ?% q& N& f9 i
  puta();
2 L8 i  s8 ^) x0 H/ L  getch();3 ?/ x7 k5 d2 ^1 ?' n. y6 i
  bcls(0,25,0,79);
5 D9 u' R% X+ a- w) W  getch();
+ `5 n7 E, ]( m0 k9 C5 r8 O  puta();( ?  D7 c/ e- y; l
  getch();
" f" I: ?8 d: y2 ]1 Z5 s  zcls(0,25,0,79);
: y1 V) a9 q( K  R+ `  getch();
. V; I, m& v7 l/ `  }% ~2 H: S" \/ ^, K( h6 e
  /*********center clear screen(中心清屏)***********/* c4 U/ y  ]4 U/ Q- S9 T* u0 A
  void zcls(int x1,int x2,int y1,int y2)7 M% u( r1 N- `& Q0 ^
  {
' m) q" p8 w1 b& v+ i  int x00,y00,x0,y0,i,d;
* P6 ^% K  C/ V' _  if((y2-y1)>(x2-x1)){
7 F8 `4 e$ O, f' m# W  d=(x2-x1)/2;! [' \; \/ M, X# Y/ |4 E4 e. f
  x0=(x1+x2)/2;
0 \( B  Q* L+ }1 Z  y0=y1+d;
5 y5 w: P/ k( _! [- o- e& C  y00=y2-d;3 e: l8 d2 Q0 t/ B2 F
  for(i=0;i<(d+1);i++)
5 b- s: h& H, M& ~  recls((x0-i),(x00+i),(y0-i),(y00+i));
# v6 b$ Y% n' I3 `! Y; t' t; s  delay(10);
8 x8 A' D$ \! [* ]# v  Q! e  }
3 R4 T- W# V8 ]( m' {  else{
! E/ \" `( I" e3 L  d=(y2-y1)/2;; |' C$ y& R  o. g
  y0=(y1+y2)/2;
. b% W# ~/ X1 j  y8 C  x0=x1+d;4 H! j8 f- O: ^; h
  x00=x2-d;* j* H2 m1 e; N- f# L7 \
  for(i=0;i<d+1;i++)) j0 r1 l. R1 S' \. Y' @
  recls(x0-i,x00+i,y0-i,y00+i);4 v6 N( U! G* R' k6 Q
  delay(10);0 {7 X: A. T2 R8 V3 c1 ~* P2 D
  }
4 y: c- Q; j& h, h+ J. c' k  }- t% g: d/ U& y5 t+ c: z$ N

7 B% e3 Z4 ]: ?7 [! }% ^1 j, H" u5 x  /************* clear rectangle side(矩形边清屏)***********************/, [6 _5 F, K" L6 I2 Q

( M0 i6 V" e2 r1 x' B  void recls(int x1,int x2,int y1,int y2)
3 a/ Y. h2 q' v! i2 z$ p+ f( g  {
' X5 `4 x& y7 w* Y  int i,j;% p+ D: }' d2 l' r8 K) q! o
  for(i=y1;i<y2;i++){
1 |6 [+ ~- t9 k" `  |: Q7 J  A    goto_xy(x1,i);
2 m1 Q) }. H8 s. e# U, a  putchar(' ');+ u. [# M1 T! b1 s
  goto_xy(x2,i);
: [  Z! R, _7 {  f' ^5 |7 V& ~  putchar(' ');4 K9 v3 R9 M# l# d* {( r
  delay(10);9 Y. X: p5 F! n$ F* C% Z  T
  }
+ D4 O1 Z) L" |* d* b+ P  for(j=x1;j<x2;j++){5 R0 W) Q. Z( Z# @9 X1 ]
  goto_xy(i,y1);
. f! m" V; M0 v  putchar(' ');
. e* N# w/ T+ G  w  goto_xy(j,y2);
6 S0 ]- G1 D2 m  putchar(' ');
; z9 H0 ^% S% J0 E  delay(10);: x7 ^0 b( C0 Y7 d1 ]
  }
0 S: t: j6 J2 a$ A  }0 W5 t7 j) m: w0 P! ^
  /******************open screen clear(开屏式清屏)*********************/" e2 H8 d9 v2 Y8 `- R: a. A/ d$ E

% F) X* }! z7 S, ?7 e/ c$ d  void kcls(int x1,int x2,int y1,int y2)7 ~" E' R5 p) M/ T1 b
  {" a( s; a) z* T2 C& X  o& ^4 ?
  int t,s,i,j;- g: M% X) Y* r1 Z6 D; w/ h7 p- ^, X
  t=s=(y1+y2)/2;
" W8 ]# o+ Y& g. J  for(;t<=y2;t++,s--)# h& \1 ?( J- _7 `! o
  for(j=x1;j<x2;j++){
- {& Z6 ?$ ?9 d2 J" W1 ?  goto_xy(j,t);
% Q3 N5 W) ~+ g/ N8 L' C  putchar(' ');1 r2 j* a9 j$ o3 [' a; c- Q
  goto_xy(j,s);
* }9 q" @2 o$ F5 E, H% T4 \  putchar(' ');1 H$ ~. x9 k7 }# n2 R& w( G
  delay(10);
2 g: `9 P! R3 D2 ~  U  }
0 v; A$ y8 L/ o! X8 L0 n/ L+ j  }
8 A& P; l( p3 V7 F  /*****************close screen clear*****闭幕式清屏*******************/: h: ]& R$ |2 K2 E  D
3 Y) `. q0 j! A7 b* f
  void bcls(int x1,int x2,int y1,int y2)) K1 x! h% V! r: W0 @: b  W
  {
0 w" d; z( g3 f% C2 n8 b" j  int t,s,j;
* y9 Q$ @7 P, }, _- i2 F  t=y1;
0 H; J7 A( ]6 e! _( I1 M4 c  s=y2;
8 [5 a! t+ t) i7 [  for(t=y1;t<(y1+y2)/2;t++,s--)
. t8 \! f+ e( E, D3 O! K( S  for(j=x1;j<x2;j++){
9 O+ O- k. O% f& {2 s& E  goto_xy(j,t);! _) X: V4 q2 S
  putchar(' ');; o: ^3 M+ Y; h, Y, G6 x. U8 I9 L( G
  goto_xy(j,s);+ Y  W8 [$ K( z* G0 |
  putchar(' ');
0 g1 i: H8 \- H5 M% w$ J7 e; g! Z  delay(10);4 i/ I0 w$ J4 \, @' ^1 O3 b
  }
4 Z, o6 r+ O8 j9 e8 N6 B  }
% X7 y2 i1 O1 x5 i- S* g4 ~4 j  l/ J  /******************bottom screen clear(自下清屏)********************/3 d1 x2 l/ A4 [+ K$ I+ h
* I( L- w" ]3 Z& e$ U' Z
  void dcls(int x1,int x2,int y1,int y2)0 W+ J# u5 X3 C# a- @. ?3 a
  {
$ L- x- r' {  k1 j  int t,s,j,i;1 a( ^1 d  V, Q# f5 w7 M
  t=s=(y1+y2)/2;
- C+ f( Z; Y& ^+ U2 q1 V/ Q  for(j=x2;j>x1;j--)0 k/ e+ f1 q4 c) `
  for(i=y1;i<y2;i++){1 P6 E/ k* V9 [9 {/ c! _, T% u& {
  goto_xy(j,i);
# R6 n! V6 h' L+ i$ r2 y* N  putchar(' ');2 ?% P/ `* p7 N7 p8 B, T
  delay(10);
& g/ \5 B7 {# u& n: D. _  }
4 y6 Q5 G# g% r% _) O- c; N  }! R3 s# h4 Y! c3 y
  /******************设置光标子函数******************/
9 m% W  r' }. Z$ B+ X5 ?) w3 P1 r! d6 A, b: g& k
  void goto_xy(int x,int y)
6 [6 m( t; K- O  {  E" m# ?: j5 {7 r
  union REGS r;" w5 L& l1 [1 c* H' k1 N% p
  r.h.ah=2;
1 b* F. @% h9 }  r.h.dl=y;+ h, l0 c- l& `* d8 u! x
  r.h.dh=x;# x- Z. F+ X' H9 }3 m5 ?: p% u! n
  r.h.bh=0;
, X6 v. E& \1 Y, U8 Z" g& x7 @( ]* P& W3 q  int86(0x10,&r,&r);
3 g6 t- N6 _( q6 `5 y3 k  }
# I$ a. m2 W! V* W5 `& }, L
2 s2 D. j. P" d. p3 X; P: R0 C/ p' K  /**********************在屏幕上打出一连串的a字母用于演示程序******************/8 b9 n; m3 X9 F) S1 u

3 @6 z, u; W  z0 {- p# J& d  void puta(void)
, ?0 V4 h: [$ {9 }  V  {
/ `, u7 i& A! q! L2 p  int i,j;4 g) v& Q& E; U# n
  for(i=0;i<24;i++){4 T: Z) o1 F, }' b$ X) r+ J' c
  for(j=0;j<79;j++){2 U' y3 r' i  a. ]8 L2 K8 c" A- ]
  goto_xy(i,j);6 D3 q. u5 F2 B" Q
  printf("a");) @% I+ K6 I3 S, s7 t' K7 k
  }
; |2 ~* ~/ M# v$ A  }# z/ b" Z- G  w9 i+ C9 e8 s* ]8 r: C* b
  }

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