生产实习报告.docx
《生产实习报告.docx》由会员分享,可在线阅读,更多相关《生产实习报告.docx(20页珍藏版)》请在冰豆网上搜索。
生产实习报告
洛阳理工学院
专业
班级
学号
姓名
完成日期
无锡NIIT--NIIT(印度国家信息技术学院)是全球第二大的学习解决方案提供商,也是亚洲唯一一家荣登IDC全球前15位IT培训机构榜的机构,向全球著名企业如Microsoft、INTEL、TOYOTA、XEROX等提供知识解决方案服务,拥有50万注册学生以及38个国家超过4百万的毕业生。
1997年NIIT正式进入中国,成为投资中国的首家印度IT企业,目前已与中国129所院校建立合作伙伴关系,并在大学校园里通过“NIITInside”模式提供业界知名的IT培训计划。
为了打破服务外包发展的人才瓶颈,协助政府大力发展服务外包行业,2008年2月,印度第一、全球第二大软件培训机构NIIT在无锡新区投资设立了NIIT服务外包实训基地。
目前NIIT(中国)服务外包实训基地二期工程,拥有三栋独立的实训大楼,实训场地面积约30000多平方米,设有市场部、教学部(教学部一、教学部二、教学部三)、高校合作部、就业安置部等七个部门。
每层均拥有阶梯教室(均为多媒体教室)、休息室、项目讨论室等,且设有普尔文考试中心,教学用计算机近万台,全部配备HP品牌机;学校培训讲师主要由NIIT直接从印度总部派遣印籍专家与本地具有丰富开发经验的项目经理担任,确保培训质量,学校目前拥有Dhiren、AfzalFaizi等印籍专家、金牌讲师及30多位项目经理级软件培训讲师。
NIIT对教学质量严格把关,软件服务外包培训教材,教学大纳、课件、案例等全部由NIIT印度总部统一提供,并根据行业发展情况对软件课程体系不断更新,培训讲师都是经NIIT严格选拔,均要求拥有五年以上大型软件企业项目开发经验。
NIIT目前已与福瑞博德、浪潮世科、大展信息、软通动力、华夏计算机、冠华时代、日本BASE、睿泰科技、中科惠软、海辉软件等众多知名服务外包企业,结成战略培训合作联盟,根据外包企业实际技术需求,为企业进行定制人才培训。
培训内容涉及包括C++、JAVASE、JAVAEE、JAVAME、.NET、ORACLE等软件技术与三级日语。
2009年,NIIT计划培训学员3000名,大学生实训5000名,为了完成上述目标,NIIT加紧与各大服务外包企业的沟通与协调,了解各大服务外包企业的技术需求,加强市场招生工作,并制定了一整套从招生、入学测试、教学、管理、后勤、就业等政策措施,确保环环相扣、保质保量的完成培训任务。
课程内容:
C#语言基础(基本语法、常量、变量、数据类型、类型转化)
程序流控制语句(条件分支、循环控制)项目需求分析编写说明
课程精华:
一、常量:
常量又称直接量,它是在程序执行过程中始终保持确定不变的量。
常量是在编写程序时需要使用的一些在程序执行前已经定义和已知的值。
二:
变量
变量是在程序执行过程中,其值随时都有可能被改变的量。
变量属于用户定义的用户标识符。
程序中的每个变量都有一个和它相联系的类型,类型决定了该变量能具有的值,也决定了对该变量能执行的运算。
三、.变量的定义和声明
在C#语言中,简单数据类型是由系统提供的,在程序中无须定义。
程序员使用简单数据类型的方法和过程是:
在程序首部先对变量进行声明,然后在程序中使用。
复杂数据类型的基本元素是简单数据类型,也就是说,复杂数据类型中各元素的数据类型是简单数据类型。
阶段项目完成成果:
循环打印图案(部分代码)
staticvoidMain(string[]args)
{
for(intj=1;j<6;j++)
for(inti=1;i<=j;i++)
Console.Write(i);
}
Console.WriteLine();
Console.ReadLine();
数组、排序算法
面向对象的设计与分析
一、数组:
所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。
组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。
二、数组的声明:
int[]myIntArray;
三、对象:
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
排序算法的实现(部分代码)
staticvoidBubble()
inttemp=0;
for(inti=list.Count;i>0;i--)
for(intj=0;j{if(list[j]>list[j+1]){temp=list[j];list[j]=list[j+1];list[j+1]=temp;}}PrintList();}}课程内容:类的封装与继承接口、方法重载、方法重写课程精华:一、类:类(class)是指具有相同属性和操作的一组对象的集合。二、类对象的关系:类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。三、继承:“继承”是面向对象软件技术当中的一个概念。如果一个类A继承自另一个类B,就把这个A称为"B的子类",而把B称为"A的父类"。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。另外,为子类追加新的属性和方法也是常见的做法。阶段项目完成成果:图形面积的计算(部分代码):publicclassCircle:Shape{constdoublePI=3.1415;privatedouble_r=0; publicvoidSetRadius(doubler){this.R=r;}publicoverridedoubleCalculateArea(){Area=PI*R*R;returnArea;}}课程内容:String类和一些常用基础类委托、事件、多线程课程精华:一、string类的特点:String不同于大多数的引用类型。其比较操做是对字符串值进行比较,而不是比较字符串的位置。字符串是一个Char类型的序列,创建字符串后,不能在当前内存位置上改变,如不能缩短,不能在后面追加字符,也不能改变其中的字符。二、委托的概念:委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法)。通俗的说,委托是一个可以引用方法的对象,当创建一个委托,也就创建一个引用方法的对象,进而就可以调用那个方法,即委托可以调用它所指的方法。三、多线程:线程(Thread)每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行阶段项目完成成果:用户登录模块的实现(部分代码):while(count!=0){Console.WriteLine("请输入用户名:");userName=Console.ReadLine();Console.WriteLine("请输入用密码:");password=Console.ReadLine();if(userName=="123456"&&password=="123456"){Console.WriteLine("登陆成功!");break;}}课程内容:C#winform基础、简单空间类C#高级空间和form之间的值传递课程精华:.NET基础控件的使用:.net常用的控件有Button、CheckBox、Label、TextBox等。Button(按钮):主要用于在点击是触发一些事件或者执行一些方法,主要属性(Width,Height)主要事件(button_Click());CheckBox(复选框):主要用于一些选择多项的场合(如注册是填写兴趣)主要属性(Checked)主要事件(checkBox_CheckedChanged());Label(标签):主要用于显示一些最基本的文本信息,主要属性(Text,Width,Height)主要事件(label_Click());TextBox(文本框):主要用于输入文本,也可用于显示文本,主要属性(Text,Width,Height),主要事件(textBox_TextChanged());阶段项目完成成果:计算器的实现(部分代码):switch(yunsuanfu){case1:if(!liandeng){num2=decimal.Parse(textBox1.Text);textBox1.Text=(num1+num2)+"";liandeng=true;}else{textBox1.Text=(decimal.Parse(textBox1.Text)+num2)+"";}break;case2:if(!liandeng){num2=decimal.Parse(textBox1.Text);textBox1.Text=(num1-num2)+"";liandeng=true;}}项目实训可选项目:1.《飞行棋》2.《打地鼠》3.《记事本》4《贪吃蛇》5《2048》6《扫雷》通过分析指导老师建议的几个项目和在网上查阅一些资料,我们组最终选择了小游戏《2048》这个项目。这个项目对我们比较有挑战性,看似简单的界面却有着十分复杂的算法。我们做《2048》这个项目有几个必须面对的问题,主要都在核心算法的实现上:问题1:游戏界面的设计;问题2:方块控件的选择;问题3:方块上显示不同的数字;问题4:不同的数字要有不同的颜色;问题5:如何控制方块的移动;问题6:如何在一个方向上移动是去掉空白的方块;问题7:在去掉空白方块后合并相同的方块;问题8:游戏胜利和游戏失败的验证;问题9:计分功能的实现;问题10:最高分的保存与读取项目名称《2048》项目阶段一(问题1、2、3的解决):通过老师的建议和查阅相关资料我们决定使用简洁风格的游戏界面,游戏的界面主要是一个固定大小的Form,Form上使用一个Panel控件来放置带数字的方块,Form和Panel是用不同的背景,Form使用的是背景图片来显示出整个界面的风格,panel使用的是浅灰色的背景颜色,来表示没有方块时的颜色!方块的选择上我们最终确定使用禁用了点击功能的button来充当方块,通过Button的FlatStyle属性设置为Popup可以将button控件设置成扁平的效果,这样button就非常像一个方块了。通过设置方块(Button)的Text属性就可以设置方块上的数字,这里有个问题,在数字比较小的时候(如2、4、8)需要将方块的字号设置的很大,当数字较大时(如16、32、64)需要将字号稍变小一些,当数字更大时(如128、256、512)则需要将字号再次变小一些,当数字位数变成四位数时(如1024、2048)等就需要进一部的调整字号,否则将会出现小的数字字号太小,或者大的数字字号过大Button显示不全等问题。效果图示: Panel 项目名称《2048》项目阶段二(问题4、5、6、7的解决):游戏中的方块根据数字不同,颜色也各不相同,这就要在创建方块的时进行判断,起初我使用if语句来进行判断,后来发现方块数字从2开始一直到2048,共有十几种情况,所以我改用switch-case语句来实现(部分代码如下)。switch(int.Parse(bt.Text)){case2:bt.BackColor=Color.LightCyan;break;case4:bt.BackColor=Color.Thistle;break;case8:bt.BackColor=Color.MediumPurple;break;case16:bt.BackColor=Color.SkyBlue;break;case32:bt.BackColor=Color.MediumPurple;break;case64:bt.BackColor=Color.SlateBlue;break;case128:bt.BackColor=Color.MediumSlateBlue;break;default:break;}在控制方块移动的方法设计的时候我们决定用变换Button上的文本来实现,这样可以减少对动画的使用从而提高性能。主要思路是在键盘按下的时候调用Form的Form_KeyDown()事件来控制方块移动。同样使用switch-case语句来判断根据按下的方向键的不同来调用不同的移动方法。(部分代码如下)switch(e.KeyCode){caseKeys.Up:moveToUp();break;caseKeys.Down:moveToDown();break;caseKeys.Left:moveToLeft();break;caseKeys.Right:moveToRight();break;default:break;}在消去同一方向上的空白方块的方法设计上,我采用的是双层循环来判断同向的每一块方块是否为空,如果为空,则将上一个方块覆盖到空的方块上,依次遍历所有的方块从而实现去掉空白方块。合并相同方块的算法与去空白类似,只是把覆盖改为相加后覆盖(部分代码如下)。for(inti=0;i<4;i++){j=0;while(string.IsNullOrEmpty(((Button)panel1.Controls[i]).Text)){((Button)panel1.Controls[i]).Text=((Button)panel1.Controls[4+i]).Text;((Button)panel1.Controls[4+i]).Text=((Button)panel1.Controls[8+i]).Text;((Button)panel1.Controls[8+i]).Text=((Button)panel1.Controls[12+i]).Text;((Button)panel1.Controls[12+i]).Text=null;if(++j>=4){break;}}}项目名称《2048》项目阶段三(问题8、9、10的解决):在游戏胜利和失败的验证算法上,我主要使用的还是双层循环来遍历所有的方块,判断是方块是否用完,方块用完时是否能消除,如果方块用完且不能消除的话即为游戏结束;如果游戏过程中出现2048即为游戏胜利;所以需要用到三个方法来判断(checkIsFull();checkIs2048();checkIsOver();),在每次移动是都调用判断(部分代码如下)publicBooleancheckIsFull(){foreach(Buttonbinpanel1.Controls){if(string.IsNullOrEmpty(b.Text)){returnfalse;}}returntrue;}publicBooleancheckIs2048(){foreach(Buttonbtinpanel1.Controls){if(bt.Text=="2048"){returntrue;}}returnfalse;}计分功能主要用label控件来实现,通过将label的背景设置为透明,设置它的Text属性即可,在每次有方块合成的时候调用。最高分的实现主要使用了文件流来保存每次退出前的最高分,每次打开游戏都读取上次保存的文件来设置最高分。(部分代码如下)publicvoidsaveBest(){StreamWritersw=newStreamWriter(path+@"\best.txt",false);sw.WriteLine(label4.Text);sw.Close();}publicvoidloadBest(){StreamReadersr=newStreamReader(path+@"\best.txt");label4.Text=sr.ReadLine();sr.Close();}项目名称《2048》项目阶段四(游戏测试与bug修复):在测试过程遇到很多问题,主要有以下几点。问题一、在操作过程中偶尔会发生方块无故消失的情况解决方法:在方块移动方法添具有验证功能的代码问题二、在方块满的时候还可以消除却提示游戏结束。解决方法:这是因为每次在移动之后都会检查是否为满,如果满的话就会提示游戏结束,这是有问题的,要解决需要在验证满的时候在验证是否可以继续消除。问题三、在新电脑上运行的时候会崩溃。解决方法:这个问题主要是因为每次启动游戏都会读取最高分,但是在新的电脑上运行这个游戏时,那台电脑并没有对应的文件来读取最高分,所以就崩溃了。通过添加验证对应的文件是否存在,如果存在就读取,如果不存在就设置一个初始分数。项目完成 来到NIIT的第一天,老师就带着我们参观了整个国家软件园区,园区里除了NIIT学校以外还有很多的软件外包公司,像IBM、海辉软件、物联网、中国感知中心等。园区里的职工宿舍楼都是新建的,里面有空调、洗刷间和阳台,我们和公司的职员住在同一个地方,让我们能随时以一名正式的公司员工要求自己。学校给我们每人配发了学生证和工牌,并要求我们在上课期间一直佩戴者,使我们时刻可以感受到公司里的氛围。在这里,每一天的学习内容都很多,整天都忙碌于屏幕与键盘之间。虽然辛苦,但是感觉很充实。因为自己的技术正一天天地进步着,未来的程序设计之路也正离我越来越近。来到无锡这里学习已经两周了,这两周的收获让我感到很满足,之前的担忧也不再存在了,现在我相信只要认真学习,不愁找不到好工作。NIIT的教学方式跟大学里有很大不同,全是小班级上课。每个同学都配备了一台电脑,教室里教学设备齐全,还有2台大空调。教我们的老师在软件公司里做过项目经理,有很强的编程经验,我们所问到的问题,老师基本上都能很快的解答,同学们对老师的评价都很高。平时上课的时候,老师教到哪里我们便跟到哪里,投影仪和NetMeeting都用来显示老师的代码。每当老师讲完一个知识点之后便在VS里演示,我们也都跟着老师敲,老师敲一遍,我们课下敲两遍三遍,直到自己会用。当每个阶段的课程结束后,老师便布置一个项目,要求我们用一到两周的时间尽自己最大努力去完成,期间老师一直在教室里,遇到不会的问题我们可以随时问。在今天,.NET已经不是什么新鲜的技术了,有太多的学习资料可以供我们参考学习。但是如果你想深入地学习并掌握他绝对也不是件容易的事情,因为一门好的技术不是一个人成果,它融合了千千万万程序设计大师们的思想。你想想,一个人要了解并掌握那么多人思想当然不是件容易的事情。但是我相信,只要你肯努力并掌握好学习方法,是可以事半功倍的。我认为,学习一门计算机语言,你必须亲自动手去尝试,不要怕出错,要大胆的去尝试。另外,在遇到问题的时候,首先不要去问别人。可能会有人说,不是要不耻下问吗?但是我觉得,在学习编程的时候不是这样的,至少不要急于这样。在我们遇到困难的时候,我们应该试图自己去找答案,在生活中也是如此,不要总是依赖别人。比如在运行程序的时候,出现了很多错误,初学时可能会很讨厌程序出错。但是我想说,程序是不可能没有错误的,错误不可怕,怕的是我们不努力解决它。首先想想自己的错误在哪里,以前有没有遇到过同样的问题,如果遇到过,为什么还会出同样的错误,如果没有遇到过,没关系。咱们不是有网络吗?上网找baidu帮忙!其实,有很多的错误别人已经遇到过了,并且在网络上已提出并得到了答案。这时,我们只需要将自己的问题“ctrl+c”再“ctrl+v”到搜索引擎就OK了。不出问题的话,你一定能够得到满意的答案。如果找不要满意的答案,可以上技术论坛找高手们解答。只要你的问题不是很低级,别人还是很乐意给你解答的。最后,你就应该把自己的错误记录下来,避免下次犯同样的错误。记住,只要你不犯同样的错误,你就是在进步,因为你已经渐渐学会了处理问题的能力。学习.NET,绝对不要仅仅整天盯着语法细节,光看看是没有用的,而应该注重动手能力培养和编程思想的提高。就好比一篇优美的文章,绝对不仅仅是作者用了多么华丽的词藻和优美的句子,而是文章的思想、意义有多么耐人寻味。可以多做练习,多练习那些经典的列子,同样的问题可以试着用多种方法去实现,这样编程思维得到了扩展,不至于变得很死板。经常练习是很重要的,我想大家都听说过卖油翁的故事,为什么卖油翁能够做到:“乃取一葫芦置于地,以钱覆其口,徐以杓酌油沥之,自钱孔入,而钱不湿”。答案就是他说的那句话“我亦无他,唯手熟尔”。多么平常而又经典的话。只要记住这句话,我想谁都能做到最好。 实习成绩评定实习单位评语: 成绩:老师签名:日期:年月日实习单位盖章:实习成绩评定带队老师评语: 成绩:老师签名:日期:年月日
if(list[j]>list[j+1])
temp=list[j];
list[j]=list[j+1];
list[j+1]=temp;
PrintList();
类的封装与继承
接口、方法重载、方法重写
一、类:
类(class)是指具有相同属性和操作的一组对象的集合。
二、类对象的关系:
类是对象的抽象,而对象是类的具体实例。
类是抽象的,不占用内存,而对象是具体的,占用存储空间。
类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
三、继承:
“继承”是面向对象软件技术当中的一个概念。
如果一个类A继承自另一个类B,就把这个A称为"B的子类",而把B称为"A的父类"。
继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。
在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。
另外,为子类追加新的属性和方法也是常见的做法。
图形面积的计算(部分代码):
publicclassCircle:
Shape
constdoublePI=3.1415;
privatedouble_r=0;
publicvoidSetRadius(doubler)
this.R=r;
publicoverridedoubleCalculateArea()
Area=PI*R*R;
returnArea;
String类和一些常用基础类
委托、事件、多线程
一、string类的特点:
String不同于大多数的引用类型。
其比较操做是对字符串值进行比较,而不是比较字符串的位置。
字符串是一个Char类型的序列,创建字符串后,不能在当前内存位置上改变,如不能缩短,不能在后面追加字符,也不能改变其中的字符。
二、委托的概念:
委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法)。
通俗的说,委托是一个可以引用方法的对象,当创建一个委托,也就创建一个引用方法的对象,进而就可以调用那个方法,即委托可以调用它所指的方法。
三、多线程:
线程(Thread)每个正在系统上运行的程序都是一个进程。
每个进程包含一到多个线程。
进程也可能是整个程序或者是部分程序的动态执行。
线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行
用户登录模块的实现(部分代码):
while(count!
=0)
Console.WriteLine("请输入用户名:
");
userName=Console.ReadLine();
Console.WriteLine("请输入用密码:
password=Console.ReadLine();
if(userName=="123456"&&password=="123456")
Console.WriteLine("登陆成功!
break;
C#winform基础、简单空间类
C#高级空间和form之间的值传递
.NET基础控件的使用:
.net常用的控件有Button、CheckBox、Label、TextBox等。
Button(按钮):
主要用于在点击是触发一些事件或者执行一些方法,主要属性(Width,Height)主要事件(button_Click());
CheckBox(复选框):
主要用于一些选择多项的场合(如注册是填写兴趣)
主要属性(Checked)主要事件(checkBox_CheckedChanged());
Label(标签):
主要用于显示一些最基本的文本信息,主要属性(Text,Width,Height)主要事件(label_Click());
TextBox(文本框):
主要用于输入文本,也可用于显示文本,主要属性(Text,Width,Height),主要事件(textBox_TextChanged());
计算器的实现(部分代码):
switch(yunsuanfu)
case1:
if(!
liandeng)
num2=decimal.Parse(textBox1.Text);
textBox1.Text=(num1+num2)+"";
liandeng=true;
else
textBox1.Text=(decimal.Parse(textBox1.Text)+num2)+"";
case2:
textBox1.Text=(num1-num2)+"";
项目实训
可选项目:
1.《飞行棋》
2.《打地鼠》
3.《记事本》
4《贪吃蛇》
5《2048》
6《扫雷》
通过分析指导老师建议的几个项目和在网上查阅一些资料,我们组最终选择了小游戏《2048》这个项目。
这个项目对我们比较有挑战性,看似简单的界面却有着十分复杂的算法。
我们做《2048》这个项目有几个必须面对的问题,主要都在核心算法的实现上:
问题1:
游戏界面的设计;
问题2:
方块控件的选择;
问题3:
方块上显示不同的数字;
问题4:
不同的数字要有不同的颜色;
问题5:
如何控制方块的移动;
问题6:
如何在一个方向上移动是去掉空白的方块;
问题7:
在去掉空白方块后合并相同的方块;
问题8:
游戏胜利和游戏失败的验证;
问题9:
计分功能的实现;
问题10:
最高分的保存与读取
项目名称《2048》
项目阶段一(问题1、2、3的解决):
通过老师的建议和查阅相关资料我们决定使用简洁风格的游戏界面,游戏的界面主要是一个固定大小的Form,Form上使用一个Panel控件来放置带数字的方块,Form和Panel是用不同的背景,Form使用的是背景图片来显示出整个界面的风格,panel使用的是浅灰色的背景颜色,来表示没有方块时的颜色!
方块的选择上我们最终确定使用禁用了点击功能的button来充当方块,通过Button的FlatStyle属性设置为Popup可以将button控件设置成扁平的效果,这样button就非常像一个方块了。
通过设置方块(Button)的Text属性就可以设置方块上的数字,这里有个问题,在数字比较小的时候(如2、4、8)需要将方块的字号设置的很大,当数字较大时(如16、32、64)需要将字号稍变小一些,当数字更大时(如128、256、512)则需要将字号再次变小一些,当数字位数变成四位数时(如1024、2048)等就需要进一部的调整字号,否则将会出现小的数字字号太小,或者大的数字字号过大Button显示不全等问题。
效果图示:
Panel
项目阶段二(问题4、5、6、7的解决):
游戏中的方块根据数字不同,颜色也各不相同,这就要在创建方块的时进行判断,起初我使用if语句来进行判断,后来发现方块数字从2开始一直到2048,共有十几种情况,所以我改用switch-case语句来实现(部分代码如下)。
switch(int.Parse(bt.Text))
bt.BackColor=Color.LightCyan;break;
case4:
bt.BackColor=Color.Thistle;break;
case8:
bt.BackColor=Color.MediumPurple;break;
case16:
bt.BackColor=Color.SkyBlue;break;
case32:
case64:
bt.BackColor=Color.SlateBlue;break;
case128:
bt.BackColor=Color.MediumSlateBlue;break;
default:
在控制方块移动的方法设计的时候我们决定用变换Button上的文本来实现,这样可以减少对动画的使用从而提高性能。
主要思路是在键盘按下的时候调用Form的Form_KeyDown()事件来控制方块移动。
同样使用switch-case语句来判断根据按下的方向键的不同来调用不同的移动方法。
(部分代码如下)
switch(e.KeyCode)
caseKeys.Up:
moveToUp();break;
caseKeys.Down:
moveToDown();break;
caseKeys.Left:
moveToLeft();break;
caseKeys.Right:
moveToRight();break;
在消去同一方向上的空白方块的方法设计上,我采用的是双层循环来判断同向的每一块方块是否为空,如果为空,则将上一个方块覆盖到空的方块上,依次遍历所有的方块从而实现去掉空白方块。
合并相同方块的算法与去空白类似,只是把覆盖改为相加后覆盖(部分代码如下)。
for(inti=0;i<4;i++)
j=0;
while(string.IsNullOrEmpty(((Button)panel1.Controls[i]).Text))
((Button)panel1.Controls[i]).Text=((Button)panel1.Controls[4+i]).Text;
((Button)panel1.Controls[4+i]).Text=((Button)panel1.Controls[8+i]).Text;
((Button)panel1.Controls[8+i]).Text=((Button)panel1.Controls[12+i]).Text;
((Button)panel1.Controls[12+i]).Text=null;
if(++j>=4)
项目阶段三(问题8、9、10的解决):
在游戏胜利和失败的验证算法上,我主要使用的还是双层循环来遍历所有的方块,判断是方块是否用完,方块用完时是否能消除,如果方块用完且不能消除的话即为游戏结束;如果游戏过程中出现2048即为游戏胜利;所以需要用到三个方法来判断(checkIsFull();checkIs2048();checkIsOver();),在每次移动是都调用判断(部分代码如下)
publicBooleancheckIsFull()
foreach(Buttonbinpanel1.Controls)
if(string.IsNullOrEmpty(b.Text))
returnfalse;
returntrue;
publicBooleancheckIs2048()
foreach(Buttonbtinpanel1.Controls)
if(bt.Text=="2048")
计分功能主要用label控件来实现,通过将label的背景设置为透明,设置它的Text属性即可,在每次有方块合成的时候调用。
最高分的实现主要使用了文件流来保存每次退出前的最高分,每次打开游戏都读取上次保存的文件来设置最高分。
publicvoidsaveBest()
StreamWritersw=newStreamWriter(path+@"\best.txt",false);
sw.WriteLine(label4.Text);
sw.Close();
publicvoidloadBest()
StreamReadersr=newStreamReader(path+@"\best.txt");
label4.Text=sr.ReadLine();
sr.Close();
项目阶段四(游戏测试与bug修复):
在测试过程遇到很多问题,主要有以下几点。
问题一、在操作过程中偶尔会发生方块无故消失的情况
解决方法:
在方块移动方法添具有验证功能的代码
问题二、在方块满的时候还可以消除却提示游戏结束。
这是因为每次在移动之后都会检查是否为满,如果满的话
就会提示游戏结束,这是有问题的,要解决需要在验证满的时
候在验证是否可以继续消除。
问题三、在新电脑上运行的时候会崩溃。
这个问题主要是因为每次启动游戏都会读取最高分,
但是在新的电脑上运行这个游戏时,那台电脑并没有对应
的文件来读取最高分,所以就崩溃了。
通过添加验证对应
的文件是否存在,如果存在就读取,如果不存在就设置一
个初始分数。
项目完成
来到NIIT的第一天,老师就带着我们参观了整个国家软件园区,园区里除了NIIT学校以外还有很多的软件外包公司,像IBM、海辉软件、物联网、中国感知中心等。
园区里的职工宿舍楼都是新建的,里面有空调、洗刷间和阳台,我们和公司的职员住在同一个地方,让我们能随时以一名正式的公司员工要求自己。
学校给我们每人配发了学生证和工牌,并要求我们在上课期间一直佩戴者,使我们时刻可以感受到公司里的氛围。
在这里,每一天的学习内容都很多,整天都忙碌于屏幕与键盘之间。
虽然辛苦,但是感觉很充实。
因为自己的技术正一天天地进步着,未来的程序设计之路也正离我越来越近。
来到无锡这里学习已经两周了,这两周的收获让我感到很满足,之前的担忧也不再存在了,现在我相信只要认真学习,不愁找不到好工作。
NIIT的教学方式跟大学里有很大不同,全是小班级上课。
每个同学都配备了一台电脑,教室里教学设备齐全,还有2台大空调。
教我们的老师在软件公司里做过项目经理,有很强的编程经验,我们所问到的问题,老师基本上都能很快的解答,同学们对老师的评价都很高。
平时上课的时候,老师教到哪里我们便跟到哪里,投影仪和NetMeeting都用来显示老师的代码。
每当老师讲完一个知识点之后便在VS里演示,我们也都跟着老师敲,老师敲一遍,我们课下敲两遍三遍,直到自己会用。
当每个阶段的课程结束后,老师便布置一个项目,要求我们用一到两周的时间尽自己最大努力去完成,期间老师一直在教室里,遇到不会的问题我们可以随时问。
在今天,.NET已经不是什么新鲜的技术了,有太多的学习资料可以供我们参考学习。
但是如果你想深入地学习并掌握他绝对也不是件容易的事情,因为一门好的技术不是一个人成果,它融合了千千万万程序设计大师们的思想。
你想想,一个人要了解并掌握那么多人思想当然不是件容易的事情。
但是我相信,只要你肯努力并掌握好学习方法,是可以事半功倍的。
我认为,学习一门计算机语言,你必须亲自动手去尝试,不要怕出错,要大胆的去尝试。
另外,在遇到问题的时候,首先不要去问别人。
可能会有人说,不是要不耻下问吗?
但是我觉得,在学习编程的时候不是这样的,至少不要急于这样。
在我们遇到困难的时候,我们应该试图自己去找答案,在生活中也是如此,不要总是依赖别人。
比如在运行程序的时候,出现了很多错误,初学时可能会很讨厌程序出错。
但是我想说,程序是不可能没有错误的,错误不可怕,怕的是我们不努力解决它。
首先想想自己的错误在哪里,以前有没有遇到过同样的问题,如果遇到过,为什么还会出同样的错误,如果没有遇到过,没关系。
咱们不是有网络吗?
上网找baidu帮忙!
其实,有很多的错误别人已经遇到过了,并且在网络上已提出并得到了答案。
这时,我们只需要将自己的问题“ctrl+c”再“ctrl+v”到搜索引擎就OK了。
不出问题的话,你一定能够得到满意的答案。
如果找不要满意的答案,可以上技术论坛找高手们解答。
只要你的问题不是很低级,别人还是很乐意给你解答的。
最后,你就应该把自己的错误记录下来,避免下次犯同样的错误。
记住,只要你不犯同样的错误,你就是在进步,因为你已经渐渐学会了处理问题的能力。
学习.NET,绝对不要仅仅整天盯着语法细节,光看看是没有用的,而应该注重动手能力培养和编程思想的提高。
就好比一篇优美的文章,绝对不仅仅是作者用了多么华丽的词藻和优美的句子,而是文章的思想、意义有多么耐人寻味。
可以多做练习,多练习那些经典的列子,同样的问题可以试着用多种方法去实现,这样编程思维得到了扩展,不至于变得很死板。
经常练习是很重要的,我想大家都听说过卖油翁的故事,为什么卖油翁能够做到:
“乃取一葫芦置于地,以钱覆其口,徐以杓酌油沥之,自钱孔入,而钱不湿”。
答案就是他说的那句话“我亦无他,唯手熟尔”。
多么平常而又经典的话。
只要记住这句话,我想谁都能做到最好。
实习成绩评定
实习单位评语:
成绩:
老师签名:
日期:
年月日
实习单位盖章:
带队老师评语:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1