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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏," f5 t3 U8 U) X) g( Y6 z
/ f3 S0 y) w" X0 Q3 I
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
( z+ {, f0 |( m$ X) r ]+ T9 ^- J
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. 6 g- g8 }' f, ~5 t5 s( R7 \0 A
子函数及演示程序:# ]9 y& J5 _2 E8 A; ~9 w
7 |- l2 {6 U7 H- V ?9 a) n" w l
#include<stdio.h>3 g8 |% }- d0 N: L
#include<dos.h>, W7 R- O, D K
#include<conio.h>
! {0 h4 [* L) @* i# O, h/ |7 u- H) Y- Q$ P ` ^5 Q
void goto_xy(int x,int y);* l: {/ R& M( D+ X
void dcls(int x1,int x2,int y1,int y2);, C3 K$ ^: ]: `
void bcls(int x1,int x2,int y1,int y2);7 ]0 C$ Z4 l& u" p
void kcls(int x1,int x2,int y1,int y2);
. U) o- ^2 L4 i2 r void recls(int x1,int x2,int y1,int y2);5 Q2 V9 W) H7 J8 K
void zcls(int x1,int x2,int y1,int y2);, x* P* F3 [0 j- O* a# F- A
void puta(void);
5 v L1 L$ d3 ~, h! J* s6 u" J
% H% i) E' H2 |# a6 u9 Z) }3 B) ]* V4 e1 L5 d! D6 `
/*--------------演示程序---------------------*/
' z5 k/ O8 |0 p6 J* [ main()) a3 e2 X4 p/ Q7 j0 u' G1 }- f
{
( {6 {6 a1 a$ i6 V: v" t8 X puta();+ v; h7 ]0 x- {5 i/ K
getch();
9 ^+ Q4 }8 p; V( B u# H4 l, {2 O dcls(0,4,0,79);
~, I# c$ ]; }2 x$ O& Y6 G" ~ getch();
8 Z( @, f5 W# Z1 o3 ~0 s puta();
! u7 ~6 {) B5 [% k. y getch();
& b" q7 X/ @& W3 ^5 |* x* D bcls(0,25,0,79);
L+ }- g# f. M/ w* K. j6 q getch();9 s2 ?( o6 \$ ^1 G6 @
puta(); ]* u/ G* q$ L$ F
getch();1 E. @# Z7 M& u6 s G
zcls(0,25,0,79);% b& B* k* k/ ?. }# k7 k
getch();
6 H+ R7 D4 W$ N' V: S8 Q6 \ }& b* f1 u$ a |. i
/*********center clear screen(中心清屏)***********/
$ g/ B3 X# x: C( I void zcls(int x1,int x2,int y1,int y2)& T1 f2 J/ _% j3 C5 b! x( }
{
5 o$ d7 C S/ t: g: s0 E int x00,y00,x0,y0,i,d;
$ m1 v9 z* j9 T, Q if((y2-y1)>(x2-x1)){
8 }7 w$ c9 V' c! Q8 X4 ]1 Q7 D7 H5 c d=(x2-x1)/2;
) `$ v2 g/ h2 }+ U5 L9 Y) r6 v2 D x0=(x1+x2)/2;7 @9 C) t3 B( B& E! _' ^3 r- X
y0=y1+d;4 j% w7 b$ Z8 y+ Z$ ?
y00=y2-d;
! p& {/ O3 s0 R- D) }) H+ @, _- [ for(i=0;i<(d+1);i++)# k2 N8 B2 N$ G' J j6 V
recls((x0-i),(x00+i),(y0-i),(y00+i));
. `0 X6 L4 @# e! r3 T delay(10);
$ S! d+ i/ x) ?- x3 S! f }
9 V2 L# M; e4 _6 R* T' L: R2 u' O else{
8 B& f4 D' [/ J" t' F, e/ R; C+ A d=(y2-y1)/2;$ v- _1 N; S) i! Q# ?( j4 A9 _# l5 p6 Q8 k7 M
y0=(y1+y2)/2;
5 l3 d* U. f, v' |6 X/ m x0=x1+d;
: h( J! }7 n$ X0 n$ V! U x00=x2-d;
* V1 S# E+ b! M }. J* J for(i=0;i<d+1;i++)
1 N5 P6 A. Z- k8 Q) s0 m) x recls(x0-i,x00+i,y0-i,y00+i);' ^8 _# h- T4 ^3 |9 d" G2 x
delay(10);
, o( U. s4 g b. f" E6 t6 P }
7 W. K8 O+ d9 x% n }
0 X% i. ?# G0 O8 [; q, m% i7 U
3 k$ U+ q8 a8 W. J3 n. a /************* clear rectangle side(矩形边清屏)***********************/' a- y4 i9 C6 }3 e. Z$ B
; n- M# z) V( E: ` e( B% H void recls(int x1,int x2,int y1,int y2)
& } R. S; h- S& G) a" p {
8 D- ^4 f, C5 M K* T( n+ r int i,j;2 A% M$ v. A6 q$ q0 u5 Q
for(i=y1;i<y2;i++){
8 `( ^! ^1 d" i! o goto_xy(x1,i);$ s' r' |& _2 j: [7 R+ g
putchar(' ');
: j6 Y, t" S* a) j6 B goto_xy(x2,i);( W7 U' \% b% K- V5 m1 W
putchar(' ');. [1 W9 j$ r. z' n. v# s* E
delay(10);
! w/ k% h. F! m }
+ u' t! q2 w2 k) I0 B \ for(j=x1;j<x2;j++){
, Z3 G4 A) f/ h# [1 q goto_xy(i,y1);
4 x9 l m; ?- D! a/ v7 Q6 z putchar(' ');+ s7 L. Z* a0 r8 \! |
goto_xy(j,y2);( y! s3 c0 n- f) F
putchar(' ');
% Z+ L! B+ M" P+ ~/ D: T% K6 k& s. K4 n. [ delay(10);
" R# v' w1 Q5 w" M2 B6 A }
/ X& [( {) H, z" t: s; ` }' p( Y- \% o* S; H$ ^
/******************open screen clear(开屏式清屏)*********************/4 d7 p9 v% _$ S( O. n
2 J _( U/ E! I2 \9 U' `7 C void kcls(int x1,int x2,int y1,int y2)$ N" a2 N7 L2 ?4 R4 o; H
{2 B, F, ^% @5 ?3 J. e
int t,s,i,j;, H3 Z1 t: [) g3 L t! P( o, \ c
t=s=(y1+y2)/2;
& W* C& }, r& E$ p- r for(;t<=y2;t++,s--)
0 i; J$ |% v; H5 \0 Z% Y for(j=x1;j<x2;j++){
& g' l1 i4 a2 b6 u* n goto_xy(j,t);
D! H) l. ?! }- { putchar(' ');5 v# C0 z+ y3 z4 M( I- n
goto_xy(j,s);' Z9 `# Y; b; j8 G b9 h
putchar(' ');; ~! l- `% \3 W3 p
delay(10);# w' K1 v n" p. O9 v
}/ Z. C8 Q; ^% G4 L1 @# Z( E
}9 c& b, S0 I% V0 Q# U+ a& s, ]3 ~
/*****************close screen clear*****闭幕式清屏*******************/
+ n+ _, m4 t4 e9 X: W
5 S, K$ d6 w7 \9 x7 i void bcls(int x1,int x2,int y1,int y2)
7 x" r5 N* ~9 H/ V {
0 Y; S# [8 d" ?5 R int t,s,j;
/ e6 M" `; I6 X( T0 u t=y1;
& L% P p x$ \7 J s=y2;
1 K( o. h4 }: g/ | for(t=y1;t<(y1+y2)/2;t++,s--)8 l$ s- x0 r, r" d
for(j=x1;j<x2;j++){
" Z* O% h; t0 C7 n6 W goto_xy(j,t);) {& `# P( ^" B1 H6 ?4 e# X3 O
putchar(' ');2 [5 i' C) F [- F2 A
goto_xy(j,s);
: J6 V- E* {7 C# U2 @, W putchar(' ');
3 r* @& ~) U9 s8 j6 b delay(10);6 k* A+ h' r8 I& ~$ T: y% x
}
" L6 B$ D5 H. Z7 K/ g }/ R1 V$ W* D9 ~% c
/******************bottom screen clear(自下清屏)********************/" |* H, R4 f/ I) Y
5 ^: I2 a: N- d" u' G. B$ Z7 I
void dcls(int x1,int x2,int y1,int y2), w4 q; R, M: C
{/ j; s- ]0 y/ H1 a7 w
int t,s,j,i;) Q% ?& h9 x& I2 ^
t=s=(y1+y2)/2;/ w6 e* r+ Y7 E, T% }% ] _) Z
for(j=x2;j>x1;j--)
+ y. Y5 o% A, @+ N for(i=y1;i<y2;i++){
D4 s9 [. Y2 U4 L' @) k7 A goto_xy(j,i);7 E; i$ k+ q8 b- U/ x
putchar(' ');& c/ ~7 X _2 d. e
delay(10);
. @1 X: M$ Q9 T! g2 Y3 t }: K. o. |% j% |' \, C6 a( N
}. i- h, L# K! _2 t8 s2 Y
/******************设置光标子函数******************/# {6 d8 O7 R8 |! A6 u# M
- m& a; S2 e" f. U* \ void goto_xy(int x,int y)
# h; N$ R+ R% z: m4 f {
( F- Z0 P# G1 j2 y/ P union REGS r;
m( C c( i7 a2 u" W" \) { r.h.ah=2;
4 {$ e1 Z4 U9 i) D' e r.h.dl=y;: _& K0 G0 I; Y3 p7 [
r.h.dh=x;
& O9 T8 k. K- H0 E1 }( S4 t" ]1 U r.h.bh=0;5 o0 J8 }& @1 ^9 | k: p2 T
int86(0x10,&r,&r);
- x- x0 x0 `0 e/ H" } }
+ y6 m( ]/ u5 k- m
/ W3 i' H7 O$ w3 Q% @' u1 [ /**********************在屏幕上打出一连串的a字母用于演示程序******************/4 k: F( `, F. E: o; Z
2 C$ j/ ]# ~7 [% u" z K2 D3 G1 a void puta(void)
+ Z0 [1 S! ]- c {4 g+ J4 E) T8 Z* K" f! h% v/ E, Q' x
int i,j;2 u) W$ y- S. r2 f
for(i=0;i<24;i++){5 S% ?, P+ y8 Z. S/ i( J) y
for(j=0;j<79;j++){
. c+ ~, D0 \3 c% [- d* ^% f goto_xy(i,j);
5 A9 n, t1 x6 `# A3 w% X1 ` printf("a");& u3 }' i0 m/ ]: F4 ]7 }
}
+ X/ V0 E$ Y0 n }% t8 F- i" D9 |. r1 B+ k
} |
|