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