项目:贪吃蛇游戏设计 工作任务三:块类(Block)设计 工作任务四:蛇类(Snake)设计

Slides:



Advertisements
Similar presentations
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
Advertisements

地理信息系统的空间特性 空间实体及其描述 空间问题论述 空间处理方法 北京大学遥感与GIS研究所 程承旗.
人 工 智 慧 報 告 五子棋AI設計 報告者 : 潘輝銘.
现代农业创业指导 广西省兴安县农广校.
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
第六章 证券投资的技术分析 刘 燕.
Flappy bird 结题报告.
四資二甲 第三週作業 物件導向程式設計.
项目:贪吃蛇游戏设计 工作任务一:系统设计(system design) 工作任务二:豆类(Bean)设计
102學年度預算編製說明會 主辦單位:會計室 102/02/22.
中国公务员制度 主讲:吴春华 教授 温志强 副教授.
第 5 章 流程控制 (一): 條件分支.
第五章 树 东南大学计算机学院 方效林 本课件借鉴了清华大学殷人昆老师 和哈尔滨工业大学张岩老师的课件.
密室逃脫在教學上的應用 綜合活動領域輔導團 林蓉姿.
C#程序设计 10软件1、2班 王槐彬 计算机工程学院.
第二章 JAVA语言基础.
AOP实践 演讲人:陈思荣.
第9课 北美大陆上的新体制 导入新课 新课教学 课堂小结 知识结构 巩固练习
C#程序设计 c# programming 泛型 C#程序设计课程组.
控制流程 邏輯判斷 迴圈控制.
第二章 C# 基础知识.
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
流程控制結構 4-1 流程控制與UML活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
第8章 列舉器與集合 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或供拷貝.
DEV 331 深度探索 Microsoft Visual C# 2.0
项目五 窗体上绘图 任务列表: 1、在窗体上绘制各种基本图形 2、在窗体上绘制文本.
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
Ch13 集合與泛型 物件導向程式設計(2).
·线性表的定义及ADT ·线性表的顺序存储结构 ·线性表的链接存储结构 · 单向循环链表 · 双链表、双向循环链表 · 一元多项式的加法
程式設計實作.
C++ with Managed Extensions
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
第9章 多线程 王德俊 上海交通大学继续教育学院.
第4章 数组和集合 4.1 一维数组 4.2 二维数组 4.3 Array类 4.4 交错数组 4.5 ArrayList类
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C#程序设计基础 第二章 数据类型.
P2P聊天工具.
Animation(動畫) 靜宜大學資工系 蔡奇偉 副教授
第三章 C# 基础知识.
第三章 链表 单链表 循环链表 多项式及其相加 双向链表 稀疏矩阵.
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
第五章 介面/集合/泛型 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或供拷貝.
程式結構&語法.
计算机网络概述 计算机网络原理与技术.
数据块中的数据存储 目录 页 目标 …… 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型
Chapter 2 基本語法.
C++复习2----类与对象.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
程式的時間與空間 Time and Space in Programming
第三章 数据抽象.
第5章 文本与字体 2019/4/25 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2019/4/25 Huang Weitong.
Object-Oriented Programming in C++ 第二章 类和对象
第二章 Java语法基础.
目标 流程控制 字符串处理 C# 的类和对象 C# 访问修饰符 C# 构造函数和析构函数.
LINQ 語法簡介 設計人:顏嘉君.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
硬幣遊戲解題詳解 王豐緒 銘傳大學資訊工程學系.
C# 匿名委派 + Lambda + Func 建國科技大學 資管系 饒瑞佶.
数据块中的数据存储 目录 页 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型
所得稅法第14條、第126條修正條文 薪資所得計算方式二擇一 定額減除 特定費用減除 維持現行薪資所得特別扣除額20萬元減除方式
第2章 Java语言基础.
MenuStrip by Szeto CY Visual C# 2008.
Chapter 2 Entity-Relationship Model
判斷(選擇性敘述) if if else else if 條件運算子.
本节内容 在堆中创建对象 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 Java基本语法 讲师:复凡.
Presentation transcript:

项目:贪吃蛇游戏设计 工作任务三:块类(Block)设计 工作任务四:蛇类(Snake)设计 常州工程职业技术学院 计算机技术系

工作任务三:Block类 块(Block)类分析 在贪吃蛇游戏中,块用来构成蛇,在蛇出现时,要把构成蛇的块一个个输出(显示),在蛇消失时,要把块消除掉,显示和消除哪一个块都要由位置决定,并且由于蛇是由多个块构成的,为了区分,每个块要有一个序号。 《C#程序设计》

块(Block)类 1)字段: private int number; private Point origin; 2)属性: public int Number public Point Origin 3)方法: public void Display(Graphics g) public void UnDisplay(Graphics g) 《C#程序设计》

块(Block)类实现 1)字段和属性 字段origin和属性Origin的类别是Point结构; 字段number和属性Number都是整型数据。 2)方法 ⑴Display方法 ①功能:在显示器上画一个空心正方形(代表一个块) ②设计思路:直接在场地(窗体)上画一5*5的空心正方形。 ⑵UnDisplay方法 功能:把显示在显示器上的块(空心正方形)给消除掉。 实现:在原位置重新画块(空心正方形)。与上面不同的是,用背景颜色重新画,消除了原来的块。 《C#程序设计》

Pen类 定义用于绘制直线和曲线的笔对象。 构造函数之一为:public Pen(Color); 如:Pen redPen=new Pen(Color.Red); 《C#程序设计》

工作任务四:Snake类 蛇(Snake)类分析 蛇由多个块组成,所以要包含一个整型数据,保存蛇头的编号即蛇的长度; 要有一个Point对象,保存蛇头的位置; 要有一个ArrayList对象,用于存放组成蛇的所有块; 蛇在场地运动,要用一个整型数据标识它的运动方向; 蛇要在场地中不断移动,如果蛇吃了豆,它自身要增长一块; 蛇的运行过程,就是蛇的不断显示过程; 在蛇消失时,要把块消除掉; 蛇运行过程中要不断地改变方向; 如果蛇头碰到了它自身,蛇就要死亡即程序结束。 《C#程序设计》

工作任务四:Snake类 蛇类要包含下列成员: 1)字段: ArrayList blockList ; private int headNumber; private Point headPoint; private int score; private int direction = 1;//默认是向右 《C#程序设计》

工作任务四:Snake类 2)属性 public int Score public int HeadNumber public Point getHeadPoint public bool getHitSelf public int Direction 3)构造函数 public Snake() public Snake(Point vertex, int count)//建立开始的蛇 《C#程序设计》

工作任务四:Snake类 4)方法: Display(Graphics g) UnDisplay(Graphics g) TurnDirection(int pDirection) Growth() Reset(Point vertex, int count) 《C#程序设计》

工作任务四:Snake类 蛇(Snake)类实现 ⒈构造函数 public Snake(Point vertex, int count) 1)功能 根据游戏开始时蛇运动的默认方向和给定的参数,确定组成蛇的各块的位置,然后把各块添加到blockList中去;并初始化蛇的长度(蛇头的序数)字段headNumber 和蛇头位置字段headPoint 《C#程序设计》

工作任务四:Snake类 2)设计思路 首先创建一个ArrayList对象blockList,并实例化为count个元素,然后根据游戏开始时蛇运动的默认方向和给定场地位置参数vertex,确定蛇的开始位置,最后通过一个转count圈的循环,依次找到组成蛇的各块,把它们存入blockList数组中,其他字段赋值即可。 创建ArrayList对象并实例化: blockList=new ArrayLis(count); 开始蛇的第一块位置: Point p = new Point(vertex.X + 25, vertex.Y + 25); 《C#程序设计》

工作任务四:Snake类 创建块并给属性赋值如下: Block bb=new Block(); bb.Origin=p; bb.Number=i+1;//从蛇尾开始序号 把块添加到blockList中: blockList.Add(bb); 《C#程序设计》

工作任务四:Snake类 《C#程序设计》

工作任务四:Snake类 《C#程序设计》

工作任务四:Snake类 2.属性 在蛇类中,有4个字段,其中字段blockList、direction和headNumber只在蛇类内部使用,所以不必设置与它对应的属性。但为了判断蛇是否碰撞到它自身,增加了一个只读属性getHitSelf属性,故设置了二个属性。 1) getHeadPoint属性 在蛇类外只需要读取headPoint字段的值,把它的属性设计为只读属性 《C#程序设计》

工作任务四:Snake类 2) getHitSelf属性 设置此属性的目的是判断蛇在运行过程中是否碰撞到了它自身,如果蛇碰撞到了它自己,蛇就死亡,游戏结束。在这个属性中,只要读取结果,所以设计成只读属性。 ⑴设计思路 通过一个循环,遍历所有组成蛇的块,判断非蛇头块的位置是否与蛇头的位置相同,如果有相同的,就是蛇碰撞到它自身,否则,没有碰撞到它自身。因为要遍历整个blockList字段中保存的组成蛇的所有块,所以要用IEnumerator 接口。 《C#程序设计》

工作任务四:Snake类 知识点介绍:IEnumerator 接口 支持对非泛型集合的简单迭代。 命名空间:System.Collections 程序集:mscorlib(在 mscorlib.dll 中) 枚举数可用于读取集合中的数据,但不能用于修改基础集合。 最初,枚举数定位在集合中第一个元素前。Reset 方法还会将枚举数返回到此位置。在此位置,调用 Current 属性会引发异常。因此,在读取 Current 的值之前,必须调用 MoveNext 方法将枚举数提前到集合的第一个元素。 《C#程序设计》

工作任务四:Snake类 在调用 MoveNext 或 Reset 之前,Current 返回同一对象。MoveNext 将 Current 设置为下一个元素。 如果 MoveNext 越过集合的末尾,则枚举数将被放置在此集合中最后一个元素的后面,而且 MoveNext 返回 false。当枚举数位于此位置时,对 MoveNext 的后续调用也返回 false。如果最后一次调用 MoveNext 返回 false,则调用 Current 会引发异常。若要再次将 Current 设置为集合的第一个元素,可以调用 Reset,然后再调用 MoveNext。 《C#程序设计》

工作任务四:Snake类 判断组成蛇的其他块与蛇头的位置是否相同,可用Point.Equals(point headPoint)方法,如果结果为true,两块的位置相同,否则两块的位置不同。 定义一IEnumerator接口变量myEnumerator,并由blockList的GetEnumerator方法初始化它。 IEnumerator myEnumerator=blockList. GetEnumerator(); 读取myEnumerator的Current属性来获得当前元素: Block b = (Block)myEnumerator.Current; 《C#程序设计》

工作任务四:Snake类 说明: 本属性也可以定义成方法,基本原理相同。这里将它处理成属性,只是为了让大家了解属性不仅能完成对字段的存取处理,也可以完成其它功能。 《C#程序设计》

工作任务四:Snake类 3.方法 在蛇类中,相比较而言方法都比较复杂,所以这部分是蛇类的重点。 1)蛇显示方法(Display) ⑴功能:在蛇的运行过程中显示蛇。 ⑵设计思路:把显示在场地上蛇的最后一块消除掉,且把蛇原来的最后一个块从blockList中移出,然后遍历blockList中的所有块,把它们输出,当找到头块,根据当前的运动方向,在头块前增加一个新块,作为新的头块,并显示它,最后显示原头块。 《C#程序设计》

工作任务四:Snake类 BlockList是ArrayList对象,可以通过访问数组的方法来访问,把它的第一个元素读出并给块b。 b=(Block)blockList(0); 从blockList中移出(消除)第一个元素用它的RemoveAt(元素索引号)方法。 blockList.RemoveAt(0); 由于蛇尾块被消除了,blockList中各块的序数要依次改变为它原来的序数减1,所以在遍历其他块找蛇头时,要把每块的序数属性取出处理。本方法是显示蛇方法,不管是新块还是老块都要显示出来。 《C#程序设计》

工作任务四:Snake类 《C#程序设计》

工作任务四:Snake类 2)蛇消除方法(UnDisplay) 当蛇死亡即程序结束后,如果要重新开始,必须把死蛇给消除掉,就要用此方法。 ⑴功能:消除场地上的死蛇。 ⑵设计思路:通过循环,遍历整个blockList,调用块的消除方法UnDisplay把场地上的死蛇消除掉。 《C#程序设计》

工作任务四:Snake类 《C#程序设计》

工作任务四:Snake类 3)转向方法(TurnDirection) ⑴功能:根据当前蛇的运行方向和传递来的参数来设置蛇的新运动方向。 ⑵设计思路 根据蛇原来的运动方向(direction),结合键盘的上、下、左、右键的按键操作,利用多分支语句(switch),分别判断蛇的最终运动方向。 《C#程序设计》

工作任务四:Snake类 4)蛇生长方法(Growth) ⑴功能:当蛇吃到一粒豆后,蛇就要在它的当前头前增加一块即蛇增长。 ⑵设计思路 找到蛇头,根据蛇的运行方向,在蛇头前面增加一个块。即通过一个循环,遍历blockList中的各块,找到蛇头,然后在它前面增加一块。遍历blockList中各块的方法与上面getHitSelf属性中相同;在蛇头前增加一块的位置由原来的蛇头块位置和蛇的运动方向决定。 《C#程序设计》

工作任务四:Snake类 《C#程序设计》