Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
136 changes: 99 additions & 37 deletions Assets/Scripts/chess.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -24,28 +25,25 @@ 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; //黑棋子
public Texture2D blackWin; //白子获胜提示图
public Texture2D whiteWin; //黑子获胜提示图
int winner = 0; //获胜方,1为黑子,-1为白子
bool isPlaying = true; //是否处于对弈状态
void Start () {
void Start()
Comment thread
YYangjlu marked this conversation as resolved.
{
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);
Expand All @@ -63,21 +61,26 @@ void Update () {
chessPos[i, j] = new Vector2(LBPos.x + gridWidth * i, LBPos.y + gridHeight * j);
}
}

}

void Update()
{
//检测鼠标输入并确定落子状态
if (isPlaying && Input.GetMouseButtonDown(0))
{
PointPos = Input.mousePosition;
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;
}
}
}
Expand All @@ -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))
Expand All @@ -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++)
{
Expand Down Expand Up @@ -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++)
{
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
}
}*/
}