android的扫雷程序.doc

由麦可网整理,转载请注明出处 android 的扫雷程序 基于 Android 平台的扫雷游戏 简介简介 扫雷是一个简单的单人游戏。游戏的目的是在没有触碰任何一个地雷的情形下清空一个雷 区。扫雷不仅有 Windows 版本,也有其他平台的版本(包括大多数 linux 的变体) 。扫雷在 Windows 的用户中十分流行,自从 Windows 3.1以来一直绑定在里面。 在这篇文章中我们创建一个 Android 版本的扫雷。我们将尝试 Windows 扫雷的大多数功能。 这篇文章面向中高级别的开发者,并且需要熟悉 Java 和 Android 开发。 关于游戏关于游戏 在扫雷游戏中,游戏者要面对一片砖块组成的格栅,有些砖块包含随机设置的地雷。我们将 实现一个典型的初学者级别扫雷游戏行和列的数量都是9,一共有10颗地雷。扩展成中级 和高级游戏很容易(只需要改编代码中的上述三个值) 。 好吧, 在这篇文章中我不会教你怎么玩游戏, 但我们需要在实现前了解这个游戏的一些特点 (Windows 版本) 点击左键打开一个砖块 点击右键对砖块进行标记插旗帜(表示下面有雷) ,标问号(不确定是否有雷) , 取消标记 第一个砖块下面永远没有雷;避免了一开始就要猜测的烦恼。 如果打开的砖块是空的,周围的砖块都会依次打开直到遇到数字砖块;类似涟漪的 原理。 在一个砖块上同时点击左右键或者中键,如果周围的地雷都被标出来了,则会打开 周围所有未打开的砖块。 点击第一个砖块时开始计时,在选择一个新游戏后不会开始计时。 已经啰嗦够多了,我们现在开始编写这个游戏 一步一步实现一步一步实现 解释和实现任何复杂系统的最好方法是一次一步进行。首先,我们探讨 GUI,布局和应用的 视觉。我们也会探讨创建布局时用到的一些技术。然后,我们讨论鼠标、点击和触摸事件的 区别,以及应用的反应。最后一步关于实现整个游戏以及上面介绍过的功能。 视觉和触碰的感知体验视觉和触碰的感知体验 我们先讨论设计 GUI 的不同方面, 包括总体的应用布局和一些创建游戏时需要用到的技术。 应用的布局应用的布局 我们使用 TableLayout 进行扫雷的布局,在 TableLayout 上加入三行 第一行包括用于计时的三列数字,新游戏按钮和剩余地雷数。我们使用 TextView 显 示计时和地雷数。新游戏按钮使用 ImageButton 由麦可网整理,转载请注明出处 第二行是50像素高的空的 TextView,将第一行和雷区隔离开 第三行是另一个 TableLayout,用来显示雷区。我们将动态的向这个区域添加按钮。 布局的代码如下(删去了一些额外的属性来节省空间) view plain 使用外部字体使用外部字体 我们使用外部字体 LCD mono(见源代码部分)来显示时间和地雷数。在 Android 中使用外 由麦可网整理,转载请注明出处 部字体很容易,分为两步 在工程的 assets 文件夹下创建字体文件夹,复制 TTF(True Type Font)文件至字体 文件夹。 通过调用 createFromAsset 和传递 TTF 文件名创建一个 Typeface 对象。在这个对象 中设置 TextView 的 Typeface。代码如下 view plain privateTextViewtxtMineCount; privateTextViewtxtTimer; txtMineCountTextViewfindViewByIdR.id.MineCount; txtTimerTextViewfindViewByIdR.id.Timer; setfontstylefortimerandminecounttoLCDstyle TypefacelcdFontTypeface.createFromAssetgetAssets, “fonts/lcd2mono.ttf“; txtMineCount.setTypefacelcdFont; txtTimer.setTypefacelcdFont; 使用风格使用风格 在我们的扫雷游戏里, 点击新游戏的笑脸按钮会让这个笑脸变成紧张的表情。 当按钮处于按 压状态时(紧张的笑脸) ,我们需要一个不同的图像。当它处于正常状态时需要另一张图像。 为了实现此功能,我们使用风格,效果如下 使用风格也需要两步 创建一个 XML 文件(风格定义文件) ,指定相应的按钮状态使用的图片。比如在按 压状态下,我们需要惊讶(紧张)的图片,正常状态下需要微笑的图片。当然,这两幅 图片已经复制到 res/drawable 文件夹中了。风格文件的代码如下 view plain 为新游戏按钮更新/添加背景的属性值,将它的值设定为上面创建的风格文件。更新 后的 ImageButton 代码如下 view plain TableLayout 中的动态行中的动态行 动态添加砖块的原理相同(砖块是从按钮类继承的类,包含支持实现的额外功能) 。我们希 望它们像预想的那样工作,分为如下的几步 创建一个 TableRow 对象,设置布局的参数值。 将砖块添加到上面创建的行对象中。 使用 findViewById 函数获得 TableLayout(雷区)的样本。 将上边创建的行添加到 TableLayout 中 代码如下 view plain privateTableLayoutmineField;tablelayouttoaddminesto privateBlockblocks;blocksinefield publicvoidonCreateBundlesavedInstanceState . mineFieldTableLayoutfindViewByIdR.id.MineField; privatevoidshowMineField forintrow1;row0 forintpreviousRow-1;previousRow0 return; 在砖块上做标记在砖块上做标记 我们进一步讨论将砖块标记为旗子、问号和取消标记的方法。实现的方法直接明了,当我们 收到非左右键点击的长点击事件时,我们检查砖块现在的状态。如果砖块上没有标记,就在 上面插旗子(表示内有地雷) ,如果砖块上插着旗子,就在上面标问号(怀疑但不确定有地 雷) ,而如果砖块上面有问号标记,就清除标记。我们只需要一些条件判断句就能实现 view plain blocksrowcolumn.setOnLongClickListenernewOnLongClickListener publicbooleanonLongClickViewview simulatealeft-rightmiddleclick ifitisalongclickonanopenedminethen openallsurroundingblocks . ifclickedblockisenabled,clickableorflagged ifblockscurrentRowcurrentColumn.isClickable blockscurrentRowcurrentColumn.setFlagIcontrue; blockscurrentRowcurrentColumn.setFlaggedtrue; minesToFind;reduceminecount updateMineCountDisplay; case2.setflaggedtoquestionmark elseifblockscurrentRowcurrentColumn.isQuestionMarked blockscurrentRowcurrentColumn.setBlockAsDisabledtrue; blockscurrentRowcurrentColumn.setQuestionMarkIcontrue; blockscurrentRowcurrentColumn.setFlaggedfalse; blockscurrentRowcurrentColumn.setQuestionMarkedtrue; minesToFind;increaseminecount updateMineCountDisplay; case3.changetoblanksquare else blockscurrentRowcurrentColumn.setBlockAsDisabledtrue; blockscurrentRowcurrentColumn.clearAllIcons; blockscurrentRowcurrentColumn.setQuestionMarkedfalse; ifitisflaggedthenincrementminecount ifblockscurrentRowcurrentColumn.isFlagged minesToFind;increaseminecount updateMineCountDisplay; removeflaggedstatus blockscurrentRowcurrentColumn.setFlaggedfalse; 由麦可网整理,转载请注明出处 updateMineCountDisplay;updateminedisplay returntrue; ; 在每一步检查游戏的输在每一步检查游戏的输/赢赢 对滴,这一步非常重要。每次点击后都要检查游戏的状态,确保我们不会错过任何点击和任 何砖块。当点击的砖块下边有地雷时,我们就输了。当所有包含地雷的砖块上插了旗子时, 我们就赢了。代码如下 view plain checkstatusofthegameateachstep ifblockscurrentRowpreviousRowcurrentColumnpreviousColumn.hasMine oopsgameover finishGamecurrentRowpreviousRow,currentColumnpreviousColumn; didwewinthegame ifcheckGameWin markgameaswin winGame; privatebooleancheckGameWin forintrow1;rownumberOfRowsInMineField1;row forintcolumn1;columnnumberOfColumnsInMineField1;column ifblocksrowcolumn.hasMine returntrue; 测试测试/玩儿法玩儿法 由麦可网整理,转载请注明出处 玩游戏的方法和 Windows 版是一样的。请留意以下关键点 点击微笑按钮,开始一个新游戏 点击或者触摸一个砖块来打开它,这和 Windows 中的鼠标左键功能相同。 点击或者保持触摸一个砖块达到一秒,则对其进行标记,包括旗帜、问号或者清除 标记。这和 Windows 中的鼠标右键功能相同。 点击或者保持触摸一个打开的数字砖块,则将周围的砖块都打开(周围的所有地雷 已经插了旗子) ,这和 Windows 中的中间键功能相同。 没有插旗砖块的图标,用 F 字母表示旗帜。 亲自实现并试玩,反馈你的体验。 总结总结 用一篇文章解释一个完整的动画游戏不是非常容易。 我已经尽力解释了扫雷的工作原理以及 如何操作游戏中重要的部分。下边附有游戏的源代码,虽然我们一直使用初级程度的扫雷, 但是实现中级和高级的扫雷非常容易, 只需要在代码中做少数修改。 请提供你使用的反馈和 建议。 资源资源 创建扫雷 GUI 的图像属于各个作者,图像的资源为 背景图像Fractal Blue Abstract Mobile wallpaper 笑脸图像GNOME Desktop Icon Pack by GNOME icon artists 地雷图像Farm-Fresh Web Icon Pack by FatCow Web Hosting LCD 字体格式LCD Mono by Samuel Reynolds

android扫雷代码解释,android的扫雷程序.doc相关推荐

  1. android静态代码扫描,android 静态代码扫描

    开始做这样一个东西是为了帮助开发减少代码方面的问题,提高代码质量,减小以后上线的风险.前面看了 360 的那个静态代码扫描感觉很强大,但目前没这实力去做成这样,希望早日开源,多多学习.所以就先用开源的 ...

  2. android默认代码混淆,Android SDK默认混淆配置文件

    一.介绍 通常情况下编译后的字节码包含了大量调试信息(如源类名/行号等) 混淆代码就能删除这些调试信息,并用无意义字符替换所有名字,增加反编译难度! ProGuard是一个混淆代码的开源项目,主要作用 ...

  3. 直播倒计时android,直播代码,Android实现验证码倒计时

    直播代码,Android实现验证码倒计时实现的相关代码 创建一个CountDownTimerUtils工具类 //倒计时函数 private class CountDownTimerUtilsexte ...

  4. android购物车代码简述,Android实现简单购物车功能

    本文实例为大家分享了Android实现购物车功能的具体代码,供大家参考,具体内容如下 MainActivity布局: android:layout_width="match_parent&q ...

  5. android静态代码扫描,Android 静态代码扫描流程及工具说明

    1. 静态扫描流程 1.1 版本发布流程 大致分为5个阶段,静态代码扫描的工作在第3步进行,如图: 版本发布流程图 1.2 典型案例分析 [空指针]空指针引用 [内存泄露]Stream资源关闭 [性能 ...

  6. android mysql代码_LitePal——Android数据库框架完整使用手册(示例代码)

    LitePal for Android LitePal是一个开源的Android库,使开发人员使用SQLite数据库非常简单.您无需编写任何SQL语句就可以完成大部分数据库操作,包括创建或升级表,增. ...

  7. python扫雷代码_室友扫雷通关来炫耀!我用Python做出自动扫雷十秒通关!

    自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 代码已上传至GitHub: https://github.com/chestnu ...

  8. android studio 代码缩略图,android studio 设置模板

    本文记录了自己是如何建立一个模板的,其实过程很简单. ·1.查看android studio 本身自带的模板: 2.模仿android studio 模板写一个自己的模板: android studi ...

  9. android java代码加密,Android中AES256加密的实现 – Leo Chin – 博客园

    AES加密是我们在工作中常用到一种加密方式,并且在java中也已经实现好了其相应的接口. 但是Java自带的JDK默认最多实现128位及其以下的加密.如果使用java自带的api实现aes256将会报 ...

  10. android vts代码分析,android vts测试笔记

    记录了android vts测试中遇到的一些常见问题,记录如下: 一 vts可以单独跑一个case ,比如 run vts -m XX -t XXX 二 如果不想跑vts单独验证一个case的话,可以 ...

最新文章

  1. php重置密码,linux密码忘记重置密码的方法
  2. php 连续点击事件,javascript设置连续两次点击按钮时间间隔的方法_javascript技巧...
  3. invalid new-expression of abstract class type 'CurveFittingEdge'
  4. polkit 重新安装_不折腾,为U-NAS安装一个清爽的桌面,把小U打造成双面高手
  5. java xml 序列化_java-序列化为XML时忽略父类
  6. Linux下MongoDB服务安装
  7. js实现正方体旋转动画
  8. 5G投资理财H5源码+带独家代理二开前端开发/学习培训专用型
  9. PPLIVE加速器导致无法正常上网
  10. 在线 服务器 web,web服务器是什么?
  11. ClickHouse 数据插入、更新与删除操作 SQL
  12. 分享一个会遮掩的吊炸天登录页面
  13. 《Linux操作系统-系统移植》第4章 内核移植 - 内核解析(Linux3.14)
  14. 中e管家婚后有孩子怎么理财
  15. RedHatAS4U3下实现南北互通的DNS配置
  16. P2P平台投宝金融跑路?为什么我没有中雷!
  17. 【PIE-Engine Studio学习笔记05】图像分类——非监督分类
  18. linux性能优化实战 倪朋飞,Linux性能优化实战:系统的swap变高(09)
  19. VulnHub-driftinghlues2
  20. 推荐8款不错的HTML5文本编辑器

热门文章

  1. 八大顶层设计,决定企业融资难度
  2. python写入文件报错解决方法
  3. 设计测试用例的常用方法
  4. 计算机网络练习题-4
  5. 看点视频解析去水印原理分析过程及源码,rowkey的秘密
  6. 解决 macOS Big Sur 新安装ideaIU-2021.2.2 无法启动
  7. SSH配置-使用Bitvise SSH Client工具在Windows下远程登陆Linux服务器
  8. windows 下 Bitvise SSH Client 登陆服务器 显示matlab图形界面
  9. git提交代码时遇到代码库有更新以及本地有更新的解决方法
  10. 现在主流的(大多数人用的)3DMAX是哪个版本?