信息工程学院综合实习(实训)报告
实习(实训)单位: 海南创讯技术有限公司 实习(实训)项目: 基于Java的五子棋游戏开发 实习(实训)时间:2011年 8月29日至 2011年10月28日
校外指导教师: 校内指导老师: 系 部: 信息工程学院 专业(方向): 计算机科学技术(网络工程方向) 年 级: 08级 班 级: 姓 名: 学 号:
2011年 10 月 20 日
实 习(实 训)须 知
一、安全第一。学生必须严格遵守国家法令及学校的有关规章制度,严格遵守单位考勤制度和劳动纪律,严格遵守工作规程。
二、实习(实训)报告按实习(实训)的实际情况编写,着重总结收获、体会以及对某些问题进行理论联系实践的分析等。
三、实习(实训)报告的主体内容要求思路清晰,合乎逻辑,用语简洁准确;内容务求客观、科学,要尽量让事实和数据说话。凡是用简要的文字能够讲清楚的内容,应用文字陈述。用文字不容易说明白或说起来比较繁琐的,应用表或图来陈述。
四、实习(实训)总结是实习(实训)过程的总体结论,主要回答“收获和体会是什么”,是综合实习(实训)成果的归纳和总结,也包括对整个实习(实训)过程的感想。
五、实习(实训)报告版面要求为:字数不少于6000字。用Word排版及标准A4打印纸进行打印。页面上、下、右边距均为2.5厘米,左边距为3厘米。报告正文部分行间距为“1.5倍行距”。正文部分文字采用宋体、小四,正文中一级标题采用宋体、四号、加粗,二级标题采用宋体、小四加粗,三级以后标题均采用宋体、小四。
六、实习(实训)成绩依据学生的实习(实训)表现、实习(实训)报告和单位反馈的业务能力等方面的情况,由指导教师进行成绩评定。实习(实训)成绩按优秀、良好、中等、及格、不及格五级制综合评定。不参加实习(实训)的,或不按要求填写《综合实习(实训)报告》等实习(实训)汇报材料的,成绩以不合格计。
一、实习(实训)目的 1. 本次实习要求对三年来理论知识的学习进行一次检验,需要充分利用所学的知识,思考并实践,携手团队开发出公司给定的项目;将所学专业知识和技能应用到实际工作中,巩固课堂上所学的相关知识,检验专业技能水平,培养实际工作能力,为毕业后从事相关工作奠定一个良好的基础; 2. 能够熟练掌握Java程序语言设计软件eclipse,因为在手机上应用最多的就是JAVA游戏,所以要熟练Java语言的语法,以便具备研究和团队合作开发的能力和经验; 3. 在实习的过程中学会适应社会、融入企业,能够按照公司项目小组要求来完成自己的开发项目,并在此基础上勇于创新,灵活应用所学知识,并且能进一步了解社会,了解有关专业领域的现实情况,提高对社会的认知能力、认识水平,了解自己与社会需求之间的差距,明确今后努力的方向。
二、实习(实训)内容(理论联系实际的分析问题、典型工程代码等) 从8月初进入公司到10月底,实习了差不多3个月,一年的四分之一在这里度过了,这3个月的实习对我今后的职场生涯意义重大。因我所学专业为计算机科学与技术(网络工程方向),但在学校也学过C++、C#、Java这3门程序设计语言,在面试的那天我告诉面试人员我更希望做软件开发这样有很多挑战自己的机会的工作,而不是呆在机房维护机器,所以公司决定给我一个在项目研发部学习的机会,看看我的编程能力如何。 实习的第一天,我怀着激动的心情进入公司,来到了我所属的部门——研发部,我们公司研发部有六个研发团队,由于能力和经验的问题,公司的老员工都做大项目的开发,而新人都是从中、小项目的开发开始做起。并且每个新人都安排在不同的团队,我被安排在第五团队,接待我的是我们组的张师傅。首先张师傅带我去认识了我们组的其他成员,很有幽默感的介绍了每个人的名字、外号及特点,大家也都很高兴有一个小兄弟加入,这让我放松了我原本紧张的心情,介绍完之后,张师傅带我参观了我们整个研发部,介绍了我们工作的主要流程。 为了了解新进员工归属感,依赖性,更全面的、快速的融入到企业文化中,与企业共同发展,公司对我们进行了为期三天的入职培训,培训主要分为四大块:新进员工的感受与期望、新进员工面临的问题、自己在公司能的作用、企业发展背景和企业文化的介绍。 培训完后,主管说前期不会给我任务,让我先跟着张师傅学习,打打下手。对于一个新人来说,之前的实践毕竟是一张白纸,所以我认为这是一次学习和巩固基础的机会,现在的每一步都要稳扎稳打,都是为今后做大项目的开发积累经验。 这3个月我写过项目的需求分析、可行性报告、设计方案等文档,也参与过软件的编写,接触到了软件开发的整个流程,更深的理解所学的软件工程这门课的基本理论,基本知识和基本技能,使实践上有了质的飞跃,编程能力也得到了提高。感受到了企业的工作气氛,学会了怎样处理与同事和领导之间的关系,也使自己变得更好的融入社会。 在这段时间里我参与了5个小项目的研发,下面举其中一个来介绍我所实习的工作(这是我进入公司做的第一个项目)。本项目是为某生产少儿学习机厂家研究五子棋游戏的开发,附在学习机内;经由公司决定,交予项目研发部来设计,项目研发部第
五团队承接,通过讨论组员们决定做基于Java的五子棋游戏,由于有不少新人,所以不管你熟悉不熟悉Java,按照惯例主管先介绍项目开发所选择的开发语言和开发环境等。 本项目的开发使用的是Java程序设计语言,Java是一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的,多线程的,动态的语言。Java具有平台无关性、安全性、面向对象、分布式等特点。而在Java中,类的继承关系是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。Java提供的Object类及其子类的继承关系如同一棵倒立的树形,根类为Object类,Object类功能强大,经常会使用到它及其它派生的子类。Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。 根据大家的分析,利用Java语言来开发五子棋游戏有开发简单、跨平台、可移植、方便网络通信等优点。 这些都是我们在学校时课本上能够了解的,所以主管也是大体的介绍下。 然后介绍了开发环境: 我们所做的五子棋游戏是一个基于TCP/IP的网络对战游戏,采用服务器/客户端的网络架构模式,允许网络上的两台或多台机器同时运行,一台作为服务器创建游戏,始终处理网络上要求它进行服务的请求。如果有机器请求与它进行连接,用作服务器的机器接受之后就可以进行相互之间的通信。我们做的五子棋游戏还可以提供单机双人对战和人机对战的功能,并且可以在游戏中和对方聊天,界面也简洁明了。 1、实习(实训)项目 1.1 任务分配 我们团队经讨论决定,首先开始撰写项目设计方案,包括需求分析与可行性报告,完成后交予项目经理以及各个成员,然后开始做项目设计,并做系统功能和判别算法的分析;然后游戏各子系统的开发设计,分别包括:单机游戏设计、人机对战设计、网络对战设计;最后完成系统界面的设计,包括:系统菜单、单机游戏界面、人机对战界面、网络对战界面、聊天界面,完成后将分布骤合成一个完整的方案。因为此项目较为简单,因此公司要求尽快完成此系统的设计。本人负责项目开发文档的撰写和单机游戏系统的设计,其余的内容由团队的其他人员完成。
1.2 项目设计文档的撰写与系统功能和判别算法的分析: 由我先写整个项目的设计背景、需求分析与概要设计等项目文档的内容,完成后交给主管和每位成员各一份,通过后各个成员开始实施自己的任务。因为有一定的基础,并且我在学校也写过不少需求分析,所以在公司小王的指点下,项目开发文档很快就写完了。下面附上我所做的项目设计文档的部分内容: 需求分析 : 任务概述 (1)目标:建立五子棋服务器程序,游戏主机的应用程序,主要提供客户进行游戏的服务器;建立五子棋客户端程序,安装于客户端的应用程序,主要提供客户游戏、聊天的应用程序。可满足用户异地自由选择游戏对手、游戏模式,也可以在游戏当中进行聊天,私聊、群聊、修改用户名等功能。 (2)项目具体的开发环境: 操作系统:Windows 7专业版 JDK:jdk1.6.0 IDE:Eclipse SDK 3.5.0 GUI开发:Java Swing类库 数据需求 (1)数据流条目:系统默认用户名,或客户根据喜好可进行修改用户名。 (2)数据字典:本程序采用非数据库策略,游戏时,只把部分数据保存于内存中。 功能需求 功能的划分、描述:本游戏程序主要实现以下几个方面的功能:A:服务器程序,主要为客户端程序提供一个网络平台。B:客户端程序,主要实现五子棋的游戏界面,以及可提供给客户进行信息交流的功能,包括私聊,群聊,以及客户进行用户名的修改。 项目设计文档完成后交予李主管,李主管看后认为可行,然后将文档发给所有成员,让我们开始实施,先做系统功能和判别算法的分析。 下面根据我们做的分析情况具体介绍下,本系统功能包括游戏主窗口、单机游戏、人机对战和网络对战几部分,共同构成五子棋对战平台。 系统流程图如图1所示:
图1 系统流程图 我们根据系统功能分析得到各模块的功能如下: (1)游戏主窗口 提供游戏操作菜单和友好的人机交互界面,方便游戏控制操作,直观显示对战状态和用户信息等内容。 (2)单机游戏 单机游戏主要是让两个玩家在同一台机器上进行的游戏,直接由玩家控制棋子的落点,判断棋局状态,直到有一方获胜,游戏结束。 (3)人机对战 人机对战主要是通过使用线程调用人工智能判决算法来实现的。选择人机对战时,人工智能线程启动。当你落下一个棋子之后,人工智能线程遍历所有棋盘的位置,然后算出所有棋盘位置的权值,选择权值最大的位置落下棋子。判断玩家和机器人的棋局状态,直到有一方获胜,游戏结束。 编写一个是判决算法类,该判决算法使用遍历法。编写一个人工智能线程类,在
该线程中调用判决算法,编写一个寻找位置类,找到权值最大的一个点,返回该点的坐标值。人机对战时,调用人工智能线程类,每当玩家落下一个字,自动执行寻找最优点位置,落下棋子,最后根据胜负判断方法,判断胜负。 (4)网络对战 网络对战基于TCP/IP网络协议,采用C/S架构模式,一台机器创建游戏并作为服务器,处理网络上要求它进行服务的请求。如果有其他机器请求与它进行连接,作为服务器的机器接受之后就可以进行相互之间的通信。使用Socket进行编程,通过事件得到落子的坐标值,通过流操作将棋子的坐标发送过去,然后更新双方的棋盘。判断棋局状态,直到有一方获胜,游戏结束。 编写一个生成网络对战的棋盘类。其次还需要一个网络对战的线程类,通过Socket进行连接。编写一个具有Socket的客户端类,在该类中进行相关的流操作。游戏开始时,调用线程类,线程类再调用客户端类,然后就可以建立连接。 (5)聊天功能 聊天功能是建立一个聊天界面,添加到游戏界面中,在网络对弈时,通过Socket进行连接,先从界面上读取用户所写的消息,再通过流操作,将消息发送给对方,对方通过Socket接受到,然后读出消息来,同时更新聊天界面。在网络对战中玩家可以利用聊天窗口实时进行交流。 判决算法 李主管告诉我们在做判别算法分析时一定要细心,各种情况都要想到,尽量完善系统的各方面需求,首先要理解五子棋机器判决算法的基本思路:采用遍历法寻找棋盘上权值最大的位置,这个权值由机器利益值和玩家利益值决定,当机器利益值相对玩家利益值越大,相应位置的权值越大,在此位置落子越好。下面根据我们的分析介绍下具体的操作步骤: (1)首先遍历整个棋盘,找到一个可以落子的点,然后假设自己在该点落子,再然后判断如果棋子落到这个点上后会对自己有什么利益,比如会不会形成冲4活三、双活三等。将冲四活三、双活三、五子相连等效果定义上利益值,将各种效果的利益值相加,得到己方的利益值。 (2)将角色互换一下,重复第一步,得到对方的利益值。 (3)将己方的利益值减去对方的利益值,得到该点的总利益值。
(4)整个棋盘所有能落子的点都计算出利益值之后,找出利益值最大的点,即为机器落子的位置。 可以考虑预测今后几步,进行算法的优化,即 (1)第一步的预测。分析一个可能的点,如果在某个位置下子将会形成对手不得不防守的棋型,如冲四,活三等,那么下一步对手就必须按照你的思路下子来防守。 (2)重新判决算法对预测后的棋进行盘面分析,如果出现了四三、双三或双四等制胜点,那么己方就可以获胜;否则按照同样的方法向下分析,就可以预测出第二步,第三步等。 (3)如果盘面上没有对手必须防的棋型,将自己和对手调换位置,然后用上面的方法来预测对手的棋。这样既可以防住对手巧妙的攻击,又能等待机会发动反击。 1.3 子系统的设计: 所有成员首先要讨论影响子系统设计的各种因素,比如:棋盘要用多少个格子、要用什么颜色、棋子的大小比例、如何找判别算法中权值的最大点、利用什么功能实现网络对战等问题,在将项目设计文档等任务完成后,开始着手实施每一个子系统的开发设计。 系统菜单 Java五子棋对战平台的系统菜单结构如表1: 表1 系统菜单结构 系统菜单 一级菜单 单机游戏 游戏 网络对战 帮助 关于 创建游戏 加入游戏 / 人机对战 二级菜单 / / 单机游戏设计: 这个系统是由我负责的,但鉴于我刚到公司不久,单独做任务的能力不足,所以主管让张师傅帮助我完成任务。单机游戏是由两个玩家直接在程序界面进行操作,游戏开始两位玩家先分别输入姓名,并设定下棋时间,然后分别下子,我们要做到程序
能够实时更新棋盘并根据判定函数判断胜负。 在程序的主界面中绘制棋盘时我遇到了一些问题。虽然有学校积累的基本功底,但是我在完成自己设计时还是显得很吃力,在我解决不了的时候,我都会去请教张师傅,他教会我很多课本上学习不到的知识,给我讲了很多他多年软件开发的经验和教训,让我受益匪浅,并且充分认识到实践的重要性。 Java中图形的绘制是利用Graphics类实现,这个类是用于绘图和显示格式化文本的工具类。我们在Java程序中绘图必须在一个窗口中进行,绘图窗体经常被设计为一个组件容器。我们在做时一般先在一个面板中进行绘制,然后再将这个面板添加到显示窗口中。Graphics类这个我以前在学校学习时不经常使用的类,张师傅告诉我Graphics类是在java.awt包中声明,显示格式化文本和绘图是通过调用Graphics类的绘图方法实现的,如drawString(),drawLine()等。绘图坐标系是原点在左上角,纵轴向下以像素为单位的坐标系。他让我熟记Graphics类中常用的各种图形的绘制方法,如下: drawLine(int,int,int) 画直线,参数为起点的x和y坐标,终点的x和y坐标。 drawRect(int,int,int,int) 画矩形,参数为左上角的x和y坐标,宽,高。 draw3DRect(int,int,int,int,boolean) 画3D矩形,参数为左上角的x和y坐标,宽x, 高y, true。 drawOvil(int,int,int,int) 画卵形,参数为中心的x和y坐标,长轴,短轴。 drawArc(int,int,int,int,int,int) 画圆弧,参数为左上角的x和y,宽,高,起始角,终止角。 张师傅说我们平时在画填充图形时,只要把以上方法中的draw改为fill即可,参数表是一样的。绘制这些图形都是选用当前的颜色来绘制和填充的,黑色是系统默认的颜色,也可以使用Graphics类中的setColor()方法来设定绘图的颜色。 根据张师傅的讲述我自己编写了一段绘制图形的代码: import flash.display.*; var ship:Sprite; function createship():void { ship = new Sprite();
} ship.graphics.clear(); ship.graphics.lineStyle(2, 0x000000); ship.graphics.moveTo(10, 0); ship.graphics.lineTo(-10, 10); ship.graphics.lineTo(-5, 0); ship.graphics.lineTo(-10, -10); ship.graphics.lineTo(10, 0); addChild(ship); ship.x = stage.stageWidth / 2; ship.y = stage.stageHeight / 2; 测试时图形却显示不出来,系统也没有错误提示,检查了很长时间也没有发现问题所在,拿去问张师傅后,他告诉我代码没有一点问题,只是我定义了createship()这个方法,却没有调用它,在最下边再加一行createship()就行了。他说我不够细心,这也使许多新人的普遍问题,实践少,容易遗忘一些最基本的却又不好找出东西,他告诉我不要气馁,这些问题很正常,在他刚毕业时也是这样过来的。 经过张师傅的指点,我终于完成了单机游戏系统的设计,界面如图所示: 图2单机游戏初始化界面
图3 单机游戏界面 2. 我所做任务的部分核心代码: 单机游戏设计 单机游戏在程序主界面中绘制棋盘,主要是让两个不同的玩家在同一台机上进行游戏,将人机对战中的人工智能算法去掉,直接由玩家控制棋子的落点,以此来完成游戏的游玩。通过LocalGameInitDialog进行初始化,利用ChessPad类绘制棋盘,调用判决函数judge()判断游戏胜负。 部分核心代码如下: class LocalGameInitDialog extends JDialog { JLabel lb1 = new JLabel(\"请输入黑色玩家姓名:\"); JLabel lb2 = new JLabel(\"请输入白色玩家姓名:\"); JTextField tf1 = new JTextField(10); JTextField tf2 = new JTextField(10); JButton bn1 = new JButton(\"确定\"); JButton bn2 = new JButton(\"取消\"); JTextField tf = new JTextField(10); boolean dialogResult; public int totalSeconds;
} public LocalGameInitDialog(JFrame parent, int w, int h) { super(parent, \"初始化本地游戏\ setSize(w, h); setLayout(new BorderLayout()); JPanel p = new JPanel(); p.setLayout(new GridLayout(3, 2)); p.add(lb1); …… p.add(new JLabel(\"下棋总时间\")); p.add(tf); tf.setText(\"600\"); add(\"North\ JPanel p1 = new JPanel(); p1.setLayout(new FlowLayout()); …... bn1.addActionListener(new ActionListener(){ ... }); bn2.addActionListener(new ActionListener(){ ... }); ...... }
三、实习(实训)总结(收获、体会、感想) 1. 实习(实训)收获 通过这几个月的实习,我体验到了软件项目开发的整个流程,运用了所学的编程知识和技巧,学会了如何查询资料和分析问题,对软件的各功能模块进行测试。学会了如何进行功能分析和系统设计,如何撰写项目技术文档。培养了我的团队精神,能够和团队成员配合协调好项目设计等。 2. 实习(实训)体会与感想 不真正进入社会,怎能了解社会呢?经历这次实习我对计算机行业也有了更为详尽而深刻的了解,也是对这几年大学里所学知识的巩固与运用。在实习中,我体会到了实际的工作与书本上的知识是有很大的差距的,并且需要我进一步的学习,需要更多的实践经验。这次实习帮助我更深层次地理解了现在的软件开发。不再局限于书本,而是有了一个比较全面的了解。实践暴露了我许多专业知识上的不足,也是对我理论知识的一种补足。 在这段时间里我还结交了许多同事、朋友、老师,大家在公司休息区一起相互交流,相互促进,或者在下班后一起吃饭,融入他们。因为我知道只有和他们深入接触你才会更加了解生活和工作的实质,才能学会职场的规则和一些做人的基本道理。为我以后进一步走向社会打下坚实的基础。在这次的社会实践中,让我学到了很多在课堂上学不到的知识,打开了视野,增长了见识,也改掉了很多自身的不良习惯。懂得了挣钱的不易,工作的辛苦,以及社会复杂又纷乱的规则。而为了适应社会,我们要不断的学习,不断的提高自己,在实践中锻炼自己,使自己在激烈的竞争中立于不败之地,通过努力让自己脱颖而出。通过这次实习,我还知道,如果你不想让自己在紧急的时候手忙脚乱,就要养成讲究条理性的好习惯。“无论做什么样的事情,都要有条有理”这是公司的张师傅给我的忠告,也是我感触很深的一些习惯。 这段短暂而又充实的实习时间,对我走向社会起到了一个铺垫的作用,过渡的作用,是人生阶段的一个重要经历,对未来走上工作岗位也有着很大帮助。我学会了向他人虚心求教,遵守公司纪律和制度,与同时处理好人际关系等一些为人处世的基本原则,知道了不论你多么胸有成竹,但做事前一定要先衡量利害。同样的在做项目时,前期的准备也是必须的,好的习惯要在实际生活中不断培养。所有这段时间学到的经验和知识都是来自公司同事和领导的,这将是我一生中的一笔宝贵财富。
实习(实训)单位意见 实习(实训)单位签章: 年 月 日 校 内 指 导 教 师 评 语
校内指导教师: 年 月 日 校外指导老师成绩 校内指导老师成绩 总评成绩
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务