Android怎么实现华容道小游戏
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要介绍了Android怎么实现华容道小游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android怎么实现华容道小游戏文章都会有所收获,下面我们一起来看看吧
千家信息网最后更新 2024年11月11日Android怎么实现华容道小游戏
这篇文章主要介绍了Android怎么实现华容道小游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android怎么实现华容道小游戏文章都会有所收获,下面我们一起来看看吧。
效果:
思路以及实现
首先,我们应该考虑如何去实现这个效果。细想一下,其实和之前的2048有点像,但是又不是完全一直。于是,便又折腾了一波。这次布局和内容项参考之前2048的,下面放上代码:
自定义一个frame layout,我们先绘制里面的数字:
private void initial() { label = new TextView(getContext()); label.setTextSize(32); label.setBackgroundColor(0x33ff0033); label.setTextColor(0x330D0D0D); label.setGravity(Gravity.CENTER); LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); lp.setMargins(10, 10, 0, 0); addView(label, lp); setNum(0); } public int getNum() { return num; } @SuppressLint("SetTextI18n") public void setNum(int num) { this.num = num; if (num <= 0) { label.setText(""); } else { label.setText(num + ""); } }
我们可以看到上面的数字在3x3中,我们显示1-8。不过通过代码我们可以知道,其实我们是去生成0-8,然后把0的那块内容设为空。
那么我们在想一下,是滑动移动还是点击移动。以现在体验的角度,滑动移动会更方便一点。所以我们需要监听它的滑动事件:
setOnTouchListener(new View.OnTouchListener() { private float startX, startY, changeX, changeY; @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startX = event.getX(); startY = event.getY(); break; case MotionEvent.ACTION_UP: // 改变的X坐标=现在的-起始的 changeX = event.getX() - startX; // 改变的Y坐标=现在的-起始的 changeY = event.getY() - startY; // 若X的绝对值>Y的绝对值,则是左右移动,否则为上下移动,左上角坐标为(0,0) if (Math.abs(changeX) > Math.abs(changeY)) { if (changeX < -PADDING) { left(); } else if (changeX > PADDING) { right(); } } else { if (changeY < -PADDING) { up(); } else if (changeY > PADDING) { down(); } } break; default: } return true; } });
但是我们需要在滑动之前先生成所有的随机数。也就是1-N生成N个随机数。
public int[] randomCommon(int max, int n) { if (n > (max + 1) || max < 0) { return null; } int[] result = new int[n]; int count = 0; while (count < n) { int num = (int) (Math.random() * max) + 1; boolean flag = true; for (int j = 0; j < n; j++) { if (num == result[j]) { flag = false; break; } } if (flag) { result[count] = num; count++; } } return result; }
数字生成完成之后,我们需要把数据放入之前写的Card并且add到现在的GridLayout中。
private void addCard(int cardWidth, int cardHeight) { Card card; int sum = 0; for (int x = 0; x < addNumber; x++) { for (int y = 0; y < addNumber; y++) { card = new Card(getContext()); card.setNum(number[sum] - 1); addView(card, cardWidth, cardHeight); point[x][y] = card; sum++; } } }
数据生成了,内容也显示了,接下来我们需要做的就是对方向的逻辑处理。这边我放一个,其他的同理:
for (int x = 0; x < addNumber; x++) { for (int y = 0; y < addNumber; y++) { if (x - 1 >= 0) { if (point[x - 1][y].getNum() == 0) { point[x - 1][y].setNum(point[x][y].getNum()); point[x][y].setNum(0); isFinish(); return; } } }}
如果有人看过之前的2048会发现这边的判断更简单一些,然后我们每次滑动结束,我们需要判断游戏是否结束。如果游戏结束就给它一个提示,是重新来过还是直接下一关:
int number = 1; for (int x = 0; x < addNumber; x++) { for (int y = 0; y < addNumber; y++) { if (number == addNumber * addNumber) { MainActivity.getMainActivity().stop(); new AlertDialog.Builder(getContext()) .setTitle("游戏结束!") .setMessage("您的时间是:" + MainActivity.getMainActivity().getTimer()) .setPositiveButton("重来", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { MainActivity.getMainActivity().clear(); start(); } }) .setNegativeButton("下一关", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { MainActivity.getMainActivity().clear(); addNumber(); } }).show(); return; } if (point[x][y].getNum() == number) { number++; } }}
关于"Android怎么实现华容道小游戏"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"Android怎么实现华容道小游戏"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
内容
生成
移动
小游戏
华容
华容道
坐标
数字
知识
效果
数据
篇文章
绝对值
还是
随机数
一关
起始
接下来
上下
上代
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广东上门软件开发资格
2020年网络安全新政策
web数据库怎么处理
网络技术服务保修期
淮北矿务局网络安全培训
网络安全管理爆发
原神通服务器吗
电子软件开发工资高不高
华为云数据库DBA花钱ma
柯南服务器怎么都没
戴尔服务器怎么进入安全模式
关于网络安全经费保障的申请
网络安全日志类型
数据库插入数据类型
计算机四级网络技术网课购买
剑与远征账号不在服务器
打印机尝试连接到web服务器
网络安全信息技能
四川博通达网络技术有限公司
上海世纪华联网络技术有限公司
mpp数据库有副本机制吗
数据库书名定为主码
手机服务器密码忘记了怎么办
数据库使用GUI删除模式
数据库研制课程设计
三级网络技术2018年9月
机关网络安全领导小组成立方案
Lantern无法连接到服务器
但是我们要注意网络安全英文
为什么软件开发商要强制推送消息