1、常州工程职业技术学院常州工程职业技术学院 计算机技术系计算机技术系项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发今日工作今日工作任务五:场地类(任务五:场地类(FloorFloor)设计)设计 1分析、设计分析、设计FloorFloor类的字段和属性类的字段和属性 a分析设计并实现分析设计并实现FloorFloor类方法类方法 3 b任务六:任务六:PubClassPubClass类和任务七:类和任务七:SpeedSpeed类类4 2工作汇报、互评工作汇报、互评3工作小结工作小结4结束结束任务布置任务布置5项目:贪吃
2、蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发分析、设计分析、设计FloorFloor类的字段和属性类的字段和属性各项目组汇报预设计、提出问题各项目组汇报预设计、提出问题互评、点评互评、点评问题解决问题解决进一步解读系统需求进一步解读系统需求项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发分析、设计分析、设计FloorFloor类的字段和属性类的字段和属性一、场地(一、场地(FloorFloor)类分析类分析u为游戏的主场地,豆要在此范围内出现,蛇要在此范围为游戏的主场地,豆要在此范围内出现,蛇要在此范围内运行;内运行;u场地的左
3、上角确定场地的显示位置,长宽确定场地的大场地的左上角确定场地的显示位置,长宽确定场地的大小小u在游戏过程中,要首先初始化场地类,然后显示场地,在游戏过程中,要首先初始化场地类,然后显示场地,当豆被吃掉后,要随机产生一个新豆并显示,还要不断当豆被吃掉后,要随机产生一个新豆并显示,还要不断检查蛇是否吃了豆,是否碰撞到了场地的壁或蛇自身。检查蛇是否吃了豆,是否碰撞到了场地的壁或蛇自身。项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发1)1)字段字段分析、设计分析、设计FloorFloor类的字段和属性类的字段和属性private static int unit=5
4、;private static int unit=5;private intprivate int length=80length=80*unit;unit;private int width=50private int width=50*unit;unit;private Point dot;private Point dot;public int score;public int score;private Snake s;private Snake s;private Bean bean1;private Bean bean1;项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWin
5、Form项目开发项目开发2)2)属性属性分析、设计分析、设计FloorFloor类的字段和属性类的字段和属性public Snake Spublic Snake S3)3)构造函数构造函数public Floor(Point p)public Floor(Point p)4)4)方法:方法:public void Display(Graphics g)public void Display(Graphics g)public void public void CheckBean(GraphicsCheckBean(Graphics g)g)public void public void Che
6、ckSnakeCheckSnake()()private Bean private Bean getRandomBeangetRandomBean()()public void public void displaybean(Graphicsdisplaybean(Graphics g)g)private void private void ReSet(GraphicsReSet(Graphics g)g)项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发二、场地(二、场地(floorfloor)类实现类实现分析、设计分析、设计FloorFloor类的字段和属
7、性类的字段和属性1.1.属性属性u设置蛇对象的属性为只读属性设置蛇对象的属性为只读属性public Snake Spublic Snake S getreturn s;getreturn s;项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发2.2.构造函数构造函数分析、设计分析、设计FloorFloor类的字段和属性类的字段和属性public Floor(Point p)public Floor(Point p)功能功能初始化场地的左上角位置初始化场地的左上角位置dotdot、豆对象豆对象bean1bean1和蛇和蛇对象对象s s。设计思路及方法设计思路及方
8、法根据传递来参数根据传递来参数p p设置场地外框左上角位置;用设置场地外框左上角位置;用p p和和1010实例化蛇实例化蛇s s(设置蛇的长度由设置蛇的长度由1010个块组成);用空个块组成);用空构造函数实例化豆对象并设置由构造函数实例化豆对象并设置由p p设置豆的位置属性值。设置豆的位置属性值。项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发分析设计并实现分析设计并实现FloorFloor类方法类方法各项目组汇报预设计、提出问题各项目组汇报预设计、提出问题互评、点评互评、点评问题解决问题解决进一步解读系统需求进一步解读系统需求项目:贪吃蛇游戏设计项目:贪
9、吃蛇游戏设计WinFormWinForm项目开发项目开发3.3.方法方法分析设计并实现分析设计并实现FloorFloor类方法类方法1)1)显示场地(显示场地(DisplayDisplay)方法方法功能功能 依次显示场地内的所有对象,场地边框、依次显示场地内的所有对象,场地边框、豆和蛇;还要检查蛇是否吃了豆。豆和蛇;还要检查蛇是否吃了豆。项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发分析设计并实现分析设计并实现FloorFloor类方法类方法设计思路设计思路创建红色画笔画运行场地显示豆(调用豆的Display方法)显示蛇(调用蛇的Display方法)检查豆
10、是否被吃掉(调用CheckBean方法)结束开始参数(Graphics g)画一个长能放下画一个长能放下8080个豆、宽能放下个豆、宽能放下5050个豆的红色矩形作为个豆的红色矩形作为场地场地 依次用各自的显依次用各自的显示方法显示蛇和豆,示方法显示蛇和豆,并检测当前豆是否被并检测当前豆是否被蛇吃掉。蛇吃掉。项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发2)检查蛇是否吃了豆(检查蛇是否吃了豆(CheckBean)方法方法分析设计并实现分析设计并实现FloorFloor类方法类方法功能功能检测豆是否被蛇吃掉,如果被蛇吃掉,得检测豆是否被蛇吃掉,如果被蛇吃掉,
11、得分增加分增加10分,显示新豆,使蛇增长一块,否则分,显示新豆,使蛇增长一块,否则不作任何处理,直接返回。不作任何处理,直接返回。项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发分析设计并实现分析设计并实现FloorFloor类方法类方法设计思路设计思路 判断豆的位置是否判断豆的位置是否与蛇头的位置相同用与蛇头的位置相同用PoiPointnt结构的结构的EqualsEquals方法:方法:bean1.Origin.Equals(s.getHeadPoint)bean1.Origin.Equals(s.getHeadPoint)其中其中bean1bean1是当
12、前豆是当前豆对象,对象,s s是蛇对象是蛇对象得分增加得分增加1010分分豆被蛇吃掉了吗?分数增加10产生并显示新豆(调用displaybean方法)蛇增长一块(调用蛇的Growth方法)FT结束开始项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发3)3)显示豆(显示豆(displaybeandisplaybean)方法方法分析设计并实现分析设计并实现FloorFloor类方法类方法功能:当豆被蛇吃掉后,消除被吃豆,随机生成一功能:当豆被蛇吃掉后,消除被吃豆,随机生成一个新豆并显示它。个新豆并显示它。设计思路:设计思路:调用它们各自的方法调用它们各自的方法U
13、nDisplay()UnDisplay()、randombeanrandombean()()和和Display()Display()完成它们的功能。完成它们的功能。4)4)产生随机豆(产生随机豆(randombeanrandombean)方法方法功能:生成一个在场地范围内任意位置的豆。功能:生成一个在场地范围内任意位置的豆。设计思路:设计思路:由随机数对象产生两个随机数,根据这两个整数由随机数对象产生两个随机数,根据这两个整数建立一个建立一个PointPoint变量,把它赋给豆对象的位置变量,把它赋给豆对象的位置OriginOrigin属属性,最后返回此豆。性,最后返回此豆。项目:贪吃蛇游戏设
14、计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发分析设计并实现分析设计并实现FloorFloor类方法类方法创建伪随机数对象并实例化产生随机x坐标创建新豆并实例化产生随机y坐标由x,y坐标构造点p返回新豆给新豆的位置属性赋值为p开始结束项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发u产生随机数产生随机数分析设计并实现分析设计并实现FloorFloor类方法类方法C#C#中产生随机数的方法分两步:中产生随机数的方法分两步:创建伪随机数对象,并实例化它。创建伪随机数对象,并实例化它。Random random=new Random();Ran
15、dom random=new Random();产生整数随机数的方法产生整数随机数的方法Next()Next()格式:格式:intint Next(intNext(int maxnummaxnum)功能:产生一个不大于功能:产生一个不大于maxnummaxnum的非负整数。的非负整数。项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发u豆位置坐标随机数由下面两式产生:分析设计并实现分析设计并实现FloorFloor类方法类方法uPoint d=new Point(dot.X+x*5,dot.Y+y*5);int x=random.Next(length/uni
16、t-2)+1;int y=random.Next(width/unit-2)+1;u豆的位置点由下式产生:项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发5)5)检查蛇是否撞墙和撞到它自身(检查蛇是否撞墙和撞到它自身(CheckSnakeCheckSnake)方方法法分析设计并实现分析设计并实现FloorFloor类方法类方法功能:功能:设计思路和步骤:设计思路和步骤:要判断蛇头是否撞到场地的墙壁,蛇头的位置由要判断蛇头是否撞到场地的墙壁,蛇头的位置由头块的左上角位置决定,当蛇向左、向上运行,头块头块的左上角位置决定,当蛇向左、向上运行,头块碰到墙壁时位置与
17、墙的位置重合,当蛇向右、向下运碰到墙壁时位置与墙的位置重合,当蛇向右、向下运行,头块碰到墙壁时,头块的位置行,头块碰到墙壁时,头块的位置x x、y y坐标减坐标减5 5,所以,所以判断条件如下:判断条件如下:判断蛇是否撞墙和撞到它自身,如果蛇碰撞到场地的判断蛇是否撞墙和撞到它自身,如果蛇碰撞到场地的壁或碰撞到它自身,返回壁或碰撞到它自身,返回truetrue,否则返回否则返回falsefalse。项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发dot.X dot.X s.getHeadPoint.Xs.getHeadPoint.X&s.getHeadPoin
18、t.s.getHeadPoint.X X (dot.X+length)-5)&(dot.X+length)-5)&分析设计并实现分析设计并实现FloorFloor类方法类方法判断蛇是否碰到它自身,直接调用判断蛇碰撞到判断蛇是否碰到它自身,直接调用判断蛇碰撞到自身属性:自身属性:!s.getHitSelfs.getHitSelf。(dot.Y (dot.Y s.getHeadPoint.Ys.getHeadPoint.Y&s.getHeadPoins.getHeadPoint.Yt.Y (dot.Y+width)-5)(dot.Y+width)-5)项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计Win
19、FormWinForm项目开发项目开发6)6)重新开始(重新开始(ReSetReSet)方法方法分析设计并实现分析设计并实现FloorFloor类方法类方法功能:消除现在的蛇,在起始位置重新显示蛇。功能:消除现在的蛇,在起始位置重新显示蛇。设计思路和步骤设计思路和步骤u调用蛇的消除方法调用蛇的消除方法UnDisplayUnDisplay()()和重新设置方和重新设置方法法ReSetReSet()()。项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发任务六:任务六:PubClassPubClass类和任务七:类和任务七:SpeedSpeed类类各项目组汇报预设
20、计、提出问题各项目组汇报预设计、提出问题互评、点评互评、点评问题解决问题解决进一步解读系统需求进一步解读系统需求项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发任务六:任务六:PubClassPubClass类和任务七:类和任务七:SpeedSpeed类类一、公共类(一、公共类(PubClassPubClass)分析分析类分析类分析目的:存放公共数据和公共方法。目的:存放公共数据和公共方法。此项目中要通过自定义速度(此项目中要通过自定义速度(SpeedSpeed)类设置游戏的类设置游戏的速度值,此值要应用到窗体(速度值,此值要应用到窗体(StartStart
21、)类中,因此在此类类中,因此在此类中只设置一个静态字段。中只设置一个静态字段。字段字段public static public static intint kkkk;项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发u对象成员与类成员对象成员与类成员一般在类中定义的成员称为对象成员,即由类定义一般在类中定义的成员称为对象成员,即由类定义对象后,每一个对象有各自的独立成员;对象后,每一个对象有各自的独立成员;有时需要类的所有对象在类的范围内共享某个成员,有时需要类的所有对象在类的范围内共享某个成员,它不属于任何一个对象,称为类成员,即静态成员。它不属于任何一个对
22、象,称为类成员,即静态成员。u对象(实例)成员具有以下特征:对象(实例)成员具有以下特征:访问方式:对象名访问方式:对象名.实例成员;实例成员;类的每个实例分别包括一组该类的所有实例字段。类的每个实例分别包括一组该类的所有实例字段。实例函数在类的给定实例上操作,此实例可以作为实例函数在类的给定实例上操作,此实例可以作为thithis s访问。访问。任务六:任务六:PubClassPubClass类和任务七:类和任务七:SpeedSpeed类类项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发u类(静态)成员有以下特征:类(静态)成员有以下特征:访问静态成员方式
23、:类名访问静态成员方式:类名.静态成员名;静态成员名;一个静态字段只标识一个存储位置;一个静态字段只标识一个存储位置;静态函数成员不在某个特定实例上操作,在这样静态函数成员不在某个特定实例上操作,在这样的函数中引用的函数中引用thisthis会引发编译错误。会引发编译错误。任务六:任务六:PubClassPubClass类和任务七:类和任务七:SpeedSpeed类类项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发一、自定义速度(一、自定义速度(SpeedSpeed)类分析类分析u通过向项目中添加窗体时系统自动创建的,由系通过向项目中添加窗体时系统自动创建的
24、,由系统的统的System.Windows.Forms.FormSystem.Windows.Forms.Form类派生而成。类派生而成。分析设计与实现分析设计与实现PubClassPubClass类和类和SpeedSpeed类类项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发控件名属性名属性值说明ClassNameSpeed Text自定义速度显示在窗体标题栏Label1Text请输入1500之间的数字用于提示输入值TextBox1Text 用来输入速度Button1Text确定 任务六:任务六:PubClassPubClass类和任务七:类和任务七:Sp
25、eedSpeed类类项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发u事件是类中的另一成员;事件是类中的另一成员;u事件是可以通过代码响应或事件是可以通过代码响应或“处理处理”的操作。的操作。u事件驱动的应用程序执行代码以响应事件。每事件驱动的应用程序执行代码以响应事件。每个窗体和控件都公开一组预定义事件,可根据个窗体和控件都公开一组预定义事件,可根据这些事件进行编程。这些事件进行编程。u如果发生其中一个事件并且在相关联的事件处如果发生其中一个事件并且在相关联的事件处理程序中有代码,则调用该代码。理程序中有代码,则调用该代码。u事件可由用户操作(如单击鼠标或
26、按某个键)、事件可由用户操作(如单击鼠标或按某个键)、程序代码或系统生成。程序代码或系统生成。任务六:任务六:PubClassPubClass类和任务七:类和任务七:SpeedSpeed类类项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发u对象引发的事件类型会发生变化,但对于大多对象引发的事件类型会发生变化,但对于大多数控件,很多类型是通用的。数控件,很多类型是通用的。u事件处理程序是绑定到事件的方法。当引发事事件处理程序是绑定到事件的方法。当引发事件时,执行事件处理程序内的代码。每个事件件时,执行事件处理程序内的代码。每个事件处理程序提供两个处理事件的参数
27、。处理程序提供两个处理事件的参数。u例如,大多数对象都会处理例如,大多数对象都会处理 ClickClick 事件。如果用事件。如果用户单击窗体,就会执行窗体的户单击窗体,就会执行窗体的 Click Click 事件处理程事件处理程序内的代码。序内的代码。任务六:任务六:PubClassPubClass类和任务七:类和任务七:SpeedSpeed类类项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发u按钮(按钮(ButtonButton)控件的单击事件控件的单击事件1)1)功能功能把文本框(把文本框(textBox1textBox1)中的数据保存到公共类(中的数
28、据保存到公共类(PubPubClassClass)中的静态字段中的静态字段kkkk中,并关闭窗体。中,并关闭窗体。2)2)设计思路设计思路判断输入到文本框中的数据是否满足要求,如果满判断输入到文本框中的数据是否满足要求,如果满足保存,否则输出一提示消息框。足保存,否则输出一提示消息框。根据人们日常习惯,设置的数据越大,运动的速度根据人们日常习惯,设置的数据越大,运动的速度就会越快,但是,对于时间控件(就会越快,但是,对于时间控件(timertimer)而言却恰而言却恰恰相反,其恰相反,其interval interval 属性值设置越小,调用的速度属性值设置越小,调用的速度就会越快,因此,相关
29、数据设置语句可参考如下:就会越快,因此,相关数据设置语句可参考如下:PubClass.kkPubClass.kk=501-temp=501-temp任务六:任务六:PubClassPubClass类和任务七:类和任务七:SpeedSpeed类类项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发定义整型变量temp读取文本框中值给temp0temp500?显示数据不符合要求消息框temp赋给PubClass.kk关闭当前窗体开始结束TF任务六:任务六:PubClassPubClass类和任务七:类和任务七:SpeedSpeed类类项目:贪吃蛇游戏设计项目:贪吃蛇
30、游戏设计WinFormWinForm项目开发项目开发任务六:任务六:PubClassPubClass类和任务七:类和任务七:SpeedSpeed类类项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发工作小结工作小结u使用使用RandomRandom类及方法产生随机数;类及方法产生随机数;u能分析及设计能分析及设计FloorFloor类;类;u分析设计与实现分析设计与实现FloorFloor类的构造函数;类的构造函数;u分析设计与实现分析设计与实现FloorFloor显示方法;显示方法;u查蛇是否撞墙和撞到它自身方法查蛇是否撞墙和撞到它自身方法;u分析设计与实现随机产生一个豆方法;分析设计与实现随机产生一个豆方法;u分析设计与实现显示豆方法;分析设计与实现显示豆方法;u分析设计与实现分析设计与实现PubClassPubClass类类u分析设计与实现分析设计与实现SpeedSpeed类类 项目:贪吃蛇游戏设计项目:贪吃蛇游戏设计WinFormWinForm项目开发项目开发任务布置任务布置1课下进一步修改和扩展项目;把电子稿上传课下进一步修改和扩展项目;把电子稿上传;2 2完成本任务的小结;完成本任务的小结;3 3以小组为单位预设计项目的工作任务八以小组为单位预设计项目的工作任务八StartStart类类设计设计