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