[Unity3D+算法]一小时做个2048
原地址:http://blog.csdn.net/dingxiaowei2013/article/details/36462749
048是继FlappyBird之后另一个比较热的轻量级的手游,简单易玩。最近要离职原先的公司——因为我想做游戏,虽然玩游戏不是很多,但还是热爱开发游戏,因此就想去一家游戏公司,感觉对老板有一点愧疚和感激,愿原公司发展越来越好,用灰太狼的话讲,我还会回来的,哈哈!即将入职新公司,听说压力会很大,加班无止境,加班其实我到不怕,乘年轻,还有拼劲,加班算什么,其实只要自己能做出东西,感觉有成就感,倒还是喜欢花更多的时间去做东西,最近处于过渡期,写写之前公司的工作小结,还不是很忙,今天花了一个多小时,自己想了一下2048的算法,然后将其实现,可能算法不是那么优,还望批评交流!
效果图
实现的还比较粗糙,贴出主要逻辑代码,仅供参考,欢迎给出更优算法!
- using UnityEngine;
- using System.Collections;
- public class NewBehaviourScript : MonoBehaviour
- {
- public UILabel valueLabel;
- bool gameover = false;
- void Start()
- {
- gameover = false;
- valueLabel = GameObject.Find("ValueLabel").GetComponentInChildren<UILabel>();
- valueLabel.text = "Game Start";
- valueLabel.color = Color.green;
- }
- // Update is called once per frame
- void Update()
- {
- if (!gameover)
- {
- if (Input.GetKeyDown(KeyCode.D))
- {
- moveR();
- CreateNumber();
- }
- else if (Input.GetKeyDown(KeyCode.A))
- {
- moveL();
- CreateNumber();
- }
- else if (Input.GetKeyDown(KeyCode.W))
- {
- moveU();
- CreateNumber();
- }
- else if (Input.GetKeyDown(KeyCode.S))
- {
- moveD();
- CreateNumber();
- }
- }
- }
- void moveU()
- {
- for (int i = 1; i <= 4; i++)
- {
- bool flag = false;
- for (int j = 2; j <= 4; j++)
- {
- for (int k = j - 1; k >= 1; k--)
- {
- //获取当前元素
- GameObject go = GameObject.Find("L" + (k + 1).ToString() + i.ToString());
- print("当前对象" + go.name);
- UILabel I = go.GetComponentInChildren<UILabel>();
- //获取下一个元素
- GameObject goNext = GameObject.Find("L" + k.ToString() + i.ToString());
- print("下一个对象" + goNext.name);
- UILabel INext = goNext.GetComponentInChildren<UILabel>();
- //比较代码
- if (I.text != "")
- {
- if (INext.text == "")
- {
- INext.text = I.text;
- I.text = "";
- }
- else if (I.text == INext.text)
- {
- if (!flag)
- {
- int a = int.Parse(INext.text) + int.Parse(I.text);
- INext.text = a.ToString();
- I.text = "";
- flag = true;
- }
- }
- }
- }
- }
- }
- }
- void moveD()
- {
- for (int i = 1; i <= 4; i++)
- {
- bool flag = false;
- for (int j = 3; j >= 1; j--)
- {
- for (int k = j + 1; k <= 4; k++)
- {
- //获取当前元素
- GameObject go = GameObject.Find("L" + (k-1).ToString() + i.ToString());
- print("当前对象" + go.name);
- UILabel I = go.GetComponentInChildren<UILabel>();
- //获取下一个元素
- GameObject goNext = GameObject.Find("L" + k.ToString() + i.ToString());
- print("下一个对象" + goNext.name);
- UILabel INext = goNext.GetComponentInChildren<UILabel>();
- //比较代码
- if (I.text != "")
- {
- if (INext.text == "")
- {
- INext.text = I.text;
- I.text = "";
- }
- else if (I.text == INext.text)
- {
- if (!flag)
- {
- int a = int.Parse(INext.text) + int.Parse(I.text);
- INext.text = a.ToString();
- I.text = "";
- flag = true;
- }
- }
- }
- }
- }
- }
- }
- void moveL()
- {
- for (int i = 1; i <= 4; i++)
- {
- bool flag = false;
- for (int j = 2; j <= 4; j++)
- {
- for (int k = j - 1; k >=1 ; k--)
- {
- //获取当前元素
- GameObject go = GameObject.Find("L" + i.ToString() + (k + 1).ToString());
- print("当前对象" + go.name);
- UILabel I = go.GetComponentInChildren<UILabel>();
- //获取下一个元素
- GameObject goNext = GameObject.Find("L" + i.ToString() + k.ToString());
- print("下一个对象" + goNext.name);
- UILabel INext = goNext.GetComponentInChildren<UILabel>();
- //比较代码
- if (I.text != "")
- {
- if (INext.text == "")
- {
- INext.text = I.text;
- I.text = "";
- }
- else if (I.text == INext.text)
- {
- if (!flag)
- {
- int a = int.Parse(INext.text) + int.Parse(I.text);
- INext.text = a.ToString();
- I.text = "";
- flag = true;
- }
- }
- }
- }
- }
- }
- }
- void moveR()
- {
- for (int i = 1; i <= 4; i++)
- {
- bool flag = false;
- for (int j = 3; j >= 1; j--)
- {
- for (int k = j + 1; k <= 4; k++)
- {
- //获取当前元素
- GameObject go = GameObject.Find("L" + i.ToString() + (k - 1).ToString());
- print("当前对象" + go.name);
- UILabel I = go.GetComponentInChildren<UILabel>();
- //获取下一个元素
- GameObject goNext = GameObject.Find("L" + i.ToString() + k.ToString());
- print("下一个对象" + goNext.name);
- UILabel INext = goNext.GetComponentInChildren<UILabel>();
- //比较代码
- if (I.text != "")
- {
- if (INext.text == "")
- {
- INext.text = I.text;
- I.text = "";
- }
- else if (I.text == INext.text)
- {
- if (!flag)
- {
- int a = int.Parse(INext.text) + int.Parse(I.text);
- INext.text = a.ToString();
- I.text = "";
- flag = true;
- }
- }
- }
- }
- }
- }
- }
- void CreateNumber()
- {
- int count = 0;
- bool flag = false;
- for (int i = 1; i <= 4; i++)
- {
- if (!flag)
- {
- for (int j = 1; j <= 4; j++)
- {
- GameObject go = GameObject.Find("L" + i.ToString() + j.ToString());
- UILabel label = go.GetComponentInChildren<UILabel>();
- if (label.text == "")
- {
- int r = Random.Range(1, 10);
- if (r <= 5)
- {
- int value = Random.Range(1, 5);
- if (value < 4)
- label.text = "2";
- else
- label.text = "4";
- flag = true;
- break;
- }
- }
- else
- {
- if (++count == 16)
- {
- valueLabel.text = "Game Over";
- valueLabel.color = Color.red;
- gameover = true;
- }
- }
- }
- }
- else
- break;
- }
- }
- }
[Unity3D+算法]一小时做个2048的更多相关文章
- Unity3D使用碰撞体做触发器实现简单的自己主动开门
在游戏制作中触发器的使用很的方便也很有用. 这一张我们简介一下怎样使用一个简单的触发器来实现自己主动开门关门的效果. 首先确保你已经对门进行了动画的设置. 详细流程例如以下. 选择Window- ...
- 分布式ID系列(5)——Twitter的雪法算法Snowflake适合做分布式ID吗
介绍Snowflake算法 SnowFlake算法是国际大公司Twitter的采用的一种生成分布式自增id的策略,这个算法产生的分布式id是足够我们我们中小公司在日常里面的使用了.我也是比较推荐这一种 ...
- 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 ...
- 编程算法 - 不用加减乘除做加法 代码(C)
不用加减乘除做加法 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 写一个函数, 求两个整数之和, 要求在函数体内不得使用+, -, *, /四 ...
- Unity3d 子线程能做的事
一,子线程中能做的事: 1,数据逻辑方面计算: 二,子线程中,不能: 1,加载场景相关事件: Application.LoadLevelAsync.Application.LoadLevel等: 2, ...
- ACM用到的算法。先做个笔记,记一下
ACM 所有算法 数据结构 栈,队列,链表 哈希表,哈希数组 堆,优先队列 双端队列 可并堆 左偏堆 二叉查找树 Treap 伸展树 并查集 集合计数问题 二分图的识别 平衡二叉树 二叉排序树 线段树 ...
- 深入浅出游戏算法(4)-unity3d算法(1)-球转动
球 转动 按以下布局放置好unity3d的各个组件.设置好渲染.位置.光源.大小等 麦好的AI乐园博客全部内容是原创,假设转载请注明来源 http://blog.csdn.net/myhaspl/ 编 ...
- 案例(一) 利用机器算法RFM模型做用户价值分析
一.案例背景 在产品迭代过程中,通常需要根据用户的属性进行归类,也就是通过分析数据,对用户进行归类,以便于在推送及转化过程中获得更大的收益. 本案例是基于某互联网公司的实际用户购票数据为研究对象, ...
- Unity3d 用NGUI制作做新手引导的思路
一.先看下效果 Prefab结构 二.实现思路: 1.prefab上的Panel层级设置成较高 2.背景由5个UISprite拼接起来的,4个(L,R,U,D)当作遮罩,1个镂空(Hollow)当作点 ...
随机推荐
- php面向对象的基础
这是第一次写博客,希望大家多多支持! 一.OOP概念 1.类(class) 它包括名称.方法.属性和事件.实际是它本身不是对象,因为它不存在内存中.当引用类的代码运行时,类的一个新的实例,及对象,就在 ...
- app视觉设计艺术(读书笔记)
一.移动互联网产品在变化 UI=用户界面 用户的界面-从属关系-视觉传达与美化界面设计 用户与界面-交互关系-从视觉"看到"->执行交互 层级化与理性思维 层级化 层级化是一 ...
- 7 款令人赞叹的 HTML5 动画应用
1.HTML5 3D图片阴影翻转动画 这是一款很酷的HTML5 3D动画特效,这款3D特效可以为你的图片增加阴影的效果,而且可以让图片在鼠标滑过的时候出现3D翻转的动画效果. 在线演示 源码下载 2. ...
- Codevs 1205 单词翻转
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Description 给出一个英语句子,希望你把句子里的单词顺序都翻转过来 输入 ...
- poj 3268 Silver Cow Party
S ...
- 腾讯云 安全组配置及与MySQL 远程登录失败原因浅析
前言,知道自己腾讯云服务器安全组配置并在安全组里开放了所有端口的用户可以粗略的看看下边的内容,否则就仔细看看吧. 因为有学习及业务需要,我要在腾讯云上安装了CentOS7.2版本的服务器上安装MySQ ...
- SecureCRT远程控制ubuntu
如果你拥有两台电脑一台是ubuntu,另一台是笔记本电脑,而你又想在远程控制你的ubuntu,那么SecureCRT就可以用了. 1:首先在你的ubuntu电脑上安装SSH服务 :apt-get i ...
- C#inSSIDer强大的wifi无线热点信号扫描器源码
一个完整的无线信号扫描工具源码,包含了从热点扫描到强度绘制以及信号变换曲线图.源码基于Managed Wifi实现基础功能,Managed Wifi也是开源项目,这个可以在本站搜索到. 指定网卡信号扫 ...
- 9更令人兴奋的WebGL演示
Firefox OS,asm.js和推动浏览器性能改进,画布和WebGL技术是打开一个世界的可能性.我上9令人兴奋的帆布演示,然后把它与9 WebGL演示,但我想超越这篇文章.我发现9个更多的精神We ...
- QA如何增强网站建设公司竞争力
在上一篇文章<QA在网站建设公司中的作用>中我们已经详细说了QA的作用,不过有一点没有明确说明,也就是只有在超高速发展的网站建设公司中才会充分体现QA的价值.这并不是说在发展稳定的公司或低 ...