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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,+ ^* A; F$ ^' g+ m( Y* V9 }
% v0 N" E# `8 h$ v7 R6 c 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
$ K2 f5 r% J: t0 r. v8 u* `
7 f/ L& G' f1 i. q, o 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4 z- ~# i- D o4 e 子函数及演示程序:4 M- ]. O, c" u" [- J0 ~7 e/ A
+ _3 ^& N8 M5 W
#include<stdio.h>$ ?/ D8 b* [2 l4 y1 A, J
#include<dos.h>
8 e- n" ^4 s* J #include<conio.h>
; P" Y, _. c' a, I+ n' A" Q$ i5 A' p' j$ _/ Q" L E2 q% a4 x
void goto_xy(int x,int y);
0 V0 E/ Q# w# ] J% I. R8 ~ void dcls(int x1,int x2,int y1,int y2);* d7 V8 D* M( P8 J
void bcls(int x1,int x2,int y1,int y2);
8 J C, w- x( o$ f9 a void kcls(int x1,int x2,int y1,int y2);
! \' y& J4 G" k/ ^/ {, a/ m2 Z void recls(int x1,int x2,int y1,int y2);0 w [% A2 n( u( s& z9 g# v
void zcls(int x1,int x2,int y1,int y2);! [! }; k% Q$ w
void puta(void); |. o. ^* ?# T; Q2 ?
/ y; e# s& T1 V. D0 ~: M1 K
; M: u! B9 a1 @1 k" _/ ?6 L+ e /*--------------演示程序---------------------*/. f! P" v9 h; A7 }2 N* {
main()
- D6 Z$ R6 s0 w {. e6 a! z, G- |
puta();- p7 V# X( P$ H# a$ j: T
getch();
( [ z* v' K9 e# h, v" F- z; A dcls(0,4,0,79);5 C6 I, @+ e7 t" l& V( e# w @
getch();
" F- \1 Y6 _7 j6 ` puta();
% B1 L j6 b; b5 h4 v u getch();
4 w9 x; d2 ~0 J3 N( ? bcls(0,25,0,79);
# ^ O# t2 j3 Z getch();1 M' G7 |# k6 [5 a B* [
puta();) Z0 ^3 j' p& @7 m+ U
getch();8 \* x, Q' W7 z
zcls(0,25,0,79);! p9 G* J6 i8 f0 i/ d, w1 ~4 W
getch();4 T+ @/ e! e! N$ @
}
1 C3 U1 [0 ` p" I- w$ S* m /*********center clear screen(中心清屏)***********/& R+ v1 c) o8 h
void zcls(int x1,int x2,int y1,int y2)
: c7 G0 ~3 s* H {
0 a! z4 p4 @% t4 f$ i. Q# K0 ^ int x00,y00,x0,y0,i,d;
1 G5 C; e5 Q, x: U3 ~% C if((y2-y1)>(x2-x1)){
# u* f/ n0 ^( k% S6 s" F d=(x2-x1)/2;* U6 }4 }. ^1 |
x0=(x1+x2)/2; H, d* y5 H, D
y0=y1+d;* D3 j; F3 O. b' ~
y00=y2-d;
( g9 ~1 z& W& m E" e# p2 L for(i=0;i<(d+1);i++)
4 W8 I4 _& O, t6 }7 { recls((x0-i),(x00+i),(y0-i),(y00+i));* |) V2 j2 S }) X% m2 q/ i% i
delay(10);
, x- o1 w; [/ Q I: D$ g }3 J R9 g- t* p( I- R* b" E# A% Z! l" U
else{
9 D8 _" R8 ^# v* L& K. m d=(y2-y1)/2;
0 g/ }, Q# \& }8 m, z y0=(y1+y2)/2;; \0 }, B0 a. H% Y! c7 Y7 N8 s
x0=x1+d;1 Z& L6 y' W4 B: T$ X
x00=x2-d; o2 U7 `0 {6 T* Y7 {
for(i=0;i<d+1;i++)
( |- {: W; V# B* o recls(x0-i,x00+i,y0-i,y00+i);+ h+ h+ d& l& u1 \3 V$ ?
delay(10);; k$ j+ e9 s- x! \6 V M+ _
}$ Q; S- Z: x0 k8 v2 y4 }
}% ?. i1 \; M8 w: R5 u) ^
, O# T; ~% a8 x. I" ~( C /************* clear rectangle side(矩形边清屏)***********************/
$ T, m: a4 p( F7 A- i* @# q
% H8 I' E5 ~7 | void recls(int x1,int x2,int y1,int y2)4 K/ S) R. O, R5 Z" r1 a ^4 ~
{; B( S7 @" k' m! b( Q
int i,j;! B. _7 J X$ Z/ A5 U
for(i=y1;i<y2;i++){% O' @! Y+ ~2 H; p7 u
goto_xy(x1,i);
- q; w2 E% O6 @, J" a( M putchar(' ');; s q" ]( P/ m4 ?' h
goto_xy(x2,i);/ E" O Q$ X7 g" {7 o
putchar(' ');+ y5 `2 ^' R2 C$ f ~9 x
delay(10);) k' f. K! ~7 N5 B: |5 [ b
}9 j4 B( U0 q% n( v' P/ o, D( @0 e
for(j=x1;j<x2;j++){
) i5 Q3 P" Q1 ]- f3 B% D, F goto_xy(i,y1);
$ M6 m0 x7 D: K% y/ a putchar(' ');' |* P4 d5 v7 W: \
goto_xy(j,y2);
$ _) n# ?0 s) G; y1 m7 J putchar(' ');
; j) N1 F) C U delay(10);
c" b8 A; T9 h3 Y6 P% } }& z) Y* q; Q7 c" s
}
+ |2 A- H& R$ ]6 U /******************open screen clear(开屏式清屏)*********************/
4 y* g/ x; ?( j$ I* Z5 l7 F
8 h1 D4 o. i: [0 f void kcls(int x1,int x2,int y1,int y2)
# H- }; r5 a$ q) V5 u) m( p {2 s& N4 T- S0 A# C. O
int t,s,i,j;
# O! Z# U; S5 N- N Z2 m t=s=(y1+y2)/2;5 D' s& b, Q( g9 J5 }! i1 V; `
for(;t<=y2;t++,s--)
1 J# l" s: o( ?) A L" X for(j=x1;j<x2;j++){3 B3 j0 e: m' b1 K
goto_xy(j,t);
- T5 Q6 d2 l) b, w: a putchar(' ');) N" R( N0 ~5 M# G! p7 ]
goto_xy(j,s);
* X# l4 k6 A/ v" b: z \ putchar(' ');6 a0 R: q( ^# r. h
delay(10);# m2 Y- K+ P1 X' \5 U7 D
}
2 x) U* F( ~% S# |% Q }
! J: Z% U% C. h! k /*****************close screen clear*****闭幕式清屏*******************/
) N" G t% ~# z% ~' y( _1 x$ P C' S& c4 d3 ^* a1 U& z
void bcls(int x1,int x2,int y1,int y2)
8 a; S4 [* Q; ?6 c) s9 w, t! ~ {% Z1 ]0 k+ S+ k/ d$ e9 y
int t,s,j;
0 v$ t# `4 F) x" [8 G t=y1;
6 x$ Z& X/ ]# U$ h0 O3 r s=y2;: M8 h) M4 M# r3 [
for(t=y1;t<(y1+y2)/2;t++,s--)
& V3 H0 `* w& d% p- @. i Q for(j=x1;j<x2;j++){
% w1 [* {9 J* B goto_xy(j,t);6 ^* g6 o% f( R
putchar(' ');! t8 m9 c/ t# }! f p6 }8 y+ t' X- J
goto_xy(j,s);
) e$ B" I! N1 A2 |# Q1 H putchar(' ');: G& {) ~7 `4 P2 j' v
delay(10);
( J& N; h8 g! t- A) F& X P: {9 [ }& I- @5 M! l% m, B( z& F& {1 P
}0 Y, }) W4 [" F. u
/******************bottom screen clear(自下清屏)********************/% r9 \; G; B# o2 N; O/ F1 N% X9 C
4 s2 l6 O! S1 v. U void dcls(int x1,int x2,int y1,int y2)2 Q5 y' j8 d* x
{, n" c% |9 O& E3 z4 o
int t,s,j,i;
1 ^) p6 u' Q& i$ P5 g: T t=s=(y1+y2)/2;
6 I2 M3 l/ P8 I( ~" U for(j=x2;j>x1;j--)- h' `& u& o) e$ j
for(i=y1;i<y2;i++){! `% n" q q( p# o n
goto_xy(j,i);
I/ a5 j; Y4 k" r putchar(' ');0 Y" r" t8 s4 q1 G8 J
delay(10);
. U' |2 h2 G l) y v8 g }
0 w8 }% W e L1 S2 X4 { }
0 m" F/ m: G! Y" g /******************设置光标子函数******************/
3 b8 F# D" F& h" r; q2 |( I
. R- E) G) R: v8 T void goto_xy(int x,int y)
# A! Z6 p4 P8 i; g/ S' W# `- j3 a {
+ Q+ j, b$ k2 f2 D$ B7 x union REGS r;
# }9 R* w* l/ b( p/ E2 V) |# C) L r.h.ah=2;
, \( m! c5 O! E2 s. J( E& c r.h.dl=y;
2 y; o* v2 h/ e$ d# v r.h.dh=x;( m5 A6 s: V* N1 s
r.h.bh=0;
; {$ j5 @" ]; u9 ] int86(0x10,&r,&r);
6 V9 P/ ~9 ]0 ~7 p }
+ N! d; C4 N1 H- j, Q
" v$ R2 a# _' k' H7 q( l2 W$ h /**********************在屏幕上打出一连串的a字母用于演示程序******************/
, P& D1 F+ x+ ~
) L- M+ y8 c; r1 E6 P/ y, c void puta(void)
+ f; \+ A9 _5 |5 v! N C9 r( w {: }# ]2 M6 N( l! n+ ~; c
int i,j;
. ]$ h# K5 r2 E' E6 I0 {7 E; l$ ] for(i=0;i<24;i++){
& M, w8 y! O1 U9 v2 d7 B% f5 P2 E for(j=0;j<79;j++){
( ~5 ~5 i% B% X" u# K2 ? goto_xy(i,j);
$ p- g( y7 V& b+ _9 C; R7 G printf("a");7 C. c6 N- q/ M
}
9 W1 M/ U! V" l$ }# i8 U( [. D. _5 g }4 B4 q3 i7 W# h8 A. `' M
} |
|