标题:
C语言艺术清屏
[打印本页]
作者:
zw2004
时间:
2008-1-21 17:14
标题:
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
% }1 L$ ]. y3 ^" q/ t% W
, w/ F; E) q5 w/ r7 `$ {0 i
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
$ p" b- [* g" n! N& B3 b4 |
D- B7 U9 a1 \
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
2 r9 ^" L4 J/ H2 k8 z0 a3 _) }" M
子函数及演示程序:
: x+ |. |( y* b3 K
3 h4 `3 C7 D z9 ^5 N3 l( b% X
#include<stdio.h>
) q8 s6 F. y: P' y1 G6 i( G4 y/ J
#include<dos.h>
: V5 m c) A5 G- j% C4 B7 g/ o
#include<conio.h>
' z6 x' J; V, Y7 G% B) k6 k
/ C; b( N9 g' F; T5 {2 J
void goto_xy(int x,int y);
( X, B0 o$ }( j2 r1 x9 }8 b: k
void dcls(int x1,int x2,int y1,int y2);
( E* J* b; A. x6 F( x6 b+ t6 m; T: m
void bcls(int x1,int x2,int y1,int y2);
. ~4 Y' J& Z& b6 N6 b
void kcls(int x1,int x2,int y1,int y2);
0 b* `; f" V# ^" h
void recls(int x1,int x2,int y1,int y2);
0 L' b- O2 x3 r8 V* L- O
void zcls(int x1,int x2,int y1,int y2);
% S J2 o# \ v/ H
void puta(void);
# o9 h+ V) l( i) F9 Z! R
2 d& b. R" h2 @2 c4 c0 y( x. A/ {
/ |0 d6 p9 q5 A/ Y- S
/*--------------演示程序---------------------*/
8 a2 ^( U. `3 `4 k* j* I
main()
4 E4 Z7 N9 G3 }+ w
{
" }) C& C* v% x0 |+ F, e' c
puta();
3 _$ Q F0 @, ?" O4 x. ^; |2 v
getch();
7 {9 b8 B8 I# E; m1 y- G8 u! c F) Z
dcls(0,4,0,79);
$ v. k9 r* Z; C4 W+ q
getch();
8 p9 @ X% h. l# H- v
puta();
O9 W: k/ m1 l
getch();
1 v# m" D8 B6 g: @+ V$ M% a
bcls(0,25,0,79);
5 v. t a2 E' K) \
getch();
" \* ?1 s2 N8 t* S8 }& v
puta();
& h' p {! _+ w: q; `
getch();
2 F2 b( u- \& G7 Q8 o) u
zcls(0,25,0,79);
! Z& }3 ` X3 b/ n8 K. D( e( u
getch();
3 n; T0 N+ t1 R; k6 ~
}
" c- n- P% C- t$ |% n
/*********center clear screen(中心清屏)***********/
) u9 |" Y4 l+ p# R6 r
void zcls(int x1,int x2,int y1,int y2)
- d" S7 `" ?8 @. Q( Y
{
, e. V3 P: G* V% S: e
int x00,y00,x0,y0,i,d;
& m& E q, J+ x" _6 ~, |; W
if((y2-y1)>(x2-x1)){
1 M2 R7 T/ G( N0 O% x9 j2 _
d=(x2-x1)/2;
0 p( \+ B4 O0 P# {
x0=(x1+x2)/2;
' e. H& i5 s* }. _" x7 b
y0=y1+d;
3 i/ g* d4 k1 o t
y00=y2-d;
5 e' R S# y8 v$ ^" ?
for(i=0;i<(d+1);i++)
) a+ i9 s F, q4 E8 P( n
recls((x0-i),(x00+i),(y0-i),(y00+i));
4 p* {& t7 d/ M; _% v( \
delay(10);
3 a" w& W+ }& V) d
}
! S6 N9 V. t! w8 p7 i, W
else{
, B x" W' e8 `
d=(y2-y1)/2;
( s5 e- U: |" g
y0=(y1+y2)/2;
! U% Y" _& b* P7 I3 b* M3 V
x0=x1+d;
+ D. j) [1 r, f
x00=x2-d;
A' m9 n# C+ S/ N2 L
for(i=0;i<d+1;i++)
, v/ T: A$ {' d& m
recls(x0-i,x00+i,y0-i,y00+i);
f: V& r$ F4 d$ g
delay(10);
8 B- a" @, B4 }( U# ]
}
/ v) B( l) k. p$ \
}
4 q% h% u% V' z' ?, D/ c* l& b) Y+ I( @
: ^; X: N @( N! N2 ]
/************* clear rectangle side(矩形边清屏)***********************/
' ]% [2 ^/ I+ ^! F3 Y: h9 x6 B7 t
0 B' g0 Z; G( l' }. c
void recls(int x1,int x2,int y1,int y2)
) r5 x# l/ Y! T0 ~/ A* @# M% g
{
& F! N# I. J9 T9 ]9 P6 H
int i,j;
5 J% u% Z4 n1 b: Q
for(i=y1;i<y2;i++){
4 ^ b u4 {; V: ~
goto_xy(x1,i);
3 \; z: E/ h# G! g3 t
putchar(' ');
) o8 c$ T: z" v5 T3 r+ H
goto_xy(x2,i);
& s( w3 u4 l! ~5 _) Q& L
putchar(' ');
" \$ s' D, ^; P7 H* P. `) W
delay(10);
2 b1 {# i# r+ V: F7 P
}
8 E, Z9 O2 F& i% }2 `
for(j=x1;j<x2;j++){
) C' k9 a( |$ V( l3 M
goto_xy(i,y1);
0 v% ]8 N5 [: f+ P3 u8 c
putchar(' ');
& A* W, g8 l1 g/ u
goto_xy(j,y2);
8 R7 I2 j, K$ ^% B4 a
putchar(' ');
2 T% A+ K6 |5 o
delay(10);
9 B! y: [( M. T( s
}
- n; U( t' N! p d+ I+ `6 L
}
# {) h) O) Y6 @" w0 k4 J
/******************open screen clear(开屏式清屏)*********************/
( [ ] {9 v9 C- n' i4 ]
$ s0 @3 }& b) f6 v
void kcls(int x1,int x2,int y1,int y2)
1 z8 {& E; c3 E9 D3 x
{
. k( I+ C% n, A. l
int t,s,i,j;
- ~- v6 o9 n8 E z: M; l) {
t=s=(y1+y2)/2;
; M6 O1 {' w% s* |
for(;t<=y2;t++,s--)
5 M; _2 H u/ j
for(j=x1;j<x2;j++){
) K( t2 s* ~5 A2 _! _- b# b S
goto_xy(j,t);
, c0 H6 |4 ^* i/ R1 R
putchar(' ');
* c$ |$ d" I+ }; r( [; K- h
goto_xy(j,s);
: e. J: B3 S' y2 u" N
putchar(' ');
% k# @, w+ K9 I% t; a# }: m9 ?8 [+ |
delay(10);
. S$ q. g* O( J6 c' L
}
- E7 O$ \ `! Z
}
. o* z) A, v) ?) P
/*****************close screen clear*****闭幕式清屏*******************/
7 I/ q% C) F- z) y3 a! C, ]
, U7 P. u& E0 \) c1 e
void bcls(int x1,int x2,int y1,int y2)
# m! w8 M! h2 w4 u- |- Y c+ J
{
$ ^* K% r0 l2 F, \: T% `; P1 R
int t,s,j;
, I8 ?& O K# A9 E% f+ ~# N
t=y1;
. e v' `1 a: u7 E0 u* o; {
s=y2;
; |. @6 w5 V" W' Q R
for(t=y1;t<(y1+y2)/2;t++,s--)
+ [. ^' \1 C! X% p3 \! `
for(j=x1;j<x2;j++){
' n# ?& _2 V/ ^8 f/ |
goto_xy(j,t);
3 o/ t+ F& ` W ]: V
putchar(' ');
/ t: A7 ^7 x; M9 s$ S$ X
goto_xy(j,s);
* C$ \$ W- V0 \0 w# n( ^
putchar(' ');
+ y; c- y( q5 B8 ~
delay(10);
) @) ~) f* n P
}
; w8 `4 O! j6 l+ k' j9 N- P
}
+ k6 ~5 k+ ^/ k( l- n
/******************bottom screen clear(自下清屏)********************/
( `* }9 z" Y3 B0 a# v% N
% X S9 a+ f" y5 W
void dcls(int x1,int x2,int y1,int y2)
' }' i: o* Y' ]; x0 @0 v
{
2 F1 y/ w L. f! H- G! d% a1 R6 a
int t,s,j,i;
" |& x/ B* N9 O) e
t=s=(y1+y2)/2;
- a3 z6 e" N5 z: `9 W9 d
for(j=x2;j>x1;j--)
" R; Z# \ s' x3 o7 g
for(i=y1;i<y2;i++){
) ?' t* u3 o8 H& r6 A* t! V
goto_xy(j,i);
j: l7 t8 ~: I1 e9 i6 Q- B
putchar(' ');
* Y" W# K7 y) }
delay(10);
5 b8 C+ ^4 _0 K# L+ O. r. l0 F# a
}
2 N- B2 Z( C1 h' a; H
}
# Z- [7 g5 E9 e* d6 v7 ]* b5 {* a+ j
/******************设置光标子函数******************/
$ j* P5 t6 g' v. o/ K- X+ o
2 ^- s% c8 I8 t% r/ W; N8 ?" }6 p
void goto_xy(int x,int y)
, m/ s. }' i( l+ r5 d' x* O4 @- w' K$ g
{
9 V6 K+ J# R, p; V. z- p+ u
union REGS r;
% q$ k" F! @4 r0 U
r.h.ah=2;
( @9 P- S+ ~1 l. `: T+ b9 r
r.h.dl=y;
0 J- o n: A- L8 F* T8 B! S+ u
r.h.dh=x;
' j! a" \% E; b' _$ p/ m: C0 S3 }
r.h.bh=0;
" B1 n H7 t* ?. `+ Q$ M8 M/ k
int86(0x10,&r,&r);
, x7 v( ^- \$ M6 R
}
+ K( ], J9 g) S! K
G; ]2 A2 U9 n7 f( F" `' @
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
5 o* L D0 r4 H o/ f
, A0 d' _* U6 }- a9 m6 D' P
void puta(void)
0 n' l2 T& D ]2 G2 H
{
$ ]. a: S) t* _6 I" x
int i,j;
' Z( f- a: j( C7 l% w" X0 \7 s+ c
for(i=0;i<24;i++){
, V' X" b4 I; `! k" W- S
for(j=0;j<79;j++){
+ }# G" U; ^% n0 I( D! Y/ T
goto_xy(i,j);
; v/ W5 o- u! f/ i
printf("a");
$ T5 e# r$ w1 c1 |
}
" C. I3 Q6 g4 }( P. T
}
/ u/ H5 y' G# z7 r% n/ A
}
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2