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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,$ o$ ]9 U& i" j4 t3 e3 k) j
# {! z" K/ x! _ s' t# K7 `" z* U 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
1 j7 T' b/ O3 Z- V5 l- t* N
$ j6 x+ T) D; v 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
) ]* T( p9 j* a9 U 子函数及演示程序:
' @8 t' t [3 D# i% p; }: g' e# l$ i( u4 U
#include<stdio.h>* W7 x1 A7 H, O. o# n: v1 J4 e# T
#include<dos.h>
+ L% k# w1 J' d: R: @ #include<conio.h>; B1 T+ R; p+ w2 I
. T: x6 e- L9 x* f Z! X1 B void goto_xy(int x,int y);5 L7 b9 h7 ~' J1 e; q ]
void dcls(int x1,int x2,int y1,int y2);
% j2 b+ K6 M/ d% | void bcls(int x1,int x2,int y1,int y2);6 K1 J* ?2 ? Z& p+ r
void kcls(int x1,int x2,int y1,int y2);
. {0 ~1 e) F2 `# b void recls(int x1,int x2,int y1,int y2);( v5 A9 ]: W' E+ @) p3 |
void zcls(int x1,int x2,int y1,int y2);; Q' w5 x, ?6 v7 H- e9 q& {
void puta(void);6 d {) n5 f; Y; p/ ]
1 F6 O) c4 I7 N9 m& j+ Y
/ P$ Q$ Q8 G+ o& u /*--------------演示程序---------------------*/
3 \3 A6 {. j7 Q# n& Q Q6 g9 Q main()
2 h8 r! e. O0 W$ l3 m0 V% l! b/ ] {
& \- Q. T W; C5 r/ u. S puta();
/ f% E! U% b0 _5 b/ F9 c getch();
6 U9 L7 @4 i' V o- X dcls(0,4,0,79);
( w) V. S+ m4 u3 C: D0 F/ A4 T% T getch();7 U' i$ U, y( N& _: @( o
puta();1 x0 j/ n. k) _9 Z1 N+ x* d
getch();
2 c0 R( y) k3 b& l: h g+ `9 C; [* O bcls(0,25,0,79);
. b7 R+ T+ d0 g9 h& _7 I, S: C$ u getch();
8 A2 T& W0 c5 i puta();0 h) Y5 H9 D3 \3 P5 L4 ?
getch();
% |# V' F( }! [ zcls(0,25,0,79);# M2 Q h9 }3 k' c. O+ C4 n
getch();
" V7 i' u/ D3 ^4 @+ M }6 }2 T( B+ e5 P* h
/*********center clear screen(中心清屏)***********/; A0 d( |) a8 w4 ]
void zcls(int x1,int x2,int y1,int y2)
a7 Q8 k2 r8 M0 u! x {
, E& J" {; E+ I4 r: D2 _/ v1 t& h int x00,y00,x0,y0,i,d;
! b8 D* }4 k1 }" n4 b5 f# T if((y2-y1)>(x2-x1)){
) x* ^" V, s; b1 [2 `7 I5 k d=(x2-x1)/2;
4 o ]; y5 A+ q9 k- L x0=(x1+x2)/2;
. ^ |8 e3 W7 R) W. f2 F; T( C y0=y1+d;2 X% t( ]' \: z
y00=y2-d;
. y& W/ ^* ~. y* a3 @9 ?% O+ V for(i=0;i<(d+1);i++)6 |8 \; X. l. W& J
recls((x0-i),(x00+i),(y0-i),(y00+i));
. B3 e0 o+ j3 M. y1 O. ~2 w6 ]9 O delay(10);- `/ |8 J! ?& W& ?3 Q2 c. P/ O6 {
}, f. U2 T* h" N M0 p/ W
else{% t+ k, X0 G$ u) P
d=(y2-y1)/2;
; M3 `3 x6 M* x2 \) S$ {8 d y0=(y1+y2)/2;1 T. A2 Z) W M
x0=x1+d;3 P M; S% I# P$ ?" Q9 h
x00=x2-d;
6 M+ V; d; h; K( E for(i=0;i<d+1;i++)2 S* O' D g/ B. b; h
recls(x0-i,x00+i,y0-i,y00+i);/ Y s$ O( ]7 O& }, J( m
delay(10);
1 A; u0 n0 A) ?/ u# E# p6 o# @3 t# h }1 @: Q$ {- D/ c6 v @$ e
}5 y. k% c( {9 u( D
/ x) {6 F* D0 j
/************* clear rectangle side(矩形边清屏)***********************/9 o9 m# I' G$ [9 v( G6 X
0 i$ w. i4 Q4 G! P5 H void recls(int x1,int x2,int y1,int y2), x; N, r, | x: \( Q3 z' X; u
{# z `8 B$ d9 U9 ~: V T
int i,j; q( u; f4 @- B& W/ K: T
for(i=y1;i<y2;i++){
" @; L% _) ^& M/ [! u9 S goto_xy(x1,i);6 i* R& o5 M# U! C' j: S) z
putchar(' ');, g; i1 M. E% O) f$ W2 c
goto_xy(x2,i);
+ m: R* `% m6 B' W: | putchar(' ');
4 W9 q: G! N* D6 Z0 C8 V) s, F9 s# v delay(10);
3 e5 L) P1 O# m8 c' @2 a2 K: ? }( c$ X N+ c! o/ l0 @. }
for(j=x1;j<x2;j++){5 b% n5 z4 I, }) R Q+ K
goto_xy(i,y1);
* j; [: _" Q, t, S4 S: A3 r+ N putchar(' ');8 I/ m4 Y+ f1 q; ?4 c$ w1 }5 L/ Y
goto_xy(j,y2);
( ]- b7 h0 R0 a/ G3 t# D9 W. I putchar(' ');4 C) H9 v! c: Y# ?( S8 c% a
delay(10);0 G0 Z: R- E- y/ y$ m+ y
}
s" @; I8 k; P8 p+ B }# v8 A; y+ [3 z$ d
/******************open screen clear(开屏式清屏)*********************/
" A# _' S! f3 o+ T
D+ S1 I# k4 S3 x1 d& O: a& L' q void kcls(int x1,int x2,int y1,int y2)
- K! J: t# @( j* Q) a# L4 o2 u7 o2 g {
' d6 R( m. k2 A' D5 X int t,s,i,j;* d7 B/ W! }9 n
t=s=(y1+y2)/2;% {! R! C J- k2 y/ J: T
for(;t<=y2;t++,s--)' K7 g. n7 ^+ U$ v
for(j=x1;j<x2;j++){
9 s+ ]3 r! |4 d( a! D0 g goto_xy(j,t);; U& h6 l* w) N' o
putchar(' ');0 Q6 o, h5 Z9 @7 v' h! ], G
goto_xy(j,s);9 L# }( L: `+ [* D; s6 |
putchar(' ');& T- a3 z5 q- v$ R+ P. V2 i0 c2 X
delay(10);, s; R3 u& o, I1 G2 @( i
}
) z; x/ F9 [# H }# x) D) s" k: c/ a+ ~6 U" Y
/*****************close screen clear*****闭幕式清屏*******************/
" Z2 |; y6 a& J( p) ]6 `- f$ J- Y& |6 ~# e* P# R
void bcls(int x1,int x2,int y1,int y2)9 b( |2 a+ I8 m2 X. y
{
# s: E0 F9 o: A9 F' E. ]6 Z3 e6 V int t,s,j;
# P1 M& ~, {+ h! b/ v2 f; V8 G4 x t=y1;! a# O% ^& r& ]) Q8 Z/ L3 _
s=y2;
. C- R& O, \, y$ t0 r8 S for(t=y1;t<(y1+y2)/2;t++,s--)" |" A; ]0 W3 s, ^7 E
for(j=x1;j<x2;j++){
/ l1 a2 c/ x! D, p: ^9 d goto_xy(j,t);2 t Y5 F3 d2 Q/ D% A X" D R
putchar(' ');
% w, ^8 T. E) p& { goto_xy(j,s);% G" j$ W( ^" U+ b: g( D
putchar(' ');9 ]3 g- ~2 y- b- Z# X
delay(10);
6 F" r# s) X: A: W; r1 z: ~; D }: T: T( h* j5 I: ]% {/ W
}. R/ S8 E3 u) c& M. o2 Y- n- M
/******************bottom screen clear(自下清屏)********************/
V' o) Y* e; a! `
7 N% I( n9 O" U( } void dcls(int x1,int x2,int y1,int y2)% t1 j% p- m) d0 W
{( T9 C( v1 p& \! r6 {2 Q
int t,s,j,i;( ]1 `, B) P) i5 I5 G
t=s=(y1+y2)/2;" `" |% a+ }" @; `- F8 ~1 A% Y
for(j=x2;j>x1;j--)
j1 h7 j+ {" u3 ~1 L, F for(i=y1;i<y2;i++){
. O0 w" N' i% u: T8 A0 ]# K' W goto_xy(j,i);
9 ?5 K m/ X9 m) p. i( I' N. ` s6 f putchar(' ');) u9 j( m, D" j$ I, q
delay(10);1 k+ o& B) Q5 p- E) r- C2 h
}
$ M5 T1 z5 p7 B }5 |% j, w8 ~( N5 W9 h/ d) k
/******************设置光标子函数******************/4 D' M6 H @* ~" {( g' [) `; s9 I
$ f9 G3 o! o$ F' v; c. \ void goto_xy(int x,int y)
B/ S7 Y) d( w/ G {
0 x4 ] X! }% [( s6 Y# H& K: D$ @ union REGS r;
~# t6 ]0 h& { r.h.ah=2;( N$ n( W4 E4 w/ w; `5 v
r.h.dl=y;! B' s# H: T1 ]7 J3 m7 q2 m
r.h.dh=x;
* V! l' V# S( R& x r.h.bh=0;, X2 p y' R% u( ^% B9 o; U
int86(0x10,&r,&r);) u3 d m% }) v2 M# L
}
) d1 M6 M- d$ }; I& Y- P- l4 O* c$ x C+ z! Y& f
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
$ o6 G! @" o: k* [' k& F
5 w. A" u. R8 g9 z8 X2 F4 i void puta(void)
I" E) `. A! N- R {
6 e- l/ W5 L m; ~2 N. s int i,j;
0 b( w, s& x" F8 i; m+ n' n for(i=0;i<24;i++){/ N$ U2 w/ k, _4 x7 h- I4 A
for(j=0;j<79;j++){
7 W. W+ a+ I/ \( Z: F% X0 W goto_xy(i,j);6 J8 i- X, |& q9 m `0 d
printf("a");& J- t1 I2 z8 S+ r, I) {/ U
}
) C; ~" Z$ R" b+ b, j }% W' }9 U2 u# |/ c: A% U+ Z$ K
} |
|