原地址:http://blog.csdn.net/dingxiaowei2013/article/details/36462749

048是继FlappyBird之后另一个比较热的轻量级的手游,简单易玩。最近要离职原先的公司——因为我想做游戏,虽然玩游戏不是很多,但还是热爱开发游戏,因此就想去一家游戏公司,感觉对老板有一点愧疚和感激,愿原公司发展越来越好,用灰太狼的话讲,我还会回来的,哈哈!即将入职新公司,听说压力会很大,加班无止境,加班其实我到不怕,乘年轻,还有拼劲,加班算什么,其实只要自己能做出东西,感觉有成就感,倒还是喜欢花更多的时间去做东西,最近处于过渡期,写写之前公司的工作小结,还不是很忙,今天花了一个多小时,自己想了一下2048的算法,然后将其实现,可能算法不是那么优,还望批评交流!

效果图

实现的还比较粗糙,贴出主要逻辑代码,仅供参考,欢迎给出更优算法!

  1. using UnityEngine;
  2. using System.Collections;
  3. public class NewBehaviourScript : MonoBehaviour
  4. {
  5. public UILabel valueLabel;
  6. bool gameover = false;
  7. void Start()
  8. {
  9. gameover = false;
  10. valueLabel = GameObject.Find("ValueLabel").GetComponentInChildren<UILabel>();
  11. valueLabel.text = "Game Start";
  12. valueLabel.color = Color.green;
  13. }
  14. // Update is called once per frame
  15. void Update()
  16. {
  17. if (!gameover)
  18. {
  19. if (Input.GetKeyDown(KeyCode.D))
  20. {
  21. moveR();
  22. CreateNumber();
  23. }
  24. else if (Input.GetKeyDown(KeyCode.A))
  25. {
  26. moveL();
  27. CreateNumber();
  28. }
  29. else if (Input.GetKeyDown(KeyCode.W))
  30. {
  31. moveU();
  32. CreateNumber();
  33. }
  34. else if (Input.GetKeyDown(KeyCode.S))
  35. {
  36. moveD();
  37. CreateNumber();
  38. }
  39. }
  40. }
  41. void moveU()
  42. {
  43. for (int i = 1; i <= 4; i++)
  44. {
  45. bool flag = false;
  46. for (int j = 2; j <= 4; j++)
  47. {
  48. for (int k = j - 1; k >= 1; k--)
  49. {
  50. //获取当前元素
  51. GameObject go = GameObject.Find("L" + (k + 1).ToString() + i.ToString());
  52. print("当前对象" + go.name);
  53. UILabel I = go.GetComponentInChildren<UILabel>();
  54. //获取下一个元素
  55. GameObject goNext = GameObject.Find("L" + k.ToString() + i.ToString());
  56. print("下一个对象" + goNext.name);
  57. UILabel INext = goNext.GetComponentInChildren<UILabel>();
  58. //比较代码
  59. if (I.text != "")
  60. {
  61. if (INext.text == "")
  62. {
  63. INext.text = I.text;
  64. I.text = "";
  65. }
  66. else if (I.text == INext.text)
  67. {
  68. if (!flag)
  69. {
  70. int a = int.Parse(INext.text) + int.Parse(I.text);
  71. INext.text = a.ToString();
  72. I.text = "";
  73. flag = true;
  74. }
  75. }
  76. }
  77. }
  78. }
  79. }
  80. }
  81. void moveD()
  82. {
  83. for (int i = 1; i <= 4; i++)
  84. {
  85. bool flag = false;
  86. for (int j = 3; j >= 1; j--)
  87. {
  88. for (int k = j + 1; k <= 4; k++)
  89. {
  90. //获取当前元素
  91. GameObject go = GameObject.Find("L" + (k-1).ToString() + i.ToString());
  92. print("当前对象" + go.name);
  93. UILabel I = go.GetComponentInChildren<UILabel>();
  94. //获取下一个元素
  95. GameObject goNext = GameObject.Find("L" + k.ToString() + i.ToString());
  96. print("下一个对象" + goNext.name);
  97. UILabel INext = goNext.GetComponentInChildren<UILabel>();
  98. //比较代码
  99. if (I.text != "")
  100. {
  101. if (INext.text == "")
  102. {
  103. INext.text = I.text;
  104. I.text = "";
  105. }
  106. else if (I.text == INext.text)
  107. {
  108. if (!flag)
  109. {
  110. int a = int.Parse(INext.text) + int.Parse(I.text);
  111. INext.text = a.ToString();
  112. I.text = "";
  113. flag = true;
  114. }
  115. }
  116. }
  117. }
  118. }
  119. }
  120. }
  121. void moveL()
  122. {
  123. for (int i = 1; i <= 4; i++)
  124. {
  125. bool flag = false;
  126. for (int j = 2; j <= 4; j++)
  127. {
  128. for (int k = j - 1; k >=1 ; k--)
  129. {
  130. //获取当前元素
  131. GameObject go = GameObject.Find("L" + i.ToString() + (k + 1).ToString());
  132. print("当前对象" + go.name);
  133. UILabel I = go.GetComponentInChildren<UILabel>();
  134. //获取下一个元素
  135. GameObject goNext = GameObject.Find("L" + i.ToString() + k.ToString());
  136. print("下一个对象" + goNext.name);
  137. UILabel INext = goNext.GetComponentInChildren<UILabel>();
  138. //比较代码
  139. if (I.text != "")
  140. {
  141. if (INext.text == "")
  142. {
  143. INext.text = I.text;
  144. I.text = "";
  145. }
  146. else if (I.text == INext.text)
  147. {
  148. if (!flag)
  149. {
  150. int a = int.Parse(INext.text) + int.Parse(I.text);
  151. INext.text = a.ToString();
  152. I.text = "";
  153. flag = true;
  154. }
  155. }
  156. }
  157. }
  158. }
  159. }
  160. }
  161. void moveR()
  162. {
  163. for (int i = 1; i <= 4; i++)
  164. {
  165. bool flag = false;
  166. for (int j = 3; j >= 1; j--)
  167. {
  168. for (int k = j + 1; k <= 4; k++)
  169. {
  170. //获取当前元素
  171. GameObject go = GameObject.Find("L" + i.ToString() + (k - 1).ToString());
  172. print("当前对象" + go.name);
  173. UILabel I = go.GetComponentInChildren<UILabel>();
  174. //获取下一个元素
  175. GameObject goNext = GameObject.Find("L" + i.ToString() + k.ToString());
  176. print("下一个对象" + goNext.name);
  177. UILabel INext = goNext.GetComponentInChildren<UILabel>();
  178. //比较代码
  179. if (I.text != "")
  180. {
  181. if (INext.text == "")
  182. {
  183. INext.text = I.text;
  184. I.text = "";
  185. }
  186. else if (I.text == INext.text)
  187. {
  188. if (!flag)
  189. {
  190. int a = int.Parse(INext.text) + int.Parse(I.text);
  191. INext.text = a.ToString();
  192. I.text = "";
  193. flag = true;
  194. }
  195. }
  196. }
  197. }
  198. }
  199. }
  200. }
  201. void CreateNumber()
  202. {
  203. int count = 0;
  204. bool flag = false;
  205. for (int i = 1; i <= 4; i++)
  206. {
  207. if (!flag)
  208. {
  209. for (int j = 1; j <= 4; j++)
  210. {
  211. GameObject go = GameObject.Find("L" + i.ToString() + j.ToString());
  212. UILabel label = go.GetComponentInChildren<UILabel>();
  213. if (label.text == "")
  214. {
  215. int r = Random.Range(1, 10);
  216. if (r <= 5)
  217. {
  218. int value = Random.Range(1, 5);
  219. if (value < 4)
  220. label.text = "2";
  221. else
  222. label.text = "4";
  223. flag = true;
  224. break;
  225. }
  226. }
  227. else
  228. {
  229. if (++count == 16)
  230. {
  231. valueLabel.text = "Game Over";
  232. valueLabel.color = Color.red;
  233. gameover = true;
  234. }
  235. }
  236. }
  237. }
  238. else
  239. break;
  240. }
  241. }
  242. }

[Unity3D+算法]一小时做个2048的更多相关文章

  1. Unity3D使用碰撞体做触发器实现简单的自己主动开门

     在游戏制作中触发器的使用很的方便也很有用. 这一张我们简介一下怎样使用一个简单的触发器来实现自己主动开门关门的效果. 首先确保你已经对门进行了动画的设置. 详细流程例如以下. 选择Window- ...

  2. 分布式ID系列(5)——Twitter的雪法算法Snowflake适合做分布式ID吗

    介绍Snowflake算法 SnowFlake算法是国际大公司Twitter的采用的一种生成分布式自增id的策略,这个算法产生的分布式id是足够我们我们中小公司在日常里面的使用了.我也是比较推荐这一种 ...

  3. Recommending music on Spotify with deep learning 采用深度学习算法为Spotify做基于内容的音乐推荐

    本文参考http://blog.csdn.net/zdy0_2004/article/details/43896015译文以及原文file:///F:/%E6%9C%BA%E5%99%A8%E5%AD ...

  4. 编程算法 - 不用加减乘除做加法 代码(C)

    不用加减乘除做加法 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 写一个函数, 求两个整数之和, 要求在函数体内不得使用+, -, *, /四 ...

  5. Unity3d 子线程能做的事

    一,子线程中能做的事: 1,数据逻辑方面计算: 二,子线程中,不能: 1,加载场景相关事件: Application.LoadLevelAsync.Application.LoadLevel等: 2, ...

  6. ACM用到的算法。先做个笔记,记一下

    ACM 所有算法 数据结构 栈,队列,链表 哈希表,哈希数组 堆,优先队列 双端队列 可并堆 左偏堆 二叉查找树 Treap 伸展树 并查集 集合计数问题 二分图的识别 平衡二叉树 二叉排序树 线段树 ...

  7. 深入浅出游戏算法(4)-unity3d算法(1)-球转动

    球 转动 按以下布局放置好unity3d的各个组件.设置好渲染.位置.光源.大小等 麦好的AI乐园博客全部内容是原创,假设转载请注明来源 http://blog.csdn.net/myhaspl/ 编 ...

  8. 案例(一) 利用机器算法RFM模型做用户价值分析

      一.案例背景 在产品迭代过程中,通常需要根据用户的属性进行归类,也就是通过分析数据,对用户进行归类,以便于在推送及转化过程中获得更大的收益. 本案例是基于某互联网公司的实际用户购票数据为研究对象, ...

  9. Unity3d 用NGUI制作做新手引导的思路

    一.先看下效果 Prefab结构 二.实现思路: 1.prefab上的Panel层级设置成较高 2.背景由5个UISprite拼接起来的,4个(L,R,U,D)当作遮罩,1个镂空(Hollow)当作点 ...

随机推荐

  1. linux下开发板网络速度测试记录

        由于做的项目对于网络和USB的读写速度有很高的要求,因此新拿回来的板子要测试网络和usb的最佳传输速度.要考虑不少因素,先把我能想到的记录下来.     测试的环境是开发板和ubuntu虚拟机 ...

  2. PowerDesigner提示This data item is already used in a primary identifier.的处理

    原文链接: http://blog.csdn.net/lopper/article/details/5293545 今天同事在编制一个数据库脚本的时候,提示了This data item is alr ...

  3. jQuery 简单漂亮的 Nav 导航菜单

    自己写的一个简单的导航菜单,先看效果: 鼠标悬浮时菜单项向上移动成蓝底白字,点击之后底部会有蓝条表示当前选中项. 页面代码,菜单的每一项都是一个 div ,其中包括一个 ul 用来放置显示文字等,另一 ...

  4. iOS ARC基本原理

    一.ARC基本简介 ARC:Automatic Reference Counting 自动引用 完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autor ...

  5. YCM的安装与配置

    花了好几天的时间,总算把YCM装上了.期间遇到了各种问题,主要还是因为刚进linux,对linux环境不熟, 命令资料等查了半天.当然,YCM也普遍被认为是一种安装配置复杂,但使用起来超简单的插件. ...

  6. MySQL 性能优化

    内容简介:这是一篇关于mysql 性能,mysql性能优化,mysql 性能优化的文章.网上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与负责,同样的设置 ...

  7. ExtJS实战 01——HelloWorld

    前言 Extjs5的发布已经有些日子了,目前的最新稳定版本是Extjs5.1.0,我们可以在官方网站进行下载.不过笔者今天访问得到的是502Bad Gateway,原因可能是sencha的nigix没 ...

  8. 【Qt】Qt之密码框不可选中、复制、粘贴、无右键菜单等【转】

    简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...

  9. 基于WORDPRESS+MYSQL的绿色企业主题制作全过程

    基于WORDPRESS+MYSQL的绿色企业主题制作全过程基于WORDPRESS+MYSQL的绿色企业主题制作全过程基于WORDPRESS+MYSQL的绿色企业主题制作全过程基于WORDPRESS+M ...

  10. Odoo 库存管理-库存移动(Stock Move)新玩法

    库存移动(Stock Move)新玩法 Odoo的库存移动不仅仅是存货在两个“存货地点”之间的移动的基本概念了,他们可以被“串联”在一起,可以用来生成或改变其对应的拣货单 (Picking).链式库存 ...