Android制作俄罗斯方块游戏(完整)_第1页
Android制作俄罗斯方块游戏(完整)_第2页
Android制作俄罗斯方块游戏(完整)_第3页
Android制作俄罗斯方块游戏(完整)_第4页
Android制作俄罗斯方块游戏(完整)_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、交通运输学院课程设计交通运输学院面向对象程序设计课程设计学 院 交通运输学院 班 级 信管09 姓 名 许 文 学 号 200900820 成 绩 指导老师 刘应东 2012 年 7 月 8 日兰州交通大学交通运输学院课程设计任务书所在系:信息管理与信息系统 课程名称:面向对象程序设计 指导教师(签名): 专业班级: 信管09 学生姓名: 许文 学号:200900820 一、课程设计题目基于安卓的俄罗斯方块游戏开发二、课程设计的目的(1)提高学生思考与分析项目的能力。 (2)提高并加强学生面向对象的编程思想。(3)强化学生灵活的编写程序并解决问题的能力。 三、课程设计的主要内容和要求(包括原始

2、数据、技术参数、设计要求、工作量要求等) 1. 写出详细设计说明 2. 编写程序代码,调试程序使其能正确运行 3. 设计完成的软件要便于操作和使用 四、工作进度安排 本课程设计一共安排3周时间,具体如下:第1周:完成分析与设计工作,对整个设计的功能及流程有清晰的认识;第2周:完成开发工作;第3周:对设计中存在的问题进行完善,完成设计报告。五、主要参考文献1 刘志宏.Java程序设计教程.北京:航空工业出版社,2010年7月2 单兴华.Java基础与案例开发详解.北京:清华大学出版社,2009年9月审核批准意见系主任(签字) 年月日指导教师评语及成绩指导教师评语     &#

3、160;                     成绩        导师签字: 年 月 日 目录俄罗斯方块游戏在Android中的实现1引言11游戏背景及功能概述11.1背景概述11.2游戏简介21.3功能概述21.4游戏操作方法42.游戏策划及准备工作52.1游戏策划52.2游戏开发平台62.3Android平台下游戏的准备工作63.游戏构架74游戏中各个类中实现的功能85游戏的优化与改进8结论8参考文献9附录9附录1.Elos.java文件代码9附录

4、2.ElosLogic.java文件代码37附录3.BuildConfig.java文件代码38附录4.R.java文件代码38附录5.AndroidManifest.xml文件代码39附录6.elos.xml文件代码40附录7.String.xml文件代码4040俄罗斯方块游戏在Android中的实现引言引言:简要说明设计题目的目的、意义、内容、主要任务等。俄罗斯方块原本是前苏联科学家阿列克谢帕基特诺夫所开发的教育用软件,之后开始提供授权给各个游戏公司,造成各平台上软件大量发行的现象。由于俄罗斯方块具有的数学性、动态性与知名度,也经常拿来作为游戏程序设计的练习题材。俄罗斯方块曾经造成的轰动与

5、造成的经济价值可以说是游戏史上的一件大事,它看似简单但却变化无穷,令人上瘾。俄罗斯方块上手极其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法相比的。从诞生发展至今俄罗斯方块已经可以在各个平台上运行了。本次游戏的开发就是基于Android 4.0系统和传统俄罗斯方块的游戏方法进行的。1游戏背景及功能概述俄罗斯方块(Tetris, 俄文:)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的

6、一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。1.1背景概述俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov 制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。现在Android手机游戏的兴起又将重新掀起这股让人沉迷的俄罗斯方块风潮。对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而在&qu

7、ot;Android俄罗斯方块"中,更有一些Android游戏所独有的魅力更加方便简单的操作模式,用户可在任意的地方任意时间进行游戏。1.2游戏简介原本是前苏联科学家阿列克谢·帕基特诺夫所开发的教育用软件,之后开始提供授权给各个游戏公司,造成各平台上软件大量发行的现象。Game Boy版的俄罗斯方块在日本卖出424万套,是Game Boy史上卖最好的游戏。海湾战争时,也是前线美军最常拿消磨时间的游戏之一。由于俄罗斯方块具有的数学性、动态性与知名度,也经常拿来作为游戏程序设计的练习题材。俄罗斯方块曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事,它看似简单但却变化无穷

8、,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。俄罗斯方块上手极其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法相比的。1.3功能概述1、一个用于摆放小型正方形的平面虚拟场地,其标准大小:行宽为24,列高为25,以每个小正方形为单位。2、一组由4个小型正方形组成的规则图形,英文称为Tetromino,中文通称为方块共有7种,分别以S、Z、L、J、I、O、T这7个字母的形状来命名。I:一次最多消除四层J(左右):最多消除三层,或消除二层L:最多消除三层,或消除二层O:消除一至二层S(左

9、右):最多二层,容易造成孔洞Z (左右):最多二层,容易造成孔洞T:最多二层(1)部分游戏有单格方块,可以穿透固定的方块到达最下层空位。其他的改版中出现更多特别的造型。方块会从区域上方开始缓慢继续落下。(2)玩家可以做的操作有:以90度为单位旋转方块,以格子为单位左右移动方块,让方块加速落下。(3)方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的方块出现在区域上方开始落下。(4)当区域中某一列横向格子全部由方块填满,则该列会消失并成为玩家的得分。同时删除的列数越多,得分指数上升。(5)当固定的方块堆到区域最上方而无法消除层数时,则游戏结束。(6)一般来说,游戏还会提示下

10、一个要落下的方块,熟练的玩家会计算到下一个方块,评估现在要如何进行。由于游戏能不断进行下去对商业用游戏不太理想,所以一般还会随着游戏的进行而加速提高难度。3、通过设计者预先设置的随机发生器不断地输出单个方块到场地顶部,以一定的规则进行移动、旋转、下落和摆放,锁定并填充到场地中。每次摆放如果将场地的一行或多行完全填满,则组成这些行的所有小正方形将被消除,并且以此来换取一定的积分或者其他形式的奖励。而未被消除的方块会一直累积,并对后来的方块摆放造成各种影响。4、如果未被消除的方块堆放的高度超过场地所规定的最大高度(并不一定是20或者玩家所能见到的高度),则游戏结束。具体到每一款不同的游戏,其中的细

11、节规则都可能有千差万别,但是以上的基本规则是相同的。1.4游戏操作方法1、安装apk游戏安装包,在Android手机的资源管理其中找到并点击Elos.apk文件选择安装。图1游戏开始前的界面截图2、点击游戏图标进入游戏界面后按键盘的"MENU"按钮,在弹出的菜单中选择“开始”来开始游戏(如图1所示)。3、游戏玩家可以再游戏中采用点击“MENU”按钮来选择“暂停”、“退出”、“开始”以实现暂停、退出、重新开始功能(如图2所示)。图2游戏中的界面截图4、触摸屏操作:系统缺省设置使用触摸屏,用手指点击方块的左边一次左移一格(长按则快速移动到最左边);点击方块的右边一次右移一格(长

12、按则快速移动到最右边);点击方块本身旋转方块;点击方块的下边一次向下移一格(长按则快速移动到最下边)。5、计分牌显示的内容:“分数”为本局游戏所得的分数,一次消一行100分、2行200分、3行400分、4行800分。“关卡”为本局游戏所在的关卡,所在的关卡越高,难度越大。“时间”为本局游戏从开始到当前所用的时间。2.游戏策划及准备工作2.1游戏策划游戏的策划是指对游戏中主要功能的实现方案进行确定的过程,大型游戏需要缜密的策划才可以开发。例如,呈现技术、目标平台等内容。l 游戏设计本游戏为经典俄罗斯方块游戏,每一次消除一层加100分、2层200分、3层400分、4层800分。游戏中的方块形状都是

13、随机生成的(共7种)。随着难度的增加方块下落的默认速度会增加,游戏分数没有上限。l 呈现技术本游戏采用的游戏背景和其他图片都是用美图秀秀软件编辑的。l 目标平台本游戏的目标平台为Android 4.0。l 操作方式游戏的操作方式为触控操作,游戏菜单的弹出是通过键盘来操作的。2.2游戏开发平台本次开发采用jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008开发包、eclipse-SDK-3.6.2-win32开发工具、android-sdk-windows开发包。l JDK(Java Development Kit)是Sun Microsystems针对

14、Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。l Eclipse(软件开发者包)是Eclipse Platform、JDT和PDE所生产的组件合并,它们可以一次下载。这些部分在一起提供了一个具有丰富特性的开发环境,允许开发者有效地建造可以无缝集成到Ecli

15、pse Platform中的工具。Eclipse SDK由Eclipse项目生产的工具和来自其它开放源代码的第三方软件组合而成。Eclipse项目生产的软件以 GPL发布,第三方组件有各自自身的许可协议。l Android SDK(Google Android专属的软件开发工具包),它是编写Android应用程序的基石。2.3Android平台下游戏的准备工作本游戏中用到的图片资源见表1所示。表1游戏中所用到的图片资源及说明图片名称大小(kB)像素(w*h)用途a.jpg0.64724*25小方快图案b.jpg0.64724*25小方快图案c.jpg0.64724*25小方快图案d.jpg0.

16、64724*25小方快图案e.jpg0.64724*25小方快图案f.jpg0.64724*25小方快图案g.jpg0.64724*25小方快图案h.jpg0.64724*25小方快图案i.jpg0.64724*25小方快图案icon.jpg7.96140*115游戏图标P4.jpg7.31522*780游戏背景3.游戏构架本游戏中各个模块的结构如图3所示。图3游戏的总构架l 前台表示模块主要用于游戏画面的渲染。其中包括游戏界面和管理面版两个模块,游戏界面主要为游戏中出现的界面,比如:开始界面和游戏中界面。管理面板包括开始、退出、暂停三部分,主要为玩家提供控制游戏行进和退出。l 游戏实体模块主

17、要用于后台游戏逻辑。本游戏中仅有方块实体模块一部分。方块实体模块主要负责对已落下、正在落下和即将落下的方块图案的颜色和形状进行控制,核对正在落下的方块图案的行进路线、形状变换进行控制。l 数据存储模块包括游戏中关卡数据的存储和的分数据的存储。游戏每一次启动都将全部删除上次启动时所产生的数据,重新进行新的数据存储。后台运行时重新进入游戏不算做重启游戏,故数据不会重置。l 工具类模块将自身的静态成员或者方法提供给游戏中的其他类使用。4游戏中各个类中实现的功能由于在本次游戏的开发中本人对代码的注释比较详尽,故对各个类所实现的功能在代码中都有较详细的注释。具体功能见附件代码。5游戏的优化与改进到目前为

18、止本游戏已经能实现俄罗斯方块游戏本身的基本功能,但是有一些地方还值得优化与改进。下面提出几点需要改进的地方以便在下次开发时进行必要的完善。l 加入本地游戏用户列表和相关的一些面板(如积分排行榜);l 加入游戏声音(本次游戏的开发由于主要用于兰州交通大学交通运输学院信息管理与信息系统09级2012年暑期课程设计,时间有限没有加入游戏声音);l 取消重启游戏后得分重置(由于本次开发没有加入游戏用户,数据的保存只能保存所有玩家的最高纪录等信息,而无法保存某个玩家的个人最优成绩等);l 对界面中图像进行优化(此次开发由于时间和精力有限对图像的处理力求简单,下次开发可以对图像进行比较深的加工);l 对游

19、戏中的一些BUG进行改进(到目前为止此游戏在中兴U880Android2.3.7上使用没有发现比如卡死等较大的BUG);结论面向对象设计方法以对象为基础,利用特定的软件工具直接完成从对象客体的描述到软件结构之间的转换。这是面向对象设计方法最主要的特点和成就。面向对象设计方法的应用解决了传统结构化开发方法中客观世界描述工具与软件结构的不一致性问题,缩短了开发周期,解决了从分析和设计到软件模块结构之间多次转换映射的繁杂过程,是一种很有发展前途的系统开发方法。通过此次Android游戏的开发,使得我们更加深刻地理解了面向对象的编程思想。参考文献1 刘志宏.Java程序设计教程.北京:航空工业出版社,

20、2010年7月2 单兴华.Java基础与案例开发详解.北京:清华大学出版社,2009年9月附录附录1.Elos.java文件代码package com.weirui;import android.app.Activity;import android.content.Context;import android.content.res.Resources;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;i

21、mport android.graphics.drawable.Drawable;import android.os.Bundle;import android.view.Display;import android.view.KeyEvent;import android.view.Menu;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.view.WindowManager;import android.widget.LinearLayo

22、ut;import android.widget.Toast;public class Elos extends Activity private final int SQUARELEMENT_NUMBERS = 7;private ElosLogic player = null;/定义一个自定义的类的量private ElosView evElos = null;private ElosStateView esvElos = null;private ElosLogic elosGuard = null;/定义界面数组private Drawable drArr = new Drawable

23、SQUARELEMENT_NUMBERS;/保存方块的图片private Drawable drArrCartoonBG = null;/保存背景图片private int nElosHeight = 0;/定义一个保存组成方块图片的高的量private int nElosWidth = 0;/定义一个保存组成方块图片的宽的量private boolean bReset = true;/为true时表示开始private boolean bPause =true;/false表示用来暂停使用的int DRAWABLE_CHOICES = SQUARELEMENT_NUMBERS;/定义一个一个

24、变量用来随机抽取图片来组成图形int ELOS_CHOICES = 15;int time=0;/时间int ntime=0;/累计时间int nTimeInterval = 500;/初始值为500表示第一关的总分为500*10int nCents = 0;/游戏得分int nStage = 1;/游戏关卡int nOldStage = 0;/定义上一个关卡数private int nTotalLines = 0;private int nTotalColumns = 0;/定义了左边界面的数组行与列int nElosYOffset = 0;int nElosXOffset = 0;/定义了

25、屏幕的起始点private int nElosAreaWidth = 0;private int nElosAreaHeight = 0;/定义了左面界面的宽与高的量Thread thdTimer = null;/定义一个线程boolean bReportResult = false;/只有当游戏失败后值变为true,会在屏幕上显示结果boolean bPlaying = true;/当变量为默认的true表示线程里开始工作boolean start=false;int nPlayerChoice = 0;/当获得随机抽取数表示要显示那个方块图形时赋给这个变量int nDrawableChoi

26、ce = 0;/当获得随机抽取数表示选用那张图片做为构造方块图形赋值给这个变量/获取资源图片private void RetriveDrawable(Context c)Resources res = c.getResources();drArr0 = res.getDrawable(R.drawable.a);drArr1 = res.getDrawable(R.drawable.b);drArr2 = res.getDrawable(R.drawable.c);drArr3 = res.getDrawable(R.drawable.d);drArr4 = res.getDrawable(R

27、.drawable.e);drArr5 = res.getDrawable(R.drawable.f);drArr6 = res.getDrawable(R.drawable.g);drArrCartoonBG = res.getDrawable(R.drawable.p4);/-由于没有拟定每个小图片的大小,所以调用函数获得设定的宽和高-private int GetElosHeight(Drawable dr)return dr.getMinimumHeight();private int GetElosWidth(Drawable dr)return dr.getMinimumWidth

28、();/-private void AnnounceNewStage()/显示关卡数并每关过后将下降速度加快if (nOldStage != nStage)Toast.makeText(this, "第" + nStage + "关", Toast.LENGTH_SHORT).show();nTimeInterval = nTimeInterval - (nStage - 1)*50;/每关后睡眠时间减少nOldStage = nStage;private void ClearStageAndCentsAfterFail()/开始的时候要清空关卡和分数n

29、Cents = 0;nStage = 1;time=0;ntime=0;/-游戏失败-private boolean IsElosGameFail()thdTimer=null;ElosLogic visit = elosGuard00;while (visit != null)if (visit.IsDraw() && !visit.bUnit) return true;visit = visit.GetElosLogicRight();/一直在左边方框数组的第一行寻找存在有了图片并被画出的则返回true表示失败return false;/-判断要消去的行数-private

30、boolean IsWholeLineDrawed(ElosLogic logic)if (logic = null) return false;ElosLogic keep1, keep2;/定义两个ElosLogic的变量keep1 = keep2 = logic;int nCount = 0;/通过两个分别左右循环的来查看这一行是否需要消除while (keep1 != null)if (keep1.IsDraw()nCount+;keep1 = keep1.GetElosLogicLeft();keep2 = keep2.GetElosLogicRight();while(keep2

31、!= null)if (keep2.IsDraw()nCount+;keep2 = keep2.GetElosLogicRight();if (nCount = this.nTotalColumns) return true;/如果与列数相同,则需要消除返回truereturn false;private void ClearWholeLine(ElosLogic logic)/如果要消除,则将这一行全设定为不显示if (logic = null) return;ElosLogic keep1, keep2;keep1 = keep2 = logic;while (keep1 != null)

32、keep1.SetDraw(false);keep1 = keep1.GetElosLogicLeft();keep2 = keep2.GetElosLogicRight();while(keep2 != null)keep2.SetDraw(false);keep2 = keep2.GetElosLogicRight();private void ElosLogicCopyAfterLineFull(ElosLogic src, ElosLogic des)des.bDraw = src.bDraw;src.bDraw = false;/把上一行设置成不绘制des.SetDrawable(s

33、rc.GetDrawable();/将下一行保存了上一行的图片private void ElosLogicLineCopyAfterLineFull(ElosLogic logic)/没消除掉行数都得自动下降Rect rtElos = logic.GetRect();Rect rtGuardZero = elosGuard00.GetRect();int nLineNumber = (rtElos.top - rtGuardZero.top)/rtElos.height();while (nLineNumber >= 1)for (int i = 0; i < this.nTota

34、lColumns; i+)/依次对下一行的每列都换成上一行的图片ElosLogicCopyAfterLineFull(elosGuardnLineNumber - 1i, elosGuardnLineNumberi);nLineNumber-;int CheckGuard(ElosLogic elosPlayer)/每次不再下降的时候都要核对一遍进行操作int nErasableLines = 0;if (elosPlayer = null) return nErasableLines;if (IsWholeLineDrawed(elosPlayer)ClearWholeLine(elosPl

35、ayer); ElosLogicLineCopyAfterLineFull(elosPlayer);nErasableLines+;if (elosPlayer.GetElosLogicDown() != null)/向上查两行if (IsWholeLineDrawed(elosPlayer.GetElosLogicDown()ClearWholeLine(elosPlayer.GetElosLogicDown();ElosLogicLineCopyAfterLineFull(elosPlayer.GetElosLogicDown();nErasableLines+;if (elosPlaye

36、r.GetElosLogicDown().GetElosLogicDown() != null)if (IsWholeLineDrawed(elosPlayer.GetElosLogicDown().GetElosLogicDown()ClearWholeLine(elosPlayer.GetElosLogicDown().GetElosLogicDown();ElosLogicLineCopyAfterLineFull(elosPlayer.GetElosLogicDown().GetElosLogicDown();nErasableLines+;if (elosPlayer.GetElos

37、LogicUp() != null)/向上查一行if (IsWholeLineDrawed(elosPlayer.GetElosLogicUp()ClearWholeLine(elosPlayer.GetElosLogicUp();ElosLogicLineCopyAfterLineFull(elosPlayer.GetElosLogicUp();nErasableLines+;return nErasableLines;/返回所要消除的行数/-以下三个函数是分别相应当按下左,右和下的时候组合方块进行的移动-private ElosLogic PlayerMoveDown(ElosLogic

38、elosPlayer, int nPlayerChoice)/如果向下可以移动的就得进行操作if (elosPlayer = null) return elosPlayer;if (!IsPlayerMoveableDown(elosPlayer) return elosPlayer; Drawable dr = elosPlayer.GetDrawable();ClearPlayer(elosPlayer);elosPlayer = elosPlayer.GetElosLogicDown();/这个数组已经换成下一行的了elosPlayer = CreatePlayer(dr, nPlaye

39、rChoice, elosPlayer);/重新生成一个跟下落前一样的方块return elosPlayer;private ElosLogic PlayerMoveLeft(ElosLogic elosPlayer, int nPlayerChoice)if (elosPlayer = null) return elosPlayer;if (!IsPlayerMoveableLeft(elosPlayer) return elosPlayer; Drawable dr = elosPlayer.GetDrawable();ClearPlayer(elosPlayer);elosPlayer

40、= elosPlayer.GetElosLogicLeft();elosPlayer = CreatePlayer(dr, nPlayerChoice, elosPlayer);return elosPlayer;private ElosLogic PlayerMoveRight(ElosLogic elosPlayer, int nPlayerChoice)if (elosPlayer = null) return elosPlayer;if (!IsPlayerMoveableRight(elosPlayer) return elosPlayer; Drawable dr = elosPl

41、ayer.GetDrawable();ClearPlayer(elosPlayer);elosPlayer = elosPlayer.GetElosLogicRight();elosPlayer = CreatePlayer(dr, nPlayerChoice, elosPlayer);return elosPlayer;/-/-及时清空上一个图形-private void ClearElosLogicUnitUnitTag(ElosLogic elosPlayer)if (elosPlayer = null) return;elosPlayer.bUnit = false;if (elosP

42、layer.GetElosLogicLeft() != null && elosPlayer.GetElosLogicLeft().bUnit)ClearElosLogicUnitUnitTag(elosPlayer.GetElosLogicLeft();if (elosPlayer.GetElosLogicRight() != null && elosPlayer.GetElosLogicRight().bUnit)ClearElosLogicUnitUnitTag(elosPlayer.GetElosLogicRight();if (elosPlayer.G

43、etElosLogicUp() != null && elosPlayer.GetElosLogicUp().bUnit)ClearElosLogicUnitUnitTag(elosPlayer.GetElosLogicUp();if (elosPlayer.GetElosLogicDown() != null && elosPlayer.GetElosLogicDown().bUnit)ClearElosLogicUnitUnitTag(elosPlayer.GetElosLogicDown();/-判断下左右的值返回到函数IsRecursiveElosLog

44、ic中-private boolean IsElosLogicDownable(ElosLogic logic)/判断它的下面情况if (logic = null) return false;if (logic.GetElosLogicDown() = null) return false;/表示图形已经到底了返回falseif (logic.GetElosLogicDown().bUnit) return true;/表示下面已经有图形了返回trueif (logic.GetElosLogicDown().IsDraw() return false;/下面的没有绘制图片则返回falseret

45、urn true;private boolean IsElosLogicLeftable(ElosLogic logic)if (logic = null) return false;if (logic.GetElosLogicLeft() = null) return false;if (logic.GetElosLogicLeft().bUnit) return true;if (logic.GetElosLogicLeft().bDraw) return false;return true;private boolean IsElosLogicRightable(ElosLogic lo

46、gic)if (logic = null) return false;if (logic.GetElosLogicRight() = null) return false;if (logic.GetElosLogicRight().bUnit) return true;if (logic.GetElosLogicRight().bDraw) return false;return true;/-/-通过上面三个函数返回值判断下左右能否移动-boolean IsRecursiveElosLogicDownable(ElosLogic elosLogic)/利用上面函数返还值判断方块是否可以移动i

47、f (!IsElosLogicDownable(elosLogic) return false;elosLogic.bUnit = false;/每次对方块中的一个数组量判断不出是否可以下降是先将量赋为false表示没有if (elosLogic.GetElosLogicDown() != null && elosLogic.GetElosLogicDown().bUnit)if(!IsRecursiveElosLogicDownable(elosLogic.GetElosLogicDown() /只要在一个方向不能动的时候就得将bUnit变为true表示有量return fa

48、lse;elosLogic.bUnit = true;/知道通过上下左右检查出的确不能移动在将他设定为truereturn true;private boolean IsRecursiveElosLogicLeftable(ElosLogic elosLogic)if (!IsElosLogicLeftable(elosLogic) return false;elosLogic.bUnit = false;if (elosLogic.GetElosLogicLeft() != null && elosLogic.GetElosLogicLeft().bUnit)if(!IsRe

49、cursiveElosLogicLeftable(elosLogic.GetElosLogicLeft()elosLogic.bUnit = true;return false;elosLogic.bUnit = true;return true;private boolean IsRecursiveElosLogicRightable(ElosLogic elosLogic)if (!IsElosLogicRightable(elosLogic) return false;elosLogic.bUnit = false;if (elosLogic.GetElosLogicRight() != null && elosLogic.GetElosLogicRight().bUnit)if(!IsRecursiveElosLogicRightable(elosLogic.GetElosLogicRight() elosLogic.bUnit = true;return false;elosLogic.bUnit = true;return true;/-/-获得能否移动的结果后返回true和false的值给线程里-private bo

温馨提示

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

评论

0/150

提交评论