返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,+ ^* A; F$ ^' g+ m( Y* V9 }

% v0 N" E# `8 h$ v7 R6 c  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
$ K2 f5 r% J: t0 r. v8 u* `
7 f/ L& G' f1 i. q, o  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4 z- ~# i- D  o4 e  子函数及演示程序:4 M- ]. O, c" u" [- J0 ~7 e/ A
+ _3 ^& N8 M5 W
  #include<stdio.h>$ ?/ D8 b* [2 l4 y1 A, J
  #include<dos.h>
8 e- n" ^4 s* J  #include<conio.h>
; P" Y, _. c' a, I+ n' A" Q$ i5 A' p' j$ _/ Q" L  E2 q% a4 x
  void goto_xy(int x,int y);
0 V0 E/ Q# w# ]  J% I. R8 ~  void dcls(int x1,int x2,int y1,int y2);* d7 V8 D* M( P8 J
  void bcls(int x1,int x2,int y1,int y2);
8 J  C, w- x( o$ f9 a  void kcls(int x1,int x2,int y1,int y2);
! \' y& J4 G" k/ ^/ {, a/ m2 Z  void recls(int x1,int x2,int y1,int y2);0 w  [% A2 n( u( s& z9 g# v
  void zcls(int x1,int x2,int y1,int y2);! [! }; k% Q$ w
  void puta(void);  |. o. ^* ?# T; Q2 ?

/ y; e# s& T1 V. D0 ~: M1 K
; M: u! B9 a1 @1 k" _/ ?6 L+ e  /*--------------演示程序---------------------*/. f! P" v9 h; A7 }2 N* {
  main()
- D6 Z$ R6 s0 w  {. e6 a! z, G- |
  puta();- p7 V# X( P$ H# a$ j: T
  getch();
( [  z* v' K9 e# h, v" F- z; A  dcls(0,4,0,79);5 C6 I, @+ e7 t" l& V( e# w  @
  getch();
" F- \1 Y6 _7 j6 `  puta();
% B1 L  j6 b; b5 h4 v  u  getch();
4 w9 x; d2 ~0 J3 N( ?  bcls(0,25,0,79);
# ^  O# t2 j3 Z  getch();1 M' G7 |# k6 [5 a  B* [
  puta();) Z0 ^3 j' p& @7 m+ U
  getch();8 \* x, Q' W7 z
  zcls(0,25,0,79);! p9 G* J6 i8 f0 i/ d, w1 ~4 W
  getch();4 T+ @/ e! e! N$ @
  }
1 C3 U1 [0 `  p" I- w$ S* m  /*********center clear screen(中心清屏)***********/& R+ v1 c) o8 h
  void zcls(int x1,int x2,int y1,int y2)
: c7 G0 ~3 s* H  {
0 a! z4 p4 @% t4 f$ i. Q# K0 ^  int x00,y00,x0,y0,i,d;
1 G5 C; e5 Q, x: U3 ~% C  if((y2-y1)>(x2-x1)){
# u* f/ n0 ^( k% S6 s" F  d=(x2-x1)/2;* U6 }4 }. ^1 |
  x0=(x1+x2)/2;  H, d* y5 H, D
  y0=y1+d;* D3 j; F3 O. b' ~
  y00=y2-d;
( g9 ~1 z& W& m  E" e# p2 L  for(i=0;i<(d+1);i++)
4 W8 I4 _& O, t6 }7 {  recls((x0-i),(x00+i),(y0-i),(y00+i));* |) V2 j2 S  }) X% m2 q/ i% i
  delay(10);
, x- o1 w; [/ Q  I: D$ g  }3 J  R9 g- t* p( I- R* b" E# A% Z! l" U
  else{
9 D8 _" R8 ^# v* L& K. m  d=(y2-y1)/2;
0 g/ }, Q# \& }8 m, z  y0=(y1+y2)/2;; \0 }, B0 a. H% Y! c7 Y7 N8 s
  x0=x1+d;1 Z& L6 y' W4 B: T$ X
  x00=x2-d;  o2 U7 `0 {6 T* Y7 {
  for(i=0;i<d+1;i++)
( |- {: W; V# B* o  recls(x0-i,x00+i,y0-i,y00+i);+ h+ h+ d& l& u1 \3 V$ ?
  delay(10);; k$ j+ e9 s- x! \6 V  M+ _
  }$ Q; S- Z: x0 k8 v2 y4 }
  }% ?. i1 \; M8 w: R5 u) ^

, O# T; ~% a8 x. I" ~( C  /************* clear rectangle side(矩形边清屏)***********************/
$ T, m: a4 p( F7 A- i* @# q
% H8 I' E5 ~7 |  void recls(int x1,int x2,int y1,int y2)4 K/ S) R. O, R5 Z" r1 a  ^4 ~
  {; B( S7 @" k' m! b( Q
  int i,j;! B. _7 J  X$ Z/ A5 U
  for(i=y1;i<y2;i++){% O' @! Y+ ~2 H; p7 u
    goto_xy(x1,i);
- q; w2 E% O6 @, J" a( M  putchar(' ');; s  q" ]( P/ m4 ?' h
  goto_xy(x2,i);/ E" O  Q$ X7 g" {7 o
  putchar(' ');+ y5 `2 ^' R2 C$ f  ~9 x
  delay(10);) k' f. K! ~7 N5 B: |5 [  b
  }9 j4 B( U0 q% n( v' P/ o, D( @0 e
  for(j=x1;j<x2;j++){
) i5 Q3 P" Q1 ]- f3 B% D, F  goto_xy(i,y1);
$ M6 m0 x7 D: K% y/ a  putchar(' ');' |* P4 d5 v7 W: \
  goto_xy(j,y2);
$ _) n# ?0 s) G; y1 m7 J  putchar(' ');
; j) N1 F) C  U  delay(10);
  c" b8 A; T9 h3 Y6 P% }  }& z) Y* q; Q7 c" s
  }
+ |2 A- H& R$ ]6 U  /******************open screen clear(开屏式清屏)*********************/
4 y* g/ x; ?( j$ I* Z5 l7 F
8 h1 D4 o. i: [0 f  void kcls(int x1,int x2,int y1,int y2)
# H- }; r5 a$ q) V5 u) m( p  {2 s& N4 T- S0 A# C. O
  int t,s,i,j;
# O! Z# U; S5 N- N  Z2 m  t=s=(y1+y2)/2;5 D' s& b, Q( g9 J5 }! i1 V; `
  for(;t<=y2;t++,s--)
1 J# l" s: o( ?) A  L" X  for(j=x1;j<x2;j++){3 B3 j0 e: m' b1 K
  goto_xy(j,t);
- T5 Q6 d2 l) b, w: a  putchar(' ');) N" R( N0 ~5 M# G! p7 ]
  goto_xy(j,s);
* X# l4 k6 A/ v" b: z  \  putchar(' ');6 a0 R: q( ^# r. h
  delay(10);# m2 Y- K+ P1 X' \5 U7 D
  }
2 x) U* F( ~% S# |% Q  }
! J: Z% U% C. h! k  /*****************close screen clear*****闭幕式清屏*******************/
) N" G  t% ~# z% ~' y( _1 x$ P  C' S& c4 d3 ^* a1 U& z
  void bcls(int x1,int x2,int y1,int y2)
8 a; S4 [* Q; ?6 c) s9 w, t! ~  {% Z1 ]0 k+ S+ k/ d$ e9 y
  int t,s,j;
0 v$ t# `4 F) x" [8 G  t=y1;
6 x$ Z& X/ ]# U$ h0 O3 r  s=y2;: M8 h) M4 M# r3 [
  for(t=y1;t<(y1+y2)/2;t++,s--)
& V3 H0 `* w& d% p- @. i  Q  for(j=x1;j<x2;j++){
% w1 [* {9 J* B  goto_xy(j,t);6 ^* g6 o% f( R
  putchar(' ');! t8 m9 c/ t# }! f  p6 }8 y+ t' X- J
  goto_xy(j,s);
) e$ B" I! N1 A2 |# Q1 H  putchar(' ');: G& {) ~7 `4 P2 j' v
  delay(10);
( J& N; h8 g! t- A) F& X  P: {9 [  }& I- @5 M! l% m, B( z& F& {1 P
  }0 Y, }) W4 [" F. u
  /******************bottom screen clear(自下清屏)********************/% r9 \; G; B# o2 N; O/ F1 N% X9 C

4 s2 l6 O! S1 v. U  void dcls(int x1,int x2,int y1,int y2)2 Q5 y' j8 d* x
  {, n" c% |9 O& E3 z4 o
  int t,s,j,i;
1 ^) p6 u' Q& i$ P5 g: T  t=s=(y1+y2)/2;
6 I2 M3 l/ P8 I( ~" U  for(j=x2;j>x1;j--)- h' `& u& o) e$ j
  for(i=y1;i<y2;i++){! `% n" q  q( p# o  n
  goto_xy(j,i);
  I/ a5 j; Y4 k" r  putchar(' ');0 Y" r" t8 s4 q1 G8 J
  delay(10);
. U' |2 h2 G  l) y  v8 g  }
0 w8 }% W  e  L1 S2 X4 {  }
0 m" F/ m: G! Y" g  /******************设置光标子函数******************/
3 b8 F# D" F& h" r; q2 |( I
. R- E) G) R: v8 T  void goto_xy(int x,int y)
# A! Z6 p4 P8 i; g/ S' W# `- j3 a  {
+ Q+ j, b$ k2 f2 D$ B7 x  union REGS r;
# }9 R* w* l/ b( p/ E2 V) |# C) L  r.h.ah=2;
, \( m! c5 O! E2 s. J( E& c  r.h.dl=y;
2 y; o* v2 h/ e$ d# v  r.h.dh=x;( m5 A6 s: V* N1 s
  r.h.bh=0;
; {$ j5 @" ]; u9 ]  int86(0x10,&r,&r);
6 V9 P/ ~9 ]0 ~7 p  }
+ N! d; C4 N1 H- j, Q
" v$ R2 a# _' k' H7 q( l2 W$ h  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
, P& D1 F+ x+ ~
) L- M+ y8 c; r1 E6 P/ y, c  void puta(void)
+ f; \+ A9 _5 |5 v! N  C9 r( w  {: }# ]2 M6 N( l! n+ ~; c
  int i,j;
. ]$ h# K5 r2 E' E6 I0 {7 E; l$ ]  for(i=0;i<24;i++){
& M, w8 y! O1 U9 v2 d7 B% f5 P2 E  for(j=0;j<79;j++){
( ~5 ~5 i% B% X" u# K2 ?  goto_xy(i,j);
$ p- g( y7 V& b+ _9 C; R7 G  printf("a");7 C. c6 N- q/ M
  }
9 W1 M/ U! V" l$ }# i8 U( [. D. _5 g  }4 B4 q3 i7 W# h8 A. `' M
  }

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