返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,9 C% U& d( t2 }! r# }6 F0 e8 g) h

( r( b! ], W/ w% _9 U+ J  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里/ R- P% A2 i2 G, a3 v
  q4 k& }$ T9 f; z2 U4 Z
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4 P& \6 y; ]  ?3 v4 [5 F: ]9 S6 ]9 }  子函数及演示程序:
/ Q; f, V* O8 H% [9 @' x5 o) K& B; j( B8 a/ H/ a
  #include<stdio.h>
, n+ g1 C# L, o$ Z! s) O" _) B" c  #include<dos.h>
  z5 \8 V! V; N# J. K9 v# ?# J, M  #include<conio.h>
& G# g. \* o/ b8 z2 V
0 ^3 m# l5 Y5 B- r  L  void goto_xy(int x,int y);  E3 g- h1 _( m: ?
  void dcls(int x1,int x2,int y1,int y2);
; u1 X; Z$ X, ^7 \  V7 G  void bcls(int x1,int x2,int y1,int y2);- C' Z# m' g& `2 Q7 K
  void kcls(int x1,int x2,int y1,int y2);
# ]4 `1 c3 s, ~" [: z  void recls(int x1,int x2,int y1,int y2);, \6 H: r1 a0 F( h# @& O( x+ F9 L
  void zcls(int x1,int x2,int y1,int y2);. @4 h# H$ u0 h4 A
  void puta(void);
2 }0 M+ H6 ~( x: d8 t' o  X2 y
+ u1 H  t: g7 x  \! x6 ~+ }7 _2 x0 c- C8 f- M% n) j8 K3 n
  /*--------------演示程序---------------------*/
, }  T; l/ |+ V8 o3 `5 I: m% [  main()
& b9 a" U7 u  u, j  {1 m9 e# C- ~; G* q2 R
  puta();
! j( `, a' `7 x  getch();
/ p( X- L% T! e: l# }  dcls(0,4,0,79);$ c0 z" B8 V% r  |; s8 x! v9 v
  getch();
; ]* B% P* q$ Y+ w  puta();
; B. ?. W$ ]9 u# ]1 S- D% U& i  getch();4 ]3 Z7 f. A6 ~6 @5 n
  bcls(0,25,0,79);
9 L) e: t! [+ ~4 O2 Q5 u  getch();( z+ r! _! B1 L5 A( ~, P" t5 P
  puta();
% m& i& f- O- L  F4 y  getch();
: N8 v% k" M7 A( p, i/ g4 u  zcls(0,25,0,79);
: B' W9 O) P4 y& m7 r) t& d  getch();
4 |2 h" s6 B8 L; l  i5 D  }6 h$ W7 R$ @8 |0 l5 ~8 }
  /*********center clear screen(中心清屏)***********/
9 d+ ]5 I6 L0 r. K, M& j; {  void zcls(int x1,int x2,int y1,int y2)
' v3 Z& d/ P  I1 \' v9 w6 `  {
  ?- |: ^) B% Q3 i6 K* P" j9 t  int x00,y00,x0,y0,i,d;1 J' q) F) s- M  S% m5 g! F$ C
  if((y2-y1)>(x2-x1)){
; ~8 I8 S1 \0 y. N3 W5 h  d=(x2-x1)/2;' s2 a7 I2 g1 |( b" a( b) v1 C
  x0=(x1+x2)/2;. F8 U2 w& e/ F1 A- Z" X4 w2 H7 w
  y0=y1+d;
8 b- z% K1 G# G8 H+ J+ R6 t  y00=y2-d;3 J6 X. v. J# r' m
  for(i=0;i<(d+1);i++)
- E6 W/ W+ c/ F+ U4 F  recls((x0-i),(x00+i),(y0-i),(y00+i));- M' ^# K9 m3 ?! X" M
  delay(10);
& x3 Q' C0 B' y5 K! c: Q, m  }
; y: X7 S% j' }! r8 B) e6 n2 l2 `8 e  else{
$ }! i8 ^7 s1 u2 N  d=(y2-y1)/2;
9 u3 @6 R8 O# r  y0=(y1+y2)/2;
' x. f/ c% G3 B( Q  d# f  x0=x1+d;, f1 |8 g+ r! w! @# s! }: [
  x00=x2-d;
$ X+ v9 n- e) |7 u9 _+ i0 h  for(i=0;i<d+1;i++). p" r3 ~1 X' N) H
  recls(x0-i,x00+i,y0-i,y00+i);
  U4 g; D* d4 z: a: o  delay(10);% S8 b+ X' }5 J5 `5 b, p  j
  }
  D2 R2 g; u& Y  }  f4 J% N- q6 g/ e, K

* D1 }  U& ]* u' X0 Z  [  /************* clear rectangle side(矩形边清屏)***********************/+ D# l; g. J7 `: a
9 L% ^! n) _8 u  T8 q, X) m
  void recls(int x1,int x2,int y1,int y2)
9 y' y1 h: H8 H& K* k: \0 k  {
' W7 e4 L5 h/ |! ~. C3 ?  int i,j;
8 u( ^" j, c# v( D* I! m  for(i=y1;i<y2;i++){
0 E9 [5 x$ x( O) v% A; ^& w    goto_xy(x1,i);
, i. S/ m( ^; ?; m# k2 v  putchar(' ');
$ `: k: o7 X1 g+ Y# I# R  goto_xy(x2,i);
+ ?9 v) Z' Q5 J  putchar(' ');3 G( u6 h+ _: I: z0 c8 B  a- m8 t
  delay(10);; k! V% }5 d+ l) R3 a
  }
' F; ~; a/ z4 ^  for(j=x1;j<x2;j++){
& {* {6 a8 q- E6 H' b+ C  goto_xy(i,y1);" q4 P0 }2 p( y: h  w1 O
  putchar(' ');
+ [$ V" w* T* E4 S  goto_xy(j,y2);. J3 y# ^8 Y# G9 ~1 ~. T
  putchar(' ');
/ D6 v5 k; N5 W$ W3 f# b% d( p% D  delay(10);. @  a! g; o9 u- y$ C. \
  }
* A0 H- c6 N3 Q5 X, ^  J% j7 J4 k  }
. a; ^1 {+ M# l: Q  /******************open screen clear(开屏式清屏)*********************/
! f* r/ V, B0 Q" \4 O. ]4 P7 \1 N9 _
  void kcls(int x1,int x2,int y1,int y2)
: u- i# s5 _5 r% O& ^. I  {
2 F+ k0 h9 g4 O7 A% g  int t,s,i,j;# I- g: i6 @' a
  t=s=(y1+y2)/2;- {! I. L/ [% g& n
  for(;t<=y2;t++,s--): o6 {* J4 C  u8 \+ ~0 r
  for(j=x1;j<x2;j++){
; j# R: a4 D/ i1 }8 w  goto_xy(j,t);" w/ \% ?7 A$ |* E4 G
  putchar(' ');  v6 d$ Q6 S1 A5 N- U) d' v
  goto_xy(j,s);
' `. T& |9 M+ ~: x+ Q" j5 _6 ~9 m  putchar(' ');
# h  R! B5 p- ?/ z  delay(10);# P9 z- |# g+ p: n5 ]5 Z2 D
  }
' M$ a6 w3 |( \: Z) e5 t' j, T0 m  }
: ?9 D) H" j; e9 Z" D) X; k  /*****************close screen clear*****闭幕式清屏*******************/
; x  e6 X5 L% _4 ?6 a+ d9 @" k6 [' k& A" F2 n" F' H
  void bcls(int x1,int x2,int y1,int y2); l8 M  |) ~$ B0 o  B
  {& f4 Z& x) h) W% F9 {
  int t,s,j;
0 ^7 [& ~4 V/ z1 R* X/ D( H/ X! U  t=y1;
. T" j/ e# L, }2 c) ?  s=y2;
5 H, O5 \0 {* P0 _  for(t=y1;t<(y1+y2)/2;t++,s--)
& v/ k2 f3 `, u0 j5 N% p! d/ t' Q  for(j=x1;j<x2;j++){' A  x3 v: K3 X/ F
  goto_xy(j,t);
3 r' Y  G2 ~& c) v( O* j0 L+ Q8 O  putchar(' ');" D! J0 V( L7 A7 w( O
  goto_xy(j,s);
( E. x; A( k0 ~! E2 O- q7 D+ M  putchar(' ');' n2 Z! b/ ^  U6 T$ F
  delay(10);
' J* E, v# B& X  }! P  y3 _3 a5 P  v) L
  }4 _0 U' f; I  |% O5 A  s5 i7 }. ?+ Z
  /******************bottom screen clear(自下清屏)********************/5 Z6 D: D( A/ ^
7 X  D1 M5 }7 a$ A0 l
  void dcls(int x1,int x2,int y1,int y2)
8 W# |3 D3 w2 W  g  {7 E0 P# q& P' U- a% Q5 t
  int t,s,j,i;! @: `' z+ s2 }
  t=s=(y1+y2)/2;9 {$ f* g) _4 V* o
  for(j=x2;j>x1;j--)
+ m( u; u. \3 k! f: {  for(i=y1;i<y2;i++){
. T: P3 h" @$ S5 v5 b  goto_xy(j,i);' |2 G# c5 k; W! b2 C! v- X+ c! f
  putchar(' ');
% G$ j) q( _, f: n) V0 W  delay(10);
& a1 j7 I/ ^$ |2 z& E$ f  }
" F4 L) B4 H+ ?) k" l9 L! F* }  }
  R1 L! @2 K4 E  /******************设置光标子函数******************/5 q. B8 S1 `. v' J6 s, z% _

, Z1 z& m$ q# g  void goto_xy(int x,int y)/ z' |( |7 U- G
  {; i+ Q8 m4 X$ u* j% y) R# a# }
  union REGS r;" E% }4 M; F* j4 I* b" @, [
  r.h.ah=2;7 u! `) }9 u% ^( Z
  r.h.dl=y;: g! p4 A+ g0 l0 M
  r.h.dh=x;
( f7 ~6 @' M- i  r.h.bh=0;- k  U3 }- t; x3 C" N$ h
  int86(0x10,&r,&r);
7 q; Z' z  @. J/ }  }* x, M! w$ U, q

' x, b# X+ t8 D( x; _- P) ?* f4 {  /**********************在屏幕上打出一连串的a字母用于演示程序******************/* t( ~- P3 G) A4 Y7 a
/ X2 L, @% O2 [, h
  void puta(void)
, l6 O$ x) Y$ L  W( Q  {" H4 y1 `' E. h* F" a
  int i,j;1 \: J+ ]* X3 t7 ^0 J
  for(i=0;i<24;i++){
# w! B" U9 P+ r  for(j=0;j<79;j++){
; k4 O! G  K7 U, M) G3 s6 r  goto_xy(i,j);7 C! ~8 s% p! y: ~" V" C* `
  printf("a");# k  ^  l$ S/ W0 M! H5 C0 j
  }4 l" c6 q* Y& H5 L. K
  }2 U* T& P  ~: `: h7 t& s/ f
  }

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