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

|
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 } |
|