JavaSE连连看游戏案例手册.docx_第1页
JavaSE连连看游戏案例手册.docx_第2页
JavaSE连连看游戏案例手册.docx_第3页
JavaSE连连看游戏案例手册.docx_第4页
JavaSE连连看游戏案例手册.docx_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

连连看案例手册北京中软国际教育集团案例名称:连连看游戏案例性质:个人项目研发周期:10天(2周)案例所需核心知识点:1、 类的基本知识:属性、构造方法、方法、实例化2、 二维数组3、 for循环/while循环4、 switch分支/if分支5、 抽象类、抽象方法的概念6、 继承的概念7、 Runnable接口,线程基本概念8、 javax.swing包中主要组件的使用a) JMenuBar、JMenu、JMenuItemb) JButtonc) JPanel9、 JComponent中的paintImmediately、repaint、paint方法10、 Graphics类的主要方法:drawImage、setClip、drawLine11、 对UI组件注册监听器的方法目录第1章功能说明51.1总体概述51.2具体功能说明51.2.1 显示应用主界面51.2.2 请选择关卡61.2.2.1 第1关 无变化61.2.2.2 第2关 向下串61.2.2.3 第3关 向上串71.2.2.4 第4关 向左串81.2.2.5 第5关 向右串81.2.3 请选择游戏玩法模型91.2.3.1 一折模型91.2.3.2 默认模型101.2.4 选择游戏图片101.2.4.1 默认101.2.4.2 图标图片111.2.5 其他功能111.2.5.1 玩新游戏111.2.5.2 时间条12第2章环境搭建132.1总体概述132.2 JDK的安装及使用132.3 Eclipse的安装及使用14第3章数据库设计15第4章功能实现154.1搭建工程基本结构154.2 实现静态界面184.2.1 只显示菜单的界面184.2.2 实现展现游戏场景以及时间条的面板214.2.3 将面板添加到主窗口中,完成最终静态GUI254.3 实现游戏场景能够随机生成264.3.1 创建抽象类AbstractGameModel264.3.2 创建AbstractGameModel的实现类294.3.3 使用GameModelDefault实现随机产生游戏场景304.4 实现只能通过直连方式相连的版本314.4.1 修改AbstractGameModel类324.4.2 修改GameModelDefault类344.4.3 修改MainPanel类354.4.4 修改MainFrame,启动通过MainPanel创建的线程对象404.5 实现能通过一折相连的版本414.5.1 创建Node类封装折点信息414.5.2 修改AbstractGameModel类434.5.3 AbstractGameModel子类GameModelOneTurn444.5.4 修改MainPanel类454.6 实现能通过两折相连的版本464.6.1 在AbstractGameModel中添加新算法474.6.2 创建新的模型子类GameModelTwoTurn484.6.3 修改MainPanel类484.7 实现记时功能494.8 实现玩新游戏功能514.9 实现可选择关卡功能524.9.1在AbstractGameModel中实现算法524.9.2修改MainPanel类534.9.3 修改MainFrame类544.10 实现可选择模型功能544.11 实现可选择图标功能55第1章 功能说明1231.1总体概述“连连看”游戏是一款常见游戏。游戏场景是一个由多种图标组成的矩形,可以成为游戏地图。玩家从游戏地图中寻找两个相同图标,点击进行连接。能够连接的图标除了必须相同外,还需要保证二者之间的路径上没有其他图标,可以通过直线连接、一折连接、两折连接。直线连接指的是两个图标之间的路径是一条直线,一折连接指的是两个图标之间的路径有一个折点,两折连接指的是两个图标之间的路径有两个折点。1.2具体功能说明1.2.1 显示应用主界面主界面中显示一个8行8列的游戏地图,其中的图标从一个资源图片中随机选择,相同的图标个数均为偶数个。显示时间进度条,玩新游戏按钮。应用有三个菜单,“请选择关卡”菜单下有第1关、第2关等五个菜单项,“请选择游戏玩法模型”下有一折模型和默认模型两种,选择游戏图片下有默认、图标图片两个菜单项。1.2.2 请选择关卡1.2.2.1 第1关 无变化默认情况下,请选择关卡的值为“第1关 无变化”,意思是当有图标被消掉时,剩下的图标位置不变。如下图所示。1.2.2.2 第2关 向下串如果选择,第2关 向下串,则当有图标消掉时,剩下的图标自动由上往下串行,填补空白位置。如下图所示。1.2.2.3 第3关 向上串如果选择,第3关 向上串,则当有图标消掉时,剩下的图标自动由下往上串行,填补空白位置。如下图所示。1.2.2.4 第4关 向左串如果选择,第4关 向左串,则当有图标消掉时,剩下的图标自动由右往左串行,填补空白位置。如下图所示。1.2.2.5 第5关 向右串如果选择,第5关 向右串,则当有图标消掉时,剩下的图标自动由左往右串行,填补空白位置。如下图所示。1.2.3 请选择游戏玩法模型1.2.3.1 一折模型用户选择一折模型后,意思是两个相同元素,只能通过直线或者一个折点的路径相连。如下图所示。需要两折才能相连,在该模型下不被允许一折方式相连,在该模型下被允许直线方式相连,在该模型下被允许1.2.3.2 默认模型用户选择一折模型后,意思是两个相同元素,可以通过直线、一个折点或者两个折点的路径相连。如下图所示。需要两折方式相连,在该模型下被允许一折方式相连,在该模型下被允许直线方式相连,在该模型下被允许1.2.4 选择游戏图片1.2.4.1 默认“默认”指的是游戏场景使用默认图标生成,也就是下图的图标。1.2.4.2 图标图片选择图标图片,则游戏场景使用另外的图标图片生成,如下图所示。1.2.5 其他功能1.2.5.1 玩新游戏玩家在任何时刻,只要点击“玩新游戏”按钮,游戏就重新开始,游戏地图重新生成,时间条也重新开始计时。 1.2.5.2 时间条通过时间条进行计时,游戏开始后,时间条逐渐缩短,时间条消失时,弹出时间耗尽的提示,游戏终止。时间条, 逐渐缩短。 第2章 环境搭建2.1总体概述该案例需要的软件有Java开发工具包JDK,以及集成开发环境Eclipse。2.2 JDK的安装及使用下载或拷贝安装文件(softwarejdk-6u30-windows-i586)后,直接双击默认安装即可。安装结束后,在系统盘的program files目录下,将创建如下目录结构,如图所示。JDK安装目录安装Java JDK后,为了能够直接使用命令提示符执行相关任务,需要配置环境变量。第一个环境变量名为java_home,变量值为JDK的安装目录,如图所示。java_home环境变量配置除了java_home外,还需要将JDK目录下的bin路径,配置到path变量中,以便能够使用JDK的工具。如图所示。path环境变量中追加JDK工具目录2.3 Eclipse的安装及使用把software adt-bundle-windows-x86-20130219目录直接拷贝到本地某一个目录下,该目录尽量简单,不要有中文或空格。不需要安装,可以直接使用。需要注意的是,该文件夹包括两部分,即Eclipse和Android平台SDK。其中Android部分与本案例无关,只是为了后续其他案例使用。adt-bundle-windows-x86-20130219的目录结构如下所示。其中eclipse目录即本案例需要使用的Eclipse工具,sdk是Android的工具包,与本案例无关。打开eclipse文件夹,双击eclipse.exe文件,即可以运行Eclipse。启动过程中,需要指定workspace的位置,即工作空间。如下图所示。上图中,选择了D:training目录为当前的工作空间,那么以后使用该Eclipse创建的工程都将存放在该目录下。点击OK按钮后将运行Eclipse,第一次启动将显示欢迎界面,可以关闭该界面,则显示如下所示首界面。正常启动后,就可以创建工程,进行应用开发。第3章 数据库设计本案例不需要使用数据库。第4章 功能实现4.1搭建工程基本结构首先创建一个Java Project,名字为lianliankan,在project layout处,选择第一个选项,即将工程目录作为源文件以及类文件的根目录。如下图所示,请注意图中强调部分。接下来,将JDK中的rt.jar包引入到工程中。右键点击工程,选择properties,弹出如下对话框。选择Java Build Path-LibrariesAdd External JARS,选择JDK安装后的目录下的jrelibrt.jar包,导入到工程中。由于笔者的JDK安装在C盘下,所以需要加入的rt.jar就存在于C:Program FilesJavajdk1.6.0_30jrelib目录下。4.2 实现静态界面4.2.1 只显示菜单的界面首先,让我们实现只显示菜单的静态界面,游戏中有三个菜单,分别是请选择关卡、请选择游戏玩法模型、选择游戏图片。每个菜单下又有不同数量的菜单项。目前实现的界面不显示游戏中的图片,也不注册监听,也就是点击菜单和按钮没有任何反应,仅实现最基本的静态界面。如下图所示。右键点击工程名称,创建一个Java class,指定其包名以及类名,并勾选生成main方法,该类将作为工程的主类运行。请注意包名和类名命名要遵守规范。如下图所示。将生成源代码MainFrame.java,主要代码如下所示。public class MainFrame public static void main(String args) 该类将作为应用的主窗口存在,因此应该继承API中的JFrame类,修改类的声明语句如下所示:public class MainFrame extends JFrame接下来,我们需要思考现阶段我们希望该类实现的功能。目前,我们希望能使用该类实现上图显示的静态界面,通过观察,我们需要一个菜单条对象,三个菜单对象,一个按钮对象。因此,接下来修改MainFrame类,如下所示。public class MainFrame extends JFrame/声明GUI中需要的菜单条、菜单、按钮JMenuBar menuBar = new JMenuBar();JMenu modelMenu = new JMenu();JMenu partMenu=new JMenu();JMenu imageMenu=new JMenu();JButton newGame = new JButton();/在构造方法中设置主窗口的尺寸、调用initFrame方法初始化GUI,并设置当前窗口可见public MainFrame() this.setSize(420, 585);initFrame();this.setVisible(true);/自定义私有的initFrame方法,对GUI进行布局,注册监听等private void initFrame() /* * param args */public static void main(String args) new MainFrame();可见,上述代码中,首先声明了并创建了需要使用的组件,在构造方法中设置了主窗口的尺寸,并调用initFrame方法进行初始化。main方法中创建MainFrame对象,显示静态GUI界面。接下来的主要任务是完成initFrame方法,将菜单中加入菜单项,最后把菜单条加入到主窗口中。initFrame方法的部分代码如下所示。/自定义私有的initFrame方法,对GUI进行布局,注册监听等private void initFrame() /设置关闭操作,点击关闭选项直接退出应用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/将布局管理器设置为null,也就是取消默认布局管理器的作用getContentPane().setLayout(null);this.setTitle(中软国际ETC连连看GUI);this.setResizable(false);/对三个菜单对象设置文本、字体助记符modelMenu.setText(请选择游戏玩法模型(M);modelMenu.setFont(new Font(微软雅黑, Font.PLAIN, 12);modelMenu.setMnemonic(M);partMenu.setText(请选择关卡(P);partMenu.setFont(new Font(微软雅黑, Font.PLAIN, 12);partMenu.setMnemonic(P);imageMenu.setFont(new Font(微软雅黑, Font.PLAIN, 12);imageMenu.setText(选择游戏图片(I);imageMenu.setMnemonic(I);/对imageMenu菜单,也就是“选择游戏图片”菜单下加入两个菜单项,即“默认”和“图标图片”JMenuItem defaultImageMenu=new JMenuItem();defaultImageMenu.setFont(new Font(微软雅黑, Font.PLAIN, 12);defaultImageMenu.setText(默认);imageMenu.add(defaultImageMenu);JMenuItem iconImageMenu=new JMenuItem();iconImageMenu.setFont(new Font(微软雅黑, Font.PLAIN, 12);iconImageMenu.setText(图标图片);imageMenu.add(iconImageMenu);至此,运行MainFrame类,可以实现本节目标,展示只有菜单的静态界面。MainFrame.java源代码参见src4.2.1MainFrame.java。4.2.2 实现展现游戏场景以及时间条的面板上节中实现的静态界面中只有菜单,该案例GUI中最主要的部分是游戏场景,本节将游戏场景以及时间条加入到界面中。最终实现效果如下图所示。创建一个新的Java类MainPanel,用来显示游戏场景以及时间条。如下图所示。生成的类如下所示:public class MainPanel该类要实现一个面板,因此继承JPanel类,修改上述代码,如下所示。public class MainPanel extends JPanel该面板中主要显示的就是时间条以及游戏场景。要生成游戏场景,首先需要准备好场景的资源图片。准备的资源文件时default.png,如下图所示:该资源图片中共有29个小图标,大小为40X50。在工程lianliankan根目录下创建文件夹res,将default.png拷贝到res目录下。目前,工程目录如下图所示。准备好游戏场景图片资源后,就需要修改MainPanel类,实现具体功能,该类的整体结构如下所示。public class MainPanel extends JPanel/缓冲图片对象,用来把图片存在内存中,处理结束后画到GUI中显示privateBufferedImage bImage;/图形对象,用来画游戏场景privateGraphics bGraphics;/用来保存游戏场景资源图片privateImage image;/用来保存当前游戏场景中,显示的小图片编号privateint map;public MainPanel() public void paint(Graphics g) public static void main(String args)在MainPanel类中声明4个属性,其中BufferedImage 类型的bImage用来把图片放在缓冲区内,Graphics类型的bGraphics用来画游戏场景,Image类型的image用来封装游戏资源图片,map用来保存随机选取的小图标编号。MainPanel类中声明一个构造方法,对属性进行赋值,接下来完成构造方法功能,如下所示:public MainPanel() /对map赋值,共8个长度为8的一维数组,每个数字表示小图片在资源图片中的编号.现阶段是模拟数据,后面将随机生成。map=new intnew int8,3,2,5,12,4,6,7,18,new int9,12,8,12,3,25,6,27,15,new int16,7,8,12,3,5,6,7,21,new int4,5,8,12,3,15,21,7,11,new int13,17,8,12,1,15,6,7,1,new int14,7,1,12,10,5,9,7,10,new int2,7,8,12,13,5,16,7,21,new int1,7,28,12,22,5,6,12,1;/res/default.png是游戏场景的资源文件,也就是游戏场景中的小图标都是从该文件中随机选取,包含29个小图片,大小为40*50,编号从左到右1-29image = Toolkit.getDefaultToolkit().createImage(res/default.png);/创建缓冲Image对象bImage = new BufferedImage(400, 550, BufferedImage.TYPE_INT_RGB);/通过缓冲Image对象生成Graphics对象bGraphics = bImage.getGraphics();/调用repaint方法,系统将自动调用paint方法repaint();this.setSize(402, 506);上述构造方法中,对map进行了模拟赋值,成为一个8X8的二维数组,那么最终显示的游戏场景也是8X8格式。后续修改过程中,map的值应该是随机生成,现阶段使用固定值进行测试。例如map中第一个数组是8,3,2,5,12,4,6,7,18,则表示当前游戏场景的一行显示的图标是default.png中从左到右数的第8个、第3个、第2个.图标。值得注意的是,构造方法中需要调用repaint()方法,调用repaint()方法后,将自动调用paint方法。接下来实现paint方法。如下代码所示。public void paint(Graphics g) / 设置画图区域为白色,大小为400*500bGraphics.setColor(Color.WHITE);bGraphics.fillRect(0, 0, 400, 500);/ 画一个240*20的cyan颜色矩形,用来表示时间条,游戏时计时使用bGraphics.setColor(Color.cyan);bGraphics.fillRect(5, 5, 240, 20);/ 通过循环,根据map中的编号,在指定区域画图,生成八行八列游戏场景。for (int i =0; i 8; i+) for (int j = 0; j 8; j+) if (mapij != 0) /设置有效画图区域的坐标和大小,大小是40*50,也就是一个小图标的大小bGraphics.setClip(j+1)*40,(i+1)*50,40,50);/将image对象,也就是resdefault.png图片进行显示,由于上面的语句设置了有效画图区域是一张小图的大小,因此通过计算坐标后,恰好把指定编号的小图标显示bGraphics.drawImage(image, (j+1)* 40 - (mapij - 1)* 40, (i+1)* 50, this);/ paint方法的参数g,调用drawImage方法,把已经在缓冲区的游戏场景绘制到GUI界面g.drawImage(bImage, 0, 0, this);paint方法中绘制了一个时间条,然后根据map数组中的数值,选取default.png中的图标显示到指定区域,生成游戏场景。上述paint方法中的难点是for循环部分,首先使用setClip方法设置了一个和小图标一样大小的有效区域,然后使用drawImage方法将default.png绘制出来。为了能测试阶段性效果,在MainPanel类中定义main方法,进行测试,如下代码所示。public static void main(String args)JFrame test=new JFrame();MainPanel panel=new MainPanel();test.add(panel);test.setSize(420, 585);test.setVisible(true);至此,MainPanel.java已经完成,运行该类后,显示本节最初的期待效果。default.png以及MainPanel.java存放在src4.2.2下。4.2.3 将面板添加到主窗口中,完成最终静态GUI目前已经实现了MainFrame以及MainPanel类,最终的GUI需要把MainPanel类实现的面板添加到MainFrame中,合成最终版的静态GUI。合成的步骤特别简单,在MainFrame中声明MainPanel变量,如下所示。/声明并创建显示游戏场景的MainPanelMainPanel panel=new MainPanel();然后在MainFrame中的initFrame方法中添加如下代码:设置游戏场景Panel的边界,并添加到主窗口panel.setBounds(5, 30, 404, 502);this.add(panel);至此,该案例的静态界面已经完成,MainFrame.java存放在src4.2.3下。运行效果如下所示。4.3 实现游戏场景能够随机生成目前已经实现的视图中,游戏场景中的小图标是固定的,也就是通过指定了map数组的值确定了游戏场景中的图标。接下来实现游戏场景随机生成,即不需要修改源代码,每次运行该应用,游戏场景均随机生成。4.3.1 创建抽象类AbstractGameModel与视图有关的类都存放在com.chinasofti.lianliankan.gui包中,与数据和算法有关的类我们都称为模型类,即model,都存放在com.chinasofti.lianliankan.model中。首先创建一个抽象类AbstractGameModel,如下图所示。该类将是各种模型的父类,其中会逐步定义属性和方法,本节主要实现游戏场景随机实现的功能,不关注其他功能。为了能够实现游戏场景随机生成,首先需要将游戏场景中图标在资源图片default.png中的位置存储起来,所以在类中定义二维数组,存放游戏场景中的图标。如下代码所示:public abstract class AbstractGameModel /* * 存放连连看地图元素数据 */public int map;public void setMap(int map) this.map = map;例如,连连看游戏显示的图标是8X8格式的,那么map中应该存放10X10个元素信息,因为连连看游戏场景的四周是一圈0。这是比较难理解的一点。Map是一个二维数组,二维数组本身是元素是一维数组的数组。也就是10X10的map中将存储10个长度为10的一维数组。其中依次是第一行到第十行的元素信息,假设map的某一个一维数组是0,6,13,12,3,4,5,12,7,0,那么表示该行的第一个图标是空,就是不存在图标,第二个是default.png中第6个图标,第三个是default.png中第13个图标,以此类推.在连线算法中,主要就依靠判断mapij是否为0,来判断是否可以连线。因为mapij为0表示当前位置没有图标。而边界图标之间通过折线相连时,都需要通过图标四周画线,因此四周必须设置为0。接下来在AbstractGameModel中声明两个方法,如下所示:public int initMapHelper(int elementCount,int rowCount,int columnCount,int elementTypeCount)if (elementCount % 2 != 0)& (elementCount != (rowCount - 2) * (columnCount - 2) / 如果参数不满足要求,则抛出异常throw new java.lang.IllegalArgumentException();Random random = new Random();int initElement = new intelementCount;/ 创建一个临时的一维数组保存初始化元素for (int i = 0; i elementCount; i+=2) / 获取随机元素种类int randomNum = Math.abs(random.nextInt() % elementTypeCount + 1;/ 一次性对相邻的两个元素赋值,保证随机得到(elementCount/2)对元素initElementi = randomNum;initElementi + 1 = randomNum;/ 随机打乱得到的原始数组initElement = getRandomArrayHelper(initElement);/ 将打乱后的一维数组拷贝进最后的二维数组,注意,连连看游戏地图最外圈有一圈0int finalMap = new introwCountcolumnCount;int index = 0;for (int i = 1; i rowCount - 1; i+) for (int j = 1; j columnCount-1; j+) finalMapij = initElementindex;index+;return finalMap;/* * 随机打乱原始数组 * * param srcArray int型数组,存放未打乱的原始数据 * return int型数组,存放打乱后的结果 */public int getRandomArrayHelper(int srcArray)Random random=new Random();int resultArray=new intsrcArray.length;/srcIndex:还剩下的元素个数int srcIndex=srcArray.length;for(int i=0;isrcArray.length;i+)int randomIndex=Math.abs(random.nextInt()%srcIndex); /随机取数组下标resultArrayi=srcArrayrandomIndex;/将最后一个未使用的元素和取出来的元素交换srcArrayrandomIndex=srcArray-srcIndex;return resultArray;上述代码中,initMapHelper方法是用来生成map对象的方法,getRandomArrayHelper方法是一个辅助方法,用来生成随机一维数组。调用initMapHelper时需要指定元素的个数、行数、列数、元素类型个数,例如我们可以使用initMapHelper(64, 10, 10, 29);的形式调用该方法。其中64表示要显示的图标个数,10表示行数,第二个10表示列数,29是元素类型的个数,也就是default.png中图标的数目种类。值得注意的是,10行10列共100个元素,但是元素数量却是64个。因为连连看游戏的四周是一圈0,所以元素数量=(行数-2)*(列数-2)。至此,现阶段的AbstractGameModel已经实现,代码在src4.3.1AbstractGameModel.java。目前我们已经完成了游戏的静态界面,也就是视图(view)已经完成。接下来需要实现游戏的“灵魂”部分,也就是模型(model)。Model将封装游戏需要使用的数据以及算法。4.3.2 创建AbstractGameModel的实现类AbstractGameModel是一个抽象类,不能够实例化。目前看这个类没有任何抽象类的特征,没有抽象方法,在后面将逐步加入抽象方法,被其他子类实现。为了能够尽快展示效果,我们创建一个AbstractGameModel类的实现类GameModelDefault,如下图所示。生成代码如下所示:public class GameModelDefault extends AbstractGameModel 目前抽象父类中没有抽象方法,所以该类不需要实现具体方法,后面将逐步添加。GameModelDefault.java源代码在src4.3.2GameModelDefault.java4.3.3 使用GameModelDefault实现随机产生游戏场景有了GameModelDefault类后,可以修改MainPanel类,不再手工指定数组map的值,而是调用initMapHelper方法随机生成。首先在MainPanel中声明模型类对象,如下所示。/声明模型对象private AbstractGameModel model=new GameModelDefault();然后声明reset方法,初始化map对象。如下所示。public void reset() map = model.initMapHelper(64, 10, 10, 29);model.setMap(map);该方法中调用model的initMapHelper方法,实例化一个10X10的二维数组,其中最外面一圈都是0,并将map对象赋值给model的map属性。最后在MainPanel的构造方法中,取消之前对map的赋值操作,调用reset方法,如下所示。/调用reset方法reset();另外,值得一提的是,MainPanel中paint方法的for循环进行了修改,因为游戏地图的四周都是0,所以从1开始循环,到8结束。接下来运行MainFrame,可见每次运行的效果都不同,游戏场景的图标是随机生成,不再是以前固定的形式,如下图所示。现阶段的MainPanel.java存在于src4.3.3MainPanel.java。4.4 实现只能通过直连方式相连的版本目前,我们的程序已经能随机生成游戏地图,但是依然没有响应。本节的目标是实现一个最简单玩法的版本,就是只能直连方式相连。也就是两个相同的图标,只能在一行或者一列的时候,且二者的路径中没有其他图标元素时,才可以相连。例如下图中可以相连的图标为标注的部分。4.4.1 修改AbstractGameModel类要实现直连方式,首先需要实现相关算法。也就是如何判断两个图标元素可以通过直线相连。要理解这个算法,首先要清楚图标的属性。任意一个图标,首先拥有一个在游戏地图中的坐标,例如上图中第1行第7列的蝴蝶,在地图中的坐标是(1,7)。另外一个重要属性是该图标的类型,也就是存储在二维数组map中的信息,map的索引值是图标在地图中的坐标值。例如蝴蝶是default.png中第15种类型的图标,而在地图中的坐标是(1,7),那么就存在map17=15这样的关系存在。如果mapij=0,则表示当前位置没有图标,游戏刚开始时,游戏地图的四周都是mapij=0的元素,游戏过程中,连接成功的两个元素的mapij值也将被设置为0。总而言之 ,假设mapij=v;那么i,j表示当前图标在游戏地图中的坐标位置,v表示该图标在资源文件中的图片类型。理解了图标的这两种属性后,就能够明白直连的算法。假设两个元素在地图中的坐标分别为AI,AJ以及BI,BJ,则需要考虑以下问题。1、 AI与BI相同,也就是在一行2、 BI与BJ相同,也就是一列3、 AI=BI,同时AJ=BJ时,不能直连,表示在同一位置。4、 MapAIAJ=0或者mapBIBJ=0时,不能直连,表示其中一个为空直连的条件:满足1或者2后,mapAIAJ与mapBIBJ相同 ,同时在这两个图标直连的路径上,所有的元素的mapij都为0,则表示可以直连。有了以上的理解,就可以继续在AbstractGameModel中添加算法方法。如下所示。/* 判断两个元素是否能够通过一条直线连接* param itemAI 第一个元素的行值* param itemAJ 第一个元素的列值* param itemBI 第二个元素的行值* param itemBJ 第二个元素的列值* return 布尔值,如果为True,说明两个元素能够通过一条直线连接,反之

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论