辞职了忙着找工作,不想遇上了什么鬼互联网寒冬,一时半会也没有着落闲暇之余打算复习一下Android(我的天,全忘了),决定从这个最简单的小拼图游戏开始,并简单记录一下。

首先呢是界面,就不说了,刷刷的去写xml就好了,我审美水平就这样子了,完成后大体就是这样子了,也没遇到什么大问题了。

接着开始给什么按钮呀,imageview呀注册事件,编写逻辑,也不多说了,都简单,最后开始编写游戏逻辑了,于是遇到了一个小问题,所以记录一下。

游戏的逻辑很简单:

1.根据指定大小生成随机的图片网格,并留一个空白网格。

2.点击网格项的时候,如果其上下左右存在空白网格,则该项和空白网格互换,最终如果所有网格都复位的话,游戏结束。

本来说,随机网格嘛,只要把一个图片数组打乱顺序就好了,于是我就这样:

Bitmap bitMapArray[] = new Bitmap[]{...};
Random rom = new Random(new Date().getTime());
for(int i = 0; i < loopCount; i++) {int tmpIndex1 = rom.nextInt(size);int tmpIndex2 = rom.nextInt(size);Bitmap tmp1 = bitMapArray[tmpIndex1 ];Bitmap tmp2 = bitMapArray[tmpIndex2 ];bitMapArray[tmpIndex1 ] = tmp2 ;bitMapArray[tmpIndex2 ] = tmp1;
}

随机网格成了,虽然有时候不是真的那么随机,但是在执行游戏逻辑的时候发现,有时候无论你怎么弄,有两个方块没办法复位,游戏没法结束,仔细一想,假如我随机互换第一块和第五块,在这种情况下按照拼图的规则,你是没有办法使它们复位的,于是乎,这种随机方法是不可行的,只能另想他法了,我的想法是从空白块开始,随机选择一个方向【上下左右】互换,然后不停的循环,最后,按照最近路径将空白块换回最后一个方块,这样就不存在游戏无法结束的情况了,下面是我的实现(代码很烂,不喜勿喷):

 void randomIndex(int size) {Random rom = new Random(System.currentTimeMillis());int indexArray[] = new int[size * size];for(int i = 0; i < indexArray.length; i++) {indexArray[i] = i;}for(int i = 0; i < indexArray.length; i++) {int romIndex = rom.nextInt(indexArray.length);int romIndex1 = rom.nextInt(indexArray.length);if(romIndex == indexArray.length - 1 || romIndex1 == indexArray.length - 1) {continue;}int tmp = indexArray[romIndex1];indexArray[romIndex1] = indexArray[romIndex];indexArray[romIndex] = tmp;}for (int i = 0; i < indexArray.length; i++) {int tagIndex = indexArray[i];int curIndex = (int) curText.getTag();int curx = curIndex % size, cury = curIndex / size;int x = tagIndex % size, y = tagIndex / size;while (true) {if(tagIndex == curIndex) {break;}if(x < curx) {move(subPic[--curx][cury]);}if(x > curx) {move(subPic[++curx][cury]);}if(y > cury) {move(subPic[curx][++cury]);}if(y < cury) {move(subPic[curx][--cury]);}if(curx == x && cury == y) {break;}}}}int[][] dirArray = new int[][]{{0,1},{1,0},{-1,0},{0,-1}};public void move(View view) {int index = (int)view.getTag();int x = index % size;int y = index / size;String text = "" + subPic[y][x].getText();Bitmap bitmap = subPic[y][x].getImg();int realIndex = subPic[y][x].getRealIndex();subPic[y][x].setText(curText.getText());subPic[y][x].setImg(curText.getImg());subPic[y][x].setRealIndex(curText.getRealIndex());curText.setText(text);curText.setImg(bitmap);curText.setRealIndex(realIndex);curText = subPic[y][x];moveCount++;}

github地址:https://github.com/monsterCry/pintu

转载于:https://my.oschina.net/marner/blog/3029377

九宫格拼图小游戏开发笔记-随机网格生成相关推荐

  1. android实现九宫格拼图小游戏

    贴一下效果图 接下来随便用一张图片就好 以下是全代码 自定义View GameView类 import android.content.Context; import android.graphics ...

  2. python循环10次_开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择...

    开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择 "+.-.*"运算符,构成一个表达式, 让用户计算式子结果并输入结果,如果计算 ...

  3. 【第二届青训营-寒假前端场】- 「小游戏开发」笔记

    前端场景下的游戏开发 开发角色和链路 为什么要用游戏引擎 前端过渡到游戏开发 游戏引擎 市面上常见游戏引擎 特定类型的客户端游戏引擎 The NVL Maker **RPG Maker** Web游戏 ...

  4. 微信小游戏 腾讯课堂《白鹭教育 - 成语大挑战小游戏开发》学习笔记

    腾讯课堂<白鹭教育 - 成语大挑战小游戏开发>:https://ke.qq.com/course/287266 学习笔记 首先这个视频课程简单介绍了一个小游戏的制作,包括新建项目.适配模式 ...

  5. 微信小程序开发拼图小游戏

    闲来无事,自己用微信小程序开发了一个拼图小游戏玩,大概效果就是这样的: 大概效果就是这样,感兴趣的小伙伴可以看一下,需要代码请留言自己的微信.

  6. android自定义游戏闯关图,Android开发之儿时的回忆——拼图小游戏

    会写这篇文章完全是由于巧合,前几天路过天桥下的路边摊发现一个很熟悉的"老朋友",想必大家小时候也玩过这种滑块拼图吧. 儿时的印象--滑块拼图 哈哈,暴露年龄的东西,刚开始觉得很惊喜 ...

  7. 开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择

    开发一个循环 5 次计算的小游戏, 设置随机种子为10,每次随机产生两个 1~10的数字以及随机选择 "+.-.*"运算符,构成一个表达式, 让用户计算式子结果并输入结果,如果计算 ...

  8. 0.用CocosCreator开发拼图小游戏——序言

    为什么第一行会默认字号比较大-(不好 暴露自己没用过这玩意的事实了 划掉划掉) 进入社会快2年了...还没被社会毒打(雾).在想写点什么东西,顺便整理下开发思路的前提下,这一篇流水账便开始了序幕(很可 ...

  9. 微直播笔记|三十分钟微信小游戏开发入门

    微信小游戏在2017年12月28日正式上线.相对于传统的H5游戏,小游戏的优势十分明显,拥有微信庞大的用户量以及更好的兼容性,在天生适合微信社交生态的同时还不用担心被屏蔽.无疑,这或许是一个巨大的风口 ...

最新文章

  1. opengl实现3d点云_3D视觉CV界的终极体现形式,计算机如何「看」这个三维世界
  2. php 图片库 加星,PHP使用imagick_st类库把JPG生成GIF动画图片
  3. 同一数据库如果处理多个完全不同的业务?
  4. 【网络安全】从零开始的CTF生活
  5. DG - 开启Active Data Guard
  6. php下载文件并保存到指定文件夹
  7. win7系统提示0x80072F8F错误代码的解决方法(刷新你的认知)
  8. Rhino 6 Essential Training Rhino6基本教程 Lynda课程中文字幕
  9. 3D游戏里的男女性角色模型是这样建模出来的
  10. web手机端真机测试
  11. 顶刊实证复现:排污权交易机制是否提高了企业全要素生产率 (思路梳理+全数据源+python代码)
  12. 大数据典型的应用场景
  13. 【HTML——粒子 特效】
  14. # Ubuntu执行sudo apt-get update提示:E: 仓库 “https://mirrors.ustc.edu.cn/ubuntu focal Release” 没有 Release
  15. 宝塔面板网站一打开cpu百分百_解决宝塔面板CPU占满100%,负载100%网站缓慢等问题...
  16. Docker容器进入的4种方式
  17. python tkinter 日期时间选择器,附详细可运行源码
  18. Python-容器类型
  19. 博弈的三个巨人 巴什博奕 威佐夫博奕 尼姆博奕
  20. Qt 制作电子表格时候应该注意的地方

热门文章

  1. 汉芯一号、木兰语言再到天赐OS,国产基础软件十年泣血,梦想何圆?
  2. YOLOv5-优化器和学习率调整策略
  3. 仿爱奇艺加载dialog
  4. 分享一个在线去水印网站
  5. Machine Learning Practical 爱宝week2
  6. python txt文件常用读写操作
  7. 解决idea翻译插件translation无法使用问题
  8. 干货 实例 | 数字化时代的传统行业转型升级
  9. 从零双排java之转换流
  10. 数字化赋能三农 农行、邮储如何保“质”更保“智”?