标题:
C语言艺术清屏
[打印本页]
作者:
zw2004
时间:
2008-1-21 17:14
标题:
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
: B8 R6 E& g% s0 V3 Z- A/ T! H
+ ~0 k! a* r/ f" A0 r2 L$ @. l
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
5 ~# T c r( S4 I- r
# e, v2 j, E4 Y7 c3 l
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
4 o' q) q+ c4 Q# A h7 q" U
子函数及演示程序:
1 n3 q' Q( C9 z3 `6 T# m
; Q# w( `( C4 T2 n3 t: j
#include<stdio.h>
9 C: x9 J) o+ {* R5 {/ l
#include<dos.h>
9 F! O2 V* r' [* V2 f/ z* ]
#include<conio.h>
2 P5 s( d& X! [: Q3 V
. |; ?% W; U) N
void goto_xy(int x,int y);
& t9 Q3 l7 Z5 k4 n
void dcls(int x1,int x2,int y1,int y2);
7 o7 R; M/ x' M/ C# k- y' F. Q
void bcls(int x1,int x2,int y1,int y2);
, f( K. F2 j8 B
void kcls(int x1,int x2,int y1,int y2);
/ E8 d! o- U. u2 R+ s- R
void recls(int x1,int x2,int y1,int y2);
$ ?$ S+ J8 R3 o8 a8 ]0 p# I. g& B8 h! f
void zcls(int x1,int x2,int y1,int y2);
5 I }) _6 y" m {7 D
void puta(void);
! Q+ j- ]2 X# _" a
) l: I" ?# V3 \4 f9 Q: o
0 M/ W) {1 Z2 o8 R9 a
/*--------------演示程序---------------------*/
2 Q5 u, N0 ~2 X1 k# s' w1 z
main()
( Y) S) E+ b3 p" Z" ^; F2 Q
{
! f) _7 I1 f0 W
puta();
$ T6 ?( U* u) N- {' Q7 ]
getch();
8 R5 U) H2 V" E( p& c
dcls(0,4,0,79);
8 @: G0 P$ b$ H: x
getch();
) ~9 l0 J8 f7 f ?3 y9 @1 V
puta();
& ?: j' W6 v: |( v9 _. v
getch();
* F( C$ n1 |7 o% Y* M. i! a
bcls(0,25,0,79);
4 c% j( m/ x) g" j4 ?& r9 ]$ B
getch();
6 _ ^$ @' I# i ^. E5 G7 h
puta();
( s1 j9 [$ G. A+ U% D
getch();
" m8 l4 k# @ x$ q
zcls(0,25,0,79);
8 F& ^ s9 w* t" J" Y3 M
getch();
: a' A* A. D9 Y A U. ]
}
* j+ _5 E0 o' j* H
/*********center clear screen(中心清屏)***********/
6 c7 e3 T. d& {
void zcls(int x1,int x2,int y1,int y2)
# l; C* E" D* j" I
{
' s+ Z6 M! u5 X0 l
int x00,y00,x0,y0,i,d;
' \! Z+ f9 j7 m" w+ I5 e
if((y2-y1)>(x2-x1)){
' @; f) Y4 x+ R
d=(x2-x1)/2;
7 k% N, l4 }3 M
x0=(x1+x2)/2;
- C+ f- [- c- a6 R. j' A
y0=y1+d;
( r0 S$ }4 n: L" d4 B" i& y
y00=y2-d;
* U8 P9 v- q- Z# S
for(i=0;i<(d+1);i++)
3 w4 P* k: W9 z
recls((x0-i),(x00+i),(y0-i),(y00+i));
u; Z$ E& }4 ]0 J: P' u
delay(10);
. x& W4 l# d; w; D2 [
}
1 m% P$ @/ U) @. @8 V
else{
: ~( i( y" ?9 z" J. s5 f
d=(y2-y1)/2;
6 |' O8 Z# e% }) h* f& v, e$ O
y0=(y1+y2)/2;
5 A! i0 `& I$ l2 b, b/ k- ?
x0=x1+d;
' l) t6 ^8 D' h3 f
x00=x2-d;
3 m/ W& _9 c5 M: }6 g
for(i=0;i<d+1;i++)
4 \2 c. T5 R; h1 w3 [
recls(x0-i,x00+i,y0-i,y00+i);
1 N* s* p3 P5 l1 l2 n, i; M
delay(10);
x |; B4 y+ h8 z8 E, f
}
( |0 Q4 x3 P+ J t% ?8 g9 M! Q
}
( H# r( R+ g ?, b
2 r* ^3 _& O, ~3 ^+ F
/************* clear rectangle side(矩形边清屏)***********************/
" }& i$ v8 ~( k+ C- P! B
- H! H8 r! B; L, V( l
void recls(int x1,int x2,int y1,int y2)
) a' w: S' |* P) @& J
{
" B% ?/ h, u8 f$ Z1 `6 m8 P
int i,j;
) w* x1 b# ?$ Q/ v; H$ g
for(i=y1;i<y2;i++){
) }3 I9 T9 P6 V& `- W
goto_xy(x1,i);
; W+ M; a6 e( a5 ^; Y, k7 A, ~
putchar(' ');
/ k7 i k8 F# b$ S
goto_xy(x2,i);
" d' \9 }/ f6 {5 u1 t
putchar(' ');
! G. Y; `, O! N& }8 }
delay(10);
; C7 u: o! ~% z5 Z
}
5 |& w, @. T( U! O2 D) Y0 Z
for(j=x1;j<x2;j++){
/ }7 D9 X7 c3 p! W1 r& H
goto_xy(i,y1);
; q# D8 f6 l# }) n4 u- N. h
putchar(' ');
^) q( z u; h1 V. u0 V. I' U% F
goto_xy(j,y2);
/ V$ G2 ?- J, F( B D/ Z
putchar(' ');
9 _9 ?9 i2 D; z1 i/ ]/ S* N8 l
delay(10);
0 |$ v2 n, L0 o: j- ]) b9 H# F
}
) ^1 Q5 T' ?6 ~* z
}
& o* N. s9 c, I4 c& Q$ \( N
/******************open screen clear(开屏式清屏)*********************/
) d9 |5 ~! v9 W) T$ Z
6 n" @3 B7 x3 B3 ?7 m0 f
void kcls(int x1,int x2,int y1,int y2)
6 e! O' [% S( n
{
7 D/ k* p" D. n2 n) ?
int t,s,i,j;
! g4 h% N/ ` y" @
t=s=(y1+y2)/2;
* F* H, G3 `% a/ v% f6 z
for(;t<=y2;t++,s--)
2 z% ^( [- k8 O& V1 ] \) a
for(j=x1;j<x2;j++){
' N! r( u& D) l9 f3 Q" H1 N
goto_xy(j,t);
9 ~! H! s# ~7 W- C
putchar(' ');
' f; t4 G( G9 z$ y* e8 B
goto_xy(j,s);
! B! I8 B1 h- L
putchar(' ');
; r% ~" C, J1 T h" G( C d
delay(10);
6 K }1 a& G1 z$ i' i: x
}
) k; C5 h. l1 h% C2 Q
}
: m+ G8 b: o3 D* P0 I5 C( n
/*****************close screen clear*****闭幕式清屏*******************/
8 \# U T# w$ l1 s/ \- D1 R% ~) S$ @
4 R6 Y4 v' e5 V" ~8 T2 b
void bcls(int x1,int x2,int y1,int y2)
. Z! t9 z4 R! e8 q4 T$ G Q1 y
{
# Q8 G; z0 A2 r' u, n8 }6 r% i d- |
int t,s,j;
# [) }4 @2 E0 ~1 X* p, T8 A
t=y1;
" m8 g5 m6 R7 d( U8 @$ U% }: B
s=y2;
# i% \; T* B2 K, e: B2 W' k
for(t=y1;t<(y1+y2)/2;t++,s--)
0 A, g8 ^# G# r0 B+ `8 ^
for(j=x1;j<x2;j++){
6 b: j0 T$ _# c1 B- a% b
goto_xy(j,t);
. x' {. B& K c+ g
putchar(' ');
. h) D( R Q* V3 p% h+ y9 X
goto_xy(j,s);
6 d6 c2 R; r# G8 w4 o- y1 k: W+ W3 }- ?
putchar(' ');
' N5 F) W2 o( o' [# e! P7 ^
delay(10);
( H& \! M; K$ k7 `
}
6 H( U+ }" t$ ]4 c8 ~
}
9 C. Y( ~/ ^1 ^( r+ G$ x; b- A
/******************bottom screen clear(自下清屏)********************/
5 S3 `# l% }9 D W' Z
5 r9 f, q* W0 e# `2 D
void dcls(int x1,int x2,int y1,int y2)
8 Z; ]+ V' e$ B" r" X( t5 {3 x6 n. a3 O
{
3 h9 T8 O4 a/ |( w
int t,s,j,i;
9 ^! [6 Q7 Y6 H: s" u( b" t
t=s=(y1+y2)/2;
# E% ~$ h8 b1 ~# q
for(j=x2;j>x1;j--)
; B$ `0 M+ H- E
for(i=y1;i<y2;i++){
- o9 W3 @5 e1 b& C6 G( Y
goto_xy(j,i);
7 I+ W3 x' f( a7 I1 q! }
putchar(' ');
4 C+ g4 L$ u0 s4 Z1 e! b) ?
delay(10);
' C# [ u) o: M
}
; O( r+ u6 o7 ?: }
}
( f. E( H$ p8 E2 f- L
/******************设置光标子函数******************/
8 q1 D# d0 x( m3 W$ a* }, {% t
$ p' `5 d5 J( B# e9 E% `
void goto_xy(int x,int y)
5 T& n, D2 x+ g2 o! @
{
0 `% s8 i& Z. S: r) x* `$ v
union REGS r;
) Q0 v! R1 W& W! G2 \! P
r.h.ah=2;
- C* o$ n' y T, U8 A9 ~# y/ M
r.h.dl=y;
- S" k; E6 W/ J9 \
r.h.dh=x;
8 W8 b/ E/ ?) j# x$ k
r.h.bh=0;
: d; V, c& Q4 w4 Q
int86(0x10,&r,&r);
# K* L4 @6 Q: l N3 W O5 }3 I- G, Y
}
2 R! l# {" ?' `
8 | O& h' y; Y# Y8 |
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
4 ^" L9 Y: V& d6 v; o+ Q
" q: V5 ~; I# S
void puta(void)
, z: F9 c9 U7 A z6 J. M
{
* A& a4 x/ z% ? H+ ^
int i,j;
. @; h. M4 [! I
for(i=0;i<24;i++){
5 {3 F4 K1 o2 P
for(j=0;j<79;j++){
/ I$ c, e( H! l W' s! q/ s
goto_xy(i,j);
2 C2 \2 K' a+ y" X1 P7 u' I+ Y
printf("a");
* I4 w7 y' |/ n% A9 g
}
$ q& y+ y+ f% N$ ~' ]- y4 M, m
}
+ O6 E$ y, U$ O) Y
}
欢迎光临 捌玖网络工作室 (http://89w.org/)
Powered by Discuz! 7.2