在unity3d国际象棋比赛中,我无法在第7位选择或移动棋子和车

时间:2018-05-27 23:18:51

标签: c# unity3d

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Pawn : ChessMan {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

    }
    public override bool[,] PossibleMove(){
        bool[,] r = new bool[8, 8];

        ChessMan c, c2;
        int[] e = BoardManager.Instance.enPassant;

        //White move
        if (isWhite) {
            //diagonal left
            if (CurrentX != 0 && CurrentY != 7) {
                //Debug.Log (CurrentY);
                if (e [0] == CurrentX - 1 && e [1] == CurrentY + 1) 
                    r [(int)CurrentX - 1, CurrentY + 1] = true;

                c = BoardManager.Instance.Chessmans [(int)CurrentX - 1, CurrentY + 1];


                if (c != null && !c.isWhite) {
                    r [(int)CurrentX - 1, CurrentY + 1] = true;

                }

            }

            //diagonal right
            if (CurrentX != 8 && CurrentY != 7) {

                Debug.Log (CurrentX);
                if (e [0] == CurrentX + 1 && e [1] == CurrentY + 1) 
                    r [(int)CurrentX + 1, CurrentY + 1] = true;

                c = BoardManager.Instance.Chessmans [(int)CurrentX + 1, CurrentY + 1];
                if (c != null && !c.isWhite) {
                    r [(int)CurrentX + 1, CurrentY + 1] = true;
  1. 这是我的代码,我在“对角线右侧”评论中有一个问题,即它在统一的索引之外。
  2. 我还有两个脚本boardmanager和chessman。
  3. 感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

由于您没有显示整个代码,因此很难找到出错的确切位置。但我会解释你的问题是什么以及如何解决。

为可能的位置定义矩阵(二维数组):

bool[,] r = new bool[8, 8];

这意味着您将用作在Matrix中访问这些元素的索引的变量需要在以下范围内:

0< CurrentX || CurrentY< 8

由于您在访问矩阵中的元素的同一时刻增加/减少此值,因此您需要先添加条件。例如,对于这种情况:

r [(int)CurrentX - 1, CurrentY + 1] = true;

你应该写:

if(CurrentX > 0 && CurrentY < 7){
 r [(int)CurrentX - 1, CurrentY + 1] = true;
}

每次您要访问Matrix r

时都这样做