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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
^; b( x' V5 Z1 y8 z
) T( }" X6 ^/ x4 q; f* c 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
9 N, F0 D- D3 |& e- ?2 _
8 I$ r( A1 V: O3 \# n: T2 O 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
5 N* B2 M& [7 j% G% m 子函数及演示程序:
J' \/ A8 `' ~8 l5 l9 D Q% R4 C' \- y! Y
#include<stdio.h>
& F5 `+ r/ |: [7 L7 m& |( X- ^$ u #include<dos.h>2 L5 o) }. E/ C( f; P
#include<conio.h>+ c* M9 M* B# T2 |6 G( |
" S/ c( L& u3 y9 [ void goto_xy(int x,int y);/ Y2 u$ {- F$ g! j/ o: i5 X9 n% X
void dcls(int x1,int x2,int y1,int y2);. p# |" {. }2 `1 W
void bcls(int x1,int x2,int y1,int y2);0 k7 x9 E) L9 d" i& U8 w7 _" e4 h- [
void kcls(int x1,int x2,int y1,int y2);4 y) A/ i- W0 F
void recls(int x1,int x2,int y1,int y2);
6 G4 X" x9 W* L$ `& G% i: F void zcls(int x1,int x2,int y1,int y2);
. w7 n/ b2 I. J void puta(void);: X- i+ @! f- \4 d
0 J& F4 \3 j ~- V/ c& L2 c6 A- i2 |2 w
/*--------------演示程序---------------------*/+ a+ W% N% @) u3 N7 o4 d+ f; l
main()
; G: F& t* s5 m3 Z Z- T D+ L# H {1 @# ~1 O; x9 e3 ?8 ^. m
puta();
2 p2 P0 q$ P! `7 R; @) v9 |+ @ getch();
$ ]# y4 _& }. K7 c: I9 Q dcls(0,4,0,79);
' j# p9 h0 n& D. ~( V getch();
2 ^+ w* f0 l& m+ w) I0 }/ k puta();( j. M0 P: c9 `* H
getch();
" h: z$ |1 d+ Z$ P bcls(0,25,0,79);8 m$ A0 `: E2 i) q
getch();" p5 B) O9 t! m# i/ U, }
puta();, S7 c4 D! G" I& w+ K
getch();/ \- y. P- V* z/ q% B8 i0 P# R
zcls(0,25,0,79);. M% K4 z6 K- f& {& N' l
getch();$ A! T2 j6 ]) R8 [; B- r
}4 G& N; T% p# g# x* e1 C) L: M7 q
/*********center clear screen(中心清屏)***********/
; W( N2 G. T4 e* Q void zcls(int x1,int x2,int y1,int y2)
# [+ Z* j) [" Q {
* i" X5 H* P/ d4 q int x00,y00,x0,y0,i,d;; u, _; C! k9 u/ P9 \/ t
if((y2-y1)>(x2-x1)){
9 _+ @: x% v: J1 s* w d=(x2-x1)/2;
! D# [ i3 O0 U6 _9 U x0=(x1+x2)/2;* Z( k5 v) F; A+ ~3 a* D" j0 W
y0=y1+d;
6 ?& c& q$ `1 ]6 D" ]" p# J2 b y00=y2-d;
' C7 q. k8 B, p. _ W5 T: O for(i=0;i<(d+1);i++)
4 Y/ L, B4 d, p; F# Q% h) g recls((x0-i),(x00+i),(y0-i),(y00+i));/ A" c2 a' i4 A) p+ z( v0 A8 f; g
delay(10);' y3 F; q2 P4 u8 I/ f
}
0 V1 G& l& Z, z* }2 K else{1 b' q7 m6 ]+ W4 R) G
d=(y2-y1)/2;& j9 W: m/ f/ z- t
y0=(y1+y2)/2;; c/ k- K# ~2 x0 e3 \( k+ j, _/ N
x0=x1+d;' B! r! _8 I2 q' g/ u
x00=x2-d;
! T% z" K& H# {2 q for(i=0;i<d+1;i++)) b' X) g9 n% T# G' z! X
recls(x0-i,x00+i,y0-i,y00+i);- W j/ ]0 o% D" x% y
delay(10);& z, g& e f) j R2 z! W
}
4 Q! t5 G% M3 R, _/ E }
+ U0 _. |3 }1 r- K* s/ J2 e P) i& P# q% v# V8 ], G
/************* clear rectangle side(矩形边清屏)***********************/
3 z4 E) p# F+ j
; s4 j% J3 k& X( @2 x void recls(int x1,int x2,int y1,int y2)( v, C6 {+ [2 Q; g& ?
{
6 E1 h: y0 F' ^* E7 C8 p int i,j;
/ }: _ ~# F8 \' J for(i=y1;i<y2;i++){
0 I& J6 K' {- W ] goto_xy(x1,i);
2 ? T. m% N/ Q, u; q putchar(' ');
" h/ }* `( W$ W, c goto_xy(x2,i);6 ~$ z7 q1 G- _! I6 o& r
putchar(' ');/ R, h! p5 U- j+ S8 r
delay(10);# Y9 Y6 C1 O0 n
}0 k; M* j J2 S5 r
for(j=x1;j<x2;j++){
: ~+ Y/ t8 E1 P goto_xy(i,y1);9 b# O3 @# M- [0 Q
putchar(' ');
u: Q, v( P- C. q; ^: O% p9 X goto_xy(j,y2);$ O' S2 L) o9 o
putchar(' ');
9 f% s; Y4 U- K' [- S% { delay(10);/ h8 J7 ?( q$ b3 P! e/ z1 H9 x
}7 D* {7 S7 p' d$ Z5 u: o- J
}0 }7 Q" @- ~( y7 W
/******************open screen clear(开屏式清屏)*********************/4 ^/ }& x$ V- R' w3 ?# D6 Z
7 e5 v$ ~, f; A8 K/ u
void kcls(int x1,int x2,int y1,int y2)
& x* w' }, M0 Z; { {' ^% Q" J+ V- U% h6 ]
int t,s,i,j;3 a" |2 Z' A$ m
t=s=(y1+y2)/2;
$ E& g+ h) R9 o$ U for(;t<=y2;t++,s--)9 B5 X k# {3 a0 E5 m
for(j=x1;j<x2;j++){ M: w0 f7 s, L2 P% Z" t% `
goto_xy(j,t);1 K1 ~% `. }. O- F$ T w& r6 H6 b
putchar(' ');
4 R4 V E" U1 @ goto_xy(j,s);
/ i- V" r5 M8 H5 [ putchar(' ');7 h$ G! h% {* G6 n# N) ?
delay(10);
J. Q9 b5 R( B. K* l: h; E" c) a }! J4 j+ o; Z8 d$ w9 R% O/ F0 }
}# K; K7 P( q+ R
/*****************close screen clear*****闭幕式清屏*******************/! E/ z1 D9 M) C2 q7 Y3 W
1 v8 G) C' W# O( r
void bcls(int x1,int x2,int y1,int y2)/ y$ {0 o. t. H+ V) Z
{
! s/ R$ y: C, {% y2 l9 ]3 s5 Y int t,s,j;
" t) I/ b) n8 Q2 r! B t=y1;
/ g W& E R" P0 m5 G s=y2;5 g$ T' u/ t' C( t9 B
for(t=y1;t<(y1+y2)/2;t++,s--)7 T$ V% |. }+ \) \
for(j=x1;j<x2;j++){
, W+ g8 n l" E+ |/ [$ [3 K goto_xy(j,t);
+ D. ?4 _. ^: a; M putchar(' ');
6 l6 M# i1 ^( C4 h goto_xy(j,s);
2 L1 t8 L7 {" m9 X9 p( O. R" C putchar(' ');% b+ [) Y# U U; W7 m8 h
delay(10);+ i. @, E% U1 C6 v" L6 P b
}
& D& B% L( ^2 d4 ~; T; }0 { }) m) Y" g- @ m
/******************bottom screen clear(自下清屏)********************/. |$ Z: H, K( F9 a
; B5 N9 \, y+ l
void dcls(int x1,int x2,int y1,int y2)
0 `9 R; }# _! f5 c4 n) _* y {7 k) p" D8 w( n/ Z2 l3 u
int t,s,j,i;+ d9 R& y8 V- V! u
t=s=(y1+y2)/2;* C" W8 Y) u0 z5 V
for(j=x2;j>x1;j--)
, P1 ^4 E* F4 |1 W( W for(i=y1;i<y2;i++){% j, C. j ]" A! h0 Q$ Z
goto_xy(j,i);
7 @* ]" |/ o* C- Y* A putchar(' ');
5 k5 ]9 c0 ]1 D/ ^6 r( C$ T4 p delay(10);; F( C) E' | U, r0 H3 Z3 l% o
}
8 j! h0 w8 `* ]9 d. ~3 N }
2 r( E' O! g. o /******************设置光标子函数******************/" I& | R. {& a5 a) }
9 f. S2 k; V Z% Q$ s4 ?
void goto_xy(int x,int y)& c1 q8 l, _8 z5 I0 e
{) e- n8 p* D5 O8 ~+ ]* V9 L
union REGS r;, x0 x2 W' W' p5 s# w% v0 g& o
r.h.ah=2;) h+ n% e& p8 O9 M K
r.h.dl=y;& z% H% }+ Q7 R7 H, F
r.h.dh=x;
g$ T; g1 Y7 e2 o7 [, | r.h.bh=0;0 k" z+ `" g+ U# f& \: p
int86(0x10,&r,&r);5 H; n5 S0 s$ P" p5 F$ I
}
- }6 ~9 r5 n% s0 A
0 q% O ?3 s9 H& J; `9 L /**********************在屏幕上打出一连串的a字母用于演示程序******************/
3 z; F" ^* _. z: d4 G. m, [" \ Y
$ E y: P. n" Y0 [ void puta(void)
) @, I7 q2 A G4 G( v. M {7 Y/ `. Q2 I, w0 g+ V( Y9 E9 E
int i,j;
0 k# s% a+ z& P( E n- s9 I for(i=0;i<24;i++){
& o* ^' W4 B- n- l/ w1 N for(j=0;j<79;j++){
% M$ h4 v8 K& d goto_xy(i,j);# B3 s. O, z- [' I$ `8 d. I+ k
printf("a");' w6 J+ a+ [* J8 Y9 F4 O
}
/ W- |5 b+ P Z( T1 F }4 B1 \2 S5 ^, m
} |
|