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

|
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
2 `. d9 ]5 x, K2 k& O: }& h7 \6 \% P
" e2 h1 U; \1 t8 Z2 l 并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
& a( @! k' }6 }3 `. \; x0 c1 s/ `/ o, I# R& z9 M4 ]
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
/ X( ]( j" c. W3 `" p 子函数及演示程序:
+ i( l1 h1 O$ U6 ?+ V6 s& E2 ~* u# I
#include<stdio.h>9 g# z4 u% o" ~2 y
#include<dos.h>1 F3 Q% x: B9 g ~2 E( `. V) k
#include<conio.h>
" z+ E' r; q! C$ A
# z2 }# u; n1 n: B+ U2 Q7 J; K void goto_xy(int x,int y);
; g6 m( p9 v! C3 ~, K. m void dcls(int x1,int x2,int y1,int y2);- J' j( A" {2 e r1 S/ U2 H- }2 I
void bcls(int x1,int x2,int y1,int y2);% c2 V1 ~- r% d) M0 z# [9 D7 |
void kcls(int x1,int x2,int y1,int y2);
* ^3 \. L3 e6 o. C void recls(int x1,int x2,int y1,int y2);
% m5 L" Q6 J6 Z( K7 q7 d void zcls(int x1,int x2,int y1,int y2);
B1 D3 x3 f8 z" D void puta(void); h0 ^2 b- \8 f% J3 B# W
* K' s" F, m R4 b1 k5 u/ ]
- |: P8 x; P! U3 j" `2 c6 v5 F /*--------------演示程序---------------------*/
1 g3 X& d# S4 {: K! C# r& r7 i main()
. N. z5 F3 T8 d; q3 N {
1 l- Q/ S. a6 M- j puta();& F; V- w8 s/ Y6 U4 y+ h
getch(); _. R0 S8 h* \
dcls(0,4,0,79);" D7 ?6 o8 z7 O" q% y6 x
getch();
N/ Y' g2 ~% r* Z puta();/ }* h q5 l. o
getch();
# P+ r" C7 A6 d- j r7 R# M bcls(0,25,0,79);
% {2 n) G% K/ u# f! a getch();, P/ \0 @5 V+ y+ a' \7 r1 B
puta();
& n$ G4 t! ~9 \/ t3 ] getch();
3 Y8 t% `3 \! j; ^0 W4 b zcls(0,25,0,79);; S: U3 [# J4 ^0 f) Z
getch();
4 V/ V' P9 _/ v8 y. g8 u: | }
; O) H% n4 o3 w' X. z3 Q /*********center clear screen(中心清屏)***********/
) Q! t) e3 p1 |" b8 W+ M4 ?! Y% S4 ? void zcls(int x1,int x2,int y1,int y2)
1 O, r1 H2 E! m6 _; [ {1 Q* k5 K. E* J% i, s, B
int x00,y00,x0,y0,i,d; H$ R0 u$ z0 n- F7 Y) C) g+ `% ^
if((y2-y1)>(x2-x1)){. C. g" x, U x9 S, _$ i
d=(x2-x1)/2;
* e" k; C0 p8 Q x0=(x1+x2)/2;
1 f* h: s. U8 L: S0 l( C3 V y0=y1+d;- P% U8 k- L1 [) w
y00=y2-d;
( z$ h! G' z% U! @/ A/ Y for(i=0;i<(d+1);i++)
* h- S2 v- r b/ D6 `* S4 ` recls((x0-i),(x00+i),(y0-i),(y00+i));0 X5 m+ Z" z* j8 N
delay(10);
; y4 ~( {! ?1 Z }
! i( P2 f3 h& ~) x9 B+ }- T else{* [* O8 V/ v) Q4 y4 N1 x2 {
d=(y2-y1)/2;
+ c8 G1 ]) H* T- Y& j( P y0=(y1+y2)/2;6 t: E' ]2 Q+ H9 b( u; R6 X
x0=x1+d;: J* x2 x( {8 @* @
x00=x2-d;8 B6 b7 `8 W9 ~. C6 T: Q% ?
for(i=0;i<d+1;i++)
! a7 I: U. I5 K6 g$ e& U. C7 r recls(x0-i,x00+i,y0-i,y00+i);, G& y% c+ Q6 d- D7 J
delay(10);
; j1 w* j( ~2 s% c/ l& E }
8 Q" o4 x: C$ ~2 D; q: R }
4 J: Y% Y8 L% E6 g# o& B4 }
0 X) V* d0 s" U /************* clear rectangle side(矩形边清屏)***********************/
3 M4 Y7 m4 w& p8 N
0 D* t M7 t9 \' q3 f: r void recls(int x1,int x2,int y1,int y2)
0 _* V4 o. ^5 n; `. ]. k1 R {
- }+ P- E4 Y# z int i,j;5 [. a$ C2 ^& D! H4 |& O7 l6 ?
for(i=y1;i<y2;i++){% g0 M( n$ W" }9 A7 ~ O( m
goto_xy(x1,i);8 F2 g. d# T% D3 B3 v, {6 G+ n1 Y
putchar(' ');) T/ ] R; Y& R' J. m9 ]
goto_xy(x2,i);
' S1 f* Z6 `- J: q" j: g7 r putchar(' ');2 Q/ Q; u* r [) F# Q* @$ q5 f
delay(10);
, s( H T: ~2 e) [ }
4 u m( g5 D9 r- v4 k* Z2 Y for(j=x1;j<x2;j++){
# N' d c# c- `2 b g* ~/ j goto_xy(i,y1);" e7 Y6 k$ k& d1 |6 H' {
putchar(' ');
. P$ S* [# o- y goto_xy(j,y2);- J$ a+ ^- G; V3 y! |
putchar(' ');
( N! l1 d/ a3 `" O) s, R# b& } delay(10);
$ F1 c5 g8 t N6 F* Q! g }" l5 B5 j- a% `. t% j1 _1 C* d
} ?0 \9 K- y" ^9 }0 Y$ m
/******************open screen clear(开屏式清屏)*********************/
( k" b" K! _) ~$ e# Z
: q5 S# G7 O) F6 j- Z! o) l$ L void kcls(int x1,int x2,int y1,int y2)
( R+ ?$ G* q0 q1 i( {- d, y {! i" V- S3 k" v- e3 z
int t,s,i,j;
1 ]' M5 P3 u* @. `7 F. U1 ~5 _- I9 C t=s=(y1+y2)/2;( [6 _! X: ]2 s9 m4 t C
for(;t<=y2;t++,s--)
$ r. c" o" N A# } for(j=x1;j<x2;j++){* M& n- C6 Y) P2 l
goto_xy(j,t);
3 j7 a% E0 m5 N% v7 Y* F! O- u+ e8 N putchar(' ');
7 |5 O: L# I8 m/ ~( A goto_xy(j,s);5 s* V1 i; u. k' J
putchar(' ');- P5 ?# Q/ D8 F/ O
delay(10);/ D/ o7 x0 c9 }. h( x( i, V
}
% K4 f& d9 M1 |% @ }$ U; y% g H# G/ I
/*****************close screen clear*****闭幕式清屏*******************/
: |+ f' r5 \0 N5 g. w- q% }, v
# X. K/ L, }. }5 X. e" o/ K6 Q! @ void bcls(int x1,int x2,int y1,int y2)& R; u8 f' u: I
{5 j* i/ H2 c4 R, g6 K
int t,s,j;: _3 j9 S* ~% `5 W( o
t=y1;
8 k6 W% U( F6 B: e s=y2;2 g- h- q. L( ~; h
for(t=y1;t<(y1+y2)/2;t++,s--)6 p: S0 w/ w/ ` V; `- S6 m. D
for(j=x1;j<x2;j++){
/ U" d2 }- e( l" H goto_xy(j,t);
Z9 a3 F+ H' @( B+ N putchar(' ');
: u9 T; U2 \' a( h: S. U goto_xy(j,s);
5 \$ X) e0 u4 k: u' O5 P- R putchar(' ');8 F3 S; P* H* ^5 q) }- @
delay(10);7 |. i0 z$ Q2 C$ Z z! G J: g
}5 v7 p# Q3 U8 g. }, q# \
}
& C" H8 u4 J( _' V! H /******************bottom screen clear(自下清屏)********************/
. w2 T; ^5 N5 g$ l1 h* h
* @7 f! Y5 @. S void dcls(int x1,int x2,int y1,int y2)% t6 U) Z$ J2 T) I* i! B8 Q
{1 H- c( P) O8 k; J
int t,s,j,i;% N, `9 }9 d2 p! }2 Q1 r4 q, m
t=s=(y1+y2)/2;+ {4 L8 [* r" ^5 P3 \( Y0 K& g
for(j=x2;j>x1;j--). B' R+ h% c" B0 Y+ Z4 S
for(i=y1;i<y2;i++){
7 _1 K/ ? U6 s" B4 I: j% t9 I goto_xy(j,i);+ L' E; q! R1 J2 u7 i
putchar(' ');* S: U! E3 @+ I1 L+ T* Z5 L
delay(10);
* o7 b& e1 f& E& M2 W }
0 C G) E4 b6 f* p }8 }* n. s3 o3 \6 q) C. @
/******************设置光标子函数******************/, ^: }+ k8 S. Z7 g0 y6 [' W
9 G/ ]4 O+ K" S; g, c% y. T void goto_xy(int x,int y)
! O' V/ s0 e, }% _! \! d$ Q6 B {
' U L" S4 T# K8 @0 [ union REGS r;
6 J! j1 L8 ]$ x! C r.h.ah=2;
' v' F+ j. `) u4 `/ `- _ r.h.dl=y;) m0 c- x5 \5 \
r.h.dh=x;
# C7 a: M! Z* G7 g; ?7 t r.h.bh=0;
+ v7 G. E. v) g- c( u: `/ f+ ]9 R* T int86(0x10,&r,&r);
3 D0 }& Z; t& g* m2 X8 e }
, S2 ^- @( }9 c( S; ?2 L. v1 P1 M
/**********************在屏幕上打出一连串的a字母用于演示程序******************/" D" S. { t& ?9 h) r* ?
6 x2 ?7 Z4 o* T- |0 D& s: Z void puta(void)) ~# T8 f; r. a5 j) \$ \; W+ m6 P; ]
{
! Y% w# S( u! F1 B3 H( }7 Z7 _ int i,j;" c( g6 } Z, x4 y
for(i=0;i<24;i++){8 U' O; X8 e4 E' V' u; ~* c$ {
for(j=0;j<79;j++){0 `0 ]; v, b n' J' x
goto_xy(i,j);% M# x4 S. j- `, l9 F- C# \! S
printf("a"); c, n! y' v5 R: s
}
1 `' i' {$ X4 g' i) v( S }! o& L) E% I; D: z# C, D# X8 }
} |
|