1. var cols:int = ;//列数
  2. var rows:int = ;//行数
  3. var totalCards:int = ;//所有卡片的数量
  4. var matchesNeededToWin:int = totalCards*0.5;//最大匹配数,用来判断游戏是否胜利
  5. var matchesMade:int = ;
  6. var cardW:int = ;
  7. var cardH:int = ;
  8. var aCards:Array;//用来保存所有的牌,要洗的时候,所有的东西放到这个里面
  9. var aGrid:Array;
  10. var aCardsFlipped:ArrayList;//翻开的牌的序列
  11. var playerCanClick:boolean;//能否翻拍(开始的时刻木有翻牌,所以开的牌是0
  12. //,翻开第一张的时候,可以翻开第二张,但是翻开第二张的时候,那么不可以再翻牌)
  13. var playerHasWon:boolean = false;//用户是否胜利
  14.  
  15. //创建一个类
  16. class Card extends System.Object{
  17. var isFaceUp:boolean = false;
  18. var isMatched:boolean = false;
  19. var img:String;
  20. var id:int;
  21.  
  22. function Card(img:String,id:int){
  23. this.img = img;
  24. this.id = id;
  25. //img = "robot";
  26. }
  27. }
  28.  
  29. //洗牌
  30. function BuildDeck(){
  31. var totalRobots:int = ;//一共有四种机器人,红绿蓝黄
  32. var card:Object;
  33. var id:int = ;
  34. for(i=; i<totalRobots; i++)//一共四轮
  35. {
  36. var aRobotParts:Array = ["Head", "Arm", "Leg"];
  37. for(j=; j<; j++)
  38. {
  39. var someNum:int = Random.Range(, aRobotParts.length);//生成一个0到3的随机数
  40. var theMissingPart:String = aRobotParts[someNum];//拼凑一个字符串,用来表示一张图片
  41. aRobotParts.RemoveAt(someNum);//这个已经用过了,就从数组中移除
  42. card = new Card("robot" + (i+) + "Missing" + theMissingPart,id);
  43. aCards.Add(card);
  44. card= new Card("robot" + (i+) + theMissingPart,id);
  45. aCards.Add(card);
  46. id++;
  47. }
  48. }
  49. }
  50.  
  51. function Start(){
  52.  
  53. //可以翻牌
  54. playerCanClick = true;
  55. aCards = new Array();
  56. aGrid = new Array();
  57. aCardsFlipped = new ArrayList();
  58. BuildDeck();//开始洗牌
  59.  
  60. //就一直在这里产生,产生一个,移除一个,再产生一个再移除一个。知道为空
  61.  
  62. for(i=; i<rows; i++)
  63. {
  64. aGrid[i] = new Array();//数组初始化1维
  65. for(j=; j<cols; j++)
  66. {
  67. //aGrid[i][j] = new Card();//数组初始化2维
  68. var someNum:int = Random.Range(,aCards.length);
  69. aGrid[i][j] = aCards[someNum];
  70. aCards.RemoveAt(someNum);
  71. }
  72. }
  73. }
  74.  
  75. //翻牌
  76.  
  77. function FlipCardFaceUp(card:Object){
  78. card.isFaceUp = true;
  79. if(aCardsFlipped.IndexOf(card)<)
  80. {
  81. aCardsFlipped.Add(card);
  82.  
  83. if(aCardsFlipped.Count == )
  84. {
  85. playerCanClick = false;
  86.  
  87. yield WaitForSeconds();
  88. if(aCardsFlipped[].id == aCardsFlipped[].id)
  89. {
  90. aCardsFlipped[].isMatched = true;
  91. aCardsFlipped[].isMatched = true;
  92.  
  93. matchesMade++;
  94.  
  95. if(matchesMade>=matchesNeededToWin)
  96. {
  97. playerHasWon = true;
  98. }
  99. }
  100. else
  101. {
  102. aCardsFlipped[].isFaceUp = false;
  103. aCardsFlipped[].isFaceUp = false;
  104. }
  105. aCardsFlipped = new ArrayList();
  106.  
  107. playerCanClick = true;
  108. }
  109. }
  110. }
  111.  
  112. function BuildGrid(){
  113. GUILayout.BeginVertical();
  114. GUILayout.FlexibleSpace();
  115.  
  116. for(i=; i<rows; i++)
  117. {
  118. GUILayout.BeginHorizontal();
  119. GUILayout.FlexibleSpace();
  120. for(j=; j<cols;j++)
  121. {
  122. var card:Object = aGrid[i][j];
  123. var img:String;
  124.  
  125. //如果图片已经匹配了,那么就做成空白
  126. if(card.isMatched)
  127. {
  128. img = "blank";
  129. }
  130. else
  131. {
  132. if(card.isFaceUp)
  133. {
  134. img = card.img;
  135. }
  136. else
  137. {
  138. img = "wrench";//牌的背面
  139. }
  140. }
  141. GUI.enabled = !card.isMatched;
  142.  
  143. //点击了某一个按钮
  144. if(GUILayout.Button(Resources.Load(img),GUILayout.Width(cardW)))
  145. {
  146. if(playerCanClick)
  147. {
  148. //翻牌
  149. FlipCardFaceUp(card);
  150. }
  151. Debug.Log(card.img);
  152. }
  153. GUI.enabled = true;
  154. }
  155. GUILayout.FlexibleSpace();
  156. GUILayout.EndHorizontal();
  157. }
  158. GUILayout.FlexibleSpace();
  159. GUILayout.EndVertical();
  160. }
  161.  
  162. //创建赢的时候的画面(就是两个正方形,让后让用户看的)
  163. function BulidWinPrompt(){
  164.  
  165. var winPromptW:int = ;
  166. var winPromptH:int = ;
  167.  
  168. var halfScreenW:float = Screen.width/;
  169. var halfScreenH:float = Screen.height/;
  170. var halfPromptW:int = winPromptW/;
  171. var halfPromptH:int = winPromptH/;
  172.  
  173. GUI.BeginGroup(Rect(halfScreenW-halfPromptW,halfScreenH-halfPromptH, winPromptW, winPromptH));
  174. GUI.Box (Rect (,,winPromptW,winPromptH),"You Win!!");
  175.  
  176. if(GUI.Button(Rect(,,,),"Play Again"))
  177. {
  178. Application.LoadLevel();
  179. }
  180. GUI.EndGroup();
  181. }
  182.  
  183. //这种布局类似于html
  184.  
  185. function OnGUI(){
  186. GUILayout.BeginArea(Rect(,,Screen.width,Screen.height));
  187.  
  188. BuildGrid();
  189. if(playerHasWon)
  190.  
  191. BulidWinPrompt();
  192.  
  193. GUILayout.EndArea();
  194. print("building grid!");
  195. }

unity 翻牌游戏(全都是gui)的更多相关文章

  1. 自制Unity小游戏TankHero-2D(3)开始玩起来

    自制Unity小游戏TankHero-2D(3)开始玩起来 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的.仅 ...

  2. 自制Unity小游戏TankHero-2D(1)制作主角坦克

    自制Unity小游戏TankHero-2D(1)制作主角坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...

  3. 关于Unity的游戏的运行模式

    游戏有个入口main函数,执行完main函数就返回 main函数中的步骤 1.初始化 2.while(true){ a.检查有没有消息,包括鼠标有没有被点击,键盘有没有被点击,自定义事件等等,有消息就 ...

  4. unity手机游戏应用程序调试控制台Lunar Mobile Console - PRO 1.5.5

    unity手机游戏应用程序调试控制台Lunar Mobile Console - PRO 1.5.5 High-performance Unity iOS/Android console built ...

  5. [生活日记]参与unity非游戏行业开发者大会小结

    今天下午花了半天时间公司全体都去人民广场参与了一个unity非游戏行业开发者大会,主要了解到unity这款全球顶尖之一的游戏引擎的一个发展史,从05年三个美国人技术研发开始,一直到12年开始引进中国, ...

  6. 自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药

    自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...

  7. 自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析

    自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...

  8. 自制Unity小游戏TankHero-2D(2)制作敌方坦克

    自制Unity小游戏TankHero-2D(2)制作敌方坦克 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)这个游戏制作的. ...

  9. Unity制作游戏中的场景

    Unity制作游戏中的场景 1.2.3  场景 在Unity中,场景(Scene)就是游戏开发者制作游戏时,所使用的游戏场景.它是一个三维空间,对应的三维坐标轴分别是X轴.Y轴和Z轴本文选自Unity ...

随机推荐

  1. unity3d iPhone文件目录介绍

    原地址:http://cl314413.blog.163.com/blog/static/190507976201210259126559/ 如何查看iPhone文件存放目录?首先需要越狱,越狱后打开 ...

  2. B,B+,B-,B*树

    B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...

  3. MySQL Profiling 的使用

    MySQL Profiling 的使用 在本章第一节中我们还提到过通过 Query Profiler 来定位一条 Query 的性能瓶颈,这里我们再详细介绍一下 Profiling 的用途及使用方法. ...

  4. 【Spring】Spring系列3之Spring AOP

    3.Spring AOP 3.1.AOP概述 3.2.前置通知 3.3.后置通知 3.4.返回通知.异常通知.环绕通知 3.5.指定切面优先级 3.6.重用切入点表达式 3.7.引入通知 3.8.基于 ...

  5. 尖刀出鞘的display常用属性及css盒模型深入研究

    一:diplay:inline-block 含义:指元素创建了一个行级的块级元素,该元素内部(内容)被格式化成一个块级元素,同时元素本身则被格式化成一个行内元素.更简单的说就是说inline-bloc ...

  6. Maximum Gap

    Given an unsorted array, find the maximum difference between the successive elements in its sorted f ...

  7. Power of Two & Power of Three & Power of Four

     Check Power of 2 Using O(1) time to check whether an integer n is a power of 2. Example For n=4, re ...

  8. Android Services重点记录

    今天阅读了google的官方文档 Services,对重点做下记录. 首先,Services默认运行在主线程中,所以一般情况下,要手动创建一个thread. 系统除了Services,还为我们提供了一 ...

  9. phpmyadmin 主机名自动补全

    2015年2月9日 14:29:25 新安装的phpmyadmin在登录界面中, 主机名的输入框没有自动补全功能, 导致每次都得手动输入ip地址 找到 phpmyadmin/libraries/aut ...

  10. DisJSet:Wireless Network(POJ 2236)

      无线电网络 题目大意:就是地震后,所有的电脑都坏了,现在可以修复,而且要重新连成一个网络,两台电脑之间最大连接距离为D,两台电脑可以有中继电脑,按O修复电脑,按S测试两台电脑是否有链接,如果有就输 ...