Builder圣诞贺卡课程论文.docx
《Builder圣诞贺卡课程论文.docx》由会员分享,可在线阅读,更多相关《Builder圣诞贺卡课程论文.docx(22页珍藏版)》请在冰豆网上搜索。
Builder圣诞贺卡课程论文
华南师范大学增城学院
课程论文
题目:
Builder版圣诞贺卡
课程名称多媒体课程设计
考查学期2010/2011学年第一学期
考查方式课程论文
姓名吴斌
学号20080601412
专业软件工程
成绩
指导教师
目录
一、需求分析1
1、现状分析1
2、开发目的1
二、概要设计2
1、整体设计理念2
2、整体设计理念说明2
三、详细设计3
1、画卷展开3
2、淡出淡入3
3、鞭炮人3
4、碰撞雪球4
5、圣诞老人、圣诞树移动4
6、可燃鞭炮4
四、特色及使用4
特色4
使用方法5
五、调试报告5
1、展开的欢迎画卷5
2、鞭炮人过渡界面6
3、贺卡内容界面6
六、课程设计总结7
附录8
1、欢迎界面代码8
2、内容界面代码10
3、泡泡界面代码14
一、需求分析
1、现状分析
在喜庆的节日里,你会给家人、朋友、同学等发去一张贺卡么?
我相信,大部分人都会用贺卡去表达我们真诚的祝福。
每逢节日,网上传递的贺卡如雪花般飘落各地。
现在,网上的各种各样的贺卡有很多,有网页的、flash的、视频的、邮件的等等。
可见,贺卡已经成为我们的文化、生活中的重要的一部分。
贺卡的创意,源于我们的创作;贺卡的创意,体现我们的心意。
独特的贺卡传递着我们特别的心意,给友人、亲人一张特别的贺卡,我相信你的友人、亲人会有更甜蜜的幸福。
源于此,我着手用编程软件去制作贺卡。
2、开发目的
在圣诞节之前,QQ邮箱里就载满了朋友们发来的各式各样的贺卡。
每个人的贺卡在内容上都有着自己的特色。
我也想回复一封具有自己独特风格的贺卡。
自己对画画、作文等都不擅长,故我希望能从形式上创新。
结合自己的专业,我决定用编程软件去编写一个程序贺卡。
同时,在这学期中我们在多媒体课程中,学会了比较多图像处理、影像处理等方面的知识,可以方便我制作程序贺卡。
二、概要设计
1、整体设计理念
2、整体设计理念说明
在第一部分的欢迎界面中,有换卷的展开,同时该窗体应用了淡出淡入的效果。
在第二部分的过渡中,有个鞭炮小人,自燃自爆后,四散地爆发出贺卡内容里面的碰撞雪球,从而引出贺卡的主题内容。
在第三部分的贺卡内容中,有以下的几点内容:
(1)流动祝福字。
(2)碰撞雪球,可碰壁和相互碰撞。
(3)圣诞树、圣诞老人,他们都是可移动的,但是移动之后会慢慢滑落到窗体底部。
(4)回忆视频,是与朋友们的一些回忆照片。
(5)可燃鞭炮,单击鞭炮之后,鞭炮会燃烧。
音乐是贯穿整个贺卡的,没个地方的配音都是精心挑选的。
三、详细设计
具体的设计可参阅源程序代码,在此,我只对几部分,我认为比较难实现的效果作简单的阐述。
1、画卷展开
将原图利用图画软件分割为3部分,然后利用时钟配合,对载放画卷的那些图像框的边界和位置进行调整,实现画卷展开的效果。
2、淡出淡入
利用窗体的透明属性AlphaBlend和AlphaBlendValue,然后配合时钟,改变AlphaBlendValue的值,达到从透明到显示到透明的过程,从而实现淡出淡入的效果。
3、鞭炮人
利用老师讲过的动画方法,将多张图片递增命名,然后再通过时钟配合调用多张图片,实现鞭炮人的动画效果。
4、碰撞雪球
碰撞雪球的灵感是来源于一些泡泡屏保,很久的时候看见那些漂亮的泡泡屏保就一直希望自己能亲手弄一些。
由于自己的画画水平不好,这里的雪球是抠图得到的,比较粗糙。
雪球碰壁,是通过设定几个变量,结合时钟,标识雪球是否越过某边界,越过则改变移动增量。
雪球相碰,是计算出雪球的中心点,当雪球之间的中心点小于等于直径的时候,雪球改变移动增量。
从而实现雪球碰撞的效果。
5、圣诞老人、圣诞树移动
这个的实现可以说是有点模仿画图工具中的画笔实现的。
在通过坐标判定,确定鼠标落在图像框并按下左键之后,就像画图工具的画笔移动那样,移动图像框。
6、可燃鞭炮
点击之后,开启音乐,通过时钟改变窗体背景色实现闪屏效果,同时,鞭炮的图像框不断地改变其高度,实现鞭炮消逝。
四、特色及使用
特色:
1、一款编程软件设计的贺卡,比较新颖。
2、音乐贯穿整个贺卡,精心挑选配乐。
3、贺卡各部分的之间的过渡衔接比较好。
4、碰撞雪球有泡泡屏保的风格。
5、贺卡中的动画效果比较多。
使用方法:
1、本贺卡适合在16:
9的屏幕下演示,在其它比例的屏幕下可能会有偏差。
2、利用C++Builder打开Project1.bpr,运行,即可;或直接打开Project1.exe,即可。
3、欢迎界面和过渡部分为自动播放。
4、贺卡内容中:
(1)圣诞老人和圣诞树是可以移动的,同时,如果移动到窗体底部上面的位置时,它们会滑落到与窗体底部相平。
(2)双击其中的对象(如圣诞老人、圣诞树等)可使其隐藏。
(3)单击其中的鞭炮,可使鞭炮有燃烧的效果。
(4)其中的碰撞雪球和回忆相册都是自动播放的。
五、调试报告
1、展开的欢迎画卷
2、鞭炮人过渡界面
3、贺卡内容界面
六、课程设计总结
做完本次的课程设计之后,感觉学到的东西比较多。
在这张贺卡里面的东西,基本上都是通过自己思考去完成的,并没有参考其它地方的源代码,所以,做起来的时候,遇到的困难挺多的。
首先从选材方面说起,在选材方面花的时间似乎挺长的,下载的图片、音效素材有200多MB。
同过整理挑选后,然后才应用到程序中去。
而且很多素材还不是现成的,需要我去从其中抠出一部分,或截取一部分,甚至有些还需要将其分离开来。
贺卡中的大部分图片就是抠图得到的,音乐大部分都是截取而来的,一些动画是从GIF图片分解得到的。
选取素材真的是一件比较繁杂的事情,很多素材必须要自己加工才会适合自己的要求。
在制作方面,由于已经比较习惯用C++Builder去编程了,所以那些编程语言方面的困难比较少。
但是,在算法方面的困难则比较多的,因为每种效果的实现都需要自己去琢磨、思考如何能更好地达到预期的效果。
在这些实现的效果算法中很多都是结合了多媒体课程中学到的知识去实现的。
如:
碰撞雪球就参考过多媒体课程中的那2个物体碰撞的范例;抠图、截取音乐都是多媒体课程中有学习的;贺卡内容中的对象移动就参考了画图软件中笔的实现……
每门课程都有其应用之处,只要我们多思考,就能把课程中的知识应用到我们的实际当中。
同时,编程是非常灵活多变的,我们预期的效果,可能有多种实现的算法、方法,只有我们不断地探索才能更好地将我们预期的效果表现出来。
做完本次的课程设计之后,感觉自己,无论从编程语言、技巧方面,还是算法设计方面都有了一定的提高。
附录:
1、欢迎界面代码
//---------------------------------------------------------------------------
#include
#pragmahdrstop
#include"Unit1.h"
#include"pattern.h"
//---------------------------------------------------------------------------
#pragmapackage(smart_init)
#pragmaresource"*.dfm"
TForm1*Form1;
//---------------------------------------------------------------------------
__fastcallTForm1:
:
TForm1(TComponent*Owner)
:
TForm(Owner)
{
}
//---------------------------------------------------------------------------
void__fastcallTForm1:
:
Timer1Timer(TObject*Sender)
{
statick=0;
intAl;
if(k==0)//开场时
{
Al=AlphaBlendValue;
Al+=5;
if(Al<255)
AlphaBlendValue=Al;
else
{
k++;
AlphaBlendValue=255;
MediaPlayer1->Close();
MediaPlayer1->FileName="105.mid";
MediaPlayer1->Open();
MediaPlayer1->Play();
}
}
elseif(k==1)//卷轴拉开
{
Image1->Left-=5;
Image1->Width+=10;
Image2->Left+=5;
if(Image2->Left>=712)
{
Image2->Left=712;
k++;
}
}
elseif(k==2)
{Sleep(4000);
k++;}
elseif(k==3)//退场时
{
Al=AlphaBlendValue;
Al-=2;
if(Al>0)
AlphaBlendValue=Al;
else
{
MediaPlayer1->Close();
k++;
AlphaBlendValue=0;
Form2->Show();
}
}
}
//---------------------------------------------------------------------------
void__fastcallTForm1:
:
FormShow(TObject*Sender)
{//爆竹
MediaPlayer1->FileName="Fx13323_grenade2.mp3";
MediaPlayer1->Open();
MediaPlayer1->Play();
}
//---------------------------------------------------------------------------
2、内容界面代码
//---------------------------------------------------------------------------
#include
#pragmahdrstop
#include"pattern.h"
#include"bubble.h"
//---------------------------------------------------------------------------
#pragmapackage(smart_init)
#pragmaresource"*.dfm"
intkx,ky,kb;
TForm2*Form2;
//---------------------------------------------------------------------------
__fastcallTForm2:
:
TForm2(TComponent*Owner)
:
TForm(Owner)
{
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
FormClose(TObject*Sender,TCloseAction&Action)
{
Application->Terminate();
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
FormShow(TObject*Sender)
{
Timer1->Enabled=1;
MediaPlayer1->FileName="Fx13323_grenade2.mp3";
MediaPlayer1->Open();
MediaPlayer1->Play();
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Timer1Timer(TObject*Sender)
{
staticintk=0,tu=11;
if(k==0)
{Timer2->Enabled=1;
Image1->Picture->LoadFromFile(AnsiString(IntToStr(tu)+".bmp"));
tu++;
if(tu>=19)
{
Image1->Visible=0;
Panel1->Visible=1;
Label1->Visible=1;
this->Timer1->Interval=20;
MediaPlayer1->Stop();//转换音乐
MediaPlayer1->Close();
MediaPlayer1->FileName="MusicMerry.mp3";
MediaPlayer1->Open();
MediaPlayer1->Play();
k++;
Form3->Show();
}
}
elseif(k==1)
{Timer2->Enabled=0;
this->Color=clWhite;
Label1->Left=Label1->Left-1;//流动字
if((Label1->Left+Label1->Width)<0)
Label1->Left=Panel1->Width;
}
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
FormCreate(TObject*Sender)
{
this->DoubleBuffered=1;
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Timer2Timer(TObject*Sender)
{//闪屏
staticintci=1;
if(ci%3==1)
this->Color=TColor(RGB(253,83,96));
if(ci%3==2)
this->Color=clWhite;
if(ci%3==0)
this->Color=TColor(RGB(251,255,91));
ci++;
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Image4Click(TObject*Sender)
{
MediaPlayer2->FileName="鞭炮爆竹声.mp3";
MediaPlayer2->Open();
MediaPlayer2->Play();
Timer3->Enabled=1;
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Timer3Timer(TObject*Sender)
{
staticintcl=1;
if(cl%3==1)
Form3->Color=TColor(RGB(253,83,96));
if(cl%3==2)
Form3->Color=clWhite;
if(cl%3==0)
Form3->Color=TColor(RGB(251,255,91));
Image4->Height=Image4->Height-3;
if(Image4->Height<=0)
Image4->Visible=0;
cl++;
if(cl>120)
{Timer3->Enabled=0;
Form3->Color=clWhite;}
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Image2DblClick(TObject*Sender)
{
Image2->Visible=0;
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Image3DblClick(TObject*Sender)
{
Image3->Visible=0;
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Image2MouseDown(TObject*Sender,
TMouseButtonButton,TShiftStateShift,intX,intY)
{
kx=X;
ky=Y;
if(Button==mbLeft)
kb=1;
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Image2MouseMove(TObject*Sender,TShiftStateShift,
intX,intY)
{
if(kb==1)//老人移动
{Image2->Top=Form2->Image2->Top+Y-ky;
Image2->Left=Form2->Image2->Left+X-kx;}
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Image2MouseUp(TObject*Sender,TMouseButtonButton,
TShiftStateShift,intX,intY)
{
kb=0;
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Image3MouseDown(TObject*Sender,
TMouseButtonButton,TShiftStateShift,intX,intY)
{
kx=X;
ky=Y;
if(Button==mbLeft)
kb=2;
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Image3MouseMove(TObject*Sender,TShiftStateShift,
intX,intY)
{
if(kb==2)//树移动
{Image3->Top=Form2->Image3->Top+Y-ky;
Image3->Left=Form2->Image3->Left+X-kx;}
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Image3MouseUp(TObject*Sender,TMouseButtonButton,
TShiftStateShift,intX,intY)
{
kb=0;
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Timer4Timer(TObject*Sender)
{
if(Image3->Top+Image3->HeightHeight)//滑落
Image3->Top=Image3->Top+1;
if(Image2->Top+Image2->HeightHeight)
Image2->Top=Image2->Top+1;
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Panel1DblClick(TObject*Sender)
{
Panel1->Visible=0;
}
//---------------------------------------------------------------------------
void__fastcallTForm2:
:
Label1DblClick(TObject*Sender)
{
Label1->Visible=0;
}
//---------------------------------------------------------------------------
3、泡泡界面代码
//---------------------------------------------------------------------------
#include
#pragmahdrstop
#include"bubble.h"
#include"pattern.h"
#include
//---------------------------------------------------