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

C语言艺术清屏

问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,0 G5 ?! v2 T4 o8 f
4 \+ f9 g0 A! s0 h; |9 v1 H+ P1 m
  并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
) D0 f2 r3 a% T  l' {, n6 F0 l3 l) ]" y5 h9 M
  用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. ! @9 o3 p# s# a
  子函数及演示程序:
- Y4 v6 \9 W7 m
3 f& y3 U' [1 q  t/ d/ x  #include<stdio.h>
7 |+ s, q: {; ^3 E  r% [$ S  #include<dos.h>
' n2 ]9 s+ C; l  #include<conio.h>
- o  }- e. j* K* U, c( P5 Z0 n% q3 X9 b
  void goto_xy(int x,int y);4 F. j1 i: T$ i1 C6 V
  void dcls(int x1,int x2,int y1,int y2);# U& Y- z, D$ w" p: J
  void bcls(int x1,int x2,int y1,int y2);
0 L" p' [( Z- X, v  void kcls(int x1,int x2,int y1,int y2);
# L+ I* v- x& m. l+ m  void recls(int x1,int x2,int y1,int y2);
3 N+ R5 i$ Q# ^' p2 L1 ^8 P  void zcls(int x1,int x2,int y1,int y2);
, c# A% Z# i) p' V  void puta(void);$ G4 ~' |1 ^9 `% ~/ ]! Y8 V) W

4 `3 w. s$ g+ ^6 |0 \: [; V; g. ~( [
  /*--------------演示程序---------------------*/
1 b- l* T& E* e  main()
8 d0 P4 i$ r% r$ d; c( H% x  {
6 [& [7 E/ \& d5 F+ b; H  puta();4 }' S7 O  t. a5 c5 d" D) j
  getch();
* p# ^; ]% l, `2 o  dcls(0,4,0,79);+ a/ g% ]" y, F: F( c6 o1 k
  getch();
; p. B) B* F( D* `8 @% }  puta();
& W$ a0 Z3 b& F# H  getch();8 m: b, R! k& Q( }9 E1 @
  bcls(0,25,0,79);
" P7 ]; O$ |  f$ L" c  ~  getch();7 q& \: c) p3 {( h/ M- ~
  puta();
2 H; T7 I3 e& r8 ~  getch();
" _0 k8 O+ N! }4 i. F  zcls(0,25,0,79);
* A. B, `( m1 v4 J; w+ L& k  getch();
* t0 S1 Y4 j4 W9 R7 D6 s6 j  }
) n1 u1 t- @) e  [) L/ A0 E  /*********center clear screen(中心清屏)***********/9 G, p  F7 [* @0 R) P8 m
  void zcls(int x1,int x2,int y1,int y2)
% ~; e" ?: m, A5 y/ G5 M+ U) d  {% C* s" S$ @: p
  int x00,y00,x0,y0,i,d;- n& ~# V' H) M; g
  if((y2-y1)>(x2-x1)){7 V: K1 q0 ^5 m9 I2 ^5 m2 X
  d=(x2-x1)/2;
$ a* W3 `1 {# h9 {  x0=(x1+x2)/2;1 E4 I" ]) p+ j1 o" o/ V6 K
  y0=y1+d;3 I* n  P3 z# R0 ?
  y00=y2-d;+ ]0 }8 R1 V1 E" w6 J% P: S/ ?9 V4 Y
  for(i=0;i<(d+1);i++)
. O8 _/ C- |: ~2 Y  recls((x0-i),(x00+i),(y0-i),(y00+i));0 [: @& e( h# u. r8 h
  delay(10);
. \8 w" J4 @. K+ c& D$ e# }  }+ q1 u, _6 N- }) p7 C
  else{# x7 }" }* k( e$ Y3 E
  d=(y2-y1)/2;
7 {5 b1 ?& R1 y* h  y0=(y1+y2)/2;7 A3 x8 \, l2 p$ R; `8 o
  x0=x1+d;
) R* Q1 f& T) f% j' z% [/ s  x00=x2-d;/ O! M. P! q1 Q3 D% q/ a4 ^
  for(i=0;i<d+1;i++)
1 }0 c2 s* {) d5 Q1 u5 P0 F  recls(x0-i,x00+i,y0-i,y00+i);2 f) s! m, F* L$ y  u
  delay(10);
4 {6 P' ~4 P, _5 N  }& y4 G! ?9 J! ^! X' w7 b+ ?. M  o
  }
, h, Z. f+ V4 @( [4 J/ ^, P7 @& m
2 r: r  y, y/ Q( D2 e7 m0 ~  /************* clear rectangle side(矩形边清屏)***********************/
" Y0 l2 I% `! @7 ]+ `/ ~1 c7 ^. t
3 D5 F; y4 b) Y" k7 b# n  void recls(int x1,int x2,int y1,int y2)1 ^* a5 H% K2 Z+ o
  {
$ {, y: h3 O# E2 q) r: x) B& Q  int i,j;
+ O9 O1 H7 f  @, G# g% z* R; b  for(i=y1;i<y2;i++){
0 z4 W9 E* w7 N    goto_xy(x1,i);
& B, v9 K/ I2 o$ G9 @  putchar(' ');7 z+ j: r6 k/ A) T7 \
  goto_xy(x2,i);) J* Q+ F; H$ ^4 U. M
  putchar(' ');& T! c+ \! c, T0 r# F
  delay(10);2 p2 ?9 Y1 g" h
  }
8 J$ N4 y4 S1 S5 V# p# f  for(j=x1;j<x2;j++){
* }& m7 s/ L- J$ G6 F/ F  goto_xy(i,y1);/ T/ L7 M' {# W, }* e9 a7 v: Y
  putchar(' ');
6 j) J! i9 H9 |4 z6 j  goto_xy(j,y2);  y* D. l! U3 N: \0 b" [
  putchar(' ');
" @4 n7 Q. {2 m0 K  delay(10);
' e5 X# a2 G6 }$ p  M, h/ X; ?  }6 N( q; S: Z% }2 K- V
  }
0 D) k) i9 j0 x+ c0 x  /******************open screen clear(开屏式清屏)*********************/
. X$ o" G6 P: ?3 _$ _& x# Y! J2 b6 |7 L+ y: t$ [. h* k2 r
  void kcls(int x1,int x2,int y1,int y2)( p- ]6 g7 B- w' G4 M. n2 b. |
  {
! i7 K, g9 c: S# c$ U1 G  int t,s,i,j;
* T3 ^) A* J3 X6 n, S8 S+ D  t=s=(y1+y2)/2;
3 @9 r9 L; }7 a  for(;t<=y2;t++,s--)
8 i$ p; n$ l+ U& ~$ M+ d  for(j=x1;j<x2;j++){
. U) Z3 K& @& B0 H8 J. }4 w8 F" c* E  goto_xy(j,t);+ Y8 Q! v3 r1 P/ t6 {
  putchar(' ');( `9 Y& V  w. u  a/ g) n
  goto_xy(j,s);
/ \/ `* {) Q- w3 w# z& p  putchar(' ');. C  v- i) F! `0 H9 z& F0 j
  delay(10);
  Q" O( J, s- d* e- _! Z  }
: U$ P& {5 o3 G, n  }' W1 q0 B$ u6 D5 n9 }9 q1 G! X/ [
  /*****************close screen clear*****闭幕式清屏*******************/. p7 A8 W9 J5 P  X
2 {. y0 g& l- B: K
  void bcls(int x1,int x2,int y1,int y2)* _0 v8 R" E( i! l& `
  {
/ [- M& w" k; c4 C4 _$ M  int t,s,j;9 P$ r+ T, Z2 ?4 p9 b) d! v
  t=y1;
& g' c) u& j& k8 ?  s=y2;
$ F' d6 o5 x% ~/ O8 h  for(t=y1;t<(y1+y2)/2;t++,s--)
( j# K" G' m$ v& n' M5 r% ]& N  for(j=x1;j<x2;j++){
7 D6 u4 V/ }& ~7 ?  goto_xy(j,t);
& b! {( C- u- Y1 {  putchar(' ');: Z3 P- W! B; n* P6 i9 E: b
  goto_xy(j,s);, \2 {4 p4 c* N6 Z. M0 I
  putchar(' ');
6 d5 s4 X" N1 x" u- s0 O- \  delay(10);: L0 n% p* y  ]; d# U! L; p
  }: U% G2 A! `- ^; D
  }
; p0 b) N0 P# [: _2 |. i  t  /******************bottom screen clear(自下清屏)********************/% h) @* s. D4 E" Z/ e/ [

9 `7 z: L! E) [  R( g/ v1 t  void dcls(int x1,int x2,int y1,int y2)* b  W8 L& [/ p5 X2 \9 {
  {$ G1 l* d6 K" e( R6 H
  int t,s,j,i;# `+ M0 Q0 W/ P
  t=s=(y1+y2)/2;' B4 F. ?# M. g. b# m: V
  for(j=x2;j>x1;j--)
+ t4 K: Y/ ~' k( n  for(i=y1;i<y2;i++){
- m! |$ h4 l' O& {+ b6 P! u8 s# _  goto_xy(j,i);" t+ ^  v' ~/ n, C, `! H7 {
  putchar(' ');% {' A8 _7 [: v3 ]; K; c
  delay(10);: I& D" v3 s# h+ P2 j+ ^. H% A
  }
4 A. `3 ]' r4 L  p" W# e( f  }
* E  q& M6 T( G% L( h% b  C( e  /******************设置光标子函数******************/
* Y' H, b2 Q% Y0 o% o6 q, V
+ N' x! ?4 `3 }% l. u. B  void goto_xy(int x,int y)
+ I- M- i5 T# b) @  {+ ~. i8 y) M- \6 Q/ M8 V
  union REGS r;
- I/ R% ^) \/ }7 X# R3 d  y" K  r.h.ah=2;+ p; p8 @% r7 L1 T) e3 w
  r.h.dl=y;: }6 e& U  V0 e+ v0 l. u2 F0 u
  r.h.dh=x;
6 d" ?" P, ]* f1 S5 D. G6 E- Y  r.h.bh=0;' {9 R5 w( s, d2 b& [& N" X
  int86(0x10,&r,&r);+ K6 d3 x+ C8 o( z1 ?' J3 P
  }
0 l- t+ m1 ~" H* q, Y6 W! u% l6 z4 c  O) q* d" b6 Y( l
  /**********************在屏幕上打出一连串的a字母用于演示程序******************/
. m, o' k5 W- a/ j9 p5 R+ y* v: Y, Z
  void puta(void)" X9 C+ Q+ U; X( |+ \$ q1 g3 a" L
  {
$ ?6 S8 h) r7 o# M2 S7 Y/ ~8 r+ g  int i,j;
! a, u/ Z8 @$ `  N5 J  for(i=0;i<24;i++){
- F  s4 t& t3 W$ d  for(j=0;j<79;j++){
9 d, t$ T! w, e; r  goto_xy(i,j);
% e, i' e% s/ T4 h; `$ i  printf("a");
$ ~$ p. Z1 h; g$ Y; y: q  }
; u  D* t9 E! ^: d! N* }1 p7 R  }
* K, d9 c! o2 K4 a  }

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