资源描述
计算机技术基础课程设计
C语言
设计报告
学院:机电工程学院
专业:工业设计
班级:060106
姓名:王 鑫
指导教师:韩志明
设计日期:2007年7月10日
题目:用C语言制作圣诞贺卡
一、选题背景:
圣诞将至,同学们正为给亲人朋友准备什么样的礼物而发愁,心里琢磨,要是能亲手制作一份礼物送给老师同学那该有多好,正好我们学习了c语言,所以我设计了这张圣诞卡赠给我敬爱的老师和同学们,希望大家在新的一年里工作顺利,学业进步。
二、设计思想:
本程序主要是用图形的绘制,以及对月亮升起的实现。引进库函数,并初始化图形系统。才用调用函数的形式,用一个随机函数产生天空中闪烁的星星,并用随机函数产生烟火。用setcolor填充各图形的颜色。用circle函数画圆。用lineto画直线。
三、程序流程图
开始
主函数
说明所调用的函数
调用start函数
设置起始语句
调用bgroud函数
画出地面
调用dstar函数
画出满天彩星
调用dtree函数
画出绿色小树
调用boy|girl函数
画出男孩女孩
调用dmoon函数
画出升起的月亮
调用say函数
设置男孩说话内容
设置fire函数
画出绚丽的烟火
调用dtext函数
设置卡片下标
调用fire函数
结束
四、程序清单
#include"math.h"
#include"stdlib.h"
#include"stdio.h"
#include"conio.h"
#include"graphics.h"
#define PI 3.1415926
struct moon
{
int x;
int y;
}moon;
struct dramnstar
{
int x;
int y;
int color;
}star[200];
void start();
void bgroud();
void dtree();
void boy();
void girl();
void say();
void dstar();
void fire();
void dmoon();
void dtext();
void main()
{
start();
getch();
bgroud();
dstar();
dtree();
boy();
girl();
dmoon();
say();
dtext();
getch();
}
void start()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"d:\\tc");
randomize();
cleardevice();
setbkcolor(3);
setcolor(4);
settextstyle(0,0,2);
outtextxy(100,160,"There is a gift for you.");
settextstyle(0,0,2);
outtextxy(100,240,"Please input any key to start.");
}
void bgroud()
{
cleardevice();
setbkcolor(0);
setcolor(15);
setlinestyle(0,0,3);
rectangle(0,400,640,480);
setfillstyle(1,15);
floodfill(480,450,15);
}
void dstar()
{
int i;
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);
}
void dtree()
{
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);
}
void boy()
{
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);
}
void girl()
{
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);
}
void dmoon()
{
int i,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;
}
}
void say()
{
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);
}
void fire()
{
int b,j;
int x0,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);
}
void dtext()
{
int a=1;
int i;
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,"Made by Wang Xin.");
do
{
setcolor(a);
settextstyle(0,0,2);
outtextxy(20,420,"Merry Chistmas!");
setcolor(a+1);
settextstyle(0,0,1);
outtextxy(400,110,"My darling :");
outtextxy(405,120,"I will always love you!");
setcolor(a-1);
outtextxy(450,460,"Made by Wang Xin.");
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);
}
五、主要解决问题的方法及技术关键
1、 主要问题及解决方法
1、图形的绘制
用while(!kbhit())来实现循环,用预编译命令引进库函数并通过initgraph初始化图形系统。利用circle函数画圆。
颜色的设置
2、 多次调用函数
3、 技术关键
ü 升起的月亮的实现
ü 图形的绘制
ü 灵活调用函数
六、设计结果说明
1、 设计优点:图形比较优美,富有动感,且程序简单。多个函数的调用使主函数看起来变得非常简单。并设计了人机对话的菜单,使得有参与的兴趣。程序有使用价值。
2、 设计不足:由于时间关系以及水平问题,图形绘制得比较粗糙,比较简单,不是很精美。
展开阅读全文