Google Code Prettify

2014年7月6日 星期日

[心得]用Unity+NGUI做一個井字遊戲

一直想要做一個簡單遊戲的系列文章 本來是想等新的UI系統出來再寫~
不過因為各種原因就用NGUI做了一個~ 等新UI出來在做一個看看
 A.邏輯部分 用一個2維陣列,對應到每個格子,格子空著0分,
在格子裡面畫O就給1分,畫X給-1分。 用迴圈跑一次橫排,
跑一次直排,算兩個對角線的分數。 如果其中一條是3分,
就是O勝利。 如果其中一條是-3分,就是X勝利。

    void CheckWin()
 {
  int pSum =0 ;
  for(int i=0 ; i<3 ;i++)
  {
   pSum =0;
   for(int j=0 ; j<3 ; j++)
   {
    pSum += GameArray[i,j];
   }
   if(pSum == m_CheckNumber)
   {
    isFinish =true;
    m_labelText.text = "o win,V"+playa;
   }
   
   if(pSum == m_CheckNumber*-1)
   {
    isFinish =true;
    m_labelText.text = "V win,O"+playB;
   }
  }
  if(isFinish == false)
  {
   for( int i=0 ; i<3 ;i++)
   {
    pSum =0 ;
    for( int j=0 ; j<3 ; j++)
    {
     pSum += GameArray[j,i];
    }
    if(pSum == m_CheckNumber)
    {
     isFinish =true;
     m_labelText.text = "o win,V"+playa;
    }
    
    if(pSum == m_CheckNumber*-1)
    {
     isFinish =true;
     m_labelText.text = "V win,O"+playB;
    }
   }
  }

  if(isFinish == false)
  {
   pSum =0 ;   
   pSum = GameArray[0,0]+GameArray[1,1]+GameArray[2,2];
   if(pSum == m_CheckNumber)
   {
    isFinish =true;
    m_labelText.text = "o win,V"+playa;
   }
   
   if(pSum == m_CheckNumber*-1)
   {
    isFinish =true;
    m_labelText.text = "V win,O"+playB;
   }
  }
  if(isFinish == false)
  {
   pSum =0 ;   
   pSum = GameArray[0,2]+GameArray[1,1]+GameArray[2,0];
   if(pSum == m_CheckNumber)
   {
    isFinish =true;
    m_labelText.text = "o win,V"+playa;
   }
   
   if(pSum == m_CheckNumber*-1)
   {
    isFinish =true;
    m_labelText.text = "V win,O"+playB;
   } 
  }
 }//void CheckWin()
B.顯示部分
做3張圖 分別是方格、圈圈和叉叉(PS 這邊用勾勾代替一下)  
將方格做成Button,滑鼠點擊的時候依照輪到的順序,顯示圈圈或是叉叉

    public void Click()
    {
 if(isFinish == true)
  return;
 UIButton btn = UIButton.current;
 int num = int.Parse(btn.name);
 int row =num/3;
 int col =num%3;
 GameObject go;
 if(GameArray[row ,col] ==0)
 {
  if(m_player == 1)
  {
    go =btn.transform.FindChild("IconO").gameObject;
   NGUITools.SetActive(go , true);
   m_player =2;
   GameArray[row ,col]=1;
  }
  else
  {
      go =btn.transform.FindChild("IconX").gameObject;
      NGUITools.SetActive(go , true);
      m_player =1;
      GameArray[row ,col]=-1;
  }  
  CheckWin();
 }
    }

2014年1月1日 星期三

Unity 與 委託(1)

之前公司寫UNITY是用 UNITY SCRIPT,專案越寫越大,總感覺有些不夠嚴謹。 下次專案預定改成C# C#有一個很好用的機制 delegate 就當作學習心得記錄下來 主程式 拖到場景的物件中

using UnityEngine;
using System.Collections;


public class test : MonoBehaviour {

 public delegate string ProcessDelegate(string s1, string s2);
 ProcessDelegate pd;

 // Use this for initialization
 void Start () {

  pd = new ProcessDelegate(new delegateEx1().Process);
            
 }
 
 // Update is called once per frame
 void Update () 
 {
  Debug.Log(pd("Hello", "World")); 
 }
}
code delegateEx1 如下

using UnityEngine;
using System.Collections;

public class delegateEx1  {

 public string Process(string s1,string s2)
 {
  return s1 + s2;
 }
}
結果會在 Console視窗中不斷顯示 HelloWorld 另一種調用的方式

using UnityEngine;
using System.Collections;


public class test : MonoBehaviour {
 public delegate string ProcessDelegate(string s1, string s2);

 ProcessDelegate pd;

 // Use this for initialization
 void Start () {

  //pd = new ProcessDelegate(new delegateEx1().Process);
  ReceiveDelegateArgsFunc(new ProcessDelegate(new delegateEx1().Process));
            
 }
 
 // Update is called once per frame
 void Update () 
 {
  //Debug.Log(pd("Hello", "World")); 
 }

 public void ReceiveDelegateArgsFunc(ProcessDelegate func)
 {
  string str = func("good","test");   
  Debug.Log(str);
 }

}
結果會在 Console視窗中顯示 goodtest