Java实现Android拼图游戏设计过程解析
作者:biyezuopinvip 发布时间:2021-10-02 17:13:18
1.项目介绍
这是一款基于 Java 开发的移动端安卓小游戏——大家来拼图
2.项目原理
把选定的一张图片切分很多份,先是 33 格式,在一定的时间内点击格子交换使图形拼成一张完整的图片就算闯关成功,这样关卡也很容易设计,33;44;55;6*6;
3.项目设计
我们需要一个容器,可以放这些图片的块块,为了方便,我们准备使用RelativeLayout
配合 addRule
实现
每个图片的块块,我们准备使用 ImageView
点击交换,我们准备使用传统的 TranslationAnimation
来实现
4.项目实现
代码实现:
首先,我们准备实现能够把一张图片,切成 n*n 份,放在指定的位置;
我们只需要设置 n 这个数字,然后根据布局的宽或者高其中的小值,除以 n,减去一些边距就可以得到我们 ImageView
的宽和高了
5.获取布局
构造方法里面,我们得到把设置的 margin
值转化为 dp;获得布局的 padding
值;整体是个正方形,所以我们取 padding
四个方向中的最小值;
onMeasure
里面主要就是获得到布局的宽度,然后进行图片的准备,以及初始化我们的 Item
,为 Item 设置宽度和高度
6.准备图片
这里如果没有设置 mBitmap
就准备一张备用图片,然后调用 ImageSplitter.split
将图片切成 n * n 返回一个 List,这需要新建一个图片切割类 ImageSplitterUtil
切完以后,我们需要将顺序打乱,所以我们调用了 sort 方法,至于比较器,我们使用 random 随机比较大小,这样我们就完成了我们的乱序操作,这里要新建一个 ImagePiece 类来保存图片以及索引。
7.初始化 item
Item宽的计算:childWidth = (mWidth - mPadding * 2 - mMargin * (mColumn - 1) ) / mColumn;
容器的宽度,除去自己的内边距,除去Item间的间距,然后除以Item一行的个数就得到了Item的宽
接下来,就是遍历生成Item,根据他们的位置设置Rule
8.游戏图片的切换
要实现点击两个 Item,他们的图片能够发生交换,B 隐藏副本动画移动到 B 的位置;B 副本移动到 A 的位置
把图片设置为 B,把 B 副本移除,A 显示,这样就完美切合了,用户感觉是 B 移动过去的
B同上
9.游戏胜利的判断
遍历所有的 Item
,根据 Tag 拿到真正的索引和当然顺序比较,完全一致则胜利~~胜利以后进入下一关
10.游戏封面
添加一张背景图片,写入游戏名字(大家来拼图),再设置几个按钮,然后点击开始跳转到游戏内容界面。
项目效果展示:
来源:https://blog.csdn.net/newlw/article/details/122978611?


猜你喜欢
- Android Studio下载(下文统称AS)AS最新版下载请戳:AS下载Android SDK下载SDK安装器下载SDK安装器下载请戳:
- 1. selectKey标签查询DDLCREATE TABLE `luck_reward_info` ( `id` int NO
- Android手势解锁密码效果图 首先呢想写这个手势密码的想法呢,完全是凭空而来
- 同线程回收对象上一小节剖析了从recycler中获取一个对象, 这一小节分析在创建和回收是同线程的前提下, recycler是如何进行回收的
- 混淆studio 使用Proguard进行混淆,其是一个压缩、优化和混淆java字节码文件的一个工具。功能:Shrinking(压缩)、Op
- HttpServletRequest对象代表客户端的请求,当客户端通过HTTP
- 写在自定义之前我们也许会遇到,自定义控件的触屏事件处理,先来了解一下View类中的,onTouch事件和onTouchEvent事件。1、b
- springBoot Junit测试用例出现@Autowired不生效前提条件:1,测试类上面添加支持的注解就能取到spring中的容器的实
- 前言接着上一篇,上篇已经测试通过,成功添加了数据。那么这篇主要是继续上一个项目,将项目进行工程化包装,增加一些必要配置,并且生成增删改查接口
- Sequence序列Sequence 是Kotlin标准库提供的一种容器类型。它和Iterable一样具备对集合进行多步骤操作能力,但是却是
- 每个使用Android手机的人应该对Android中的通知不陌生,下面我们就学习一下怎么使用Android中的通知。一、通知的基本用法活动、
- 下文我们介绍两种双击事件拦截的方式1.通过Android的事件分发机制进行拦截(dispatchTouchEvent)话不多说,直接上代码:
- 概述现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。J
- 本文实例讲述了C#控制台下多线程实现方法。分享给大家供大家参考。具体如下:class Program{ static void
- 目录问题描述解决办法本文介绍下PasswordBox进行数据绑定的方法,本文参考链接。本文完整示例程序见GitHub。问题描述Passwor
- 复制文件并命名的超简洁写法没错又是我,这次为大家带来Java中 复制文件并命名的超简洁写法(请确保你的jre在1.8+),这次用到了File
- 一、 lib文件的简介.lib是一种文件后缀,是Windows操作系统的库文件,有静态lib和动态lib之分:1)、静态lib文件
- 1、数组数组的引用传递public class TestDemo1{public static void main(String args[
- Hadoop是什么?Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算
- 在 C# WPF开发中颜色对话框控件(ColorDialog)用于对界面中的背景、文字…(拥有颜色属性的所有控件)设置