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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
% X& h9 f, R( B/ q5 J7 v
2 U0 b3 P# w) W% R8 C  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里) P6 ]' Q8 e# M6 p  v% O& b. x

# |; p9 I) Z8 G4 L+ A  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. " H! M& _- G- Q
  子函数及演示程序:
; ?4 G8 B/ I/ L. Q3 B: o6 P3 d$ T( ~; C& T6 o
  #include<stdio.h>
2 H# e& t7 N. b  #include<dos.h>9 ?# I+ T9 N) q2 H
  #include<conio.h>0 W1 ?! J- F( D* P, J

% i0 p) d- I; a$ N  D# z& F9 z  void goto_xy(int x,int y);$ y4 m) E& o  j4 m6 g! f
  void dcls(int x1,int x2,int y1,int y2);
: J1 I: `: I# H) k. j  void bcls(int x1,int x2,int y1,int y2);( V5 c# u( i- M$ D
  void kcls(int x1,int x2,int y1,int y2);
9 R  e5 }( y' T# v; i2 I  void recls(int x1,int x2,int y1,int y2);
+ J) y6 I  l& U4 d  void zcls(int x1,int x2,int y1,int y2);
; |, l) T1 d( V2 R  n  void puta(void);- i+ Z- A* K2 i# p; Q/ x$ q. _
& I2 K6 X8 n$ X" l7 a

+ }! @. o! G7 X" p1 }8 Z  /*--------------演示程序---------------------*/4 f' G/ C/ `2 w: D
  main()) r& Q$ Z* r2 |( t/ p; ?5 K
  {& p  j- s! T; h6 E: ~. [( ?7 l% J
  puta();
  b5 X/ i1 t- G9 Q  getch();$ Z1 F+ ^! j& J% G' W/ J. a$ V! M
  dcls(0,4,0,79);
& B- N$ F. ^- \9 D: S- E+ O; G  getch();$ [3 o# Y8 s% x5 V+ X
  puta();( o; f) w) u* ?+ ?, Q" Z2 ~# K
  getch();+ X% U% C$ Q- F$ ^, q. ~0 [
  bcls(0,25,0,79);1 F+ d. ?/ {) F" q# K
  getch();
1 ~0 g& T  s5 T8 x; }# S  puta();/ N, j4 @0 \9 l! s- T2 X
  getch();1 B9 a/ [9 e. O3 [
  zcls(0,25,0,79);1 f: F, R! s" D, a4 S/ F
  getch();3 P* P; r. |( h/ m/ ?2 u
  }# v; z( Q2 g+ [- b( k- n
  /*********center clear screen(中心清屏)***********/+ J' w! ]4 X/ W9 a$ E( q
  void zcls(int x1,int x2,int y1,int y2)
' T% {8 R8 Q! H  {  ?9 w- `" {* ?9 X2 X
  int x00,y00,x0,y0,i,d;5 K* ?1 }/ A8 Z/ L  `* E
  if((y2-y1)>(x2-x1)){
# C7 O9 i- e: q7 E  d=(x2-x1)/2;1 G# d& y% B9 s+ }5 i* O
  x0=(x1+x2)/2;+ \! C: k5 P* b, {! I
  y0=y1+d;
- Q5 V( t# w, T6 `( N; \; o' o& [- {  y00=y2-d;8 }$ b( b  U, {, [+ j
  for(i=0;i<(d+1);i++)
) L5 N) f: X$ w% D: D3 H! z& O  recls((x0-i),(x00+i),(y0-i),(y00+i));$ U; o& L& q8 t4 k, X
  delay(10);! p  Q: Z- p1 {' x2 i
  }
1 R) b0 z' n7 s! b2 k  else{% k$ D/ ^2 [' K: h1 H
  d=(y2-y1)/2;
5 X% G0 |7 j9 Y, J) r% b  y0=(y1+y2)/2;
0 q: x7 S: c4 h; _+ K  x0=x1+d;
5 ?: N% m) i: Y: X. G; B/ p- b7 B  x00=x2-d;
+ x' r! E7 E6 B. X, U  for(i=0;i<d+1;i++)5 f4 X' q. x+ H- u: F
  recls(x0-i,x00+i,y0-i,y00+i);
" a8 t4 z9 \" |6 h3 r  delay(10);
. F3 R3 M, ?3 t6 ]  }
4 w  W4 \+ `0 u; K0 C  }3 T- u" D; G, O" q* E

3 y5 t: H9 @3 }. Y2 E" A/ K  /************* clear rectangle side(矩形边清屏)***********************/
7 x! ^  x& U3 g$ m' H2 q. Q4 @9 z( t* V9 Z
  void recls(int x1,int x2,int y1,int y2)
$ Z" F+ J3 Z! o: \* B: M( p  {
( i1 A" s  F8 f% R  int i,j;
3 L8 f, [6 q( z9 ?, T  ^& _; c- ?  for(i=y1;i<y2;i++){$ j. o' h. X5 u2 x, ^8 U- o
    goto_xy(x1,i);2 j1 }# M# b. ]; ^3 N, D9 Y3 |
  putchar(' ');
3 X1 f0 [3 B  R0 {5 P  goto_xy(x2,i);
; X- A9 ?, {* H( R! H  putchar(' ');
+ Y& j; }# C8 p- K' H* G  delay(10);
9 D; p1 S4 U4 i1 P. X  }
- J2 \/ d4 L' {5 f  for(j=x1;j<x2;j++){- i! T  z+ O" d
  goto_xy(i,y1);
/ h* T: U( ?( a% y: n; R  putchar(' ');
: S1 f+ @, G- c5 J; J; \  M+ R4 @  goto_xy(j,y2);5 s) H! Q1 m. O$ O1 D/ E3 {
  putchar(' ');& K- m& B+ R, v( |
  delay(10);
7 m9 U1 U3 K' a  }2 W* C) A& F1 V3 Q  r# F
  }1 u7 ]: i' i/ g0 c
  /******************open screen clear(开屏式清屏)*********************/
, U  C$ i# s2 }2 w
3 R4 @( \( P- F/ B  void kcls(int x1,int x2,int y1,int y2)
' Z+ y1 J, Z. q  {
9 b. J5 c# _1 ]  int t,s,i,j;
0 _* z: h+ m7 P) Q; X; R  t=s=(y1+y2)/2;. l0 A- \5 x' _  X: K% n
  for(;t<=y2;t++,s--)! x3 D( V- |) A* M" \
  for(j=x1;j<x2;j++){2 o" U& K6 T8 k  ]7 s" Z$ N
  goto_xy(j,t);
  o2 \+ H  Z3 H  putchar(' ');
5 j* j8 t% ~  E- j& f  goto_xy(j,s);
, T3 M7 k4 t2 w9 f. e; X- X  putchar(' ');! `, y% H1 h9 x6 C& c! F! n
  delay(10);1 d1 z3 g; u+ Z
  }
4 Y5 c; K  }/ P0 P6 c) W  }
0 z# h' a+ K1 F& C# s  /*****************close screen clear*****闭幕式清屏*******************/( q% i2 q% H  C) z
1 \: m5 p4 h1 h1 f
  void bcls(int x1,int x2,int y1,int y2)
. d4 K- Y0 G( g  {
' x' h& w6 a7 j- G/ {2 Z# p  int t,s,j;  [7 y1 D1 Z5 g! J5 O) y& g1 G$ R* s
  t=y1;
0 z% a8 j4 h& u$ x( K  s=y2;
& f' O+ c9 l/ L/ k( |2 x  for(t=y1;t<(y1+y2)/2;t++,s--)2 r7 }6 Z# E) [8 ^" Y
  for(j=x1;j<x2;j++){
0 V$ G2 ?. ^3 Q9 V6 o  goto_xy(j,t);
; S! b% S; j2 }' b6 O  putchar(' ');7 ~7 r6 j2 L! k' a' c' t1 K0 u9 v
  goto_xy(j,s);
% q' t' g9 ]$ c  ^5 R# c  putchar(' ');
* f7 U5 ^- Z6 q) L/ ^7 u  delay(10);
+ P% q( B0 ?- `! ~% b. V9 j  }
/ P0 F: q& J/ l1 y7 C  }* r) ~) U# X7 ?. t1 d
  /******************bottom screen clear(自下清屏)********************/- X8 c) Z0 ^5 K. M8 @! o

2 y7 i7 l1 l( q- U1 `  void dcls(int x1,int x2,int y1,int y2)
+ M) @7 m1 c5 F' I& W$ \  {
$ I: j6 s2 p% C6 h! ?3 C  int t,s,j,i;3 _& Y; r, u- t1 n7 M
  t=s=(y1+y2)/2;# _, w! y5 ?% Y- h% e
  for(j=x2;j>x1;j--)  c7 I2 j5 M0 |3 i' ]$ ~( {
  for(i=y1;i<y2;i++){$ W/ u9 S9 ^2 ~7 p0 P- g4 _3 J
  goto_xy(j,i);) y% x4 ]1 B" {) o6 _2 h
  putchar(' ');
4 H+ L  s. A9 ?0 f. L; ~  delay(10);
, F& ]: w7 S- _  }# B  e, Z: u4 @$ @# T
  }9 `/ `" \# U1 \
  /******************设置光标子函数******************/* x+ I6 k8 o7 V; ~8 S
3 F) l' Y1 j+ j) a, V* S
  void goto_xy(int x,int y)
, M( Z  d! B; V! P, [: f. I* ]% H  {0 B3 O6 z0 b1 ^: z% H" i; l
  union REGS r;
! S* p. U' p: S0 K  X  X3 X  r.h.ah=2;) |$ H& R9 P: O( t# x
  r.h.dl=y;1 q( f. y: M3 S, c. H" k# o% N/ ^
  r.h.dh=x;
$ u/ R6 s) Q8 Q& p* y  r.h.bh=0;2 N7 n7 a& Y( {1 A9 x8 b5 N
  int86(0x10,&r,&r);
/ q- b: K7 Z1 D; V- w  }8 ?' ~! T* j" M! p! ]# B4 l
( I( I% J+ C7 ]! y" o
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
7 W  Q) K" R$ x8 ]$ t+ P& z3 Q. h& D( E6 @1 m' |! A; D2 P$ y
  void puta(void)( P4 X& J; e- d" q# G
  {) W7 b# R; i, f% x# _; Z
  int i,j;
# k; J% a7 B; |! Y( ~  for(i=0;i<24;i++){. {: a7 o1 I: E% p2 o. I
  for(j=0;j<79;j++){# S/ N; P' X5 O2 \1 S3 K, t* g
  goto_xy(i,j);
' Z6 U, Y7 V; Z  y  printf("a");
. ]6 r; t# ]( h1 s  }
3 Q- d5 S2 ?$ J$ G% _; W  }) H" m2 s% O5 v
  }

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