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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,% ?7 s- {% {) Z5 R& V) w

3 K/ s. N9 Z# A# j& Q/ x  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里8 }: u1 U9 T$ N5 K' H

3 O7 t0 [8 N# K+ C+ t, S7 }  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 8 o5 ~5 G5 z2 `+ W: P& R" h
  子函数及演示程序:
  q2 L" u9 C! W& f- k2 d$ s* O; R0 o* F) }5 O" Q! T
  #include<stdio.h>
$ C, @, f8 l# c4 D  #include<dos.h>
" Z- M" n6 B' s: b  #include<conio.h>
, @  x" A) V8 t; R9 y
/ c/ W; k% @! m3 j/ P8 j3 Y  void goto_xy(int x,int y);: e4 t) G6 X) n* E- ?3 k' H: K
  void dcls(int x1,int x2,int y1,int y2);
* p7 D" @6 u+ _% Y3 ]1 o  void bcls(int x1,int x2,int y1,int y2);* E9 f7 q6 A+ Y! I" l7 m' h% ^
  void kcls(int x1,int x2,int y1,int y2);8 z$ u  q# `7 b" U" j0 t
  void recls(int x1,int x2,int y1,int y2);
+ I/ o; U2 N9 r  void zcls(int x1,int x2,int y1,int y2);, P; p0 n7 s! f- W
  void puta(void);/ Y3 R5 ?- u: h) o1 t9 }

6 R7 Q+ y7 F9 u+ u
( \" P+ M+ |+ i( v  /*--------------演示程序---------------------*/
" i6 k4 i! _6 X2 q7 D% R- s  main()4 X9 I& L& f6 _, v
  {
( u' B( v5 U$ j7 ^0 J8 u/ n  puta();6 f% W3 A- V' X" }
  getch();
' d) g; b6 }; ~: D  dcls(0,4,0,79);
$ E" H4 V$ G1 o  getch();8 r: A: z1 E9 {7 _* Q- H3 X
  puta();
& V! Z/ a0 g& E% @3 Z  getch();
* R: m/ m% k+ B4 Y0 P& \6 Z  J  bcls(0,25,0,79);
1 ]: W2 T! V1 Z+ e9 Q5 i  getch();2 C( z" B% i. T% u
  puta();6 ?' B$ {' [, @! L/ E# o1 R
  getch();7 B) e/ r1 T. g
  zcls(0,25,0,79);9 `7 u  `( n1 c: _5 w1 f/ {- b
  getch();0 A$ {' M' W# O! R' [: {
  }
. y8 O- Y& L* ]% ]- k; r* n  /*********center clear screen(中心清屏)***********/) [( Y: v, ?1 v
  void zcls(int x1,int x2,int y1,int y2)
  R- }7 Y' {& L$ Q2 s  {
; ^1 E) d8 T. ~; _$ b4 n% w  int x00,y00,x0,y0,i,d;
; R1 o; w) N& _) t9 [$ T" V  if((y2-y1)>(x2-x1)){
! M* O% X# O1 `/ L/ M, U. O, @1 x  d=(x2-x1)/2;( Y/ M2 Y5 B2 x5 |4 e6 {
  x0=(x1+x2)/2;9 r7 v4 b# l* ~' K
  y0=y1+d;
& O, i7 o9 n, t& O, A9 Z- {2 m  y00=y2-d;: d* K! e  K0 \( F
  for(i=0;i<(d+1);i++)
- Y5 n2 F5 [; F2 f  recls((x0-i),(x00+i),(y0-i),(y00+i));
4 t$ ^' Y9 R- l3 r# Q  delay(10);. J" N* p8 R$ Y8 q+ i
  }# [9 e0 k1 \# K8 G& S9 f: G
  else{
: f9 R( c2 c) O% Y+ O  d=(y2-y1)/2;- L. q$ @( u2 T, P; k! s+ S
  y0=(y1+y2)/2;' M3 U* V$ Y. p. J( o9 q; Y+ b
  x0=x1+d;
* |9 g0 w9 G2 ?0 r2 J  x00=x2-d;8 c" v1 @) U7 W9 z7 v
  for(i=0;i<d+1;i++)2 C2 G. d, |! g/ a
  recls(x0-i,x00+i,y0-i,y00+i);4 s* e7 B8 o) i5 }! N" E: P
  delay(10);4 c: K2 h$ X+ c
  }
- N, A8 U7 w/ C" Y. ?- l  }
" u- m5 D8 r  p  q
- K  t+ G' S2 o+ ~0 @; W) X  /************* clear rectangle side(矩形边清屏)***********************/
6 O9 C$ W3 d0 z) a% ~1 L  D& B1 G8 O+ W8 x
  void recls(int x1,int x2,int y1,int y2)
2 f0 d& H) t0 \. @+ K! M. p+ O5 D  {! l6 a# F- C* h5 w3 J6 E$ ?- z: F
  int i,j;
4 [! I, |$ r# ], k& T4 s  for(i=y1;i<y2;i++){: Q. K, m0 Q. h% [  r: g0 R% ^
    goto_xy(x1,i);; `0 u* c% _8 u/ [2 w
  putchar(' ');
) U$ ~: j& r. M. o/ E  goto_xy(x2,i);
, i; w/ }, o; L% j% `7 j) a2 Q1 X  putchar(' ');$ p8 O1 h! @$ v
  delay(10);
3 E- C4 Z7 A8 v. o  }
/ A* `/ K+ k! f# {" N: {- s3 p  for(j=x1;j<x2;j++){
+ }  I% R* t9 l  goto_xy(i,y1);6 p: W) E# d9 S: W
  putchar(' ');
1 \% A, j) B# q* `  goto_xy(j,y2);! p3 p; Q% V& C0 B
  putchar(' ');
, I$ o5 E) W- w+ _/ Z  delay(10);
' V% k7 d5 w$ y5 t' ~* W  }$ I: v' Z( z4 c1 Z2 a4 H% q
  }, i. j2 d4 U- J5 Y% o1 T2 q
  /******************open screen clear(开屏式清屏)*********************/4 w, @" H& ]" I2 J, J

7 y' o2 K  B! X  void kcls(int x1,int x2,int y1,int y2)
6 y0 ]5 M: c3 ^/ L: `( o3 f  {
# r3 _) ?3 J2 d  int t,s,i,j;" ]( [* V9 ?5 Z/ K- B) H& e2 w" g  o) }
  t=s=(y1+y2)/2;! i# t( R9 M+ N. [+ e
  for(;t<=y2;t++,s--), r9 Q# a* D! S1 _$ L
  for(j=x1;j<x2;j++){
$ W/ _& k, u  ?* G  goto_xy(j,t);
% k: Q. n' U4 p  putchar(' ');
4 E5 o) S5 y" J7 N2 ?  goto_xy(j,s);4 I/ N6 q3 x7 W& |, p
  putchar(' ');
# j# i4 E  h. d  delay(10);
5 ^4 G3 X8 _) M; s* T: V3 B  }
4 C# w, k6 N) o  }
9 S3 a2 a2 ]8 h4 ?: ?* X2 @  N  /*****************close screen clear*****闭幕式清屏*******************/+ M% F; T4 s6 U7 Y3 F
) f+ o# X9 k9 d- o, R* f, C* `! j' S
  void bcls(int x1,int x2,int y1,int y2)
1 h4 Z) Q. A" u9 u  j3 {  {
- o. ^$ A4 M2 t; y  int t,s,j;
: P! v8 O) Z4 m& \5 k  t=y1;
6 U" J. Q3 o0 q  s=y2;8 i3 y; J+ k5 u, P3 h% g; e
  for(t=y1;t<(y1+y2)/2;t++,s--)
0 Q* L5 f8 M) L" b: L  for(j=x1;j<x2;j++){
4 h( k" }, T. u2 [1 P/ L  goto_xy(j,t);
+ T+ @7 Q9 T+ X5 L9 _/ [+ V  putchar(' ');" S! w% I9 c/ w
  goto_xy(j,s);! [& [1 T( z  z5 V9 n' p6 k! m
  putchar(' ');
3 {9 I2 R# O7 v  delay(10);+ F6 ?# D! m- ?) _' O
  }; u; L, y2 S# E1 B
  }  S$ i% W7 \- M9 r! i4 }) ]
  /******************bottom screen clear(自下清屏)********************/& l/ ]/ X+ B% F8 x9 S
' s7 ^6 b' v, J" @+ a9 ~: A
  void dcls(int x1,int x2,int y1,int y2)
- V7 R- b$ E) V  C; Z2 L8 `  {
6 W7 [+ j# x: L! |7 [/ G  int t,s,j,i;5 y  L5 ^  X7 Z9 e
  t=s=(y1+y2)/2;
. m  \/ o, a. ]1 P5 a+ X/ m  for(j=x2;j>x1;j--)5 L$ y+ V5 j" e* `) X, g2 z' }
  for(i=y1;i<y2;i++){
1 Z) B( O. L! ^" Z4 u6 m4 D9 ]9 I  goto_xy(j,i);+ Y- M% ?, \3 r3 O  K/ |
  putchar(' ');
& k- z0 t7 m' a, [) A3 h  delay(10);
" o( N1 r$ t8 S$ F  }
/ t+ ?$ ]# h9 ?. G9 y% T  }
% D, p6 N; b; f' `  /******************设置光标子函数******************/
- ?2 |+ ~0 F8 b6 p6 h6 ?$ _% z7 W) p) \$ Z; X. Y- h, I
  void goto_xy(int x,int y)6 {; I3 Z6 F7 r6 u! m
  {
. a1 T9 f. Q9 J2 [  union REGS r;
" g8 q9 M- M. \% w  r.h.ah=2;% |) W+ N! L- f% e' q0 Z
  r.h.dl=y;
( `) T& w& n  _# y  r.h.dh=x;. j) W# s1 V/ W, Z
  r.h.bh=0;
  y2 B/ a, i" K; P: O  int86(0x10,&r,&r);
' u3 f; u8 k4 I. h  }
& Z0 r, Q5 p9 w/ _# d9 \; N1 L% G3 v0 V" H+ Z% J! S
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
/ m# C# Z9 `) {* P+ M) ~  v8 e
  i1 K4 V0 R/ Q! _$ a  void puta(void)
' I, X# v; V6 W. B  {/ h' B8 s8 y6 O  c: ?6 {0 R
  int i,j;3 z6 m& o7 \" U( r7 e" z& ^
  for(i=0;i<24;i++){
! K+ R6 Z# A0 t9 [  for(j=0;j<79;j++){2 F/ j! O, k, V4 |$ a
  goto_xy(i,j);
$ E& U; [0 u& @0 J/ e$ [  printf("a");: d, w1 @5 l0 @7 K6 c( W
  }
6 l' {, f3 S: C5 s) p. D5 E0 c  }
1 p8 ]! Y5 a) E# {& s  }

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