AIDE手机编程初级教程(零基础向) 2.6.5 开发一个游戏之核心部分

第二章 第一个游戏

系列教程导航

2.6 开发一个游戏


2.6.5 核心部分


文章目录




监听器

    前面两节,我们已经设计了两个工具函数。由于猜数字小游戏剩下的部分并不那么复杂,所以我们接下来只用写一个函数就好,也就是所谓的核心部分,通过这个函数,玩家可以和程序交互。

    这个函数应该写在哪里呢?我们想一想这个函数何时会被调用:当我们在下面的编辑框里面输入一些内容之后,再点击按钮,程序就会执行这个函数。然后这个函数获取到编辑框的内容,再经过处理,把结果显示在上方的文本框里面。

    很明显,这个函数和按钮有很大的关联。因为只有按钮被按下的时候,这个函数才会执行。

    为了更好地理解接下来的知识,我给大家举个例子:假设有一个千金小姐,琴棋书画样样精通 ,老爷视她为掌上明珠。老爷为了是她有自保的能力,特地安排了一个贴身保镖。老爷分配给保镖的任务很简单,只要有陌生人接近了小姐,他就立马给陌生人拦住。有一天,一个社会青年看到了小姐的美貌,想要图谋不轨,于是悄悄地靠近了小姐。保镖立马就看到了这一幕啊,然后想起了自己的任务,拦住了社会青年。

    接下来,我们来学习事件监听机制。首先,我们(老爷)有一个按钮(小姐)。为了使按钮具有某个功能(自保),就需要给它安排一个监听器(保镖)。我们给监听器添加事件处理的方式(任务:陌生人接近 ---> 拦住他),然后把监听器绑定到按钮上(安排贴身保镖)。在我们的小游戏里面,这个事件当然就是按下按钮了。然后,按钮被按下的时候(社会青年接近小姐),监听器检测到这个动作,并调用之前添加的方式进行处理(想起任务,拦住社会青年)。

    上面的过程概括一下就是:给监听器添加事件的处理方式;监听器绑定到按钮;事件发生;监听器处理事件。了解了这个之后,我们终于明白了:我们想要写的核心部分函数,其实就是监听器对按钮被点击这一事件的处理方式。为此,在写核心部分之前,我们首先给按钮绑定一个监听器。

    在2.6.3中,我们已经获取到了控件的对象,包括按钮。所以,我们可以直接使用按钮对象的相关函数来给它添加监听器。具体地说,就是setOnClickListener函数。注意绑定监听器的代码应该写在onCreate函数里面。

在这里插入图片描述

    setOnClickListener函数需要一个监听器对象作为参数。为此,我们需要创建一个监听器对象。(还记得new关键字的用法吗?点击复习)这里我们可以不用另外定义一个变量来临时“存储”监听器对象,如下:

在这里插入图片描述

在这里插入图片描述

    由于监听器对象的创建需要指定事件的处理方式,所以我们加入花括号,里面写一个onClick方法:

在这里插入图片描述

在这里插入图片描述

    到此为止,我们已经完成了监听器的创建和绑定。之后,只要按钮被点击,它对应的监听器的onClick方法就会立马被执行。




核心部分

    当玩家点下按钮的时候,首先应该获取编辑框中的内容,并转换为字符串(使用任何对象都有的toString方法)。为此,我们可以使用编辑框对象的getText方法。具体代码如下:

在这里插入图片描述

    综述篇里提到过,玩家的输入大概有四种情况:

开始游戏
什么都没输入
某个四位数字
其他内容

    我们依次处理这几种情况。首先是开始游戏。当玩家输入“开始游戏”,并按下按钮之后,首先把上面的文本框和下面编辑框中的内容清除(事实上,无论输入什么,都应该把编辑框清空),然后调用产生随机数的函数,产生一个随机数,存储到某个变量中,最后在文本框里面添加文本,比如“新的一轮游戏已开始!你还有6次机会”。

在这里插入图片描述

    仔细一想,我们还没有定义存储随机数和存储游戏剩余次数的变量呢!考虑到这些变量应该一直存在,我们把它也定义在onCreate函数外面。

在这里插入图片描述

    最后一步,在文本框里面添加提示文本:

在这里插入图片描述

    我们不妨运行,测试一下:

在这里插入图片描述

在这里插入图片描述

    结果失败了。文本框里面并没有显示消息。这个问题的原因比较复杂,大概来讲就是if(text == "开始游戏")这一句中,==的两边不是同一个对象,所以结果是false。我们这里其实是希望比较两个字符串对象的内容,所以应该使用equals方法,之后字符串的比较同样需要注意这一点。如下:

在这里插入图片描述

    我们重新运行应用:

在这里插入图片描述

    现在就好了。至此,我们完成了“开始游戏”的处理。下一个是什么也没有输入的处理。这是为了防止玩家不小心误点了按钮。为此,我们把它写在函数的前面。注意即使什么也没有输入,编辑框里面还是有一个空字符串。

在这里插入图片描述

    接下来,我们处理数字的情况。为了简化思路 ,我们假设玩家输入的内容除了"开始游戏"之外就是一个四位数字。于是,我们直接把text变量和answer作为参数,调用getSimilarity方法。即可获取到玩家猜测的数字和答案直接的相似度了。

在这里插入图片描述

    接着向文本框里面添加玩家猜测的数字和程序的提示文本,使用文本框对象的append方法。注意添加换行符(也就是回车),否则添加的文本全都在同一行。Android的换行符是\n

在这里插入图片描述

    玩家的剩余次数也需要跟着自减1,并跟在提示信息后面:

在这里插入图片描述

    我们紧接着写胜负判断:如果相似度是4A0B的话,那么说明玩家猜中了;如果次数变为0,那么可以判定游戏失败。这个比较简单,所以我直接放出代码:

在这里插入图片描述

    事实上,我们的小游戏到此为止已经开发结束了,大体的流程已经全部实现。为了简化开发过程,我就不再做其他的优化了,大家可以根据自己的喜好添加别的功能。




测试

    下面我们来测试一下:

在这里插入图片描述

在这里插入图片描述

最后一行好像有点奇怪,仔细检查之后才发现原来是忘记在判定为胜利的时候,在文本框里面添加玩家猜测的数字了。如果需要的话可以加上这一句:

在这里插入图片描述




后记

    猜数字小游戏的开发到此结束!整个开发过程看起来很复杂,但是大部分内容相信大家都是可以理解的。最后的测试结果还不错,基本上符合预期要求,为了猜中那个数可花了我不少时间。

    本篇文章中涉及的代码并不一定很好,大家可以根据自己的需要进行优化。

    教程中的MainActivity.java的所有代码:网盘链接,提取码:owen。

感谢你的阅读!本教程会长期不定时更新。本人不是大神,也会犯错,如果有建议或者提问的话,欢迎评论留言!

作者头像

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
开发手册目录 │ Addison Wesley - JDBC API Tutorial and Reference 3rd Edition (2003).chm │ ajax教程.chm │ AngularJS 中文API参考手册.chm │ Bootstrap-中文-API.chm │ css2.chm │ CSS4.0中文参考手册.chm │ cssv3.4.0.chm │ DHTML_DOC_CN.chm │ DHTML手册.chm │ dom4j.chm │ DOM_help.chm │ DOM中文参考手册CHM·chm.chm │ DOM文档对象模型手册.chm │ DTD.chm │ EasyUI-API+1.3.2.chm │ Ext2.2API中文版.CHM │ Ext3.2中文API.CHM │ Hibernate3.2.chm │ Hibernate3.2API.chm │ html5参考手册.chm │ HTML入门与提高.CHM │ Html标签一览表.chm │ html语法教程.chm │ HTTP1.1.chm │ J2EE_1.5_API.CHM │ J2EE_1.6_API.chm │ Java+EE+6+API+Specifications.CHM │ JavaEE_API_5[1].0.chm │ JavaScript Professional Projects.chm │ JavaScript20.chm │ JavaScript中文手册.CHM │ JavaScript手册.chm │ JavaScript语言中文参考手册.chm │ java_ee_api_中英文对照版.chm │ java_ee_api_中英文对照版.chw │ jBPM 4.4 API.chm │ jdk 1.7_api_doc.CHM │ JDK_API_1_6_zh_CN.CHM │ JDK_API_1_6_zh_CN.chw │ jquery1.7 中文手册.chm │ JQuery_1.4_API.CHM │ jQuery文档.chm │ JSP API.chm │ Jsp帮助文档.chm │ JSP语法.chm │ Linux基础命令教程豪华版.chm │ Linux常用命令大全.chm │ lucene_3.6.1_API.CHM │ MySQL_5.1_zh.chm │ POI_3.8_API.CHM │ Servlet API[China].chm │ Servlet-API.chm │ servlet.chm │ Spring-Reference_zh_CN.chm │ spring2.5.5_API.chm │ Spring3.0.2-RELEASE-API.chm │ Struts2.chm │ struts2中文教程.chm │ struts2标签.chm │ tomcat5.5中文帮助文档.chm │ W3CSchool .chm │ W3CSchool.chm │ w3school完整版.CHM │ WebGL自修教程.chm │ XML+Schema官方教程(9loong中文版)修正版2009.04.chm │ XmlSchema标准参考手册.chm │ XPathTutorial.chm │ 样式表中文手册.chm │ 网页制作完全手册.chm │ 英语资料大全.chm └─hadoop api

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值