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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,+ b% k u* q; q @
5 r' h. F7 P% }9 p' e
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里- K1 o, r$ M( s( ^# E f4 `
% F* C3 |, T' ~; k
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
9 M; c+ \0 e- z G 子函数及演示程序:
8 q; t. J1 n' m, X1 r8 B; Q3 a) w- O6 U% T5 q8 J
#include<stdio.h>8 h4 d4 F- B A" @ r' w7 h! a- x
#include<dos.h>
. e6 J2 P( R1 N #include<conio.h>
$ E' @+ F+ E: k0 |" p! v: k/ |7 O; ?, v- @2 ]
void goto_xy(int x,int y);
5 N7 h" p& S9 Q4 ]$ r$ m void dcls(int x1,int x2,int y1,int y2);
- m2 b' M' G" v7 F0 s3 l8 i1 d void bcls(int x1,int x2,int y1,int y2);% T6 S G% \+ R: ]" ~8 ?# Y
void kcls(int x1,int x2,int y1,int y2);7 F! i5 ?7 c2 z' M) P
void recls(int x1,int x2,int y1,int y2);4 x( O- E1 h W% t! f
void zcls(int x1,int x2,int y1,int y2);
% B) _$ J6 S) @) M7 o! p void puta(void);* S0 z! u, k. m. v* P
/ {! ] z+ A) f' N+ S6 c
7 r# B2 y: ]; y6 q; s
/*--------------演示程序---------------------*/1 x" _! Q- `, c/ E0 x- b, t* V
main()
# D2 C* B0 k% q {0 l# \ P( s6 H2 Z2 X1 N
puta(); f5 n9 f; t+ \8 [* b$ ?
getch();4 b, Y M5 n3 U" z
dcls(0,4,0,79);
5 T; @1 y$ s, O2 {6 O: O4 H getch();
6 x: S N9 m4 }' c puta();6 i$ R+ v, U9 Y# P$ N' A& X X! S
getch();3 _# l9 e/ x* Z# [
bcls(0,25,0,79);
" F+ {0 K1 v- C+ { getch();
" {- f# x9 O( L% z9 R1 i \ puta();
4 v! f9 w2 Q% D! c9 p* w# y getch();' f0 T0 T+ D# L+ Q7 Y
zcls(0,25,0,79);
4 A! S3 z1 q4 l" \: U7 A" K. K getch();( q' `7 A2 \' d: \ }
}. n0 o$ u7 ~4 G. `
/*********center clear screen(中心清屏)***********/" z) \) v3 V& X6 |9 ^$ U
void zcls(int x1,int x2,int y1,int y2)
6 i2 z# M8 V1 P9 K ^ {+ D5 \9 K- l3 B
int x00,y00,x0,y0,i,d;0 G. `! S# @: U9 ~+ A/ G$ ^" U, Q
if((y2-y1)>(x2-x1)){$ F8 g1 z; z$ v5 B, m0 o4 G
d=(x2-x1)/2;
- {7 Y# R5 q8 w1 q x0=(x1+x2)/2;9 B( t7 r6 ~* I
y0=y1+d;
7 n) [. z3 A% \. L+ D y00=y2-d;
! Q$ E+ u& x$ t: e4 S* I for(i=0;i<(d+1);i++)) s! b6 T" F; q: g
recls((x0-i),(x00+i),(y0-i),(y00+i));
% g. s# |/ x4 J; ^( J delay(10);
; s* v5 p$ r( R" s2 c( W; X }
9 t7 w# H ^1 z$ S else{& f7 M. `8 R) u$ w4 a: [
d=(y2-y1)/2;
( e1 c0 K7 g/ p3 d/ V( f1 `: Y5 N y0=(y1+y2)/2;
' U' q6 X9 `! O8 V- z( a3 w x0=x1+d;
# \1 k) Q0 S7 L; C x00=x2-d;3 F2 H7 | L) q1 I' O
for(i=0;i<d+1;i++)% S% R, R, {. f6 ^% M. p
recls(x0-i,x00+i,y0-i,y00+i);6 D6 b6 {9 a# M7 e3 j6 n
delay(10);* q" A* K: y! l- m& A( g9 I/ u
}
4 j$ a3 N8 s! X- R( Y }
% ?& c0 b' r8 ]" B$ S; O8 l0 {4 {3 H( e) [- y S4 [, y4 \
/************* clear rectangle side(矩形边清屏)***********************/
^% g, X9 I! A
! d' t- h) r% h: Z void recls(int x1,int x2,int y1,int y2)7 X8 K- c4 a5 O4 v' m
{
& u; c6 \2 R+ D! D' Y int i,j;
& t. [# g1 {0 t" J for(i=y1;i<y2;i++){
& }; ?& k" l& t: x goto_xy(x1,i);
3 r4 H/ R5 X& E+ l% \: J putchar(' ');
! s+ q6 R, ^ o9 S# B goto_xy(x2,i);+ u! {( b( W9 `' a
putchar(' ');2 P9 \, t0 a0 Y
delay(10);( u0 M. W2 q) W. ?( x
}
5 k c9 ^2 @3 n& k8 d6 [: d9 _, M/ W for(j=x1;j<x2;j++){* n# T$ ~1 f: _' E# ~! N; ~, T' y
goto_xy(i,y1);
/ U8 K8 |$ ~9 g' k3 A" M putchar(' ');7 l/ f" M. L+ ~ Q3 x$ ?
goto_xy(j,y2);* M; O& q8 A+ w
putchar(' ');) ]9 A7 T' e* _, p' ^8 _7 e
delay(10);
* U- m3 c, G9 U; M* W }
4 K5 S2 r v- b8 W0 v1 R0 A }2 G- d' E0 P H0 g5 h, j; M* p
/******************open screen clear(开屏式清屏)*********************/% i1 n) t: X9 j% v
' e1 V$ \! M c, M
void kcls(int x1,int x2,int y1,int y2)7 k1 ?- `$ @$ {7 b1 b( F- h
{+ g' t- z1 d% Y9 A- B) R
int t,s,i,j;1 d& r) i' s+ T; L& J
t=s=(y1+y2)/2;! r; p! h, E# p" o: y
for(;t<=y2;t++,s--)6 s! @! U) i' `+ q) U3 y0 H! j; i
for(j=x1;j<x2;j++){3 \+ x+ g7 n0 G9 x- N
goto_xy(j,t);
' n. a/ i- ? a1 t putchar(' ');6 G& I$ y$ W; S W
goto_xy(j,s);
7 f5 |; C& g2 J" c \$ q putchar(' ');
* `0 ?4 Y2 @/ B3 y6 H- q2 i) R/ ~. o delay(10);. ^# F) I, Z1 ?/ s2 H! d
}
) ^1 E- ^% F, g( _+ z }9 T7 I: T V: O! n9 }" @) h% D- F
/*****************close screen clear*****闭幕式清屏*******************/3 `0 d; v2 Q8 c7 ^) o! T
' C( |" i3 q& T3 }2 |
void bcls(int x1,int x2,int y1,int y2)# g2 S# y% Y4 Q2 t' ^5 `) {
{2 y% O+ ^4 p" Q! }
int t,s,j;
8 Y' e5 x) r$ ], C/ G4 h t=y1;- n. e9 d5 X. g5 Z
s=y2;; I" w0 K6 W% {8 ^
for(t=y1;t<(y1+y2)/2;t++,s--)- J4 x0 [( s% M8 I
for(j=x1;j<x2;j++){
+ j' J" ~$ {9 e% c3 { goto_xy(j,t);
7 E- Z+ s3 U) z9 L6 W- y. R putchar(' ');
* D" D- _& p; ~5 X, X goto_xy(j,s);7 g6 I, x2 G# j/ _7 b9 |
putchar(' ');
! W0 Y6 [1 V7 j& [; h delay(10);- C0 Y1 r; k) M# N) \
}
1 W( @) [$ u2 \2 c }
; p. d( ^3 `. j3 _! a' Q /******************bottom screen clear(自下清屏)********************/
, S% ~' i/ E. ^1 G" e4 Q
3 b5 N* Y( E& ?3 |2 c" g. } void dcls(int x1,int x2,int y1,int y2)
l/ N7 D! o5 E3 p8 j% y {1 V2 z) t# S1 A- x
int t,s,j,i;( X5 L4 w% T. @( U7 C
t=s=(y1+y2)/2;) k# B$ X _* J* j
for(j=x2;j>x1;j--)! ]$ H4 D5 a, [+ K8 c" n
for(i=y1;i<y2;i++){& {: b7 ~ E% M0 Y5 q' D/ L& Y
goto_xy(j,i);
' t" O! S! ^& C s# ^ putchar(' ');2 Z# }) Y+ e6 C) m( Q, N/ u
delay(10);2 _7 e9 C* `2 @
}
* d; M) U* u& u! O0 h5 A! H2 d9 x1 N5 j }$ N6 E7 d5 Z+ ^
/******************设置光标子函数******************/
+ C; w2 g4 G) ]* F, }! f2 y" W8 ~! N# D, D) r ?* l% _
void goto_xy(int x,int y)
0 G5 Q! \2 x4 v- S! [ {8 Y) s* R$ N2 H' r" F2 P
union REGS r;) ^% ]5 [4 _+ B C$ D5 X6 q8 x
r.h.ah=2;
3 H' [2 M9 | H d r.h.dl=y;
' [& H$ L! j2 l8 l! E r.h.dh=x;
& V, Q" i" {# I( q% A r.h.bh=0;7 m3 S: G9 Y0 O/ b/ f" g0 l# K$ ~
int86(0x10,&r,&r);
0 N! v7 m& |9 G. _4 e5 [' y }( z; V" c& d5 e7 |- Q5 X+ w
* E+ Y% K% P" C! X, c8 F" ?
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
" E) u/ {7 Q$ S% v* ~- l6 y. Z+ t) q
void puta(void)
* t0 e: k) o9 o3 n6 |6 u$ h( N3 b {" T& N, {# e9 u2 k2 j
int i,j;$ C! B S7 M. p5 r6 r! W
for(i=0;i<24;i++){( a& v; a7 Z. {: D+ J7 q% E7 ^
for(j=0;j<79;j++){
" [6 Q- e! Z; @6 U goto_xy(i,j);
7 |0 U) E# i3 b* g8 b) u V printf("a");( Z" m/ X8 w3 z* q8 {( X
}
! \) z/ L; M2 x9 r! w! g }
# \2 S0 W1 N& G( x } |
|