返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
3 v4 {* u5 K3 {3 q& l. a
3 k8 p# o$ S! Z( W5 j  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
+ s" \7 a! W) d. o  b+ Y% l3 q" j4 L+ s( |; B$ E  ^& a
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. + `$ c. i4 ^# I* D2 c
  子函数及演示程序:( Y: d( J1 A+ I& Y+ Y
8 w$ n8 ~$ _( z9 j; O- C- V, p
  #include<stdio.h>
# @* J+ s+ n5 {  #include<dos.h>( Y' L7 b8 ]: r  q! G. a, C* B
  #include<conio.h># v1 x4 J, g5 B. Z
& U! e. h7 f" q
  void goto_xy(int x,int y);  R& B( h$ G  q
  void dcls(int x1,int x2,int y1,int y2);
- G9 ]$ S2 [& z2 Y/ R( y  void bcls(int x1,int x2,int y1,int y2);6 b( S1 m* t% ]) _
  void kcls(int x1,int x2,int y1,int y2);5 X( l: k, V- F1 B
  void recls(int x1,int x2,int y1,int y2);
' |* G& E7 J* }% `$ ^8 O" X5 u  void zcls(int x1,int x2,int y1,int y2);
7 q! B  `" K1 {: m2 {' [% X; l  void puta(void);
* P# u( e0 Q" {0 ~1 u' U3 k  H# @! k; ]& j; @
6 E: g" t4 Q  [# A' N$ |  y
  /*--------------演示程序---------------------*/
- q9 u( m5 _/ `8 ]5 ^' r2 v! W  main()
2 E# s* l( ]8 ~  {
0 d; H2 N, ^- X3 q0 c; d% h: \  puta();
. N; u) ~' s& t6 D. s  getch();
' S- }4 i# E" f4 l  dcls(0,4,0,79);( |% l3 ~5 q+ ~- q" J5 t# U
  getch();: j3 p- o6 z& q% ~4 y: s
  puta();
5 t. ~# f: ]& s/ r$ U: e  getch();
: X0 P- g. c- x  bcls(0,25,0,79);
2 r9 M, b# L/ ^) L  getch();$ \+ ~$ H9 l! K# x* M
  puta();7 K" y( C; r5 V3 x4 ^, y% j
  getch();
! o9 ~) `3 e! O8 J) u  zcls(0,25,0,79);7 ]  z  E/ [' [1 N
  getch();
* f2 o, I& Z* C4 Q6 d9 i  }
* S( I: p) V  W7 Q2 k" X  /*********center clear screen(中心清屏)***********/: p: o+ W5 \5 @) J1 c2 n
  void zcls(int x1,int x2,int y1,int y2)
& n' J! O& _, X& B  {
. ^) n8 d+ e' y$ {  int x00,y00,x0,y0,i,d;" P  v# n: L+ }% p
  if((y2-y1)>(x2-x1)){! c- p! f" a. `
  d=(x2-x1)/2;+ N9 [6 D- e" g4 F$ f6 x
  x0=(x1+x2)/2;1 C& ~# _! t7 W& x' m. t
  y0=y1+d;
2 O2 p+ E* c% N, H* o  y00=y2-d;
; I# i9 q9 K% {6 u8 r. r  for(i=0;i<(d+1);i++)
# h1 u* r# ]6 C  recls((x0-i),(x00+i),(y0-i),(y00+i));/ z. H3 w5 A1 Q. A9 Y' k
  delay(10);' |2 D$ R0 c( E) `
  }: d4 W( m' l: i. y9 L' w
  else{
% \" b/ A) _1 \* x6 _  d=(y2-y1)/2;
* p- V8 _. T" d6 a  y0=(y1+y2)/2;
4 M) n2 y- S# g0 E; W/ E  x0=x1+d;+ J. Y1 G2 R( T7 ]9 ]! W
  x00=x2-d;$ q' v, I) k/ ^" ]
  for(i=0;i<d+1;i++)
2 B2 c2 \/ m9 B/ A  recls(x0-i,x00+i,y0-i,y00+i);
7 n5 |+ R( d" Q. o" n+ V$ f# ~  delay(10);2 H! K. ~! f& ]5 v# V
  }
& [# k0 {! P7 X( O8 x9 e9 ?; l3 i  }4 \, `( x) J  w" o" I) L

* y" d& N6 k  ^" g0 p' s  /************* clear rectangle side(矩形边清屏)***********************/
6 m  f  }' \9 ?+ k; b# S0 u# G
8 N2 X8 R) E/ m) E  void recls(int x1,int x2,int y1,int y2)
1 g! ^/ _4 t5 ?  {
( z  P* A9 r% q* N0 |7 N2 R  int i,j;4 x3 y3 f6 @, _1 C& h8 d
  for(i=y1;i<y2;i++){
, }, e- x$ d# Z' g" L2 {& C    goto_xy(x1,i);
  V# q7 s$ W, D& z+ V! Z% X, r4 m, _  putchar(' ');
& C/ ~6 o. }; B% k$ a  goto_xy(x2,i);0 \7 W7 e  l/ Y! M/ j5 B0 e; t
  putchar(' ');; k" c' _5 I2 C" k, ~
  delay(10);, V/ d7 w$ w1 S$ O5 k; \2 m
  }
/ e% D4 y6 i3 v+ X. s  for(j=x1;j<x2;j++){
( w1 r' [. [8 e& `& z6 f  goto_xy(i,y1);( Q) x* I3 i; V
  putchar(' ');, D0 o5 ~+ w+ i: s
  goto_xy(j,y2);
% U# B8 U# X( J: u/ ~( }- o) J  putchar(' ');1 J& N5 _, K* a+ S, [
  delay(10);+ x7 z6 W# i; X2 n. K; x/ w8 U
  }
, g0 @$ L" m  r( Z4 `  }/ i4 G, R4 r# c/ O: H8 M* d
  /******************open screen clear(开屏式清屏)*********************/
. u* R/ J  e% E) ]. u; F/ e/ n6 i2 j. z7 C$ W4 l+ t! n. _% Q
  void kcls(int x1,int x2,int y1,int y2)% j9 V% ?8 a! ~! m6 @4 ^* W
  {
3 X; a6 v. m* y9 b9 e/ r  int t,s,i,j;
7 t: ]$ L1 X6 |9 d' @* }# f  t=s=(y1+y2)/2;
! K9 g+ j, f  W: L" T8 E$ e# ^  for(;t<=y2;t++,s--)4 Q) u) I# c4 j! W0 b
  for(j=x1;j<x2;j++){
! z4 y7 O  E3 D! t6 `3 h; @! j  goto_xy(j,t);/ `% [) I; @; P
  putchar(' ');
8 P3 F' j/ J. Y6 l" J. k" b  goto_xy(j,s);
! [; `! @9 z( ?/ G4 w* w  putchar(' ');
9 }8 I) \6 {2 J9 O  delay(10);
: q1 w! E/ a0 g# R" v  }& H4 r/ _) D3 V
  }
' _6 U7 ]# _+ Y) M" i  /*****************close screen clear*****闭幕式清屏*******************/
4 F& |% {) M+ F4 |
8 U2 I( ?. `$ |  w, q/ p  void bcls(int x1,int x2,int y1,int y2)& B4 e) s) y, p
  {; p$ l4 v/ {) V7 H
  int t,s,j;
, e, x8 a0 V2 a/ K8 l" C  t=y1;
  _+ l& u( ^7 Q0 O! C  s=y2;+ c# F- _' O! d$ u, `
  for(t=y1;t<(y1+y2)/2;t++,s--)
% z# F; }0 x- m+ u7 f  for(j=x1;j<x2;j++){) u; x' s" y/ _) A
  goto_xy(j,t);8 [8 ~( U' r) D2 E& _* G* U3 t7 ]
  putchar(' ');
5 X0 }: o6 j0 e- M: ]; a  goto_xy(j,s);6 x' D& Q" \( L$ E
  putchar(' ');& \& N9 y" N% l: E3 \
  delay(10);% I0 x' f9 H  J9 N: m3 l" o
  }
2 i$ [2 O8 H" I/ h  }
2 Z: v. k; N! d! e* |7 }  /******************bottom screen clear(自下清屏)********************/
$ u) Q. Q: D# g- K1 e5 o3 f3 A8 v2 M% g' q$ s9 U8 I* {" w
  void dcls(int x1,int x2,int y1,int y2)
& U6 `$ N' f. {; ~; N6 i9 T8 {  {3 |2 P% f2 @) J/ ?1 J
  int t,s,j,i;
# Y* i2 _, c5 C. }, I( l$ u1 Q  t=s=(y1+y2)/2;, r1 U& J" X+ A7 C: e
  for(j=x2;j>x1;j--)- N3 _# \1 }1 U! ~+ l. ?6 P3 }
  for(i=y1;i<y2;i++){
% l3 f( p, G: v/ O, F  goto_xy(j,i);
: {5 S; M& M- c. k2 n8 J% J( U" m  putchar(' ');
# F9 c! a* c. g6 n  r  delay(10);
& e/ s. |3 U6 J( t$ e3 u1 }. ]  }; |8 r0 ?4 _$ O' V
  }6 ?3 f* g' n* G! |7 q
  /******************设置光标子函数******************/
- y5 ~" d7 D, B
& i% |4 j7 L$ l) B+ [- H2 y  void goto_xy(int x,int y)
' S$ L% v$ k7 A+ p1 u& x  {
1 G( `* x: z4 S5 n  union REGS r;
4 f3 s0 _, L, L; U2 k8 B  r.h.ah=2;
& }2 n1 B) e7 }1 Q/ Q  r.h.dl=y;
& ]) B' X+ u$ l/ \+ b" n* q  r.h.dh=x;
7 f0 T. p  |4 R9 o7 Q  r.h.bh=0;
, q" J* o5 q8 y8 {. F  int86(0x10,&r,&r);
# v+ e+ E& K: Q# a0 \5 X1 N  }
. i! t. z, C2 _& s4 E2 {/ N1 @1 J- m* i
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/; m* w$ }: ~5 W

  S5 a! W& K  a% H& A  e  void puta(void)
# z9 x% w* G# `3 S$ N  {
0 q5 w4 A2 k3 M9 }, q  int i,j;
5 P/ H! Y, w$ o; ~9 a6 B# X  for(i=0;i<24;i++){1 {, Z7 F! l# q$ X
  for(j=0;j<79;j++){, _1 G! Z9 @2 L
  goto_xy(i,j);+ ]; g; Y3 ?3 i4 |" G; v
  printf("a");; o; \+ g. y# E; J# _8 V0 G
  }) T: q- y) m. k! [
  }# K. u* M5 _& F5 T4 o; J0 Q
  }

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