返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
2 `. d9 ]5 x, K2 k& O: }& h7 \6 \% P
" e2 h1 U; \1 t8 Z2 l  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
& a( @! k' }6 }3 `. \; x0 c1 s/ `/ o, I# R& z9 M4 ]
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
/ X( ]( j" c. W3 `" p  子函数及演示程序:
+ i( l1 h1 O$ U6 ?+ V6 s& E2 ~* u# I
  #include<stdio.h>9 g# z4 u% o" ~2 y
  #include<dos.h>1 F3 Q% x: B9 g  ~2 E( `. V) k
  #include<conio.h>
" z+ E' r; q! C$ A
# z2 }# u; n1 n: B+ U2 Q7 J; K  void goto_xy(int x,int y);
; g6 m( p9 v! C3 ~, K. m  void dcls(int x1,int x2,int y1,int y2);- J' j( A" {2 e  r1 S/ U2 H- }2 I
  void bcls(int x1,int x2,int y1,int y2);% c2 V1 ~- r% d) M0 z# [9 D7 |
  void kcls(int x1,int x2,int y1,int y2);
* ^3 \. L3 e6 o. C  void recls(int x1,int x2,int y1,int y2);
% m5 L" Q6 J6 Z( K7 q7 d  void zcls(int x1,int x2,int y1,int y2);
  B1 D3 x3 f8 z" D  void puta(void);  h0 ^2 b- \8 f% J3 B# W

* K' s" F, m  R4 b1 k5 u/ ]
- |: P8 x; P! U3 j" `2 c6 v5 F  /*--------------演示程序---------------------*/
1 g3 X& d# S4 {: K! C# r& r7 i  main()
. N. z5 F3 T8 d; q3 N  {
1 l- Q/ S. a6 M- j  puta();& F; V- w8 s/ Y6 U4 y+ h
  getch();  _. R0 S8 h* \
  dcls(0,4,0,79);" D7 ?6 o8 z7 O" q% y6 x
  getch();
  N/ Y' g2 ~% r* Z  puta();/ }* h  q5 l. o
  getch();
# P+ r" C7 A6 d- j  r7 R# M  bcls(0,25,0,79);
% {2 n) G% K/ u# f! a  getch();, P/ \0 @5 V+ y+ a' \7 r1 B
  puta();
& n$ G4 t! ~9 \/ t3 ]  getch();
3 Y8 t% `3 \! j; ^0 W4 b  zcls(0,25,0,79);; S: U3 [# J4 ^0 f) Z
  getch();
4 V/ V' P9 _/ v8 y. g8 u: |  }
; O) H% n4 o3 w' X. z3 Q  /*********center clear screen(中心清屏)***********/
) Q! t) e3 p1 |" b8 W+ M4 ?! Y% S4 ?  void zcls(int x1,int x2,int y1,int y2)
1 O, r1 H2 E! m6 _; [  {1 Q* k5 K. E* J% i, s, B
  int x00,y00,x0,y0,i,d;  H$ R0 u$ z0 n- F7 Y) C) g+ `% ^
  if((y2-y1)>(x2-x1)){. C. g" x, U  x9 S, _$ i
  d=(x2-x1)/2;
* e" k; C0 p8 Q  x0=(x1+x2)/2;
1 f* h: s. U8 L: S0 l( C3 V  y0=y1+d;- P% U8 k- L1 [) w
  y00=y2-d;
( z$ h! G' z% U! @/ A/ Y  for(i=0;i<(d+1);i++)
* h- S2 v- r  b/ D6 `* S4 `  recls((x0-i),(x00+i),(y0-i),(y00+i));0 X5 m+ Z" z* j8 N
  delay(10);
; y4 ~( {! ?1 Z  }
! i( P2 f3 h& ~) x9 B+ }- T  else{* [* O8 V/ v) Q4 y4 N1 x2 {
  d=(y2-y1)/2;
+ c8 G1 ]) H* T- Y& j( P  y0=(y1+y2)/2;6 t: E' ]2 Q+ H9 b( u; R6 X
  x0=x1+d;: J* x2 x( {8 @* @
  x00=x2-d;8 B6 b7 `8 W9 ~. C6 T: Q% ?
  for(i=0;i<d+1;i++)
! a7 I: U. I5 K6 g$ e& U. C7 r  recls(x0-i,x00+i,y0-i,y00+i);, G& y% c+ Q6 d- D7 J
  delay(10);
; j1 w* j( ~2 s% c/ l& E  }
8 Q" o4 x: C$ ~2 D; q: R  }
4 J: Y% Y8 L% E6 g# o& B4 }
0 X) V* d0 s" U  /************* clear rectangle side(矩形边清屏)***********************/
3 M4 Y7 m4 w& p8 N
0 D* t  M7 t9 \' q3 f: r  void recls(int x1,int x2,int y1,int y2)
0 _* V4 o. ^5 n; `. ]. k1 R  {
- }+ P- E4 Y# z  int i,j;5 [. a$ C2 ^& D! H4 |& O7 l6 ?
  for(i=y1;i<y2;i++){% g0 M( n$ W" }9 A7 ~  O( m
    goto_xy(x1,i);8 F2 g. d# T% D3 B3 v, {6 G+ n1 Y
  putchar(' ');) T/ ]  R; Y& R' J. m9 ]
  goto_xy(x2,i);
' S1 f* Z6 `- J: q" j: g7 r  putchar(' ');2 Q/ Q; u* r  [) F# Q* @$ q5 f
  delay(10);
, s( H  T: ~2 e) [  }
4 u  m( g5 D9 r- v4 k* Z2 Y  for(j=x1;j<x2;j++){
# N' d  c# c- `2 b  g* ~/ j  goto_xy(i,y1);" e7 Y6 k$ k& d1 |6 H' {
  putchar(' ');
. P$ S* [# o- y  goto_xy(j,y2);- J$ a+ ^- G; V3 y! |
  putchar(' ');
( N! l1 d/ a3 `" O) s, R# b& }  delay(10);
$ F1 c5 g8 t  N6 F* Q! g  }" l5 B5 j- a% `. t% j1 _1 C* d
  }  ?0 \9 K- y" ^9 }0 Y$ m
  /******************open screen clear(开屏式清屏)*********************/
( k" b" K! _) ~$ e# Z
: q5 S# G7 O) F6 j- Z! o) l$ L  void kcls(int x1,int x2,int y1,int y2)
( R+ ?$ G* q0 q1 i( {- d, y  {! i" V- S3 k" v- e3 z
  int t,s,i,j;
1 ]' M5 P3 u* @. `7 F. U1 ~5 _- I9 C  t=s=(y1+y2)/2;( [6 _! X: ]2 s9 m4 t  C
  for(;t<=y2;t++,s--)
$ r. c" o" N  A# }  for(j=x1;j<x2;j++){* M& n- C6 Y) P2 l
  goto_xy(j,t);
3 j7 a% E0 m5 N% v7 Y* F! O- u+ e8 N  putchar(' ');
7 |5 O: L# I8 m/ ~( A  goto_xy(j,s);5 s* V1 i; u. k' J
  putchar(' ');- P5 ?# Q/ D8 F/ O
  delay(10);/ D/ o7 x0 c9 }. h( x( i, V
  }
% K4 f& d9 M1 |% @  }$ U; y% g  H# G/ I
  /*****************close screen clear*****闭幕式清屏*******************/
: |+ f' r5 \0 N5 g. w- q% }, v
# X. K/ L, }. }5 X. e" o/ K6 Q! @  void bcls(int x1,int x2,int y1,int y2)& R; u8 f' u: I
  {5 j* i/ H2 c4 R, g6 K
  int t,s,j;: _3 j9 S* ~% `5 W( o
  t=y1;
8 k6 W% U( F6 B: e  s=y2;2 g- h- q. L( ~; h
  for(t=y1;t<(y1+y2)/2;t++,s--)6 p: S0 w/ w/ `  V; `- S6 m. D
  for(j=x1;j<x2;j++){
/ U" d2 }- e( l" H  goto_xy(j,t);
  Z9 a3 F+ H' @( B+ N  putchar(' ');
: u9 T; U2 \' a( h: S. U  goto_xy(j,s);
5 \$ X) e0 u4 k: u' O5 P- R  putchar(' ');8 F3 S; P* H* ^5 q) }- @
  delay(10);7 |. i0 z$ Q2 C$ Z  z! G  J: g
  }5 v7 p# Q3 U8 g. }, q# \
  }
& C" H8 u4 J( _' V! H  /******************bottom screen clear(自下清屏)********************/
. w2 T; ^5 N5 g$ l1 h* h
* @7 f! Y5 @. S  void dcls(int x1,int x2,int y1,int y2)% t6 U) Z$ J2 T) I* i! B8 Q
  {1 H- c( P) O8 k; J
  int t,s,j,i;% N, `9 }9 d2 p! }2 Q1 r4 q, m
  t=s=(y1+y2)/2;+ {4 L8 [* r" ^5 P3 \( Y0 K& g
  for(j=x2;j>x1;j--). B' R+ h% c" B0 Y+ Z4 S
  for(i=y1;i<y2;i++){
7 _1 K/ ?  U6 s" B4 I: j% t9 I  goto_xy(j,i);+ L' E; q! R1 J2 u7 i
  putchar(' ');* S: U! E3 @+ I1 L+ T* Z5 L
  delay(10);
* o7 b& e1 f& E& M2 W  }
0 C  G) E4 b6 f* p  }8 }* n. s3 o3 \6 q) C. @
  /******************设置光标子函数******************/, ^: }+ k8 S. Z7 g0 y6 [' W

9 G/ ]4 O+ K" S; g, c% y. T  void goto_xy(int x,int y)
! O' V/ s0 e, }% _! \! d$ Q6 B  {
' U  L" S4 T# K8 @0 [  union REGS r;
6 J! j1 L8 ]$ x! C  r.h.ah=2;
' v' F+ j. `) u4 `/ `- _  r.h.dl=y;) m0 c- x5 \5 \
  r.h.dh=x;
# C7 a: M! Z* G7 g; ?7 t  r.h.bh=0;
+ v7 G. E. v) g- c( u: `/ f+ ]9 R* T  int86(0x10,&r,&r);
3 D0 }& Z; t& g* m2 X8 e  }
, S2 ^- @( }9 c( S; ?2 L. v1 P1 M
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/" D" S. {  t& ?9 h) r* ?

6 x2 ?7 Z4 o* T- |0 D& s: Z  void puta(void)) ~# T8 f; r. a5 j) \$ \; W+ m6 P; ]
  {
! Y% w# S( u! F1 B3 H( }7 Z7 _  int i,j;" c( g6 }  Z, x4 y
  for(i=0;i<24;i++){8 U' O; X8 e4 E' V' u; ~* c$ {
  for(j=0;j<79;j++){0 `0 ]; v, b  n' J' x
  goto_xy(i,j);% M# x4 S. j- `, l9 F- C# \! S
  printf("a");  c, n! y' v5 R: s
  }
1 `' i' {$ X4 g' i) v( S  }! o& L) E% I; D: z# C, D# X8 }
  }

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