计算机科学与技术实训报告(共11页).doc
精选优质文档-倾情为你奉上郑州轻工业学院实 训 报 告实训名称: 计算机科学与技术专业暑假项目实训 姓 名: 秦振华 院 (系): 计算机与通信工程学院 专业班级: 计算机科学与技术专业 12-01班 学 号: 2 指导教师: 李晔 成 绩: 时间: 2013年 6月30日至2013 年7 月12日实训报告一项目:五子棋1.需求分析 1.1要有比较友好的界面,界面应显示那方落子,游戏提示,以及显示那方获胜。 1.2当游戏开始的时候,黑方先落子,随后白方落子,当鼠标点向某个点时,产生相应的棋子。 1.3当某一方在任意一条线上产生五个相同的棋子时,获胜,游戏提示,那方获胜,左键继续,右键退出。2.关键的技术 2.1棋盘的形成,背影颜色,棋子颜色形状的实现。 2.2棋子位置的确定 2.3某一方是否获胜的判断 2.4游戏结束界面和文字的实现 2.5 图形库的合理应用3.系统实现#include <graphics.h>#include <stdio.h>#include <string.h>#include <time.h>#include <conio.h>int xx=30,yy=50,t1x=30,t1y=20,t2x=557,t2y=20,kuan=50,banjing=10;char t130,*t2;int qi1515;int luo;void huaqipan()setbkcolor(RGB(0xEE,0xE6,0x85);cleardevice();setcolor(BLACK);outtextxy(t1x, t1y, "黑方落子");outtextxy(t2x, t2y, "鼠标左键落子,右键退出");setlinestyle(PS_SOLID,1);int i;for(i=0;i<=14;+i)line(xx,yy+i*kuan,kuan*14+xx,yy+i*kuan);for(i=0;i<=14;+i)line(xx+i*kuan,yy,xx+i*kuan,14*kuan+yy);int nagedian(int &x,int &y)int mx,my,i;int dist=,dist2;int z42;z00=(x-xx)/kuan,z01=(y-yy)/kuan;z10=z00;z11=z01+1;z20=z00+1;z21=z01;z30=z00+1;z30=z01+1;int dx=-1,dy;for(i=0;i<4;+i)if(zi0>=0&&zi0<=14&&zi1>=0&&zi1<=14)mx=zi0*kuan+xx;my=zi1*kuan+yy;dist2=(mx-x)*(mx-x)+(my-y)*(my-y);if(dist2<dist)dist=dist2;dx=zi0;dy=zi1;if(dx=-1) return 0;if(dist>(kuan/3)*(kuan/3) return 0;x=dx;y=dy;return 1;int win(int x,int y)int xx,yy,count;xx=x;yy=y;count=1;while(yy-1)>=0&&(xx-1)>=0&&qiyy-1xx-1=qiyyxx)/左上到右下yy=yy-1;xx=xx-1;while(yy+1)<=14&&(xx+1)<=14&&qiyy+1xx+1=qiyyxx)yy=yy+1;xx=xx+1;count+;if(count>=5) return 1;xx=x;yy=y;count=1;while(yy-1)>=0&&(xx+1)<=14&&qiyy-1xx+1=qiyyxx)/右上到左下yy=yy-1;xx=xx+1;while(yy+1)<=14&&(xx-1)>=0&&qiyy+1xx-1=qiyyxx)yy=yy+1;xx=xx-1;count+;if(count>=5) return 1;xx=x;yy=y;count=1;while(yy-1)>=0&&qiyy-1xx=qiyyxx)/上到下yy=yy-1;while(yy+1)<=14&&qiyy+1xx=qiyyxx)yy=yy+1;count+;if(count>=5) return 1;xx=x;yy=y;count=1;while(xx-1)>=0&&qiyyxx-1=qiyyxx)/左到右xx=xx-1;while(xx+1)<=14&&qiyyxx+1=qiyyxx)xx=xx+1;count+;if(count>=5) return 1;return 0;int play()MOUSEMSG m;while(1)m = GetMouseMsg();switch(m.uMsg)case WM_LBUTTONDOWN:int x=m.x,y=m.y,jx,jy;int ret=nagedian(x,y);jx=x,jy=y;if(ret=0)break;else if(qiyx!=-1)break;elseif(luo=1)qiyx=1;x=x*kuan+xx;y=y*kuan+yy;setfillcolor(BLACK);solidcircle(x,y,kuan/3);if(win(jx,jy) return luo;setcolor(BLACK);outtextxy(t1x, t1y, "白方落子");luo=0;else if(luo=0)qiyx=0;x=x*kuan+xx;y=y*kuan+yy;setfillcolor(WHITE);solidcircle(x,y,kuan/3);if(win(jx,jy) return luo;setcolor(BLACK);outtextxy(t1x, t1y, "黑方落子");luo=1;break;case WM_RBUTTONUP:return 2;/ 按鼠标右键退出程序int main()int winner;MOUSEMSG m;initgraph(759, 770);doFlushMouseMsgBuffer();luo=1;memset(qi,-1,sizeof(qi);huaqipan();winner=play();if(winner=2)return 0;setfillcolor(WHITE);solidrectangle(0,350,770,420);setbkcolor(WHITE);if(winner=0)outtextxy(280, 377, "白方胜(左键继续,右键退出)"); elseouttextxy(280, 377, "黑方胜(左键继续,右键退出)");while(1)m = GetMouseMsg();if(m.uMsg=WM_LBUTTONDOWN)break;else if(m.uMsg=WM_RBUTTONUP)return 0;while(1);closegraph();二项目:小熊时针1.需求分析 1.1要有比较好的界面,界面应显示一个钟表的图形,钟表上标有1到12的数字,有用直线描绘的长度,颜色不同的时针,分针,秒针,钟表还有两个耳朵,类似小熊的形状。 1.2当钟表运行起来的时候,显示的是当前的系统时间,随后秒针开始走动,更现实中的钟表一样走动。 1.3用鼠标点图形界面的时候,钟表不产生反应,继续走动,当按下键盘任意键时,钟表停止走动,退出当前界面,运行结束。2.关键技术 2.1图形库的合理应用2.2画小熊始终的轮廓,实时显示时针,分针,秒针。2.3按键盘任意键结束,关闭图形界面2.4根据当前时间计算时针、分针和秒针的角度,并绘制2.5 画时间间隔点,并标明数字1-123.系统实现#include <graphics.h> / 就是需要引用这个图形库#include <conio.h>#include<math.h>#include <time.h>void drawForm();void drawTime();int main()initgraph(640, 480);drawForm(); /画小熊时钟的轮廓while(!kbhit() /实时显示时针、分针和秒针,按任意键结束drawTime(); /显示时针、分针和秒针Sleep(500); /延时0.5秒 closegraph(); / 关闭图形界面return 0;void drawTime()struct tm *when; /定义tm类型的分解指针,该结构类型有成员项tm_year,tm_mon,tm_day,tm_hour,tm_min,tm_secdouble h,m,s; /h,m,s记录当前时间的时、分、秒static double hr,mr,sr; / hr,mr,sr记录时针分针和秒针对应的角度,为方便擦出痕迹,用静态存储static int flag=0; /第一次调用标记,需静态存储time_t now;/定义ttime(&now); /time()函数用于取1970年1月1日到现在经过的秒数,存入nowwhen=localtime(&now); /将now中用秒表示的时间转换为当地时间存入when.h=when->tm_hour;m=when->tm_min;s=when->tm_sec;if(flag!=0) /若不是第一次调用时间显示,需擦除上一次显示的指针痕迹setcolor(YELLOW);line(200,200,200+50*cos(hr),200+50*sin(hr);line(200,200,200+65*cos(mr),200+65*sin(mr);line(200,200,200+80*cos(sr),200+80*sin(sr);/根据当前时间计算时针、分针和秒针的角度,并绘制hr=(h*3600+m*60+s)/3600 * (PI/6)-PI/2;mr=(m*60+s)/60 * (PI/30) -PI/2;sr=s * (PI/30) - PI/2;setcolor(RED);line(200,200,200+50*cos(hr),200+50*sin(hr);setcolor(LIGHTGRAY);line(200,200,200+65*cos(mr),200+65*sin(mr);setcolor(BLUE);line(200,200,200+80*cos(sr),200+80*sin(sr);flag=1;void drawForm() double a;int i,t;char H10;setbkcolor(YELLOW);cleardevice();setcolor(BLUE);setfillstyle(BLUE,2); circle(200, 200, 100); / 画圆,圆心(200, 200),半径 100circle(200, 200, 103);floodfill(301, 200, BLUE);circle(96, 140, 20); floodfill(96, 140, BLUE);circle(304, 140, 20);loodfill(304, 140, BLUE);for(a=0,i=0;i<60;i+) / 画时间间隔点(分钟)putpixel(200+98*cos(-a), 200+98*sin(-a), GREEN);a=a+PI/30;for(a=0,i=0;i<12;i+) / 画时间间隔点(小时),并标明数字1-12setcolor(BLUE);circle(200+98*cos(-a), 200+98*sin(-a), 1);setfillstyle(LIGHTBLUE,2);floodfill(200+98*cos(-a), 200+98*sin(-a), BLUE); t=(15-i)%12;itoa(t,H,10);outtextxy(196+92*cos(-a), 193+92*sin(-a), H);a=a+PI/6;实训感想:第一天到第三天,我们先学习单链表,学习了单链表的表尾,表头插入新节点,建立升序单链表,插入,查找,删除指定的结点,单链表的逆置,老师给我们进行了详细的讲解,随后,同学们反复思考,询问,敲代码,逐步理解,觉得学的差不多,找老师验收。有了单链表的基础,我们接下来的几天开始写一个员工管理系统,用链表按照要求来写,相当于编程实现一个小的项目,可以实现添加员工信息,查询员工信息,显示员工信息,修改员工信息,删除员工信息,统计员工信息,重置系统密码,退出系统等。人生第一次写项目,刚开始不知如何下手,后来经过反复的思考,询问,上网搜索别人的代码,总算做出了个样子,虽然不是很理想,但毕竟做出来了,真的很开心。第四天到第十天,我们按照计划,将要学习图形界面,做出小熊闹钟,贪吃蛇,俄罗斯方块,五子棋这几个小游戏。学长们先写好代码,给我们进行了详细的讲解,由于涉及到很多我们不知道的新的东西,刚开始学的时候,挺困难的,看着一个个函数,一行行代码,它认识你,而你却不认识它,听学长讲的是津津有味,而我们听到是稀里糊涂,完全不知是怎么一回事,学长讲完了,我们还是不知所云。学长把代码发给我们,让我们自己研究学习,为了彻底知道每一个函数的作用,每一行代码的作用,我们反复上网查询,互相讨论,反复试验,朦朦胧胧,总算懂了点,知道了它是怎么实现的。过程是痛苦的,但痛苦过后的收获也是令人欣慰的。第十一天,我们学习了c语言与图像处理,开始学习用c语言画一些简单的图形,看着一个又一个图形,在我们的操作下,一个接着一个被我们画了出来,虽然不知是什么原理,但挺高兴的,越学越有兴趣了。第十二天到第十四天,我们开始学习聊天软件的实现,这牵连到网络方面的东西。老师特意请了我们学校创业中心的一个学长来给我们讲解关于网络方面的东西。学长呢现在在创业中心负责管理我们学校的网络系统,对网络方面的东西有自己独到的认识。学长先给我们讲解了一些关于图像处理的东西,随后,给我们讲解了一些关于ip地址呀,客户端,服务器,怎样用代理实现翻越防火墙,进入facebook网站,怎样用汇编语言更深层次的了解c语言,怎样用FlashFXP实现多个ftp的查看和相互间传送资料,怎样用c语言来实现简单的聊天呀等,了解了很多以前不知道的东西,收获了很多新的知识。经过这几天的学习,我认识到:1.学校教学不一定也不只是一个模式,单纯的老师讲,学生听的模式在现代、教育背景和课程改革下已经显的力不从心。教师在教学活动中的作用也从一个传授者逐渐转变为一个帮助学习者完成学习的帮助与辅导者。面对这种角色的转换,要求现代的教师应当能够正确认识自己、调整自己的教学思路、加深自己对教学理论的理解和在实际教学中的应用。在实际的教学活动中我们可以通过互动、竞争、完善等措施调动学生学习的积极性,激发学生学习的兴趣.。2、c语言在我们专业课程中是一门核心的课程,我们应该想法设法把c语言学好,也许刚开始学的时候,会有一点痛苦,但随着学习的不断深入,你把一个又一个的程序写出来并调试成功,你会慢慢的发现c语言的魅力所在,会为自己可以写出一个比较复杂的代码,而感到自豪,会为自己学会了一个算法而有一点成就感。学习是一个促进的过程,只有刚开始学好了,以后才会越学越容易,越学越上手,越学越想学,相反,如果一开始你就没有学好的欲望,也没有学习的兴趣,越往后,你会越学越吃力,越学越痛苦,越学越没兴趣,越学越不想学。所以,我们一开始就应该认真学好c语言。 同时,学习c语言是一个长期的过程,半途而废是不会走的很远的,只有坚持下来,不断学习,才会走得很远很远。也许刚开始你比其他人学得都要好,但半途你放弃了学习它,过不了多久,你就有可能被那个原先落后你,但一直坚持学习的人追赶上,所以,我们不仅要刚开始就学好,更应该长期坚持学下去,这样才会走得又快又好。还有,学习c语言,要学会与人交流,不懂的地方,要多问同学和老师,相同的问题,听听同伴的解题思路,在交流的过程,提高了别人也不断提高了自己。3.在实习的这几天,我慢慢地知道了原来c语言可以干这么多的事情呀,以前有些看似很神奇的东西,现在深入了解以后,觉得也不在那么的神奇,完全在自己的掌控下,可以慢慢实现的。以前经常玩的,热衷于的小游戏,在自己的掌控下,可以按照自己的想法来运行,这样的感觉就是不一样。同时也认识到了自身的不足,需要我们了解和学习的东西还有很多,我们应该不断获取新的知识,不断拓宽自己的眼界,活到老,学到老,应该成为我们为之奋斗的目标,只有这样,自己的人生才会更加完整。4.还学到了很多做人做事的道理,不仅懂得了要想在计算机这一行立足必须具备扎实的技术理论知识,还必须有与人沟通的能力!更懂得了尝试的重要性:很多事情不是听了说了就行的,只有去体验才会学会,即实践的重要性!上大学是在投资未来,大学生就业需要解决的问题:理论与操作,人际沟通,态度与心态,而且必须要有压力和自信!最重要的是要付出勤劳和汗水!5.我国的信息产业还很落后,随着社会的发展及国家的支持,网络必是社会发展的趋势,计算机将来会无处不在!学计算机是很有前途的,不管自己精通哪一项技术,前途都会是光明的!通过这次实习我知道了其实计算机就业范围不仅局限在网络工程师,程序员等上面,其实是很广泛的,比如说软件测试工程师(还是第一次听说)系统分析师就都是很有前途的职位,还有3G的到来必将带来无限的职位需求,将来的热门:人工智能、生物科技、无限局域,还有通信网与因特网的合并无不关系到计算机,无不蕴涵着无数的机会,无不关系到我们学计算机的每一个人!同时我们也有了更多的根据自己的兴趣选择的机会。IT业的发展速度惊人,我们必须不断的学习,现在的社会不再是一劳永逸,其它行业也是如此,我们必须不断的拿知识来武装自己,不然就会落伍!现在就业难原因其实在于竞争的加剧,为了在竞争中得到成功,我们必须时时刻刻学习! 总之,通过这次实训,学好到很多东西,对自己的未来也充满了信心,我相信,在自己的不断努力下,自己一定可以打造一片属于自己的天地。 附录:参考资料:北大c与c+语言课设指导书_EasyX版。C语言到底能干什么pdf。Windows网络编程技术。C语言_graphics.h函数介绍.doc 专心-专注-专业