  
- UID
- 133
- 帖子
- 51
- 精华
- 1
- 积分
- 186
- 金币
- 55
- 威望
- 2
- 贡献
- 0

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,, t$ ?' Z+ [+ }( e6 K* G
4 v! T' S3 T) G6 R7 w& _
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里3 z7 D8 x) N2 n" s# r
: J% i) b! W: D& R6 [ 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
0 d+ x7 k5 e) v/ H9 f 子函数及演示程序:8 D: B" E5 i% E3 s$ e
1 l+ I3 m! ~' ~( }) K |. ]( L
#include<stdio.h>
C4 A& ]7 K9 z `! D" f' c #include<dos.h>
2 T" Q5 \+ d: o7 E8 g+ G, M1 E; F9 c& T #include<conio.h>5 p2 e& _& |/ o4 L6 g, I( N
; L0 {6 }2 z7 }) L2 V1 J7 O void goto_xy(int x,int y);! k- ?& G! \% i
void dcls(int x1,int x2,int y1,int y2);
) c: @5 J2 L- T: D' o- j0 @ void bcls(int x1,int x2,int y1,int y2);
+ X h2 C$ G: [: K8 E void kcls(int x1,int x2,int y1,int y2);) I4 x2 e" S! l; R' A! q, L) Z
void recls(int x1,int x2,int y1,int y2);
# H# ?! e7 z5 U$ o+ w8 w# \# t. k void zcls(int x1,int x2,int y1,int y2);
% ]$ G* J& |- ?+ j# k% H* R void puta(void);/ v9 g0 i8 x/ t
# ~0 P6 i+ H+ {6 z7 {, G- }) D# i# S* B: b) ]0 x
/*--------------演示程序---------------------*/
+ z' y1 n- y' g/ K) x' d5 l main()/ Y o* h0 L! @6 A* I. [8 c
{1 _& \* Z! R6 l* O% `" b
puta();
& I9 y f# v; ], j getch();/ @6 m* g* G9 G: p2 e; a
dcls(0,4,0,79);4 y7 U, |$ y8 T. _, e8 W% v
getch();
2 {/ y6 W* r& j5 [7 c puta();
8 y& U1 H- l% ^ i& { getch();3 z4 a# t# o- ^/ ?, T
bcls(0,25,0,79);
7 U; e$ d+ o. Q p getch();4 J/ z" ^3 V: L; \, H% t
puta();% T, e3 `% c2 y8 x1 w; a1 Z, N0 m
getch();3 n- {7 v/ W$ A3 @' C! S3 E% s
zcls(0,25,0,79);
$ Q' Y- s: c/ \, |; t x getch();0 f( a2 \; }( f# b' c# p
}! m4 g: J! {% J; L& k
/*********center clear screen(中心清屏)***********/
7 W- S8 ? t) K1 u- k& \1 |: d void zcls(int x1,int x2,int y1,int y2)4 ?5 u e3 v# P- F7 U' q
{
9 W( W% r w# z int x00,y00,x0,y0,i,d;
, B9 w6 V S; X0 K if((y2-y1)>(x2-x1)){+ w3 D0 D7 s$ s: n) ^% A7 w9 o
d=(x2-x1)/2;+ C$ r6 V0 Y, ~6 f3 F
x0=(x1+x2)/2;
" @ V0 C- e5 K* S' K y0=y1+d;
. _5 H" t& j& \0 j {" Y y00=y2-d;$ m9 ~: T7 s( `' d) a3 Y
for(i=0;i<(d+1);i++)
" a1 p$ c$ x" w recls((x0-i),(x00+i),(y0-i),(y00+i));
( I1 S$ D; g+ a6 E6 h delay(10);
; P* z7 @+ d d$ B# {- ] Z }- P1 h$ M# A% W( @7 W! A& W
else{
1 a% }: q" L/ T# o3 D, u2 H/ z) ]6 T d=(y2-y1)/2;
* U" q7 O: S2 u8 y" R2 [8 p4 a y0=(y1+y2)/2;+ s: G6 S! R) B6 S, {
x0=x1+d;
5 L! }0 F" U- P; w1 b x00=x2-d;/ p' i6 ^1 Y- h7 E: P" p! V
for(i=0;i<d+1;i++)
2 l9 N& h& j: o: `. S+ Y. g6 A# \ recls(x0-i,x00+i,y0-i,y00+i);1 _& a: N) I& Q& d8 G' X
delay(10);
/ k! X* H0 \% u9 | }' K9 `5 v- r3 S9 M
}
0 P' H; M. B/ H, y& d
* o- n5 G. X6 c/ p. w. Q /************* clear rectangle side(矩形边清屏)***********************/- h* W1 `% L5 y% [) |% J
* b8 V7 w; m7 H5 E: \ void recls(int x1,int x2,int y1,int y2)
9 S( m9 A* d+ z8 i1 H {5 E* E. F2 o. t& f+ ^8 G' ]+ ^
int i,j;( s7 _6 @0 ?- O' I9 a
for(i=y1;i<y2;i++){
3 E/ A3 \7 k/ h- y* i goto_xy(x1,i);
$ w* V* Q2 T5 q% j putchar(' ');
c/ c8 ?7 T( e( l9 k goto_xy(x2,i);
6 J9 Z& u) Y2 }; | putchar(' ');
4 y9 W7 X9 V( x! t2 K# x delay(10);
2 L) ^8 F: t2 O' W1 R0 F }
* Y4 |4 ^0 X3 d for(j=x1;j<x2;j++){% M F" R$ r3 ` ?$ X# ?
goto_xy(i,y1);
2 N/ q0 i. g4 o6 ] putchar(' ');
' K6 v9 z( A# t9 [# I0 X) p goto_xy(j,y2);0 @; S5 N( V+ D: C3 a# w# @
putchar(' ');# V, _& f! r* v6 | a, X
delay(10);
7 s$ ?0 ?* m/ { o6 T/ j }
* ^ p* p1 A! d# \" q! d8 L, A }
! @, s/ X8 v2 T9 M2 ]; w; W% w: Q: M /******************open screen clear(开屏式清屏)*********************/+ |" q+ P0 q# Y9 ?2 Z8 S! Q f
+ I7 e8 V# ^# e z6 l( y void kcls(int x1,int x2,int y1,int y2), \9 U7 ~. k8 X, ]' J
{, `2 ^6 A! q- v
int t,s,i,j;
+ E! k" {9 j1 _ t=s=(y1+y2)/2;
' E$ _5 n# F% Y6 v. c for(;t<=y2;t++,s--)' c2 i- D" w; o/ y
for(j=x1;j<x2;j++){6 R+ D) `- S8 g; ]% a% W7 x
goto_xy(j,t);
9 y: c% H% F! |6 R3 Z& n putchar(' ');
- D( d8 l5 ?8 ^9 w6 U4 g7 Z+ v' _% j& {7 F goto_xy(j,s);
# n$ q+ U5 {/ o6 I6 r putchar(' ');
; f$ P" A I# I# C/ g delay(10);& p7 O4 l( q, m
}
" h7 g& |. X/ p6 G$ e1 R }
: S( T$ b5 A$ w% a" }; v /*****************close screen clear*****闭幕式清屏*******************/
K* f/ h; p5 q5 ]
8 ^& c5 S, i. k- R P3 F void bcls(int x1,int x2,int y1,int y2)! S# F: Q0 T9 d2 z! N
{
, D$ q8 x: N' f$ y6 V7 w v int t,s,j;
& G& q' G( [3 r2 s t=y1;- G: A) G. d. [& P% n
s=y2;9 o4 J5 Y. v# R# x3 M) {
for(t=y1;t<(y1+y2)/2;t++,s--)5 U; T1 h3 e& ^7 `
for(j=x1;j<x2;j++){
. H1 Z9 o, ?, W3 A goto_xy(j,t);
9 H8 ^* I# J% C6 C) ]) } putchar(' ');3 w2 j( L- R4 i( B+ Y1 f
goto_xy(j,s);
4 T2 t" p- [- |9 O8 p F2 I1 R* ]% x# } putchar(' ');
& x3 R0 u }& G delay(10);" y) A/ }& L, e0 ?
}, l4 k+ C1 c2 b' p1 L' g" y6 H5 B
}
/ U5 n K3 ?0 T, ]7 s /******************bottom screen clear(自下清屏)********************/3 [" C" I4 t5 m! _6 ^" @
" K& ?* @0 s6 y* c# x6 V2 m
void dcls(int x1,int x2,int y1,int y2)
$ P" h. v" j: h& g {
+ h N& b$ K' y int t,s,j,i;- H! l* N G h- `6 o( w
t=s=(y1+y2)/2;
4 f; X9 X- o6 c6 f2 X+ x& k for(j=x2;j>x1;j--)
' a, Q2 \5 g& ]5 K for(i=y1;i<y2;i++){( n7 b F, c0 b: J' r' l9 P* {0 \. f
goto_xy(j,i);7 [3 |. Y$ |. z u7 U0 q. z3 b
putchar(' ');4 p# e h' M) `- l$ a% Z, H
delay(10);5 x! U5 {' Y, J, x, a
}. l6 H) U* P6 D6 S: i/ X( f
}0 x7 m% a/ D8 y% C
/******************设置光标子函数******************/
/ `1 s E; l6 b6 O. G! }( \, J( o% p2 F. g3 v3 C
void goto_xy(int x,int y)
m4 ]+ j- O1 j# g# z8 K. F, s {
" r; Z% D! n# x: p union REGS r;1 D7 c( E/ S/ B P2 E
r.h.ah=2;/ _+ g3 Q: _$ u( P$ o2 D- O# {
r.h.dl=y;% e7 L9 O' _' y! o2 B3 Y" V/ M' S
r.h.dh=x;
# R9 y9 h% V* {) q# U r.h.bh=0;# B \- k6 B* D9 V) r) `
int86(0x10,&r,&r);
9 f8 P \" w6 y3 `7 P }6 j) @* c0 s* u7 l
" Q3 r5 u9 M' Y3 m
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 Z5 B' o1 j2 [3 b/ h' ~7 I
3 D# [# n5 o' H void puta(void); m5 a; I ^6 e7 @. E
{
; B- d7 H! D1 ^' d0 b$ r int i,j;1 H( q5 P; R' |/ {
for(i=0;i<24;i++){8 `' G4 J [, e+ f+ D3 d8 r6 R
for(j=0;j<79;j++){7 {& {$ N8 ?9 l1 D. N
goto_xy(i,j);
0 N! q. l/ k+ }2 Z8 {+ C2 h printf("a");; S! H# i+ a+ M) Y* x
}
2 R9 g x& R7 W/ {) v! T/ P }; A+ F- ^# B+ v: {' U9 p; P6 [- J
} |
|