欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

安卓开发从入门到转业(五)拼图游戏

时间:2023-08-04

其中 move 函数具体实现过程:

private void move(int imageButtonId, int site) { //判断选中的图片在第几行,取整来判断 int sitex=site / imageX; //判断选中的图片在第几列,趋于来判断 int sitey=site % imageY; //获取空白区域的坐标 int blackx=blackSwap / imageX; int blacky=blackSwap % imageY; //可以移动的条件 //1.在同一行,列数相减绝对值为1,可以移动;2.在同一列,行数相减绝对值为1,可以移动。 int x=Math.abs(sitex-blackx); int y=Math.abs(sitey-blacky); if((x==0&&y==1)||(x==1&&y==0)){ //通过id查找到这个可以移动的按钮 ImageButton clickButton=findViewById(imageButtonId); //该可移动按钮不在显示图片 clickButton.setVisibility(View.INVISIBLE); //查找空白区域的按钮 ImageButton blackButton=findViewById(blackImgid); //将空白按钮设置为显示图片 blackButton.setImageResource(image[imageIndex[site]]); //移动之前是不可见的,移动之后将控件设置为可见 blackButton.setVisibility(View.VISIBLE); //上面的交换并没有存在数组之中,要调用swap函数,将改变角标的过程记录在存储图片位置的数组当中 swap(site,blackSwap); //新的空白区域位置更新 blackSwap=site; blackImgid=imageButtonId; } }

目前为止效果展示:

拼图成功的条件

每次拼图结束之后,要判断一下当前拼图顺序是否满足正确顺序。
这里是判断存放图片角标的数组的顺序。

private void judgeGameOver() { boolean loop=true; //定义标志位 //对存放图片角标的数组imageIndex进行判断 for (int i = 0; i < imageIndex.length; i++) { if (imageIndex[i]!=i) { loop=false; break; } } if (loop) { //拼图成功 //停止计时 handler.removeMessages(1); //移除消息 //禁止玩家继续移动按钮 ib00.setClickable(false); ib01.setClickable(false); ib02.setClickable(false); ib10.setClickable(false); ib11.setClickable(false); ib12.setClickable(false); ib20.setClickable(false); ib21.setClickable(false); ib22.setClickable(false); //显示之前隐藏的拼图 ib22.setImageResource(image[8]); ib22.setVisibility(View.VISIBLE); //弹出对话框 alertDialog.Builder builder=new alertDialog.Builder(this); builder.setMessage("拼图成功啦!您用的时间是"+time+"秒!") .setPositiveButton("确认",null); alertDialog dialog = builder.create(); dialog.show(); } }

游戏重新开始

现在需要将拼图重新打乱,重新打乱的函数 disruptRandom() 在前面已经写好,直接引用即可。
但是之前游戏成功已经禁止拼图继续移动,所以将打乱之前要恢复按钮可以移动的功能,同时还要还原被点击图片初始化的样子,具体代码如下:

public void restart(View view) { //将状态还原 restore(); //将拼图重新打乱 disruptRandom(); //中断之前的消息 handler.removeMessages(1); //将时间重新归零并且重新开始计时 time=0; timeTv.setText("时间:"+time+"秒"); handler.sendEmptyMessageDelayed(1,1000); } private void restore() { //拼图游戏重新开始,允许玩家重新触碰按钮 ib00.setClickable(true); ib01.setClickable(true); ib02.setClickable(true); ib10.setClickable(true); ib11.setClickable(true); ib12.setClickable(true); ib20.setClickable(true); ib21.setClickable(true); ib22.setClickable(true); //还原被点击的图片按钮变成初始化的模样 //最后一次选中的空白区域显示出来 ImageButton clickButton=findViewById(blackImgid); clickButton.setVisibility(View.VISIBLE); //定义一个新的图片按钮,设置为第九个,让其隐藏(默认隐藏第九张图片) ImageButton blackBtn=findViewById(R.id.pt_ib_02x02); blackBtn.setVisibility(View.INVISIBLE); //初始化空白区域的按钮id blackImgid=R.id.pt_ib_02x02; blackSwap=imageCount-1; }}

最终效果

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。