- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编写推箱子 程序(七)之续篇
——解决搬运工和箱子无法移动的问题
本文目标
《编写推箱子 程序(七)》一文中,我们实现了绘制 局面的功能,如图1 所示。
但是,搬运工和箱子都不能移动了。本文的目标是解决搬运工/箱子不能移动这一问题。另
一个目标是实现防止搬运工和箱子走到墙上的功能。
要强调的是,为了简化问题,我们假定 局面中只有一个箱子和一枚 。以后我们
将增加箱子和 的数目。
图1 推箱子 局面示例
实现思路和步骤
我们按以下步骤来完成任务:
1. 首先解决搬运工无法移动问题(不考虑推箱子移动的情形)。
a) 分析造成搬运工无法移动的原因。
b) 给出解决搬运工无法移动问题的对策。
2. 接下解决箱子无法移动的问题。
a) 分析造成箱子无法移动的原因。
b) 给出解决箱子无法移动问题的对策。
3. 实现防止搬运工和箱子走到墙上的功能。
解决搬运工无法移动问题
造成搬运工无法移动的原因
造成搬运工无法移动的原因在于:
1. 用来记住搬运工位置(即搬运工所在单元格行号和列号)的成员变量 mManRow,
mManColumn 的初始值没有设对。
2. 没有实施下面这一任务:搬运工移动后,要修改表示 局面的二维矩阵的内容。
下面具体解释上述两个原因。
对于第一个原因,让我们回顾“编写推箱子 程序(五)”一文。该文中,mManRow,
mManColumn 都被初始化为 0 (“编写推箱子 程序(六)”一文照搬了这一点)。这
使得搬运工出现在网格的左上角(第 1 行第 1 列)。在“编写推箱子 程序(五)”一
文 :
变量mManRow 和mManColumn 是GameView 类的成员变量,定义如下:
private int mManRow = 0;
private int mManColumn = 0;
但是,“编写推箱子 程序(七)”一文中使用了关卡开局数据(一个二维矩阵),
并根据开局来绘制 局面。这使得:(1)搬运工不在左上角。如图1 所示,在这一关中,
搬运工的初始位置是第8 行第6 列。(2)不同关卡的开局中,搬运工的初始位置是不同的。
如果你不根据开局设置搬运工的初始位置,那么它的初始位置就是左上角(0,0 ),即
mManRow=0, mManColumn=0。这与搬运工在开局的位置不一致。因此,任你在搬运工的
上(下、左、右)方触摸屏幕,搬运工都 走动。这是因为,判别你触摸的位置是否在搬
运工的上(下、左、右)方的方法,比如touch_up_to_man 返回true 值。
对于第二个原因,让我们回顾“编写推箱子 程序(七)”一文。该文中,绘制
局面是根据表示 局面的二维矩阵进行的。实现绘制 局面的方法是
drawGam () 。这意味着,不是根据搬运工的位置(mManRow, mManColumn)来绘
制搬运工。显然,如果搬运工移动了,mManRow 和mManColumn 的值更改了,但没有修
改表示 局面的二维矩阵的内容,在界面上也 看到搬运工位置的变化。
解决搬运工无法移动问题的对策
如何解决搬运工无法移动问题?解决办法是:
1. 根据开局正确设置搬运工的起始位置。
2. 搬运工走动时,修改受影响单元格对应的矩阵元素的值。
第1 条办法的具体做法是:扫描表示开局的二维矩阵,得出搬运工的初始位置(记作(r0,
c0) ),把mManRow 的初值设置为r0,把mManColumn 的初值设置为c0 。
下面用get_gongren_chushi_weizhi 这个方法来实现上述功能。这个方法的代码如表1
所示。
表1 求搬运工初始位置的方法
com.yescorp.moveboxgame.GameView.java
1 //根据 开局初始化搬运工
文档评论(0)