返回列表 发帖

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,/ }  g$ m  Y( O4 y  h# l/ h/ w) z$ b

% j$ ?4 H! k& p) d  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里- G: t) w$ C3 M$ O/ h

0 V1 @7 |7 Q* ~  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ( ?8 F  M1 q9 H( Q  C0 S* b6 o
  子函数及演示程序:
! r4 g$ ~( D4 Z$ `% A3 F: z0 u- g
  #include<stdio.h>8 {3 y% T+ N2 F0 z4 n* y" E& a3 ^
  #include<dos.h>
3 u% k8 y4 n' O6 Q: }  #include<conio.h>2 c( H6 \/ `) m7 b3 M- {# h

7 a  G+ y1 U) r* f  void goto_xy(int x,int y);6 k' P" z4 E. \' W# C3 C
  void dcls(int x1,int x2,int y1,int y2);
/ I- X- w5 J1 f: `  void bcls(int x1,int x2,int y1,int y2);
+ M0 y9 W# S) ~) O& l, n% M  void kcls(int x1,int x2,int y1,int y2);3 I) z0 n6 b& r' _# Y
  void recls(int x1,int x2,int y1,int y2);
; A4 A+ \, @+ }7 w  void zcls(int x1,int x2,int y1,int y2);8 a8 l* W, o1 _: R/ `. @- @1 E% W3 \
  void puta(void);
/ J9 G6 b( y9 E; m5 b8 g$ B$ p
3 J: g# Z, h" G$ z3 W" B9 D, U% U8 q# G. u4 K3 R$ a
  /*--------------演示程序---------------------*/$ u: \( t5 @, w" M  T; ]8 O3 R
  main()
* J1 h+ R' m. ]+ u! R  {* p- f+ H6 @7 G+ a
  puta();
3 Q" ^' @0 B/ ]; x. I  getch();$ _5 t7 g. P% ~' F' B
  dcls(0,4,0,79);$ k% ?- `6 B2 p. Q2 @
  getch();  K! u6 A  X# e+ O7 v
  puta();  s0 I% m5 q1 ~. R7 g
  getch();+ W# X. }: K  t7 s7 v6 o4 R% P
  bcls(0,25,0,79);, d9 r3 w9 G+ Y4 T) t0 ?7 i" M
  getch();
, o. M9 O4 @  M& U  puta();7 L4 A" d8 ?$ U9 N6 F# d# J- E
  getch();
6 N7 ]6 O- O) d" [0 T7 q6 W: ]1 Z  zcls(0,25,0,79);
6 h/ a: W) x/ f$ G/ P7 y  getch();9 @" E- k2 N- k# s' ?( c
  }
( ?3 k3 J7 F; w% ~- O4 I  /*********center clear screen(中心清屏)***********/$ X8 c# F! ]6 {" p9 e0 {
  void zcls(int x1,int x2,int y1,int y2)
: L( _' i! g! p3 Z; g6 R4 }' m- z& Q  {: f; S+ E- V" p% n3 U' f
  int x00,y00,x0,y0,i,d;: m2 b4 b3 h9 M! Q
  if((y2-y1)>(x2-x1)){- w8 Q1 V3 i! ^& t
  d=(x2-x1)/2;
7 y9 C* v% v. Z2 F  x0=(x1+x2)/2;
" }( B$ c, u  a7 a" K* C2 Q: S! ?  y0=y1+d;
3 x& p7 M, R- J% k4 e  y00=y2-d;
! A: `1 T! v, Q7 G3 u1 A  for(i=0;i<(d+1);i++)9 e4 S" A8 M  J8 X1 t6 D! Q% [9 W
  recls((x0-i),(x00+i),(y0-i),(y00+i));, u2 C8 Y% k$ A( O& e% a4 Q! C
  delay(10);
7 N" B- h" j( [& J" f- L: {$ x8 |) t  }$ m1 s7 ~4 x+ O! u
  else{+ v4 c! e; {: I8 N+ B
  d=(y2-y1)/2;
( w% u! C, b& d, U1 g8 ]8 S/ Z  y0=(y1+y2)/2;; P) V+ t% m  l  p& O3 n- `! i" K7 R
  x0=x1+d;
( B+ ~8 l4 e7 k* F* ~: h  x00=x2-d;
( `/ W2 N6 z& h9 F* X  for(i=0;i<d+1;i++)
5 D+ t5 Y& |2 P8 m% x" f( F% U: P" S  recls(x0-i,x00+i,y0-i,y00+i);
- p3 K' ?( l# |/ h, v  delay(10);7 w% d4 V% y' ]& A
  }
/ p6 z# q, E0 W% D  }/ a- Z% N8 L0 P' K

  E5 p* ?2 h. b7 E  /************* clear rectangle side(矩形边清屏)***********************/( u. Z( M7 x. P
% P9 @4 B* |. _% T6 k7 }" [
  void recls(int x1,int x2,int y1,int y2)9 ~( t# e5 ^# W7 ?
  {
% w% n  J8 ?( H$ W: c  int i,j;
6 A! f. W/ T0 B% b- N' L/ B( u  for(i=y1;i<y2;i++){
+ Y, v. K- F& ?! g    goto_xy(x1,i);- M$ }; w) }* y3 i1 C/ g
  putchar(' ');+ r# s1 S" t; l" o
  goto_xy(x2,i);; ~% u0 s: }/ g" W1 D( F
  putchar(' ');
( ?6 ]2 o4 T9 p# ]/ {  delay(10);
9 R  l! {% i5 c$ s" e  }& R; K7 `5 S0 F+ {) B! k$ r  k
  for(j=x1;j<x2;j++){) {  f& W: F1 l' A
  goto_xy(i,y1);5 |! i9 n' i1 Y' q4 N* o. J$ Q5 f; O4 g( N
  putchar(' ');+ T6 p# `! |2 s
  goto_xy(j,y2);
0 q  z1 @4 [: K, j% C) d  putchar(' ');
7 _  w" [4 }' n* O+ d1 d( \# Z  delay(10);
+ Y' g; P& F; F' o; i" O8 g- ^  }
) E; ~9 u: Y+ f: ?# o6 X- p  }
& ~9 L+ ^8 y( a( o& ~# l  /******************open screen clear(开屏式清屏)*********************/
' y  h) b/ ^, z( o) y2 b2 c& [
4 D' x: v: \1 m  g; y# T* M  void kcls(int x1,int x2,int y1,int y2)4 u' U. |% P* N
  {
7 K4 _% i# t0 d& x) S) N) A  int t,s,i,j;. X* V2 g" V% P* `  o9 |4 o( y, h; r! I
  t=s=(y1+y2)/2;
  o; I1 A# t3 d. R* ^( A! Z8 H  for(;t<=y2;t++,s--)) O9 K1 }# e3 \5 y) B+ n3 M  U
  for(j=x1;j<x2;j++){
9 u$ L6 V4 O7 j' @  goto_xy(j,t);
' p( W7 Y5 Y' a  putchar(' ');1 W  @$ v# Q9 F$ O; H
  goto_xy(j,s);3 m# z* v% S% h- Y
  putchar(' ');
$ Y5 o. ?5 b) N9 e  delay(10);/ K4 {$ h3 W2 H9 [8 x/ k
  }
8 N% r6 @! e3 ^9 R' Z" b' t' t  }
8 b& A8 u, T! U9 p4 c# e& o  /*****************close screen clear*****闭幕式清屏*******************/: d0 ?7 O$ [* C4 D" U4 L1 L

0 o8 X# x8 _. P' s3 J  void bcls(int x1,int x2,int y1,int y2)
5 p# i$ K1 e* D& G2 j2 u2 f6 h  {
" x( L2 l9 X' I  int t,s,j;* h6 H% r6 J& T! H& q/ ]% x
  t=y1;$ i* Y4 u% E1 q# c7 T: |! d
  s=y2;
0 h2 h5 s4 f. O/ f: o  for(t=y1;t<(y1+y2)/2;t++,s--)6 }: Z. O* |+ A' }! u; i* D0 R, K
  for(j=x1;j<x2;j++){7 M' W& Q3 k% @
  goto_xy(j,t);
3 x1 ?" z/ }, \* G  putchar(' ');
+ e- [3 B6 @' d: C  ~3 y  goto_xy(j,s);
+ m# }- r$ z. X  putchar(' ');
  i( ]- G1 t5 S! {; P5 R  delay(10);- N! B* D4 @' Z. q7 f7 T
  }
' M0 h4 F" p" h3 H: n5 t  }
! M* e+ I+ G2 I) c; c/ I  /******************bottom screen clear(自下清屏)********************/
5 I/ `: \% l8 T4 J  L; P1 [9 F
0 `0 n) F& P6 j$ C( ?  void dcls(int x1,int x2,int y1,int y2)* }- W  X+ S- a$ u
  {; O9 Q& w3 g, K' \2 ~
  int t,s,j,i;
5 i/ ?& G" Q  m8 T* c% ]5 r1 |7 E  t=s=(y1+y2)/2;
% O1 x& i; S' z# v! t5 u  for(j=x2;j>x1;j--)
) `  H7 s( t' C  U: v6 Z* h! k  for(i=y1;i<y2;i++){0 c+ E3 z5 C# \% A
  goto_xy(j,i);
) p" c6 J) a' R  n  m' l  putchar(' ');
8 z! G1 g: g" X  delay(10);
/ i5 {8 p( v( ?1 C. ~  }
! T0 \- q: |2 {/ K# @  }+ r. u1 A( w1 a/ z" x% N& }+ ?
  /******************设置光标子函数******************/1 w& s- w; `2 a5 q
! k$ a( w7 h: ?
  void goto_xy(int x,int y)& x8 Q* L/ [9 _  M: \( w
  {
$ M5 F0 G  r. d; r3 t  union REGS r;5 F! `! u& E( \
  r.h.ah=2;# G8 f  z: r  A* E
  r.h.dl=y;0 a  d9 l- |9 w( k
  r.h.dh=x;8 R% V' u5 ?! j& ~- `" }  u
  r.h.bh=0;
4 t2 z7 B% S% {3 F* g4 o& d* {  int86(0x10,&r,&r);2 E/ S2 J6 k, o# O
  }
+ G, f& ^3 E3 a  ?! k; v8 b
( T# F  U1 w9 Y3 z0 Q, @  I3 H8 {  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
2 z  ^0 A& o8 V& J  {& s
$ L/ |7 ]  Z) K) q! `  Q  void puta(void)
) a2 ?' X6 y+ k7 j2 n6 Q0 Q  {
0 T" x8 R# j6 Y3 w8 Z, K  A! h  int i,j;3 a9 h/ L; A5 S% ^
  for(i=0;i<24;i++){
* E8 P4 \( h; l6 o* M# F  for(j=0;j<79;j++){! b) p6 T4 |$ T$ m: ~
  goto_xy(i,j);
: X% K, M# G& f# T# x  printf("a");
* @, t) f+ t# L  }/ b; w5 h  Q7 m6 R/ d0 x8 S: n; {& J
  }1 c3 w6 m  r2 L4 q7 T
  }

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