📄 编程天地--c语言--图形与动画(二).htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0052)http://souha.60800.com/ArticleShow.asp?ArticleID=173 -->
<HTML><HEAD><TITLE>编程天地-->C语言-->图形与动画(二)</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type><LINK
href="编程天地--C语言--图形与动画(二).files/STYLE.css" rel=stylesheet type=text/css>
<META content="MSHTML 5.00.3315.2870" name=GENERATOR></HEAD>
<BODY bgColor=#f0f0f0 topMargin=0>
<STYLE type=text/css></STYLE>
<TABLE align=center background=编程天地--C语言--图形与动画(二).files/top_line.gif border=0
cellPadding=3 cellSpacing=1 width=760>
<TBODY>
<TR align=middle>
<TD><FONT color=#cccccc>
<SCRIPT language=JavaScript>
var day="";
var month="";
var ampm="";
var ampmhour="";
var myweekday="";
var year="";
mydate=new Date();
myweekday=mydate.getDay();
mymonth=mydate.getMonth()+1;
myday= mydate.getDate();
myyear= mydate.getYear();
year=(myyear > 200) ? myyear : 1900 + myyear;
if(myweekday == 0)
weekday=" 星期日 ";
else if(myweekday == 1)
weekday=" 星期一 ";
else if(myweekday == 2)
weekday=" 星期二 ";
else if(myweekday == 3)
weekday=" 星期三 ";
else if(myweekday == 4)
weekday=" 星期四 ";
else if(myweekday == 5)
weekday=" 星期五 ";
else if(myweekday == 6)
weekday=" 星期六 ";
document.write(year+"年"+mymonth+"月"+myday+"日 "+weekday);
</SCRIPT>
</FONT></TD>
<TD><A class=BigMenu href="http://souha.60800.com/index.asp">搜哈首页</A></TD>
<TD><A class=BigMenu
href="http://souha.60800.com/Search.asp?BigClassName=网站开发">网站开发</A></TD>
<TD><A class=BigMenu
href="http://souha.60800.com/Search.asp?BigClassName=编程天地">编程天地</A></TD>
<TD><A class=BigMenu
href="http://souha.60800.com/Search.asp?BigClassName=硬件资讯">硬件资讯</A></TD>
<TD><A class=BigMenu
href="http://souha.60800.com/down/default.asp">软件下载</A></TD>
<TD><A class=BigMenu href="http://souha.60800.com/liuyian/index.asp"
target=_blank>搜哈留言</A></TD>
<TD><A class=BigMenu href="http://souha.60800.com/talk/index.asp"
target=_blank>搜哈论坛</A></TD>
<TD><A class=BigMenu href="http://souha.60800.com/server.asp">服务项目</A></TD>
<TD> </TD>
<TD> </TD></TR></TBODY></TABLE>
<TABLE align=center background=编程天地--C语言--图形与动画(二).files/bottom_line.gif
border=0 cellPadding=0 cellSpacing=0 height=76 width=760>
<TBODY>
<TR>
<TD>
<TABLE align=center bgColor=#ffffff border=0 cellPadding=0 cellSpacing=0
height=72 width="99%">
<TBODY>
<TR>
<TD><A href="http://souha.60800.com/index.asp"><IMG border=0
height=60 src="编程天地--C语言--图形与动画(二).files/main1.gif"
width=198></A></TD>
<TD align=middle><A href="http://souha.60800.com/"
target=_blank><IMG border=0 height=60
src="编程天地--C语言--图形与动画(二).files/logo.gif" width=468></A></TD>
<TD align=middle width=75>
<TABLE align=center border=0 cellPadding=1 cellSpacing=0>
<TBODY>
<TR align=middle vAlign=center>
<TD><IMG height=16
src="编程天地--C语言--图形与动画(二).files/homepage.gif" width=16><A
href="http://souha.60800.com/ArticleShow.asp?ArticleID=173#"
onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://souha.60800.com')"></A></TD>
<TD><A class=date
href="http://souha.60800.com/ArticleShow.asp?ArticleID=173#"
onclick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://souha.60800.com')">设为首页</A></TD></TR>
<TR align=middle vAlign=center>
<TD><IMG height=17 src="编程天地--C语言--图形与动画(二).files/email.gif"
width=16><A href="mailto:souha@60800.com"></A></TD>
<TD><A href="mailto:souha@60800.com">联系我们</A></TD></TR>
<TR align=middle vAlign=center>
<TD><IMG height=16
src="编程天地--C语言--图形与动画(二).files/Favorites.gif" width=16><A
href="http://souha.60800.com/"
onclick="window.external.addFavorite('http://souha.60800.com','搜哈网络')"
title=动感网络></A></TD>
<TD><A href="http://souha.60800.com/"
onclick="window.external.addFavorite('http://souha.60800.com','搜哈网络')"
title=动感网络>加入收藏</A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width=760>
<TBODY>
<TR>
<TD vAlign=top>
<TABLE align=center border=0 cellPadding=1 cellSpacing=0 class=border
style="WORD-BREAK: break-all" width="100%">
<TBODY>
<TR>
<TD background=编程天地--C语言--图形与动画(二).files/Banbg.gif
style="COLOR: #333333; FILTER: dropshadow(color=#FFFFFF,offx=-1,offy=1,positive=1; FONT-SIZE: 9pt">| <A
href="http://souha.60800.com/search.asp?BigClassName=编程天地">编程天地 </A>>> <A
href="http://souha.60800.com/search.asp?BigClassName=编程天地&SmallClassName=C语言">C语言 </A>>> 图形与动画(二)
</TD>
<TD align=right background=编程天地--C语言--图形与动画(二).files/Banbg.gif
style="COLOR: #333333; FILTER: dropshadow(color=#FFFFFF,offx=-1,offy=1,positive=1; FONT-SIZE: 9pt"
width=50> <IMG
src="编程天地--C语言--图形与动画(二).files/hot.gif" td < > </TD>
<TR class=tdbg>
<TD bgColor=#ffffff colSpan=3>
<P align=center><FONT
size=5>图形与动画(二)</FONT><BR>作者:佚名 转贴自:本站原创 点击数:267 文章录入:windshadow</P>
<P>3、天空中运行的卫星<BR>
动画显示中最基本和常用的技术是位图像操作,它可以把屏幕上一个矩形区域的图形复制到缓冲区中,也可以从缓冲区中将位块取出重现在屏幕上。目标图像的擦除最简单的方法是采用XOR(异或方式,即将目标中的每个像素点和屏幕上相应的像素点作XOR运算,使目标变得可见,为了擦掉这一目标
,只需简单地再将它与屏幕XOR一次,背景中被目标所遮盖的部分又可以还原成原来的状态。<BR>
我们也可以利用AND和XOR运算,对被移动的目标事先作好两个特殊的掩模(mask),我们称为AND掩模和XOR掩模,这两个掩模的图形制作方式是不同的,AND掩模要求目标轮廓内位图像各点像素值为0,而XOR掩模应按目标的实际颜色去做,并将这两个掩模保存到缓冲区中去。当一个目标在背景移动时,先将目标的AND掩模与屏幕相“与”,其结果在背景当前位置产生一个像素值为0的目标轮廓洞,然后再用目标的XOR掩模与AND掩模相异或,这两个掩模经混合后,目标以其正常的颜色出现在屏幕上。这样通过采用目标位图的双掩模混合技术,当移动目标经过背景时,就不会出现目标颜色发生变化的情况。<BR>
作为一个示例,程序运行后,在屏幕上出现繁星闪烁的星际空间,由经纬线组成的地球镶嵌在太空中,一颗卫星缓缓从屏幕中飞过,同时在屏幕上写出彩色大汉字“星际卫星运动轨迹”和“欢迎你使用该系统”,整个画面生动美观。<BR>/*天空中运行的卫星Qw43.C*/<BR>#include<graphics.h><BR>#include<alloc.h><BR>#include<stdlib.h><BR>#include<stdio.h><BR>#include<string.h>
<P>#define STEP 5<BR>#define DELAY 150<BR>#define SIZE 25<BR>#define
YELLOW 14<BR>#define RED 4</P>
<P>void *xormask,*andmask,*covered;<BR>void draw_earth();<BR>void
get_mask(int,int,int,int);<BR>void putstar(void);<BR>void
xshz();</P>
<P>int main()<BR>{<BR> int
gmode=VGAHI,gdriver=VGA,midx,i,cx=1,cy;<BR> char
*j1,*j2,*j3,*j4;<BR>
initgraph(&gdriver,&gmode,\\tc3\\bgi);<BR>
cy=getmaxy()/2;<BR>
covered=malloc(imagesize(cx,cy,cx+SIZE,cy+SIZE));<BR>
xormask=malloc(imagesize(cx,cy,cx+SIZE,cy+SIZE));<BR>
andmask=malloc(imagesize(cx,cy,cx+SIZE,cy+SIZE));<BR>
getimage(cx,cy,cx+SIZE,cy+SIZE,covered);<BR>
setfillstyle(SOLID_FILL,getmaxcolor());<BR>
bar(cx,cy,cx+SIZE,cy+SIZE);<BR>
get_mask(cx,cy+15,0,0);<BR>
getimage(cx,cy,cx+SIZE,cy+SIZE,andmask);</P>
<P> putimage(cx,cy,covered,COPY_PUT);<BR>
get_mask(cx,cy+15,YELLOW,RED);<BR>
getimage(cx,cy,cx+SIZE,cy+SIZE,xormask);<BR>
putimage(cx,cy,xormask,XOR_PUT);<BR>
draw_earth();<BR> putstar();<BR>
j1=星际卫星运动轨迹;<BR> j2=欢迎您使用该系统;<BR>
j3=地;<BR> j4=球;<BR><BR>
/*因为没有HZK24,所以下面一段显示汉字的程序没有调试*/<BR>/*
xshz(j1,100,10,1,1,15,1,k,10);<BR>
xshz(j2,100,400,1,1,2,0,s,10);<BR>
xshz(j3,310,200,0,0,14,0,s,1);<BR>
xshz(j4,310,240,0,0,14,0,s,1);<BR>*/<BR><BR>
for(i=0;i<600;i+=STEP){<BR>
putimage(cx+i,cy,covered,COPY_PUT);<BR>
getimage(cx+STEP+i,cy,cx+SIZE+STEP+i,cy+SIZE,covered);<BR>
putimage(cx+STEP+i,cy,andmask,AND_PUT);<BR>
putimage(cx+STEP+i,cy,xormask,XOR_PUT);<BR>
delay(DELAY);<BR> }<BR>
getch();<BR> closegraph();<BR> return
0;<BR>}</P>
<P>void get_mask(x,y,color1,color2)<BR>{<BR>
moveto(x+10,y);<BR> setcolor(color1);<BR>
linerel(-3*3,2*4);<BR> moveto(x+10,y);<BR>
linerel(-3*3,-2*4);<BR> moveto(x+25,y);<BR>
linerel(-5*5,0);<BR>
setfillstyle(1,color2);<BR>
fillellipse(x+13,y,8,8);<BR>}</P>
<P>void putstar(void)<BR>{<BR> int
seed=1993;<BR> int
i,dotx,doty,h,w,color,maxcolor;<BR>
maxcolor=getmaxcolor();<BR> w=getmaxx();<BR>
h=getmaxy();<BR> srand(seed);<BR>
for(i=0;i<5000;++i)<BR> {<BR>
dotx=1+random(w-1);<BR>
doty=1+random(h-1);<BR>
color=random(maxcolor);<BR>
putpixel(dotx,doty,color);<BR> }<BR>
srand(seed);<BR>}</P>
<P>void draw_earth()<BR>{<BR> int midx,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -