Unity NGUI实现2048(二)逻辑分析
来源:互联网 发布:魔兽数据库安卓 编辑:程序博客网 时间:2024/06/15 06:14
Unity NGUI实现2048(二)逻辑分析
1、退出应用
/*************************************************************///......if (Input.GetKeyDown(KeyCode.Escape)) //双击Esc退出应用 { if (ExitMassage == null) { ExitMassage = Instantiate(ExitMessagePrefab) as GameObject; StartCoroutine("resetExitMessage"); } else { Application.Quit(); //退出应用 } }//....../*************************************************************/
2、移动控制
/*************************************************************///......if (control && isMovingNumbers.Count == 0) //可控&&移动结束 { int dirX = 0; int dirY = 0; if (Input.GetKeyDown("up")) { dirY = 1; } else if (Input.GetKeyDown("down")) { dirY = -1; } else if (Input.GetKeyDown("left")) { dirX = -1; } else if (Input.GetKeyDown("right")) { dirX = 1; } //手机触屏控制 if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) { Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition; if (Mathf.Abs(touchDeltaPosition.x) > Mathf.Abs(touchDeltaPosition.y)) { if (touchDeltaPosition.x > 4) { dirX = 1; } else if(touchDeltaPosition.x<-4) { dirX = -1; } } else { if (touchDeltaPosition.y > 4) { dirY = 1; } else if (touchDeltaPosition.y < -4) { dirY = -1; } } } MoveNumbers(dirX, dirY); //------>>>1 }//....../*************************************************************/
3、随机生成
value = Random.value > 0.2f ? 2 : 4; //随机生成2或4 mySprite.spriteName = value.ToString(); //随机位置
4、移动逻辑
/*************************************************************///......if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) { Vector2 touchDeltaPosition = Input.GetTouch(0).deltaPosition; if (Mathf.Abs(touchDeltaPosition.x) > Mathf.Abs(touchDeltaPosition.y)) { if (touchDeltaPosition.x > 4) { dirX = 1; } else if(touchDeltaPosition.x<-4) { dirX = -1; } } else { if (touchDeltaPosition.y > 4) { dirY = 1; } else if (touchDeltaPosition.y < -4) { dirY = -1; } } } MoveNumbers(dirX, dirY); //------>>>1//....../*************************************************************/
/*************************************************************///......public void MoveNumbers(int directionX, int directionY) //------>>>2 { if (directionX == 1) { if (directionX == 1) { for (int y = 0; y < 4; y++) { for (int x = 2; x >= 0; x--) { if (numbers[x, y] != null) { numbers[x, y].Move(directionX, directionY); //------>>>3 } } } } } else if (directionX == -1) { for (int y = 0; y < 4; y++) { for (int x = 1; x < 4; x++) { if (numbers[x, y] != null) { numbers[x, y].Move(directionX, directionY); //------>>>3 } } } } else if (directionY == 1) { for (int x = 0; x < 4; x++) { for (int y = 2; y >= 0; y--) { if (numbers[x, y] != null) { numbers[x, y].Move( directionX, directionY); //------>>>3 } } } } else if (directionY == -1) { for (int x = 0; x < 4; x++) { for (int y = 1; y < 4; y++) { if (numbers[x, y] != null) { numbers[x, y].Move(directionX, directionY); //------>>>3 } } } }//....../*************************************************************/
/*************************************************************///......public void Move(int directionX, int directionY) //------>>>3{ if (directionX == 1) { Debug.Log("Right"); int index = 1; while (Manager._instance.isEmpty(positionX + index, positionY)) //判断右边是否为空 { index++; } if (index > 1) { if (!Manager._instance.isMovingNumbers.Contains(this)) { Manager._instance.isMovingNumbers.Add(this); } Manager._instance.hasMove = true; Manager._instance.numbers[positionX, positionY] = null; positionX = positionX + index - 1; Manager._instance.numbers[positionX, positionY] = this; } if (positionX < 3 && value == Manager._instance.numbers[positionX + 1, positionY].value && !Manager._instance.numbers[positionX + 1, positionY].hasMixed) { Manager._instance.numbers[positionX + 1, positionY].hasMixed = true; if (!Manager._instance.isMovingNumbers.Contains(this)) { Manager._instance.isMovingNumbers.Add(this); } Manager._instance.hasMove = true; toDestroy = true; Manager._instance.numbers[positionX + 1, positionY].value *= 2; Manager._instance.numbers[positionX, positionY] = null; positionX += 1; } } else if (directionX == -1) { Debug.Log("Left"); int index = 1; while (Manager._instance.isEmpty(positionX - index, positionY)) { index++; } if (index > 1) { if (!Manager._instance.isMovingNumbers.Contains(this)) { Manager._instance.isMovingNumbers.Add(this); } Manager._instance.hasMove = true; Manager._instance.numbers[positionX, positionY] = null; positionX = positionX - index + 1; Manager._instance.numbers[positionX, positionY] = this; } if (positionX > 0 && value == Manager._instance.numbers[positionX - 1, positionY].value && !Manager._instance.numbers[positionX - 1, positionY].hasMixed) { Manager._instance.numbers[positionX - 1, positionY].hasMixed = true; if (!Manager._instance.isMovingNumbers.Contains(this)) { Manager._instance.isMovingNumbers.Add(this); } Manager._instance.hasMove = true; toDestroy = true; Manager._instance.numbers[positionX - 1, positionY].value *= 2; Manager._instance.numbers[positionX, positionY] = null; positionX -= 1; } } else if (directionY == 1) { Debug.Log("Up"); int index = 1; while (Manager._instance.isEmpty(positionX, positionY +index)) { index++; } if (index > 1) { if (!Manager._instance.isMovingNumbers.Contains(this)) { Manager._instance.isMovingNumbers.Add(this); } Manager._instance.hasMove = true; Manager._instance.numbers[positionX, positionY] = null; positionY = positionY + index - 1; Manager._instance.numbers[positionX, positionY] = this; } if (positionY < 3 && value == Manager._instance.numbers[positionX, positionY + 1].value && !Manager._instance.numbers[positionX, positionY + 1].hasMixed) { Manager._instance.numbers[positionX, positionY + 1].hasMixed = true; if (!Manager._instance.isMovingNumbers.Contains(this)) { Manager._instance.isMovingNumbers.Add(this); } Manager._instance.hasMove = true; toDestroy = true; Manager._instance.numbers[positionX, positionY+1].value *= 2; Manager._instance.numbers[positionX, positionY] = null; positionY += 1; } } else if (directionY == -1) { Debug.Log("Down"); int index = 1; while (Manager._instance.isEmpty(positionX, positionY - index)) { index++; } if (index > 1) { if (!Manager._instance.isMovingNumbers.Contains(this)) { Manager._instance.isMovingNumbers.Add(this); } Manager._instance.hasMove = true; Manager._instance.numbers[positionX, positionY] = null; positionY = positionY - index + 1; Manager._instance.numbers[positionX, positionY] = this; } if (positionY > 0 && value == Manager._instance.numbers[positionX, positionY - 1].value && !Manager._instance.numbers[positionX, positionY - 1].hasMixed) { Manager._instance.numbers[positionX, positionY - 1].hasMixed = true; if (!Manager._instance.isMovingNumbers.Contains(this)) { Manager._instance.isMovingNumbers.Add(this); } Manager._instance.hasMove = true; toDestroy = true; Manager._instance.numbers[positionX, positionY - 1].value *= 2; Manager._instance.numbers[positionX, positionY] = null; positionY -= 1; } } }//....../*************************************************************/
5、移动结束后的合并逻辑
/*************************************************************///......public void MoveOver() //移动结束{ if (toDestroy) { Destroy(this.gameObject); Manager._instance.numbers[positionX, positionY].mySprite.spriteName = Manager._instance.numbers[positionX, positionY].value.ToString(); if (Manager._instance.numbers[positionX, positionY].value == 2048) { Manager._instance.gameWin(); } } Manager._instance.isMovingNumbers.Remove(this);}//....../*************************************************************/
0 0
- Unity NGUI实现2048(二)逻辑分析
- Unity NGUI实现2048(一)源代码
- unity ngui学习(二)
- Unity NGUI实现技能冷却
- Unity NGUI实现2048(三)反编译APK文件
- unity学习之NGUI(二)
- Unity插件NGUI学习笔记(二)
- NGUI源码分析(二) UIWidget
- Unity利用NGUI实现自定义鼠标
- Unity利用NGUI实现自定义鼠标
- Unity利用NGUI实现自定义鼠标
- Unity拖拽NGUI中的Texture效果实现
- 【Unity】NGUI实现技能冷却脚本
- 【Unity】代码实现NGUI按钮监听功能
- 【Unity】用NGUI实现摇杆功能
- Unity+NGUI实现截图加上传
- Unity基于NGUI实现拖拽功能
- Unity NGUI 实现 拖动面板选项
- POJ 1789 ruck History
- Android学习笔记之SlidingMenu
- Drazil and Tiles(CodeForces 515D)
- Java实现排序算法之归并排序
- Unity3D试题
- Unity NGUI实现2048(二)逻辑分析
- 数据挖掘工程师笔试及答案整理
- 程序员面试题目:Cracking the coding interview 分析与解答
- uboot中控制台输入输出的实现
- (Vanya and Lanterns)Codeforces Round #280 (Div. 2)B
- win7 64位安装redis 及Redis Desktop Manager使用
- socket编程--socket基本概念
- 使用函数对象(侯捷先生译为伪函数)实现二叉查找树
- android之HttpURLConnection