diff --git a/Assets/Scripts/chess.cs b/Assets/Scripts/chess.cs index 6bac964..bd47581 100644 --- a/Assets/Scripts/chess.cs +++ b/Assets/Scripts/chess.cs @@ -7,10 +7,11 @@ using UnityEngine; using System.Collections; +using System; -public class chess : MonoBehaviour { - - //四个锚点位置,用于计算棋子落点 +public class chess : MonoBehaviour +{ + //四个锚点位置,用于计算棋子落点 public GameObject LeftTop; public GameObject RightTop; public GameObject LeftBottom; @@ -24,12 +25,12 @@ public class chess : MonoBehaviour { Vector3 RBPos; Vector3 PointPos;//当前点选的位置 - float gridWidth =1; //棋盘网格宽度 - float gridHeight=1; //棋盘网格高度 + float gridWidth = 1; //棋盘网格宽度 + float gridHeight = 1; //棋盘网格高度 float minGridDis; //网格宽和高中较小的一个 Vector2[,] chessPos; //存储棋盘上所有可以落子的位置 int[,] chessState; //存储棋盘位置上的落子状态 - enum turn {black, white } ; + enum turn { black, white }; turn chessTurn; //落子顺序 public Texture2D white; //白棋子 public Texture2D black; //黑棋子 @@ -37,15 +38,12 @@ enum turn {black, white } ; public Texture2D whiteWin; //黑子获胜提示图 int winner = 0; //获胜方,1为黑子,-1为白子 bool isPlaying = true; //是否处于对弈状态 - void Start () { + void Start() + { chessPos = new Vector2[15, 15]; - chessState =new int[15,15]; + chessState = new int[15, 15]; chessTurn = turn.black; - } - - void Update () { - //计算锚点位置 LTPos = cam.WorldToScreenPoint(LeftTop.transform.position); RTPos = cam.WorldToScreenPoint(RightTop.transform.position); @@ -63,6 +61,11 @@ void Update () { chessPos[i, j] = new Vector2(LBPos.x + gridWidth * i, LBPos.y + gridHeight * j); } } + + } + + void Update() + { //检测鼠标输入并确定落子状态 if (isPlaying && Input.GetMouseButtonDown(0)) { @@ -70,14 +73,14 @@ void Update () { for (int i = 0; i < 15; i++) { for (int j = 0; j < 15; j++) - { + { //找到最接近鼠标点击位置的落子点,如果空则落子 - if (Dis(PointPos, chessPos[i, j]) < minGridDis / 2 && chessState[i,j]==0) + if (Dis(PointPos, chessPos[i, j]) < minGridDis / 2 && chessState[i, j] == 0) { //根据下棋顺序确定落子颜色 chessState[i, j] = chessTurn == turn.black ? 1 : -1; //落子成功,更换下棋顺序 - chessTurn = chessTurn == turn.black ? turn.white : turn.black; + chessTurn = chessTurn == turn.black ? turn.white : turn.black; } } } @@ -89,12 +92,12 @@ void Update () { winner = 1; isPlaying = false; } - else if(re==-1) + else if (re == -1) { Debug.Log("白棋胜"); winner = -1; isPlaying = false; - } + } } //按下空格重新开始游戏 if (Input.GetKeyDown(KeyCode.Space)) @@ -109,44 +112,103 @@ void Update () { isPlaying = true; chessTurn = turn.black; winner = 0; - } - } + } + } //计算平面距离函数 float Dis(Vector3 mPos, Vector2 gridPos) { - return Mathf.Sqrt(Mathf.Pow(mPos.x - gridPos.x, 2)+ Mathf.Pow(mPos.y - gridPos.y, 2)); + return Mathf.Sqrt(Mathf.Pow(mPos.x - gridPos.x, 2) + Mathf.Pow(mPos.y - gridPos.y, 2)); } void OnGUI() - { + { //绘制棋子 - for(int i=0;i<15;i++) + for (int i = 0; i < 15; i++) { for (int j = 0; j < 15; j++) { if (chessState[i, j] == 1) { - GUI.DrawTexture(new Rect(chessPos[i,j].x-gridWidth/2, Screen.height-chessPos[i,j].y-gridHeight/2, gridWidth,gridHeight),black); + GUI.DrawTexture(new Rect(chessPos[i, j].x - gridWidth / 2, Screen.height - chessPos[i, j].y - gridHeight / 2, gridWidth, gridHeight), black); } if (chessState[i, j] == -1) { GUI.DrawTexture(new Rect(chessPos[i, j].x - gridWidth / 2, Screen.height - chessPos[i, j].y - gridHeight / 2, gridWidth, gridHeight), white); - } + } } } //根据获胜状态,弹出相应的胜利图片 - if (winner == 1) - GUI.DrawTexture(new Rect(Screen.width * 0.25f, Screen.height * 0.25f, Screen.width * 0.5f, Screen.height * 0.25f), blackWin); + if (winner == 1) + { + GUI.DrawTexture(new Rect(Screen.width * 0.25f, Screen.height * 0.25f, Screen.width * 0.5f, Screen.height * 0.25f), blackWin); + Debug.Log("repeat"); + } + if (winner == -1) - GUI.DrawTexture(new Rect(Screen.width * 0.25f, Screen.height * 0.25f, Screen.width * 0.5f, Screen.height * 0.25f), whiteWin); + GUI.DrawTexture(new Rect(Screen.width * 0.25f, Screen.height * 0.25f, Screen.width * 0.5f, Screen.height * 0.25f), whiteWin); } + + //使用异常来简化原来的result函数 + int result() + { + int flag = 0; + if (chessTurn == turn.white) + { + for (int i = 0; i<=14; i++) + { + for (int j = 0; j <= 14; j++) + { + try + { + if ((chessState[i, j] == 1 && chessState[i, j + 1] == 1 && chessState[i, j + 2] == 1&& chessState[i, j + 3] == 1 && chessState[i, j + 4] == 1) + || (chessState[i, j] == 1&& chessState[i + 1, j] == 1 && chessState[i + 2, j] == 1 && chessState[i + 3, j] == 1&& chessState[i + 4, j] == 1) + || (chessState[i, j] == 1 && chessState[i + 1, j + 1] == 1&& chessState[i + 2, j + 2] == 1 && chessState[i + 3, j + 3] == 1 && chessState[i + 4, j + 4] == 1) + || (chessState[i, j] == 1 && chessState[i + 1, j - 1] == 1 && chessState[i + 2, j - 2] == 1&& chessState[i + 3, j - 3] == 1 && chessState[i + 4, j - 4] == 1)) + { + flag = 1; + } + } + catch (Exception ee) + { + Debug.Log(ee); + } + } + } + } + else if (chessTurn == turn.black) + { + for (int i = 0; i <= 14; i++) + { + for (int j = 0; j <= 14; j++) + { + try + { + if ((chessState[i, j] == -1 && chessState[i, j + 1] == -1 && chessState[i, j + 2] == -1 && chessState[i, j + 3] == -1 && chessState[i, j + 4] == -1) + || (chessState[i, j] == -1&& chessState[i + 1, j] == -1 && chessState[i + 2, j] == -1 && chessState[i + 3, j] == -1&& chessState[i + 4, j] == -1) + || (chessState[i, j] == -1 && chessState[i + 1, j + 1] == -1&& chessState[i + 2, j + 2] == -1 && chessState[i + 3, j + 3] == -1 && chessState[i + 4, j + 4] == -1) + || (chessState[i, j] == -1 && chessState[i + 1, j - 1] == -1 && chessState[i + 2, j - 2] == -1&& chessState[i + 3, j - 3] == -1 && chessState[i + 4, j - 4] ==-1)) + { + flag = -1; + } + } + catch (Exception ee) + { + Debug.Log(ee); + } + } + } + } + return flag; + } + + /* //检测是够获胜的函数,不含黑棋禁手检测 int result() { int flag = 0; //如果当前该白棋落子,标定黑棋刚刚下完一步,此时应该判断黑棋是否获胜 - if(chessTurn == turn.white) + if (chessTurn == turn.white) { for (int i = 0; i < 11; i++) { @@ -240,17 +302,17 @@ int result() { for (int j = 0; j < 11; j++) { - //只需要判断横向 + //只需要判断横向 if (chessState[i, j] == 1 && chessState[i, j + 1] == 1 && chessState[i, j + 2] == 1 && chessState[i, j + 3] == 1 && chessState[i, j + 4] == 1) { flag = 1; return flag; } } - } + } } //如果当前该黑棋落子,标定白棋刚刚下完一步,此时应该判断白棋是否获胜 - else if(chessTurn == turn.black) + else if (chessTurn == turn.black) { for (int i = 0; i < 11; i++) { @@ -286,7 +348,7 @@ int result() else if (j >= 4 && j < 11) { //横向 - if (chessState[i, j] == -1 && chessState[i, j + 1] == -1 && chessState[i, j + 2] == -1 && chessState[i, j + 3] == -1 && chessState[i, j + 4] ==- 1) + if (chessState[i, j] == -1 && chessState[i, j + 1] == -1 && chessState[i, j + 2] == -1 && chessState[i, j + 3] == -1 && chessState[i, j + 4] == -1) { flag = -1; return flag; @@ -319,7 +381,7 @@ int result() // return flag; //} //纵向 - if (chessState[i, j] == -1 && chessState[i + 1, j] ==- 1 && chessState[i + 2, j] ==- 1 && chessState[i + 3, j] ==- 1 && chessState[i + 4, j] == -1) + if (chessState[i, j] == -1 && chessState[i + 1, j] == -1 && chessState[i + 2, j] == -1 && chessState[i + 3, j] == -1 && chessState[i + 4, j] == -1) { flag = -1; return flag; @@ -343,15 +405,15 @@ int result() { for (int j = 0; j < 11; j++) { - //只需要判断横向 + //只需要判断横向 if (chessState[i, j] == -1 && chessState[i, j + 1] == -1 && chessState[i, j + 2] == -1 && chessState[i, j + 3] == -1 && chessState[i, j + 4] == -1) { flag = -1; return flag; } } - } - } + } + } return flag; - } + }*/ }