新年好礼玫瑰花和祝福卡.docx
《新年好礼玫瑰花和祝福卡.docx》由会员分享,可在线阅读,更多相关《新年好礼玫瑰花和祝福卡.docx(22页珍藏版)》请在冰豆网上搜索。
新年好礼玫瑰花和祝福卡
计算机技术基础课程设计
C语言
设计报告
题目:
新年好礼:
玫瑰花和祝福卡
学院:
化学工程学院
专业:
制药工程
班级:
050607
姓名:
黄晶
指导老师:
顾煜新
日期:
2007年1月10日
题目:
新年好礼:
玫瑰花和祝福卡
一、选题背景
新年将至,送一份祝福给爱你的人和你爱的人,让他(她)们感受到虽然相隔很远,但是我们依然牵挂着他(她)们。
玫瑰花是美丽的代表,贺卡是我们发送祝福的最好表现形式。
所以我将画图的程序来实现玫瑰花以及贺卡的图像。
二、设计思想
本程序将利用图形库函数、数学函数和标准I/O函数并初始化图形系统来实现函数的运行。
图形中玫瑰花的形状是利用画图函数并根据其坐标来实现的,图形中的弧线
是利用曲线函数实现的。
贺卡中对月亮升起的实现,引进库函数,利用调用函数的形式,用一个随机函数产生天空中闪烁的星星,并用随机函数产生烟火。
用setcolor填充各图形的颜色。
用circle函数画圆。
用lineto画直线。
程序中的的调用函数大多是我们没有学过的。
initgraph/*初始化图形系统*/
cleardevice/*清除图形屏幕*/
hua/*自己定义的函数*/
;setcolor/*设置当前画图颜色*/
rectangle/*话矩形边框*/
getch/*输入字符*/
closegraph/*关闭图形系统*/
floodfill/*填充一个有界区域*/
三、主要解决问题:
1、主要问题及解决方法:
(1)一个简单的玫瑰在这个语句(rc(x+64,y-57,300,490,17);)中出现了颜色外泻。
解决办法:
利用floodfill函数实现填充一个有界函数。
(2)图形的绘制
用while(!
kbhit())来实现循环,用预编译命令引进库函数并通过initgraph初始化图形系统。
利用circle函数画圆。
(3)颜色的设置:
多次调用函数
2、技术关键
✓ 升起的月亮的实现
✓ 图形的绘制
✓ 灵活调用函数
四、程序流程图:
start函数
调用say
调用dmoon
调用dstar
调用dstar,
调用fire函数
结束
五、程序清单:
#include
#include
#include
#include35
#include"stdlib.h"
#include"stdio.h"
#include"conio.h"
#include"graphics.h"
#defineFNX(x)(int)(xo+(x)*1.0)
#defineFNY(y)(int)(getmaxy()-(yo+(y)*1.0))
#defineFNX2(phi)cos(phi)*ac-sin(phi)*bs
#defineFNY2(phi)cos(phi)*as+sin(phi)*bc
#definePI3.1415926
structmoon
{
intx;
inty;
}moon;
structdramnstar
{
intx;
inty;
intcolor;
}star[200];
voidstart();
voidbgroud();
voiddtree();
voidboy();
voidgirl();
voidsay();
voiddstar();
voidfire();
voiddmoon();
voiddtext();
voidstart()
{
intgd=DETECT,gm;
initgraph(&gd,&gm,"d:
\\tc");
randomize();
cleardevice();
setbkcolor(3);
setcolor(4);
settextstyle(0,0,2);
outtextxy(100,160,"Thereisagiftforyou.");
settextstyle(0,0,2);
outtextxy(100,240,"Pleaseinputanykeytostart.");
}
voidbgroud()
{
cleardevice();
setbkcolor(0);
setcolor(15);
setlinestyle(0,0,3);
rectangle(0,400,640,480);
setfillstyle(1,15);
floodfill(480,450,15);
}
voiddstar()
{
inti;
for(i=0;i<300;i++)
{
star[i].x=random(640);
star[i].y=random(400);
star[i].color=random(13)+1;
}
for(i=0;i<200;i++)
putpixel(star[i].x,star[i].y,star[i].color);
}
voiddtree()
{
setcolor(8);
line(150,280,150,390);
line(150,390,130,404);
line(130,404,190,404);
line(190,404,170,390);
line(170,390,170,280);
line(170,280,150,280);
setfillstyle(5,8);
floodfill(160,300,8);
setcolor
(2);
line(160,40,60,280);
line(60,280,260,280);
line(260,280,160,40);
setfillstyle(1,2);
floodfill(200,200,2);
setcolor(7);
arc(160,0,265,275,120);
arc(160,0,262,278,160);
arc(160,0,260,280,210);
}
voidboy()
{
setcolor(15);
ellipse(380,334,0,360,60,70);
setfillstyle(1,15);
floodfill(380,334,15);
setcolor(7);
circle(380,238,30);
floodfill(380,238,7);
setcolor(0);
circle(370,230,2);
circle(390,230,2);
setfillstyle(1,0);
floodfill(370,230,0);
floodfill(390,230,0);
circle(380,248,4);
floodfill(380,248,0);
setcolor(15);
circle(380,248,2);
setfillstyle(1,15);
floodfill(380,248,15);
}
voidgirl()
{
setcolor(15);
ellipse(480,340,0,360,50,64);
setfillstyle(1,15);
floodfill(480,340,15);
setcolor(7);
circle(480,256,24);
floodfill(480,256,7);
setcolor(0);
arc(472,250,30,160,4);
arc(488,250,10,140,4);
setcolor(12);
circle(470,259,5);
circle(490,259,5);
setfillstyle(1,12);
floodfill(470,259,12);
floodfill(490,259,12);
setcolor(0);
arc(480,260,250,286,10);
}
voiddmoon()
{
inti,j;
moon.x=20;
moon.y=340;
for(i=0;i<10;i++)
{
setcolor(14);
circle(moon.x,moon.y,20);
setfillstyle(1,14);
floodfill(moon.x,moon.y,14);
delay(99999999);
if(i!
=9)
{
setcolor(0);
circle(moon.x,moon.y,22);
setfillstyle(1,0);
floodfill(moon.x,moon.y,0);
for(j=0;j<5;j++)
{
star[j].x=random(40)+moon.x-20;
star[j].y=random(40)+moon.y-20;
star[j].color=random(13)+1;
putpixel(star[j].x,star[j].y,star[j].color);
}
}
moon.x+=(int)20*sin(i*PI/18);
moon.y-=35;
}
}
voidsay()
{
setcolor(15);
setfillstyle(1,15);
ellipse(410,200,0,360,10,5);
ellipse(430,170,0,360,20,10);
ellipse(488,120,0,360,100,30);
floodfill(410,200,15);
floodfill(430,170,15);
floodfill(480,120,15);
}
voidfire()
{
intb,j;
intx0,y0;
x0=random(40)+260;
y0=random(40)+30;
b=random(10);
setlinestyle(0,0,1);
j=random(200)+30;
setcolor(4);
line(x0+j,y0+b-10,x0+j,y0+b-20);
line(x0+j,y0+b+10,x0+j,y0+b+20);
setcolor(12);
line(x0+j-10,y0+b,x0+j-20,y0+b);
line(x0+j+10,y0+b,x0+j+20,y0+b);
setcolor(14);
line(x0+j-10,y0+b-10,x0+j-20,y0+b-20);
line(x0+j+10,y0+b+10,x0+j+20,y0+b+20);
setcolor
(2);
line(x0+j-10,y0+b+10,x0+j-20,y0+b+20);
line(x0+j+10,y0+b-10,x0+j+20,y0+b-20);
sleep
(1);
setcolor(0);
line(x0+j,y0+b-10,x0+j,y0+b-20);
line(x0+j,y0+b+10,x0+j,y0+b+20);
line(x0+j-10,y0+b,x0+j-20,y0+b);
line(x0+j+10,y0+b,x0+j+20,y0+b);
line(x0+j-10,y0+b-10,x0+j-20,y0+b-20);
line(x0+j+10,y0+b+10,x0+j+20,y0+b+20);
line(x0+j-10,y0+b+10,x0+j-20,y0+b+20);
line(x0+j+10,y0+b-10,x0+j+20,y0+b-20);
}
voiddtext()
{
inta=1;
inti;
setcolor(4);
ellipse(140,430,0,360,140,30);
setfillstyle(1,15);
floodfill(500,440,4);
setcolor(RED);
settextstyle(0,0,1);
outtextxy(450,460,"Madebyjing.");
do
{
setcolor(a);
settextstyle(0,0,2);
outtextxy(20,420,"Happynewyear!
");
setcolor(a+1);
settextstyle(0,0,1);
outtextxy(400,110,"Mydarlingguy:
");
outtextxy(405,120,"Iwillloveyouforever!
");
setcolor(a-1);
outtextxy(450,460,"Madebyjing.");
for(i=0;i<30;i++)
{
star[i].x=random(100)+110;
star[i].y=random(140)+140;
star[i].color=random(13)+1;
}
for(i=0;i<40;i++)
{
putpixel(star[i].x,star[i].y,star[i].color);
putpixel(star[i].x+1,star[i].y+1,star[i].color);
putpixel(star[i].x-1,star[i].y+1,star[i].color);
}
fire();
for(i=0;i<40;i++)
{
putpixel(star[i].x,star[i].y,2);
putpixel(star[i].x+1,star[i].y+1,2);
putpixel(star[i].x-1,star[i].y+1,2);
}
a++;
if(a==14)
a=1;
}while(kbhit()==0);
}
/*画旋转的椭圆*/
voidelli(intxo,intyo,inta,intb,doubletheta)
{
inti;
doubleda,c,s,ac,as,bc,bs,xf,yf,phi,x,y;
theta=theta*0.01745;
da=3*0.1745;
c=cos(theta);s=sin(theta);
ac=a*c;as=a*s;bc=b*c;bs=b*s;
x=FNX2(0);y=FNY2(0);
moveto(FNX(x),FNY(y));
for(i=1;i<=360;i++)
{
phi=i*da;xf=x*cos(phi)*0.1;yf=b*sin(phi)*0.1;
x=FNX2(phi);y=FNY2(phi);
lineto(FNX(x),FNY(y));
}
}
/*花*/
voidhua(intx,inty)
{
registeri;
/*画粉红色玫瑰*/
setcolor(12);
arc(x+65,y-60,150,350,8);
arc(x+66,y-54,300,470,8);
arc(x+65,y-56,30,230,10);
arc(x+64,y-57,300,490,17);
ellipse(x+73,y-30,250,450,27,40);
ellipse(x+59,y-30,100,290,27,40);
ellipse(x+65,y-40,140,270,20,30);
setfillstyle(SOLID_FILL,5);
floodfill(x+65,y-20,12);
/*画红色玫瑰*/
arc(x,y,150,350,12);
arc(x+1,y+8,280,470,12);
arc(x,y+2,30,230,16);
arc(x,y+3,80,240,28);
arc(x+2,y+8,180,330,22);
arc(x-2,y+2,310,460,25);
ellipse(x-12,y+30,120,300,30,40);
ellipse(x+10,y+28,250,423,30,42);
ellipse(x-4,y+10,290,393,30,40);
setfillstyle(SOLID_FILL,4);
floodfill(x+5,y+31,12);
/*画紫色花骨朵*/
ellipse(x+120,y+5,0,360,15,25);
setfillstyle(SOLID_FILL,1);
floodfill(x+120,y,12);
/*画黄色花骨朵*/
ellipse(x-70,y+10,0,360,14,20);
setfillstyle(SOLID_FILL,14);
floodfill(x-70,y+10,12);
setcolor(10);
/*画红花花萼*/
ellipse(x-15,y+32,190,310,30,35);
ellipse(x+16,y+32,235,355,26,35);
ellipse(x,y+35,190,350,43,50);
arc(x,y+82,190,350,6);
setfillstyle(SOLID_FILL,2);
floodfill(x,y+75,10);
/*画粉花花萼*/
ellipse(x+50,y-48,190,320,22,50);
ellipse(x+80,y-48,220,350,22,50);
ellipse(x+65,y-28,180,360,36,50);
floodfill(x+65,y+18,10);
/*画主枝*/
for(i=0;i<3;i++)
{
ellipse(x-98,y+100+i,255,371,100,80);
ellipse(x-20,y+30+i,260,358,140,140);
ellipse(x+224,y+20+i,180,218,160,140);
}
/*画侧枝*/
ellipse(x+70,y+34,180,233,140,140);
ellipse(x,y+40,205,255,100,120);
ellipse(x+135,y-30,209,249,72,120);
ellipse(x,y+20,263,301,100,120);
ellipse(x+85,y-10,278,305,100,120);
ellipse(x+100,y-62,282,308,90,120);
ellipse(x-50,y-10,277,314,30,120);
ellipse(x+70,y+80,222,266,52,120);
ellipse(x-60,y-45,229,266,52,120);
ellipse(x+79,y-45,229,266,52,120);
ellipse(x+84,y,224,273,52,120);
ellipse(x+110,y+40,240,282,100,120);
/*画紫花骨朵花萼*/
ellipse(x+120,y-6,200,340,17,25);
ellipse(x+120,y+7,160,380,17,27);
floodfill(x+122,y+30,10);
/*画黄花骨朵花萼*/
ellipse(x-70,y+15,140,390,17,20);
ellipse(x-75,y-10,205,340,10,30);
ellipse(x-60,y-10,195,340,5,30);
floodfill(x-70,y+32,10);
/*画叶*/
/*画右边的叶子*/
elli(x+168,y+282,10,20,-40);
elli(x+160,y+252,8,16,260);
elli(x+145,y+270,8,16,-15);
elli(x+156,y+224,10,20,-45);
elli(x+150,y+200,8,16,270);
elli(x+135,y+220,8,16,-10);
elli(x+146,y+144,8,16,-80);
elli(x+130,y+130,6,12,235);
elli(x+125,y+154,7,14,-10);
elli(x+78,y+98,6,12,-90);
elli(x+60,y+90,5,10,180);
elli(x+70,y+109,5,10,-45);
/*画左边的叶子*/
elli(x-125,y+270,12,24,60);
elli(x-95,y+270,10,20,10);
elli(x-110,y+245,10,20,90);
elli(x-105,y+220,10,20,45);
elli(x-100,y+190,8,16,135);
elli(x-75,y+210,8,16,-45);
/*画中间的叶子*/
elli(x+65,y+190,10,20,-45);
elli(x+40,y+185,8,16,0);
elli(x+55,y+165,8,16,90);
}
/*主程序*/
main()
{
intdriver=VGA,mode=VGAHI;
initgraph(&driver,&mode,"C:
\\TC");
cleardevice();
hua(450,90);
;setcolor(10);
rectangle(0,0,639,479);
getch();
closegraph();
start();
getch();
bgroud();
dstar();
dtree();
boy();
girl();
dmoon();
say();
dtext();
getch();
}
六、程序设计说明
1、设计优点:
实现了根据给定的坐标及函数完成了玫瑰花及其枝、叶的绘图。
并根据指定的颜色填色,运用了函数调用及for循环知识,达到了巩固和提高C语言运用能力的目的。
图形比较优美,富有动感,且程序简单。
多个函数的调用使