资源描述
Click to edit Master title,Click to edit Master text,Second level,Third level,Fourth level,Fifth level,*,项目,:,贪吃蛇游戏设计,常,项目:贪吃蛇游戏设计,工作任务一:系统设计,(system design),工作任务二:豆类(,Bean,)设计,1,工作目标,终极目标,主界面:,2,自定义速度界面,3,促成目标,1.,完成,贪吃蛇游戏,Bean,类设计;,2.,完成,贪吃蛇游戏,Block,类设计;,3.,完成,贪吃蛇游戏,Snake,类设计;,4.,完成,贪吃蛇游戏,Floor,类设计;,5.,完成,贪吃蛇游戏,Form1,类设计(界面);,6.,完成,贪吃蛇游戏,窗体菜单设计;,7.,完成,贪吃蛇游戏,键盘操作处理;,8.,完成,贪吃蛇游戏,程序自动运行。,4,工作任务一:总体设计,工作任务二:,Bean,类的实现,工作任务三:,Block,类,的实现,工作任务四:,Snake,类,的实现,工作任务五:,Floor,类,的实现,工作任务六:,PubClass,类,的实现,工作任务七:,Speed,类,的实现,工作任务八:主界面(,Start,类),的实现,工作任务,5,知识准备,类与对象,类、对象、字段、属性和方法,类的基本概念,对象(实体),(分)类,男人、女人、高人、矮人、胖人,人,狗、猫、兔、鸡、狼,动物,台式电脑、笔记本电脑、服务器,电脑,对象,类,抽象化,具体化,6,类的特征数据:用,字段,表示(变量),如人:年龄、名字和身高等;,动物:毛的颜色、,腿,的数量和跑的速度等;,电脑:,CPU,型号、,CPU,品牌、内存容量等。,类的行为:用,方法,表示,如人:能走路、干活等;,动物:能跑、找食等;,电脑:能帮助我们处理事务、计算表达式的值,知识准备,类与对象,7,类的字段和方法都叫,类的成员,。,类是对象的模板,定义类的目的是为了描述具体的对象。,实例:设计汽车类(,Car),知识准备,类与对象,8,2.程序解读,类定义,class,类名,类体(类成员),类成员的访问属性,private,和,public,private(,私有)成员:只能在定义它的类中被访问,在定义它的类外不能被访问。,public(,公共)成员:既可以在定义它的类中被访问,也在定义它的类外被访问。,注意:,private,是默认的,。,知识准备,类与对象,9,字段,类中的字段实际上是变量,因此字段的定义与变量定义相同,形式如下:,数据的访问说明符 数据类型 字段名,方法,小汽车能启动也能停下来,所以分别用,Start,方法和,Stop,方法模汽车的起动和停止。,知识准备,类与对象,10,创建对象,分两步:,声明对象,类名 对象名,;,如:,Car myCar;,对象实例化,对象名=,new,类名(),;,如:,myCar=new Car();,由类创建了对象后,每一个对象都有了类中的,所有非静态成员,,即对象,myCar,具有了,wheels、trademark、maxspeed,字段和,Start,和,Stop,方法。,知识准备,类与对象,11,上面创建类对象的两步可以合并成一步:,类名 对象名=,new,类名(),;,如:,Car myCar=new Car();,类成员的访问,在类的作用域内即在类的内部,成员可以由类的所有方法直接访问,并可用它的名字进行引用。,在类的作用域外即在类的外部,对象成员的存取必须通过该类或该类的对象和点操作符(类成员存取操作符)来存取。,对象的成员存取方式如下:,对象.成员名,知识准备,类与对象,12,属性,属性主要是用来,访问字段,的,它有访问器。这些访问器用来,读取或写入,字段值,也可以对字段和属性进行计算,然后将计算结果给相应的字段。,属性也需要声明,格式如下:,类型 属性名,访问器声明,知识准备,类与对象,13,属性的访问器:,1),get,访问器,通过,get,访问器读取字段值。,get,访问器与无参数的方法结构相似,它必须返回一个属性类型的值。,2),set,访问器,通过,set,访问器给字段赋值。,set,访问器与具有单个属性类型值参数和返回,void,的方法结构相似,这个属性类型值参数是它隐含的名为,value,的参数。在,set,访问器中最简单的是把,value,值赋给字段。,知识准备,类与对象,14,如:,private int wheels;/,私有字段:轮子个数,public int Wheels/,访问,wheels,的属性,get,return wheels;,set,wheels=value;,知识准备,类与对象,15,根据类中属性的实际需要,把属性分成下面几种:,1),读写属性,:包括,get,和,set,两个访问器,既能读取属性值,也能向属性写入。,2),只读属性,:只包括,get,访问器,即只能读取属性值。,3),只写属性,:只包括,set,访问器,即只能向属性写入。,知识准备,类与对象,16,实例构造函数,1.构造函数,构造函数是,与类同名,的,特殊方法,成员,。它是实现,初始化类实例所必须操作的成员,。,构造函数名(可选形参表),方法体,知识准备,类与对象,17,默认构造函数,在,C#,中,如果类不包括任何实例构造函数声明,则自动提供一个默认的无参数实例构造函数。,如:上例中语句,myCar=new Car();,中的,Car(),,它是默认的构造函数,形式如下:,public Car(),并使用默认值初始化对象字段。,默认:数值类型为0,,bool,为,false,,引用为,null,知识准备,类与对象,18,实例构造函数重载,定义:当类定义中含有两个以上其参数个数或类型或种类不同的实例构造函数时,称为实例构造函数重载。,程序解读,1),程序中两种构造函数比较,程序中添加了两个类的构造函数,一个是空构造函数;一个是带参数的构造函数。,空构造函数,public Car()/,空构造函数,知识准备,类与对象,19,用此构造函数创建的类对象,是没有具体值的对象,只是把对象字段设置为默认值:数值类型为,0,,,bool,类型为,false,,,引用类型为,null,。,注意,:创建了带参数的构造函数后,要用空构造函数实例化对象,必须创建此空构造函数,否则出现编译错误。,带参数的构造函数,public Car(string tr,int wh,float mas)/,带参数的构造函数,trademark=tr;,wheels=wh;,maxspeed=mas;,用此构造函数创建类对象,要传递三个参数,在函数体中依次初始化三个字段,这样用此构造函数创建的对象就是具体的对象了。,知识准备,类与对象,20,2),程序中两种实例化对象比较,用空构造函数实例化对象,由于用此创建的对象不是具体的,还得对字段赋值后才能使用。,myCar1=new Car();/,实例化对象,myCar1.Wheels=4;,myCar1.Maxspeed=230;,myCar1.Trademark=,宝马,;/,给字段赋值,output=myCar1.car_message();,用带参数的构造函数实例化对象,由于用此创建的对象是具体对象,所以可以直接使用,myCar2=new Car(,红旗,4,180);/,实例化对象,output=myCar2.car_message();,知识准备,类与对象,21,工作任务一:总体设计,项目功能描述,主窗体布局,项目的总体结构,Start,类是顶层类,它主要调用,Floor,类来显示场地,另外还要使用,Speed,类和,PubClass,类;,Floor,类调用,Snake,类和,Bean,类在场地上显示蛇和豆;,Snake,类调用,Block,类来组成蛇,。,22,工作任务二:,Bean,类,豆(,Bean),类分析,在此游戏中,首先会在场地的特定位置出现一个豆,豆要不断被蛇吃掉,当豆被吃掉后,原豆消失,又在新的位置出现新的豆。这些豆都是由豆(,Bean),类创建的对象。,1)豆类的字段,private Point origin;,2),属性:,public Point Origin,3),方法:,public void Display(Graphics g),public void UnDisplay(Graphics g),23,豆(,Bean),类实现,1.,字段和属性,注意字段和属性的类别是,Point,结构类型的。,Point,结构,Point,结构表示在二维平面中定义点的整数,X,和,Y,坐标的有序对。,命名空间:,System.Drawing,Point,结构有两个属性:,X,获取或设置此,Point,的,X,坐标;,Y,获取或设置此,Point,的,Y,坐标。,读取和设置属性,结构变量.属性;,如:,pt1.X=23;/,写入属性,int z=pt1.X;/,读取属性,工作任务二:,Bean,类,24,2.方法,1),Display,方法,功能:在显示器上显示一个豆(实心正方形),设计思路:,直接在场地(窗体)上画一个5*5的实心矩形。,工作任务二:,Bean,类,25,GDI+(Graphics Device Interface Plus),是,Microsoft,的新一代二维图形系统,它是完全面向对象的。,GDI+,包括3部分:二维矢量图形绘制、图像处理和文字显示。要在,Windows,窗体中显示文字或绘制图形,必须要使用,GDI+。,GDI+,提供了多种画笔、画刷、图像等图形对象,,GDI+,使用的各种类大都包含在命名空间,System.Drawing,中。,知识准备,GDI+,26,C#,中用,GDI+,画基本图形的步骤:,创建,Graphics,对象,创建画笔或画刷对象,用,Graphics,对象方法画图,知识准备,GDI+,27,创建,Graphics,对象,1调用某控件或窗体的,CreateGraphics,方法来获取对,Graphics,对象的引用,如:,Graphics g;,g=this.CreateGraphics();,2.接收对图形对象的引用,该对象为窗体或控件的,Paint,事件中,PainEventArgs,的一部分。在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用。,知识准备,GDI+,28,Color,结构,表示一个,RGB,颜色,所在的命名空间:,System.Drawing,可利用,Color,结构的一个对象来指定画笔、画刷和其他在,Graphics,画图表面使用的工具的颜色。,Color,结构中的静态属性成员定义了很多系统颜色,要用这些系统颜色,可以直接从,Color,结构的属性中读取。,如:,Color.Red/,读取系统的红色,Color.Black/,读取系统的黑色,知识准备,GDI+,29,创建画刷,画刷是从类,Brush,中派生的,从此抽象基类派生出的类定义用于填充图形形状(如矩形、椭圆形、扇形、多边形和封闭路径)内部的对象和呈现文本对象。最常用的是,SolidBrush,,它的构造函数为,SolidBrush(,颜色);,如用此构造函数创建一个画刷:,SolidBrush redBrush=new SolidBrush(Color.Red);,知识准备,GDI+,30,GDI+,坐标系统,GDI+,在坐标系统中绘制直线、矩形和其他图形。您可以从各种各样的坐标系统中选择,但默认坐标系统的原点是在左上角,并且,x,轴指向右边,,y,轴指向下边。默认坐标系统的度量单位是像素。,知识准备,GDI+,31,画实心矩形(填充)方法,g.FillRectangle(Brush brush,int x,int y,int width,int height);,其中:,x、y,是所画矩形左上角的坐标,,width,是矩形的宽度,,height,是矩形的高度,,brush,是前面所定义的画刷。,如:,g.FillRectangle(redBrush,24,23,100,233);,注意:,在,C#,中画实心图形必须用画刷和,Fill,类方法。,知识准备,GDI+,32,2.方法,1),Display,方法,传递的参数是一个,Graphics,对象:,第一步创建红色画刷,SolidBrush b=new SolidBrush(Color.Red);,第二步画一实心矩形,g.FillRectangle(b,origin.X,origin.Y,5,5);,工作任务二:,Bean,类,33,2),UnDisplay,方法,功能:把显示在显示器上的豆(实心正方形)给消除掉。,设计思路:在原位置重新画豆(5*5的实心正方形)。与上面不同的是,用背景颜色重新画,消除了原来的豆。,工作任务二:,Bean,类,34,总结,类与对象的概念;,类的成员及其功能;,用,GDI+,绘制简单图形的方法。,35,
展开阅读全文