栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

其中 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;
    }
}


最终效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/727309.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号