关于游戏《挑战巅峰》中铺砖算法的猜测 -Unity
来源:互联网 发布:win10有网络不能上网 编辑:程序博客网 时间:2024/04/23 18:24
关于游戏《挑战巅峰》中铺砖算法的猜测 -Unity
首先,附上一张游戏图
可以看到图中的砖块从左到右,然后从右到左依次上升呈现阶梯排列(可以无视金币数),那么这个地图有点类似于棋盘格子的铺设算法,但是又有点不太一样。我们来分析一下这个游戏中砖块所遵从的规则。
假设砖的高和宽都是1,那么相临两块砖在横向和纵向上相差都是1。如果我们在横向上成功铺出来,只要在每一个砖块生成的时候纵向加1即可。下面来讨论一下横向上的铺砖算法。
来简化一下问题,假设最左边的砖和最右边的砖的横向位置(砖块的X坐标)是固定的,我们用整型数a,b来代替,此问题可以看成是一个数X从a开始++, 加到b时开始–,减到a时再++,如此循环。因而转换成一个数在a,b之间振荡并打印输出的问题。
对流程进行分析,如图:
代码:
int min = 0; int max = 10; int current = 0; bool isAdd = true; for (int index = 0; index < 30; index++) { print(current); if (isAdd) { current++; if (current > 10) { current = max; isAdd = false; } } else { current--; if (current < 0) { current = min; isAdd = true; } } }
结果会打印两个10,两个0,我们对代码进行修改
for (int index = 0; index < 30; index++) { print(current); if (isAdd) { current++; if (current > 10) { current = max-1; // 此处修改 isAdd = false; } } else { current--; if (current < 0) { current = min+1; // 此处修改 isAdd = true; } } }
这样,打印输出正常了。
接下来我们让两边的数字a,b都随机产生,再次修改代码:
int min = Random.Range(0,5);//修改 int max = Random.Range(5,10);//修改 int current = min;//修改 bool isAdd = true; for (int index = 0; index < 30; index++) { print(current); if (isAdd) { current++; if (current > max)//修改 { current = max-1; isAdd = false; min = Random.Range(0, 11); while (min >= current) min = Random.Range(0, 11); } } else { current--; if (current < min)//修改 { current = min+1; isAdd = true; max = Random.Range(0, 11); while (max <= current) max = Random.Range(0, 11); } } }
请自行测试打印
到此,a,b振荡的命题就解决了。。。以此为砖块横向坐标改变,再添加 纵向坐标改变,即可完成游戏砖块的铺设
for (int currentRow = 0; currentRow < maxRow; currentRow++) { if (!isAdd) // 砖从右往左排时 { currentColumn--; if (currentColumn < min) { currentColumn = min + 1; isAdd = true; max = Random.Range(0, 6); while (max <= currentColumn) max = Random.Range(0, 6); } } else // 砖从左往右排时 { currentColumn++; if (currentColumn > max) { currentColumn = max - 1; isAdd = false; min = Random.Range(0, 6); while (min >= currentColumn) { min = Random.Range(0, 6); } } } GameObject go = (GameObject)Instantiate(brick); go.transform.parent = this.transform; //The "current" is the X position,and the "index" is the Y position go.GetComponent<Brick>().fixedPosition(currentColumn, currentRow); }
Brick类中的fixedPosition方法
public void fixedPosition(int rowIndex, int columnIndex) { this.rowIndex = rowIndex; this.columnIndex = columnIndex; transform.localPosition = new Vector3(rowIndex * 40, columnIndex * 20, 0); transform.localScale = Vector3.one; }
效果截图:
附unity包
http://download.csdn.net/detail/liushida00/9251191
2 0
- 关于游戏《挑战巅峰》中铺砖算法的猜测 -Unity
- 关于Meltemi的猜测
- 关于 Unity Animator MatchTarget 实现猜测
- 挑战2048游戏算法分析
- pcb中铺铜,接地的原因
- 关于彩信故障的一些猜测
- 关于scanf内部运行方式的猜测
- 七牛的存储算法猜测
- 对百度Bingo算法的猜测
- 七牛的存储算法猜测
- 关于Unity游戏的序列化
- 关于Unity游戏开发的MVC架构
- 杀人猜测游戏
- 51nod1536-素数&猜测-不一样的猜数游戏
- KMP算法,字符串匹配算法的巅峰创意
- 【STL】remove算法猜测
- js算法--猜测随机数
- 关于linux0.12临界资源的一点理解和猜测
- 关于Android Studio如何导入library project
- Android中自定义控件获取text的宽高方式
- 【MySQL】MySQL 入门教程
- 「考试」是一场考生与出题者间的猜谜游戏,不是「做学问」
- Cloud Design Pattern - Event Sourcing Pattern(事件溯源模式)
- 关于游戏《挑战巅峰》中铺砖算法的猜测 -Unity
- HBase 笔记 -- 1
- poj3977
- perl安装Weixin::Client 模块依赖问题
- zoj 1610 Count the Colors 【暴力】
- VMware中的Linux系统下的硬盘扩容:ubuntu 重新挂载/usr
- MySQL常用函数
- Android--Listview学习
- 3.0MongoDB使用的jar包