Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何重置Tictaoe游戏_C#_Unity3d - Fatal编程技术网

C# 如何重置Tictaoe游戏

C# 如何重置Tictaoe游戏,c#,unity3d,C#,Unity3d,我正在Unity中制作一个Tictatcoe游戏,但现在我需要在单击按钮时重新启动它 public class GlobalCtrl : MonoBehaviour { #region variables /// <summary> /// the prefab of playerMarkA /// </summary> public GameObject playerMarkA; /// <summary>

我正在Unity中制作一个Tictatcoe游戏,但现在我需要在单击按钮时重新启动它

public class GlobalCtrl : MonoBehaviour
{
    #region variables
    /// <summary>
    /// the prefab of playerMarkA
    /// </summary>
    public GameObject playerMarkA;
    /// <summary>
    /// the prefab of playerMarkB
    /// </summary>
    public GameObject playerMarkB;
    public Camera mainCamera;
    public List<GameObject> list = new List<GameObject>();
    private int[,] boardStatus = new int[3, 3];
    private Vector3[,] boardPos = new Vector3[3, 3];
    private Vector3 a;
    private Vector3 b;
    private Vector3 c;
    private Vector3 d;
    bool playerChange = true;
    bool playerA = false;
    bool playerB = false;
    bool gameOver = false;
    bool tie = false;
    public Button m_button;
    public Text m_text;
    #endregion

    /// <summary>
    /// Start is called before the first 
    /// </summary>
    void Start()
    {
        boardPos[0, 0] = new Vector3(-10 / 3, -10 / 3, 0);
        boardPos[0, 1] = new Vector3(0, -10 / 3, 0);
        boardPos[0, 2] = new Vector3(10 / 3, -10 / 3, 0);
        boardPos[1, 0] = new Vector3(-10 / 3, 0, 0);
        boardPos[1, 1] = new Vector3(0, 0, 0);
        boardPos[1, 2] = new Vector3(10 / 3, 0, 0);
        boardPos[2, 0] = new Vector3(-10 / 3, 10 / 3, 0);
        boardPos[2, 1] = new Vector3(0, 10 / 3, 0);
        boardPos[2, 2] = new Vector3(10 / 3, 10 / 3, 0);
        a = new Vector3(-10 / 6, 10 / 6, 0);
        b = new Vector3(10 / 6, 10 / 6, 0);
        c = new Vector3(-10 / 6, -10 / 6, 0);
        d = new Vector3(10 / 6, -10 / 6, 0);

        boardStatus[0, 0] = boardStatus[0, 1] = boardStatus[0, 2] =
            boardStatus[1, 0] = boardStatus[1, 1] = boardStatus[1, 2] =
            boardStatus[2, 0] = boardStatus[1, 0] = boardStatus[0, 0] = 0;
    }

    // Update is called once per frame
    void Update()
    {
        if(gameOver == false) {

            if (Input.GetMouseButtonDown(0))
            {

                Debug.Log(Input.mousePosition);

                Ray _ray = mainCamera.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit1;
                if (Physics.Raycast(_ray, out hit1))
                {

                    int m = 0;
                    int n = 0;
                    if (hit1.point.x < a.x)//left
                    {
                        m = 0;
                    }
                    else if (hit1.point.x > b.x)//right
                    {
                        m = 2;
                    }
                    else//middle
                    {
                        m = 1;
                    }
                    if (hit1.point.y > a.y)//top
                    {
                        n = 2;
                    }
                    else if (hit1.point.y < c.y)//bottom
                    {
                        n = 0;
                    }
                    else//middle
                    {
                        n = 1;
                    }
                    if (playerChange)
                    {
                        if (boardStatus[n, m] == 0)
                        {
                            list.Add(Instantiate(playerMarkA, transform.position = boardPos[n, m], Quaternion.identity));
                            boardStatus[n, m] = -1;
                            playerChange = false;
                            Debug.Log(boardStatus[n, m]);
                            winner();
                        }
                    }
                    else
                    {
                        if (boardStatus[n, m] == 0)
                        {
                            list.Add(Instantiate(playerMarkB, transform.position = boardPos[n, m], Quaternion.identity));
                            boardStatus[n, m] = 1;
                            playerChange = true;
                            Debug.Log(boardStatus[n, m]);
                            winner();
                        }

                    }

                }

            }
        }

    }

    void winner()
    {
        if(gameOver)
        {

        }
        if ((boardStatus[0, 0] == -1 && boardStatus[0, 1] == -1 && boardStatus[0, 2] == -1) ||
           (boardStatus[1, 0] == -1 && boardStatus[1, 1] == -1 && boardStatus[1, 2] == -1) ||
           (boardStatus[2, 0] == -1 && boardStatus[2, 1] == -1 && boardStatus[2, 2] == -1) ||
           (boardStatus[2, 0] == -1 && boardStatus[1, 0] == -1 && boardStatus[0, 0] == -1) ||
           (boardStatus[2, 1] == -1 && boardStatus[1, 1] == -1 && boardStatus[0, 1] == -1) ||
           (boardStatus[2, 2] == -1 && boardStatus[1, 2] == -1 && boardStatus[0, 2] == -1) ||
           (boardStatus[2, 0] == -1 && boardStatus[1, 1] == -1 && boardStatus[0, 2] == -1) ||
           (boardStatus[2, 2] == -1 && boardStatus[1, 1] == -1 && boardStatus[0, 0] == -1))
        {
            playerA = true;
        }
        else if ((boardStatus[0, 0] == 1 && boardStatus[0, 1] == 1 && boardStatus[0, 2] == 1) ||
             (boardStatus[1, 0] == 1 && boardStatus[1, 1] == 1 && boardStatus[1, 2] == 1) ||
             (boardStatus[2, 0] == 1 && boardStatus[2, 1] == 1 && boardStatus[2, 2] == 1) ||
             (boardStatus[2, 0] == 1 && boardStatus[1, 0] == 1 && boardStatus[0, 0] == 1) ||
             (boardStatus[2, 1] == 1 && boardStatus[1, 1] == 1 && boardStatus[0, 1] == 1) ||
             (boardStatus[2, 2] == 1 && boardStatus[1, 2] == 1 && boardStatus[0, 2] == 1) ||
             (boardStatus[2, 0] == 1 && boardStatus[1, 1] == 1 && boardStatus[0, 2] == 1) ||
             (boardStatus[2, 2] == 1 && boardStatus[1, 1] == 1 && boardStatus[0, 0] == 1))
        {
            playerB = true;
        }
        else
        {
            tie = true;
        }

        if (playerA)
        {
            m_text.text = "Player A wins!";
            gameOver = true;

        }
        else if (playerB)
        {
            m_text.text = "Player B wins!";
            gameOver = true;
        }
        else if (tie)
        {
            m_text.text = "Nobody won :(";
            //gameOver = true;
        }

    }

}
公共类GlobalCtrl:monobhavior
{
#区域变量
/// 
///playerMarkA预制件
/// 
公共游戏对象玩家玛卡;
/// 
///playerMarkB的预制件
/// 
公共游戏对象播放器;
公共摄像机;
公共列表=新列表();
私有整数[,]boardStatus=新整数[3,3];
私有向量3[,]boardPos=新向量3[3,3];
私人向量3 a;
私有向量3b;
私有向量3c;
私有向量3d;
bool playerChange=true;
布尔·普拉耶拉=假;
bool playerB=false;
bool gameOver=false;
bool-tie=false;
公共按钮m_按钮;
公共文本;
#端区
/// 
///在第一个命令之前调用Start
/// 
void Start()
{
boardPos[0,0]=新向量3(-10/3,-10/3,0);
boardPos[0,1]=新向量3(0,-10/3,0);
boardPos[0,2]=新向量3(10/3,-10/3,0);
boardPos[1,0]=新向量3(-10/3,0,0);
boardPos[1,1]=新向量3(0,0,0);
boardPos[1,2]=新向量3(10/3,0,0);
boardPos[2,0]=新向量3(-10/3,10/3,0);
boardPos[2,1]=新向量3(0,10/3,0);
boardPos[2,2]=新向量3(10/3,10/3,0);
a=新矢量3(-10/6,10/6,0);
b=新矢量3(10/6,10/6,0);
c=新矢量3(-10/6,-10/6,0);
d=新矢量3(10/6,-10/6,0);
boardStatus[0,0]=董事会状态[0,1]=董事会状态[0,2]=
boardStatus[1,0]=boardStatus[1,1]=boardStatus[1,2]=
boardStatus[2,0]=boardStatus[1,0]=boardStatus[0,0]=0;
}
//每帧调用一次更新
无效更新()
{
如果(gameOver==false){
if(Input.GetMouseButtonDown(0))
{
Debug.Log(Input.mousePosition);
Ray _Ray=mainCamera.ScreenPointToRay(输入.鼠标位置);
雷卡斯特hit1;
if(物理光线投射(_-ray,out-hit1))
{
int m=0;
int n=0;
if(hit1.point.xb.x)//正确
{
m=2;
}
else//middle
{
m=1;
}
if(hit1.point.y>a.y)//top
{
n=2;
}
else if(hit1.point.ypublic void button()
    {
        for(int i = 0; i < list.Count - 1; i++)
        {
            var last = list[list.Count - 1];
            list.Remove(last);
            Destroy(last);
        }
}
// destroy all items
foreach(var item in list)
{
    Destroy(item);
}

// then in one call remove all elements from the list
list.Clear();
private void Awake()
{
    list.Clear();
}
SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex);
Instantiate(playerMarkA, boardPos[n, m], Quaternion.identity);

Instantiate(playerMarkB, boardPos[n, m], Quaternion.identity);