标题:
C语言艺术清屏
[打印本页]
作者:
zw2004
时间:
2008-1-21 17:14
标题:
C语言艺术清屏
问题的提出:我们在编制程序时,经常要用到清屏处理,如dos下的cls,Turbo C下的clrscr()等都具有清屏功能,但这些均为一般意义的清屏,
2 j( I7 K- ~ M! K3 o l3 n
# \) |- c7 ~) n
并未显示其清屏规律.而有时为了达到清屏的艺术美观,往往对清屏有一些具体要求,如:开幕清屏;闭幕清屏;上清屏;下清屏;中清屏.为此,这里
% b- R4 N) C, U2 d: a
! ?' k, C" i- o& v' k8 c$ |
用C语言编制了几个子函数,用于程序中时,既可达到清屏的目的,有能增加屏幕的艺术美观.
5 X: V4 t' d; e, m% `- l
子函数及演示程序:
) R3 H }* W+ t0 W8 G: ]4 v4 T
& l) V# R1 O- \" I/ m9 q
#include<stdio.h>
. v7 R. z0 V- C# Z
#include<dos.h>
: E& C8 y7 c+ J7 a4 W4 `
#include<conio.h>
* N7 ~' c% d# G! @9 b7 Z
0 f9 |7 k O* R5 y0 T; u
void goto_xy(int x,int y);
9 |7 A: {' m6 q- X% ]
void dcls(int x1,int x2,int y1,int y2);
4 l0 [3 d' A4 A# K* x( X( F+ v
void bcls(int x1,int x2,int y1,int y2);
: [9 a1 ~. ?- L- V$ }' F' o: x, ?8 `8 S
void kcls(int x1,int x2,int y1,int y2);
6 \* i4 S: r+ a! p
void recls(int x1,int x2,int y1,int y2);
4 W2 |! e; D( P5 x2 g( F
void zcls(int x1,int x2,int y1,int y2);
9 ]; T( U$ V% D) k0 O5 G& u
void puta(void);
- \' a0 L R- T3 J) t' G3 g
& O% A$ x/ Z; }4 B
* Y2 h7 I* R8 U7 Q
/*--------------演示程序---------------------*/
9 D8 _! b. r p% D1 _3 r
main()
4 q( @) O4 T5 [
{
0 _# O/ o0 X; k7 @+ m
puta();
: N6 F f6 J# f7 i2 [
getch();
9 T4 b- V N* Z: Z( q, h: Y% t
dcls(0,4,0,79);
/ F2 S; ~) O- P8 z" p
getch();
) |$ ~0 O- B) s
puta();
4 X5 R1 O5 C. H$ U* }
getch();
" e4 a" i: u- v p8 F6 Z2 j4 A
bcls(0,25,0,79);
6 \, ?" J: |* o0 _1 M* X4 U) H) H8 P
getch();
$ }7 Z( k8 J5 U) X
puta();
" V2 i9 F% n2 I5 e
getch();
- {+ ~2 z/ l- y- _! M) e
zcls(0,25,0,79);
0 s- V$ a* H& M5 t
getch();
, r2 X/ k5 ?2 p3 S$ k- Q. U; u P9 Z" k
}
' z1 y$ i# M8 {1 X% a
/*********center clear screen(中心清屏)***********/
6 M8 l: E& e5 ?( o( Z# y4 s: `
void zcls(int x1,int x2,int y1,int y2)
1 V/ p! h$ I5 R) i7 G; X- T
{
2 }, v+ K' s: \: g U7 C
int x00,y00,x0,y0,i,d;
* C! x, N$ w: z& U
if((y2-y1)>(x2-x1)){
" X# U' J7 ?0 x- Z+ o
d=(x2-x1)/2;
$ W1 B% s3 H7 S- e
x0=(x1+x2)/2;
& H, r7 D2 ^' \9 Q/ W/ y
y0=y1+d;
; e" B, e: a/ y
y00=y2-d;
* x* S' q( f: N: p4 o& X# Q
for(i=0;i<(d+1);i++)
! I9 C1 x |' q8 }
recls((x0-i),(x00+i),(y0-i),(y00+i));
" r) j" V) l0 U5 ~" Q" R- I9 D
delay(10);
( e, b! o" o5 W1 V; [8 v5 g
}
3 T L- V8 ~0 f" W4 g+ [
else{
# w+ Q% k! r. c/ s. |% c4 `! ^
d=(y2-y1)/2;
. Z* b0 {" X6 V+ c. ]/ Z8 ?
y0=(y1+y2)/2;
" j" R* l, @8 ~8 ?
x0=x1+d;
" X4 W+ H5 H; e$ E+ o+ H5 f
x00=x2-d;
, X, J7 G9 f' {0 e" V
for(i=0;i<d+1;i++)
4 G/ p0 X% N$ o% X0 m$ h
recls(x0-i,x00+i,y0-i,y00+i);
" Q6 s5 h8 c) n0 \) k( J9 Q
delay(10);
7 X4 I& R5 x) u# r$ E3 k4 g+ c
}
6 |; }, x/ b+ V
}
- ^6 Y+ W: m! P/ Q/ V% I) h
8 |* |3 D5 j# d
/************* clear rectangle side(矩形边清屏)***********************/
3 x/ x* W- m+ Q
# t0 U5 ?( N H) p( k: M
void recls(int x1,int x2,int y1,int y2)
7 q: \/ b1 x7 M
{
6 [1 ^) r: I8 \1 P$ ?: s8 m, {& Q& }
int i,j;
$ L( D+ e v6 h# B9 ? h, r
for(i=y1;i<y2;i++){
2 Q6 q$ \2 @4 W/ y2 ]7 `
goto_xy(x1,i);
/ q6 A& y, P* A
putchar(' ');
2 z3 r0 g, s! P* F$ y( C# m, ?. ~
goto_xy(x2,i);
( M& m4 [ O: F. [6 X
putchar(' ');
- y+ l" S" u: N; {6 J3 ?3 O
delay(10);
! ]8 t3 Y) q' {0 T: f. W
}
- M. N0 l7 {: J
for(j=x1;j<x2;j++){
; k3 L8 |' k( e, L9 R. ]" n
goto_xy(i,y1);
+ }3 D5 }4 E" k) t6 I
putchar(' ');
1 o2 Z2 p4 K6 o* F' c& _9 l
goto_xy(j,y2);
: m9 w) n% Y% v c8 S0 I. H
putchar(' ');
$ }/ K7 i- J$ E2 V
delay(10);
. \) Y+ S) {+ ^: W D# \
}
z/ g/ M1 L& ^6 ]
}
# t E+ P! ^4 Z0 O
/******************open screen clear(开屏式清屏)*********************/
- C& \# X3 j8 P' B2 O
+ i0 v' y1 T1 }5 I
void kcls(int x1,int x2,int y1,int y2)
8 ~' m) e- X6 o. g
{
. U+ s6 S+ \; {/ P' z( y
int t,s,i,j;
4 @0 Z8 ]( t9 O* t
t=s=(y1+y2)/2;
N0 ]0 o9 e* d3 e9 q }7 A- g7 t
for(;t<=y2;t++,s--)
2 U7 W" {1 s6 f
for(j=x1;j<x2;j++){
A' ~4 R6 `* u# I: f* g8 T1 |3 E
goto_xy(j,t);
2 j9 y f! ^* |1 h
putchar(' ');
5 k) ]; }: o8 m
goto_xy(j,s);
1 V1 }; Y: @+ j# [7 n
putchar(' ');
) G+ T t8 i- f1 m/ V1 Z
delay(10);
9 h4 G3 F( A# k8 J/ K1 r
}
0 a" c! Y1 _2 m# \
}
% c5 p, c/ g/ Z5 e2 r
/*****************close screen clear*****闭幕式清屏*******************/
4 D, k3 ^, w4 V' p7 H
5 d, D" W( n- A# }! O
void bcls(int x1,int x2,int y1,int y2)
7 R2 ^- f2 ~5 S) y
{
5 | |& Y: t' L7 w
int t,s,j;
P& b6 q; T+ Y$ R
t=y1;
, W0 Q, `- \7 e+ J2 r- {0 W8 p
s=y2;
+ R; M1 O/ P- M7 a2 w
for(t=y1;t<(y1+y2)/2;t++,s--)
8 {( S8 }: A1 S3 f
for(j=x1;j<x2;j++){
& W7 k3 ~: ^" B9 P& q: U
goto_xy(j,t);
4 x5 Z8 G8 u" u: W, d) ?
putchar(' ');
$ c9 o! [8 G) H8 p$ M9 }
goto_xy(j,s);
5 p0 e* c2 h; `0 y
putchar(' ');
+ u$ p' Y+ ~8 n* D
delay(10);
' k" h1 W! x/ o, S
}
* u7 \5 i( E7 c5 W% r7 n
}
1 j0 _; a; i7 r" M& C7 f. N- j
/******************bottom screen clear(自下清屏)********************/
. J/ k3 v" d, A( N, Q+ \
# Y: D% C- E Q8 g |# [
void dcls(int x1,int x2,int y1,int y2)
S+ w2 m5 S/ y
{
- d0 @8 C% v: O
int t,s,j,i;
$ g d) r8 v Z2 ]: N; q
t=s=(y1+y2)/2;
" w' h4 a3 K6 G+ b
for(j=x2;j>x1;j--)
4 ^3 L, U h+ n p! N b7 L
for(i=y1;i<y2;i++){
7 d1 }5 [7 E8 m$ B/ @
goto_xy(j,i);
4 s7 z0 {& M8 f: R( {
putchar(' ');
4 D1 f4 y* X/ `2 B
delay(10);
. w# {2 \# n! {$ P" u# E
}
3 Q; ~* {) ~3 u
}
( R1 k* ~) a8 E' X4 C" A% [
/******************设置光标子函数******************/
' N* i# `$ F+ M( k/ o H
i/ _; L, Z9 X2 m
void goto_xy(int x,int y)
, B* R% i# M) h3 y% W( C, _' S4 ?
{
2 `$ n+ q7 p$ l/ d* i- U! o X
union REGS r;
, J$ b Y5 A2 E. X4 b& T5 r
r.h.ah=2;
, h, Z- U7 L$ D! a0 G
r.h.dl=y;
0 h9 b# Y! z6 z- s, f9 F y
r.h.dh=x;
3 Q+ o5 S' h Q0 D5 ^% d9 A# t: b
r.h.bh=0;
; e% @+ o6 A- k: ~3 P+ Q3 j! ^
int86(0x10,&r,&r);
* {; I5 z( f B
}
: O _% H* j4 c4 |0 Q
! I2 H' S- W8 L) ]# O2 q
/**********************在屏幕上打出一连串的a字母用于演示程序******************/
% P1 k- H, s- G& }4 j, a
4 I* g0 |# s4 u( F* @; Z
void puta(void)
" ^: C+ b- c$ b6 K
{
) p2 S6 t+ R4 C( J. Z9 [
int i,j;
5 L: M/ b0 d4 V J
for(i=0;i<24;i++){
9 z6 l- f1 m4 k; F8 N
for(j=0;j<79;j++){
- B* R1 \2 _, i3 k. p! K% g' _
goto_xy(i,j);
* P3 x9 U$ g) p5 L+ ^6 h( `1 R2 d- @
printf("a");
# R" A" B3 L* S- m; S
}
5 t0 ]- J4 C2 ]- R* V( {
}
5 c a3 A; {* A
}
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2