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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
% X& h9 f, R( B/ q5 J7 v
2 U0 b3 P# w) W% R8 C 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里) P6 ]' Q8 e# M6 p v% O& b. x
# |; p9 I) Z8 G4 L+ A 用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观. " H! M& _- G- Q
子函数及演示程序:
; ?4 G8 B/ I/ L. Q3 B: o6 P3 d$ T( ~; C& T6 o
#include<stdio.h>
2 H# e& t7 N. b #include<dos.h>9 ?# I+ T9 N) q2 H
#include<conio.h>0 W1 ?! J- F( D* P, J
% i0 p) d- I; a$ N D# z& F9 z void goto_xy(int x,int y);$ y4 m) E& o j4 m6 g! f
void dcls(int x1,int x2,int y1,int y2);
: J1 I: `: I# H) k. j void bcls(int x1,int x2,int y1,int y2);( V5 c# u( i- M$ D
void kcls(int x1,int x2,int y1,int y2);
9 R e5 }( y' T# v; i2 I void recls(int x1,int x2,int y1,int y2);
+ J) y6 I l& U4 d void zcls(int x1,int x2,int y1,int y2);
; |, l) T1 d( V2 R n void puta(void);- i+ Z- A* K2 i# p; Q/ x$ q. _
& I2 K6 X8 n$ X" l7 a
+ }! @. o! G7 X" p1 }8 Z /*--------------演示程序---------------------*/4 f' G/ C/ `2 w: D
main()) r& Q$ Z* r2 |( t/ p; ?5 K
{& p j- s! T; h6 E: ~. [( ?7 l% J
puta();
b5 X/ i1 t- G9 Q getch();$ Z1 F+ ^! j& J% G' W/ J. a$ V! M
dcls(0,4,0,79);
& B- N$ F. ^- \9 D: S- E+ O; G getch();$ [3 o# Y8 s% x5 V+ X
puta();( o; f) w) u* ?+ ?, Q" Z2 ~# K
getch();+ X% U% C$ Q- F$ ^, q. ~0 [
bcls(0,25,0,79);1 F+ d. ?/ {) F" q# K
getch();
1 ~0 g& T s5 T8 x; }# S puta();/ N, j4 @0 \9 l! s- T2 X
getch();1 B9 a/ [9 e. O3 [
zcls(0,25,0,79);1 f: F, R! s" D, a4 S/ F
getch();3 P* P; r. |( h/ m/ ?2 u
}# v; z( Q2 g+ [- b( k- n
/*********center clear screen(中心清屏)***********/+ J' w! ]4 X/ W9 a$ E( q
void zcls(int x1,int x2,int y1,int y2)
' T% {8 R8 Q! H { ?9 w- `" {* ?9 X2 X
int x00,y00,x0,y0,i,d;5 K* ?1 }/ A8 Z/ L `* E
if((y2-y1)>(x2-x1)){
# C7 O9 i- e: q7 E d=(x2-x1)/2;1 G# d& y% B9 s+ }5 i* O
x0=(x1+x2)/2;+ \! C: k5 P* b, {! I
y0=y1+d;
- Q5 V( t# w, T6 `( N; \; o' o& [- { y00=y2-d;8 }$ b( b U, {, [+ j
for(i=0;i<(d+1);i++)
) L5 N) f: X$ w% D: D3 H! z& O recls((x0-i),(x00+i),(y0-i),(y00+i));$ U; o& L& q8 t4 k, X
delay(10);! p Q: Z- p1 {' x2 i
}
1 R) b0 z' n7 s! b2 k else{% k$ D/ ^2 [' K: h1 H
d=(y2-y1)/2;
5 X% G0 |7 j9 Y, J) r% b y0=(y1+y2)/2;
0 q: x7 S: c4 h; _+ K x0=x1+d;
5 ?: N% m) i: Y: X. G; B/ p- b7 B x00=x2-d;
+ x' r! E7 E6 B. X, U for(i=0;i<d+1;i++)5 f4 X' q. x+ H- u: F
recls(x0-i,x00+i,y0-i,y00+i);
" a8 t4 z9 \" |6 h3 r delay(10);
. F3 R3 M, ?3 t6 ] }
4 w W4 \+ `0 u; K0 C }3 T- u" D; G, O" q* E
3 y5 t: H9 @3 }. Y2 E" A/ K /************* clear rectangle side(矩形边清屏)***********************/
7 x! ^ x& U3 g$ m' H2 q. Q4 @9 z( t* V9 Z
void recls(int x1,int x2,int y1,int y2)
$ Z" F+ J3 Z! o: \* B: M( p {
( i1 A" s F8 f% R int i,j;
3 L8 f, [6 q( z9 ?, T ^& _; c- ? for(i=y1;i<y2;i++){$ j. o' h. X5 u2 x, ^8 U- o
goto_xy(x1,i);2 j1 }# M# b. ]; ^3 N, D9 Y3 |
putchar(' ');
3 X1 f0 [3 B R0 {5 P goto_xy(x2,i);
; X- A9 ?, {* H( R! H putchar(' ');
+ Y& j; }# C8 p- K' H* G delay(10);
9 D; p1 S4 U4 i1 P. X }
- J2 \/ d4 L' {5 f for(j=x1;j<x2;j++){- i! T z+ O" d
goto_xy(i,y1);
/ h* T: U( ?( a% y: n; R putchar(' ');
: S1 f+ @, G- c5 J; J; \ M+ R4 @ goto_xy(j,y2);5 s) H! Q1 m. O$ O1 D/ E3 {
putchar(' ');& K- m& B+ R, v( |
delay(10);
7 m9 U1 U3 K' a }2 W* C) A& F1 V3 Q r# F
}1 u7 ]: i' i/ g0 c
/******************open screen clear(开屏式清屏)*********************/
, U C$ i# s2 }2 w
3 R4 @( \( P- F/ B void kcls(int x1,int x2,int y1,int y2)
' Z+ y1 J, Z. q {
9 b. J5 c# _1 ] int t,s,i,j;
0 _* z: h+ m7 P) Q; X; R t=s=(y1+y2)/2;. l0 A- \5 x' _ X: K% n
for(;t<=y2;t++,s--)! x3 D( V- |) A* M" \
for(j=x1;j<x2;j++){2 o" U& K6 T8 k ]7 s" Z$ N
goto_xy(j,t);
o2 \+ H Z3 H putchar(' ');
5 j* j8 t% ~ E- j& f goto_xy(j,s);
, T3 M7 k4 t2 w9 f. e; X- X putchar(' ');! `, y% H1 h9 x6 C& c! F! n
delay(10);1 d1 z3 g; u+ Z
}
4 Y5 c; K }/ P0 P6 c) W }
0 z# h' a+ K1 F& C# s /*****************close screen clear*****闭幕式清屏*******************/( q% i2 q% H C) z
1 \: m5 p4 h1 h1 f
void bcls(int x1,int x2,int y1,int y2)
. d4 K- Y0 G( g {
' x' h& w6 a7 j- G/ {2 Z# p int t,s,j; [7 y1 D1 Z5 g! J5 O) y& g1 G$ R* s
t=y1;
0 z% a8 j4 h& u$ x( K s=y2;
& f' O+ c9 l/ L/ k( |2 x for(t=y1;t<(y1+y2)/2;t++,s--)2 r7 }6 Z# E) [8 ^" Y
for(j=x1;j<x2;j++){
0 V$ G2 ?. ^3 Q9 V6 o goto_xy(j,t);
; S! b% S; j2 }' b6 O putchar(' ');7 ~7 r6 j2 L! k' a' c' t1 K0 u9 v
goto_xy(j,s);
% q' t' g9 ]$ c ^5 R# c putchar(' ');
* f7 U5 ^- Z6 q) L/ ^7 u delay(10);
+ P% q( B0 ?- `! ~% b. V9 j }
/ P0 F: q& J/ l1 y7 C }* r) ~) U# X7 ?. t1 d
/******************bottom screen clear(自下清屏)********************/- X8 c) Z0 ^5 K. M8 @! o
2 y7 i7 l1 l( q- U1 ` void dcls(int x1,int x2,int y1,int y2)
+ M) @7 m1 c5 F' I& W$ \ {
$ I: j6 s2 p% C6 h! ?3 C int t,s,j,i;3 _& Y; r, u- t1 n7 M
t=s=(y1+y2)/2;# _, w! y5 ?% Y- h% e
for(j=x2;j>x1;j--) c7 I2 j5 M0 |3 i' ]$ ~( {
for(i=y1;i<y2;i++){$ W/ u9 S9 ^2 ~7 p0 P- g4 _3 J
goto_xy(j,i);) y% x4 ]1 B" {) o6 _2 h
putchar(' ');
4 H+ L s. A9 ?0 f. L; ~ delay(10);
, F& ]: w7 S- _ }# B e, Z: u4 @$ @# T
}9 `/ `" \# U1 \
/******************设置光标子函数******************/* x+ I6 k8 o7 V; ~8 S
3 F) l' Y1 j+ j) a, V* S
void goto_xy(int x,int y)
, M( Z d! B; V! P, [: f. I* ]% H {0 B3 O6 z0 b1 ^: z% H" i; l
union REGS r;
! S* p. U' p: S0 K X X3 X r.h.ah=2;) |$ H& R9 P: O( t# x
r.h.dl=y;1 q( f. y: M3 S, c. H" k# o% N/ ^
r.h.dh=x;
$ u/ R6 s) Q8 Q& p* y r.h.bh=0;2 N7 n7 a& Y( {1 A9 x8 b5 N
int86(0x10,&r,&r);
/ q- b: K7 Z1 D; V- w }8 ?' ~! T* j" M! p! ]# B4 l
( I( I% J+ C7 ]! y" o
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
7 W Q) K" R$ x8 ]$ t+ P& z3 Q. h& D( E6 @1 m' |! A; D2 P$ y
void puta(void)( P4 X& J; e- d" q# G
{) W7 b# R; i, f% x# _; Z
int i,j;
# k; J% a7 B; |! Y( ~ for(i=0;i<24;i++){. {: a7 o1 I: E% p2 o. I
for(j=0;j<79;j++){# S/ N; P' X5 O2 \1 S3 K, t* g
goto_xy(i,j);
' Z6 U, Y7 V; Z y printf("a");
. ]6 r; t# ]( h1 s }
3 Q- d5 S2 ?$ J$ G% _; W }) H" m2 s% O5 v
} |
|