专业课程设计I报告 - B09040208(4)

2019-05-17 16:13

2.还有就是在老师线程中,当老师时间不足或者检查够作业离开后,将空闲老师数量减一,输出离开消息,但是并没有使这个老师线程消亡,与世就出现了老师离开后,后面还有学生成功的找到他为自己检查。为了解决这一问题,当老师离开的时候就将老师的状态改为忙,这样,学生就不会再去找这个老师检查作业了。

七、专业课程设计总结

通过这次实验,我对java语言有了更进步一步的了解,通过不断地查阅,好像自己重新学了一遍java 语言一样。

这次实验,刚开始是没有头绪的,一直在图书馆查资料,也不知道从何着手,后来老师给了C++版本的,回去装了 LUNIX虚拟机,把老师的给的运行了一下才有了一些头绪。

后来和同学一起研究讨论,一点点的硬是把C++语言改成了java语言,其实对我们来说这是个挺艰难的事情,这个时候才发现自己学了一个学期java 真的好像白学了一样。这次实验让我发现了自己对java掌握的严重不足,其实理解了,还是觉得挺简单的,以后我会继续努力学习java这门语言

图形动画制作

一、 课题内容和要求

用图形函数设计动画,一个人在公路上奔跑,这时从屏幕右端开出一辆卡车,

最终将人撞倒了。

基本要求:

(1) 编程实现该动画;

(2) 实物演示时要求讲出程序原理; (3) 程序操作友好、界面清晰。 提高要求:

(1) 人和卡车的图形设计轮廓明晰,动画显示清楚、逼真; (2) 能够给动画赋予色彩,甚至实现三维效果。

二、需求和思路分析

此程序用C语言实现 使用的是EasyX 库

一个人在路上跑,然后出现一个行驶的车将其撞倒,可将这个程序分为两个部分,一部分是奔跑的人,一部分是行驶的车。最后将两部分组合。主要任务便是构造人,小车,以及用getimage,和putimage函数制造运动的效果。

奔跑的人:

由于人奔跑时有多个动作,所以需要画多个小人的图形,再组合起来形成奔跑的动作。

行驶的小车:

行驶的小车只需要画一个小车即可。 人与小车的结合:

本程序的即在这部分,为了使人与车能同时运动,故使用了嵌套的方法。人没跑一步小车也跑若干步。

Void far getimage(int x1,y1,int x2,y2,void *bitmap);

该函数将制定区域的图形从屏幕拷贝到内存区域。要复制的品目区域由左上角(x1,y1)和右下角(x2,y2)给出,它应当与imagesize函数中参数相同。Bitmap是一个void类型指针,需要复制的屏幕区域将保存在由他所指向的数组中。

void far putimage(int x,int y,void *bitmap,int op);

改函数将getimage函数保存的图形重新送回屏幕。参数(x,y)是回复显示图形左上角的位置,bitmap是指向void类型的指针,它指向用getimage函数复制的数组。参数op是一个整型数,是图形复制到屏幕上的显示模式。其取值有COPY_PUT,XOR_PUT等,前者是原样拷贝到屏幕,后者是与屏幕像素异或后拷贝。

如果使用XOR_PUT,则内存中的像素与当前屏幕上的像素进行异或操作。如果两个像素都为1,则相应的位置为0,从而使原来的图形小室。如果在复制一次,则会重新出现。利用这一特性,可以实现动画操作。

三、概要设计

步骤一:

用 line(),//直线函数

int points3[] = { }; fillpoly();//多边形填充函数 画车身;

用fillcircle()画车轮 步骤二:

用circle(); line();画小人 步骤三:

用getimage(&img1, x1, y1, x2,y2);getimage(&img2, x1, y1, x2, y2); 分别得到车的图像和人的图像并保存;

用getimage(&img3, x1, y1, x2,y2);得到背景色的空填充图片,功能类似于cleardevice()达到清屏的效果 步骤四:

分割屏幕的X轴像素,用i记录车与人行驶的像素长度,设为x 步骤五:

用for循环当想i

当i=x时,车与人相撞,此时画倒的小人 l

四、详细设计

#include // 就是需要引用这个图形库 #include

void main() {

initgraph(640,480); setcolor(BLUE); setlinestyle(PS_SOLID, NULL, 3); line(2,470,630,470);setfillstyle(GREEN, PATTERN_FILL, \

setlinestyle(PS_SOLID, NULL, 2);

int points3[] = { 30, 415, 30, 435,145,435,145,415,30, 415 }; fillpoly(5, points3); int points2[] = { 145, 390,160, 420, 160, 435,145,435,145, 390 };

fillpoly(5, points2);setcolor(RED);//line(30,415,40,400);line(30,415,145 ,415); fillcircle(50,450,15); fillcircle(130,450,15);setfillstyle(BLACK);

int points1[] = { 42, 404, 145, 404,145,415,30,415,42, 404 }; fillpoly(5, points1); //画小人 setlinestyle(PS_SOLID, NULL, 2); circle(450,415,10); line(443,413,448,413); line(452,413,457,413); line(447,420,453,420);

line(450,425,450,455); line(450,455,440,465); line(450,455,460,465); line(440,440,460,440); IMAGE img1,img2,img3; getimage(&img3, 30, 30, 135, 64); getimage(&img1, 30, 390, 135, 76); getimage(&img2, 440, 405, 21, 63); for(int i=1;i<140;i++) {

putimage(29+i, 390, &img1); if(i<139)

{putimage(440-i, 405, &img2);

Sleep(20);putimage(28+i, 390, &img3);putimage(441-i, 405, &img3); //cleardevice(); } else {

putimage(31+i, 390, &img1); circle(510-i,455,10);

line(470-i,455,500-i,455);line(512-i,449,516-i,452);line(515-i,458,511-i,461);line(505-i,451,505-i,459);

line(485-i,445,485-i,465); line(470-i,455,460-i,465); line(470-i,455,460-i,445); Sleep(50);putimage(28+i, 390, &img3); putimage(33+i, 390, &img1); //后面的五句是模拟车撞完人以后惯性停下来的过程 Sleep(80);putimage(28+i, 390, &img3); putimage(35+i, 390, &img1); Sleep(100);putimage(28+i, 390, &img3); putimage(37+i, 390, &img1); Sleep(110);putimage(28+i, 390, &img3); putimage(38+i, 390, &img1); Sleep(120);putimage(28+i, 390, &img3); putimage(39+i, 390, &img1); Sleep(150);putimage(28+i, 390, &img3); putimage(40+i, 390, &img1); } }

getch(); closegraph();

} }

五、测试数据及其结果分析

运行中:小车向右行驶,人向左行驶中

人与小车相撞后人倒下:

六、调试过程中的问题

程序中所用到的putimage()函数是通过IMAGE定义一个指针,然后后面的getimage()函数又把指针所指的图像显示在相应的位置上,所以刚开始出现了拖尾现象,后来我想到了使用清屏函数cleardevice();,可是那样的话就把公路这个图

像也清楚掉了,所以后来使用与图像相同大小的背景色来达到清屏功能。

void putimage(

int X, // 绘制位置的 x 坐标 int Y, // 绘制位置的 y 坐标

IMAGE *Img, // 要绘制的 IMAGE 对象指针 );

void getimage(

IMAGE* Img, // 保存图像的 IMAGE 对象指针 int X, // 要获取图像区域左上角 x 坐标 int Y, // 要获取图像区域的左上角 y 坐标 int Width, // 要获取图像区域的宽度 int Height // 要获取图像区域的高度 );

七、专业课程设计总结

通过此次实验,我对C语言与图像动画的方面有了更进一步的了解,也对图形学这门课有了更进一步的熟悉,因为学过一个学期的图形学课程,但上机实践的机会却很少,而这一次试过这个课程设计,虽然说是简单,但是还是再次巩固了我对图形学的学习。我翻阅了去年学的教科书,由于我迟迟装不上图形库头文件函数,而TC又太麻烦,所以我使用的是EasyX 库,这是我在网上查到的一个,从

中也学到了很多。


专业课程设计I报告 - B09040208(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:钻机装置及器具项目IPO上市咨询(2013年最新细分市场+募投可研+招

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: