Java游戏编程原理与实践教程 教学课件 ppt 作者 陈锐 夏敏捷 葛丽萍 Java游戏编程原理与实践教程课件 第8章--陈锐 夏敏捷主编

上传人:E**** 文档编号:89400309 上传时间:2019-05-24 格式:PPT 页数:18 大小:1.30MB
返回 下载 相关 举报
Java游戏编程原理与实践教程 教学课件 ppt 作者  陈锐 夏敏捷 葛丽萍 Java游戏编程原理与实践教程课件 第8章--陈锐 夏敏捷主编_第1页
第1页 / 共18页
Java游戏编程原理与实践教程 教学课件 ppt 作者  陈锐 夏敏捷 葛丽萍 Java游戏编程原理与实践教程课件 第8章--陈锐 夏敏捷主编_第2页
第2页 / 共18页
Java游戏编程原理与实践教程 教学课件 ppt 作者  陈锐 夏敏捷 葛丽萍 Java游戏编程原理与实践教程课件 第8章--陈锐 夏敏捷主编_第3页
第3页 / 共18页
Java游戏编程原理与实践教程 教学课件 ppt 作者  陈锐 夏敏捷 葛丽萍 Java游戏编程原理与实践教程课件 第8章--陈锐 夏敏捷主编_第4页
第4页 / 共18页
Java游戏编程原理与实践教程 教学课件 ppt 作者  陈锐 夏敏捷 葛丽萍 Java游戏编程原理与实践教程课件 第8章--陈锐 夏敏捷主编_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《Java游戏编程原理与实践教程 教学课件 ppt 作者 陈锐 夏敏捷 葛丽萍 Java游戏编程原理与实践教程课件 第8章--陈锐 夏敏捷主编》由会员分享,可在线阅读,更多相关《Java游戏编程原理与实践教程 教学课件 ppt 作者 陈锐 夏敏捷 葛丽萍 Java游戏编程原理与实践教程课件 第8章--陈锐 夏敏捷主编(18页珍藏版)》请在金锄头文库上搜索。

1、Java游戏编程原理与实践教程,主编 陈锐 夏敏捷 人民邮电出版社,“连连看”考验的是各位的眼力,在有限的时间内,只要把所有能连接的相同图案,两个一对地找出来,每找出一对,它们就会自动消失,只要把所有的图案全部消完即可获得胜利。所谓能够连接,指得是:无论横向或者纵向,从一个图案到另一个图案之间的连线不能超过两个弯(中间的直线不超过三根),其中,连线不能从尚未消去的图案上经过。 本章开发连连看游戏,游戏效果如图8-1所示。游戏具有统计消去方块的个数功能,这里由于是10行10列所以方块总数为100个。玩家时间是200秒,如果玩家无法通关,玩家可以重新开始新的一局游戏。,第8章 连连看游戏,游戏界面

2、和相关图片素材,8.2 程序设计的思路 8.2.1 连连看游戏数据模型 对于游戏玩家而言,游戏界面上看到“元素”千差万别、变化多端;但对于游戏开发者而言,游戏界面上的元素在底层都是一些数据,不同数据所绘制的图片有差异而已。因此建立游戏的状态数据模型是实现游戏逻辑的重要步骤。 连连看的游戏界面是一个NM的“网格”地图,每个网格上显示一张图片。但对于游戏开发者来说,这个网格只需要用一个二维数组来定义即可,而每个网格上所显示的图片,对于底层的数据模型来说,不同的图片对应于不同的数值即可。图8-2显示了数据模型的示意。,8.2 程序设计的思路,对于图8-2所示的数据模型,只要让数值为-1(BLANK_

3、STATE)的网格上不绘制动物图片,其他数值是动物方块的图像的 ID。非-1(BLANK_STATE)的网格则绘制相应的动物图片,就可显示出连连看的游戏界面。本程序实际上并不是直接使用int二维数组来保存游戏的状态数据,而是采用一维数组m_map。对地图中的行列数的表达,用一个转换法则即可。 例如:点(x1,y2)对应的数组元素m_map(y2 * m_nCol + x1)。其中m_nCol 是总列数。当然数组元素下标也可换算出在“网格”地图中坐标点。,8.2 程序设计的思路,8.2. 2 动物方块布局 连连看游戏数据模型设计好了。在游戏开始前,怎么对它进行初始化呢?下面一起来进行分析。由于方

4、块需要成对地出现,因此在做地图初始化的时候,不应该仅仅对动物方块的图像ID做简单的随机取数,然后将该随机选出来的物件放到地图区域中去就了事,而是需要成对地对对动物方块的图像进行选取,就是说地图区域中的小方块必须是偶数个才行。但是,怎样使方块图案成对出现呢?这里就需要引入一个临时地图tmpMap,该临时地图的大小和实际地图m_map的大小一致。并且先添置好4组完全一样的图像类型ID数据(0 m_nCol * m_nRow /4)。也就是说每种图像方块有4个。 首先,我们可以先按顺序把每种动物方块(实际上就是标号ID)排好放入ArrayList列表tmpMap(临时的地图)中,然后再随机从tmpM

5、ap(临时的地图)中取一个动物方块放入地图m_map中。实际上程序内部是不需要认识动物方块的图像的,只需要用一个ID来表示,运行界面上画出来的动物图形是根据地图中ID取资源里的图片画的。如果ID的值为-1(BLANK_STATE),则说明此处已经被消除掉了。,8.2.3 连通算法 那么分析一下连接的情况可以看到,一般分三种情况,如图8-3所示:,8.2.3 连通算法 (1)直连方式 在直连方式中,要求两个选中的方块x或y相同,即在一条直线上。并且之间没有其他任何图案的方块。在3中连接方式中最简单。 (2)一个折点 其实相当于两个方块划出一个矩形,这两个方块是一对对角顶点,另外两个顶点中某个顶点

6、(即折点)如果可以同时和这两个方块直连,那就说明可以“一折连通”。 (3)两个折点 这种方式的两个折点(z1,z2)必定在两个目标点(两个选中的方块)p1,p2所在的x方向或y方向的直线上。 按p1(x1,y1)点向四个方向探测,例如向右探测,每次x1+1,判断z1(x1+1,y1)与p2(x2,y2)点可否形成一个折点连通性,如果可以形成连通,则两个折点连通,否则直到超过图形右边界区域。假如超过图形右边界区域,则还需判断两个折点在选中方块的右侧,且两个折点在图案区域之外连通情况是否存在。此时判断可以简化为判断p2点(x2,y2)是否可以水平直通到边界。,经过上面的分析,对两个方块是否可以抵消

7、算法流程图如图8-4所示。根据图8-4所示的流程图,对选中的两个方块(分别在(x1,y1)、(x2,y2)位置)是否可以抵消的判断如下实现。把该功能封装在IsLink()方法里面 .,一个折点连通使用OneCornerLink()实现判断。其实相当于两个方块划出一个矩形,这两个方块是一对对角顶点,见图8-5两个黑色目标方块的连通情况,右上角打叉的位置就是折点。左下角打叉的位置不能与左上角黑色目标方块连通,所以不能作为折点。,/ / 一个折点连通 / boolean OneCornerLink(int x1, int y1,int x2, int y2) if (x1 x2) /目标点(x1,y

8、1),(x2,y2)两点交换 int n=x1; x1=x2; x2=n; n=y1; y1=y2; y2=n; ,if (y2 y1) /(x1,y1)为矩形左下顶点,(x2,y2)点为矩形右上顶点 /判断矩形右下角折点(x2,y1)是否空 if (m_mapy1 * m_nCol + x2 = BLANK_STATE) if (Y_Link(x1, x2, y1) ,else /(x1,y1)为矩形左上顶点,(x2,y2)点为矩形右下顶点 /判断矩形左下角折点(x1,y2)是否空 if (m_mapy2 * m_nCol + x1 = BLANK_STATE) if (Y_Link(x1,

9、 x2, y2) ,两个折点连通使用TwoCornerLink ()实现判断。按p1(x1,y1)点向四个方向探测新z2点与p2(x2,y2)点可否形成一个折点连通性。 / / 两个折点连通 / boolean TwoCornerLink(int x1, int y1, int x2, int y2) if (x1 x2) int n = x1; x1 = x2; x2 = n; n = y1; y1 = y2; y2 = n; ,/右 int x, y; for (x = x1 + 1; x = m_nCol; x+) if (x = m_nCol) /两个折点在选中方块的右侧,且两个折点在

10、图案区域之外 if (XThrough(x2 + 1, y2, true) z2.x = m_nCol; z2.y = y1; z1.x = m_nCol; z1.y = y2; return true; else break ; if (m_mapy1 * m_nCol + x != BLANK_STATE) break; if (OneCornerLink(x, y1, x2, y2) z2.x = x; z2.y = y1; return true; ,8.2.4 智能查找功能的实现 如果找不到匹配的第二个选定方块,则如图8-7(a)编号加1重新选定第一个选定方块(即1号方块)进入下一轮

11、,然后在这个基础上做遍历查找第二个选定方块,即如图8-7(b)从2号开始按照2,3,4,5,6,7顺序进行查找第二个选定方块,直到搜索到最后一块(即15号方块);那么为什么从2开始查找第二个选定方块,而不是0号开始呢?因为将1号方块选定为第一个选定方块前,0号已经作为第一个选定方块对后面的方块进行可连通的判断了,它必然不会与后面的方块连通。 如果找不到与1号方块连通且相同的,于是编号加1重新选定第一个选定方块(即2号方块)进入下一轮,从3号开始按照3,4,5,6,7顺序进行查找第二个选定方块。,图8-8 智能查找匹配方块流程图,8.4 程序设计的步骤 8.4.1 设计游戏界面窗体(LLKFrame.java) 在项目中创建一个继承JFrame的LLKFrame类,用于显示游戏面板LLKPanel和实现游戏逻辑。由于其他类访问显示已消去方块数量的文本框textarea1,所以textarea1定义为static。 LLKFrame窗体有两个面板组成,一个面板panel1添加“重来一局”“退出”按钮及显示已消去方块数量的文本框textarea1。另一个面板centerPanel显示游戏界面。 8.4.2 设计游戏面板类(LLKPanel.java) 游戏面板类LLKPanel实现方块的显示、显示选中方块之间连接示意线,智能查找功能等游戏功能。,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号