コード例 #1
0
ファイル: Enviroment.cs プロジェクト: alexeimun/onechess
 /// <summary>
 /// Primera instancia
 /// </summary>
 /// <param name="Screen">Viewport o deimensiones de la pantalla</param>
 public Enviroment(Viewport Screen)
 {
     this.Screen = Screen;
     point = new Chess();
     pointcollect = new Chess[3];
     for (int i = 0; i < 3; i++)
         pointcollect[i] = new Chess();
     Token = Ask.White.King;
     InitializeComponents();
 }
コード例 #2
0
        // Defines am i a player one or player two
        // pt:PlayerType -II-
        public void AddToGame(Chess game, PlayerType pt)
        {
            iam = pt;

            // Sets the chess object
            chess = game;

            // Sets a callback for every step happened
            AbstractGame.StepHandler ost = new AbstractGame.StepHandler(OnStep);
            chess.RegisterAsPlayer(ref ost, iam);
        }
コード例 #3
0
ファイル: Helpers.cs プロジェクト: adh2050/Chess
        public static unsafe BoardStruct* ManagedBoardToNative(Chess.Base.Board board)
        {
            var b = Board.Create();
            b->Castle = 0;

            if (board.CastlingRights.Contains(Base.Castling.KingsideBlack))
                b->Castle |= Board.CASTLE_BK;
            if (board.CastlingRights.Contains(Base.Castling.QueensideBlack))
                b->Castle |= Board.CASTLE_BQ;
            if (board.CastlingRights.Contains(Base.Castling.KingsideWhite))
                b->Castle |= Board.CASTLE_WK;
            if (board.CastlingRights.Contains(Base.Castling.QueensideWhite))
                b->Castle |= Board.CASTLE_WQ;

            b->EnPassantTile = (byte)board.EnPassantTile;
            b->FiftyMoveRulePlies = (byte)board.FiftyMoveRulePlies;
            b->PlayerTurn = (byte)board.PlayerTurn;

            b->CurrentMove = (board.MoveCount - 1) * 2;
            if (b->PlayerTurn == Board.COLOR_BLACK)
                b->CurrentMove++;

            for(int i = 0; i < 64; i++)
            {
                Chess.Base.Color color = board.GetColor(i);
                Chess.Base.Piece piece = board.GetPiece(i);

                if(color == 0 || piece == 0)
                    continue;

                Board.SetPiece(b, i, (int)piece, (int)color);
            }

            //b->AttacksBlack = Board.AttackMap(b, Board.COLOR_BLACK);
            //b->AttacksWhite = Board.AttackMap(b, Board.COLOR_WHITE);
            b->Hash = Zobrist.Calculate(b);
            //b->MoveHistory // N/A
            return b;
        }
        //dimensione della scacchiera
        public List<int> CreateGraphFromChessAndStartDijkstra(Chess[] chessboard, Vector2 dimensions, string strstart, string strend)
        {
            int _count = 1;
            _findMinDistance = false;
            _isGraphConnected = true;
            List<int> ret = new List<int>();

            for (int x = 0; x < chessboard.Length; x++)
            {
                MinDistanceWpf.Classes.Node n = new MinDistanceWpf.Classes.Node(Convert.ToString(x));
                _nodes.Add(n);
                _count++;
            }

            int offset, riga, ind;

            int[,] coords = new int[8, 2] { { -1, 1 }, { -1, 0 }, { -1, 1 }, { 0, -1 }, { 1, -1 }, { 1, 0 }, { 1, 1 }, { 0, 1 } };

            for (int x = 0; x < chessboard.Length; x++)
            {
                riga = (int)Math.Floor(x / dimensions.X);
                offset = (int)(x % dimensions.X);

                //relazioni

                for (int i = 0; i < 8; i++)
                {
                    ind = (int)((riga + coords[i, 1]) * dimensions.X + offset + coords[i, 0]);
                    if (((int)Math.Floor(ind / dimensions.X) == (riga + coords[i, 1])) &&
                        ((ind % dimensions.X) == (offset + coords[i, 0])))
                    {
                        if (Check_Index(ind, ref chessboard)) //qui controlla anche se deve essere preso in considerazione o meno
                            AddConnection(Convert.ToString(x), Convert.ToString(ind), chessboard[ind].value);
                    }
                }

            }

            Node start = _nodes.Find(n => n.Label == strstart); //cerca il nodo avente label a
            Node end = _nodes.Find(n => n.Label == strend); //cerca il nodo avente label a

            FindMinDistancePath(start, end);
            ret = PaintMinDistancePath(start, end);

            return ret;
        }
コード例 #5
0
 public MainWindow()
 {
     InitializeComponent();
     Chess chess = new Chess(this);
 }
コード例 #6
0
ファイル: Chess.cs プロジェクト: huanzheWu/HelpGrandMom
    /// <summary>
    /// 检测当前棋子是否可以消除
    /// </summary>
    /// <param name="chessobj">指定的棋子</param>
    /// <returns>
    /// true: 棋子可以消除
    /// false : 棋子不满足消除的条件
    /// </returns>
    internal bool CanBurstByChess(Chess chessObj)
    {
        bool canBurst = false; //默认不可以消除

        //判断是否满足消除的条件
        if (
            (chessObj.gameObject.name == strChessLest1 && chessObj.gameObject.name == strChessLest2) ||
            (chessObj.gameObject.name == strChessLest1 && chessObj.gameObject.name == strChessRight1) ||
            (chessObj.gameObject.name == strChessRight1 && chessObj.gameObject.name == strChessRight2) ||
            (chessObj.gameObject.name == strChessUp1 && chessObj.gameObject.name == strChessUp2)        ||
            (chessObj.gameObject.name == strChessUp1 && chessObj.gameObject.name == strChessDown1) ||
            (chessObj.gameObject.name == strChessDown1 && chessObj.gameObject.name == strChessDown2)
           )
        {
            canBurst = true;
        }
        return canBurst;
    }
コード例 #7
0
ファイル: Processor.cs プロジェクト: patwonder/craft-othello
 private int getEmpties(Chess[,] board)
 {
     int empties = 0;
     for (int i = 0; i < 8; i++)
         for (int j = 0; j < 8; j++)
             if (board[i, j] == Chess.AVAILABLE)
                 empties++;
     return empties;
 }
コード例 #8
0
ファイル: Ask.cs プロジェクト: alexeimun/onechess
        private static bool DrawCellsinDiagonal(Chess Token)
        {
            bool Pass = false;
            //seeking diagonal top left
            diago = Z = Token.X - 1; eat = Token.Y - 1;
            for (int a = Token.Y - 1; a > -1 && Z > -1 && Dot.Board[Z][a].ID == ""; a--)
            {
                Pass = true;
                Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
                Token.Color = Color.Wheat;
                Dot.Board[Z][a].Color = Color.SpringGreen;
                Z--; eat = a - 1; diago = Z;
            }
            //if it'll eat
            if (diago > -1 && eat > -1 && Dot.Board[diago][eat].ID.Contains(enemy)) { Pass = true; Dot.Board[diago][eat].Color = Color.Red; Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue; }

            //seeking diagonal bottom left
            diago = Z = Token.X - 1; eat = Token.Y + 1;
            for (int a = Token.Y + 1; a < 8 && Z > -1 && Dot.Board[Z][a].ID == ""; a++)
            {
                Pass = true;
                Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
                Token.Color = Color.Wheat;
                Dot.Board[Z][a].Color = Color.SpringGreen;
                Z--; eat = a + 1; diago = Z;
            }
            //if it'll eat
            if (diago > -1 && eat < 8 && Dot.Board[diago][eat].ID.Contains(enemy)) { Pass = true; Dot.Board[diago][eat].Color = Color.Red; Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue; }

            //seeking diagonal top right
            diago = Z = Token.X + 1; eat = Token.Y - 1;
            for (int a = Token.Y - 1; a > -1 && Z < 8 && Dot.Board[Z][a].ID == ""; a--)
            {
                Pass = true;
                Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
                Token.Color = Color.Wheat;
                Dot.Board[Z][a].Color = Color.SpringGreen;
                Z++; eat = a - 1; diago = Z;
            }
            //if it'll eat
            if (diago < 8 && eat > -1 && Dot.Board[diago][eat].ID.Contains(enemy)) { Pass = true; Dot.Board[diago][eat].Color = Color.Red; Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue; }

            //seeking diagonal bottom right
            diago = Z = Token.X + 1; eat = Token.Y + 1;
            for (int a = Token.Y + 1; a < 8 && Z < 8 && Dot.Board[Z][a].ID == ""; a++)
            {
                Pass = true;
                Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
                Token.Color = Color.Wheat;
                Dot.Board[Z][a].Color = Color.SpringGreen;
                Z++; eat = a + 1; diago = Z;
            }
            //if it'll eat
            if (diago < 8 && eat < 8 && Dot.Board[diago][eat].ID.Contains(enemy)) { Pass = true; Dot.Board[diago][eat].Color = Color.Red; Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue; }
            return Pass;
        }
コード例 #9
0
ファイル: Ask.cs プロジェクト: alexeimun/onechess
 private static void King(Chess Token, MouseState mouse)
 {
     //up
     if (Token.Y - 1 > -1 && Dot.Board[Token.X][Token.Y - 1].ID == "" | Dot.Board[Token.X][Token.Y - 1].ID.Contains(enemy) && checKing(Token.X, Token.Y - 1, 7))
     {
         if (Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y - 1].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
         {
             Token.Size = new Rectangle(Token.X * Player.X + Player.W, (Token.Y - 1) * Player.Y, Player.width, Player.height);
             if (mouse.LeftButton == ButtonState.Pressed)
             {
                 Token.Y--;
                 if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                 {
                     Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                     Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                 }
                 process(Token.X, Token.Y, Token);
             }
         }
     }
     //down
     if (Token.Y + 1 < 8 && Dot.Board[Token.X][Token.Y + 1].ID == "" | Dot.Board[Token.X][Token.Y + 1].ID.Contains(enemy) && checKing(Token.X, Token.Y + 1, 7))
     {
         if (Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y + 1].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
         {
             Token.Size = new Rectangle(Token.X * Player.X + Player.W, (Token.Y + 1) * Player.Y, Player.width, Player.height);
             if (mouse.LeftButton == ButtonState.Pressed)
             {
                 Token.Y++;
                 if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                 {
                     Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                     Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                 }
                 process(Token.X, Token.Y, Token);
             }
         }
     }
     //left
     for (int i = Token.X - 1; i >= (Castling(Token.Y, 0) ? Token.X - 2 : Token.X - 1); i--)
         if (i > -1 && Dot.Board[i][Token.Y].ID == "" | Dot.Board[i][Token.Y].ID.Contains(enemy) && checKing(i, Token.Y, 7))
         {
             if (Dot.point.Size.Intersects(Dot.Board[i][Token.Y].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
             {
                 Token.Size = new Rectangle(i * Player.X + Player.W, Token.Y * Player.Y, Player.width, Player.height);
                 if (mouse.LeftButton == ButtonState.Pressed)
                 {
                     if (i == Token.X - 2) Fitup(0, 3);
                     Token.X = i;
                     if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                     {
                         Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                         Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                     }
                     process(Token.X, Token.Y, Token);
                 }
             }
         }
     //right
     for (int i = Token.X + 1; i <= (Castling(Token.Y, 1) ? Token.X + 2 : Token.X + 1); i++)
         if (i < 8 && Dot.Board[i][Token.Y].ID == "" | Dot.Board[i][Token.Y].ID.Contains(enemy) && checKing(i, Token.Y, 7))
         {
             if (Dot.point.Size.Intersects(Dot.Board[i][Token.Y].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
             {
                 Token.Size = new Rectangle(i * Player.X + Player.W, Token.Y * Player.Y, Player.width, Player.height);
                 if (mouse.LeftButton == ButtonState.Pressed)
                 {
                     if (i == Token.X + 2) Fitup(1, 5);
                     Token.X = i;
                     if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                     {
                         Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                         Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                     }
                     process(Token.X, Token.Y, Token);
                 }
             }
         }
     //diagonal top left
     if (Token.X - 1 > -1 && Token.Y - 1 > -1 && Dot.Board[Token.X - 1][Token.Y - 1].ID == "" | Dot.Board[Token.X - 1][Token.Y - 1].ID.Contains(enemy) && checKing(Token.X - 1, Token.Y - 1, 7))
     {
         if (Dot.point.Size.Intersects(Dot.Board[Token.X - 1][Token.Y - 1].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
         {
             Token.Size = new Rectangle((Token.X - 1) * Player.X + Player.W, (Token.Y - 1) * Player.Y, Player.width, Player.height);
             if (mouse.LeftButton == ButtonState.Pressed)
             {
                 Token.X--; Token.Y--;
                 if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                 {
                     Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                     Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                 }
                 process(Token.X, Token.Y, Token);
             }
         }
     }
     //diagonal top right
     if (Token.X + 1 < 8 && Token.Y - 1 > -1 && Dot.Board[Token.X + 1][Token.Y - 1].ID == "" | Dot.Board[Token.X + 1][Token.Y - 1].ID.Contains(enemy) && checKing(Token.X + 1, Token.Y - 1, 7))
     {
         if (Dot.point.Size.Intersects(Dot.Board[Token.X + 1][Token.Y - 1].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
         {
             Token.Size = new Rectangle((Token.X + 1) * Player.X + Player.W, (Token.Y - 1) * Player.Y, Player.width, Player.height);
             if (mouse.LeftButton == ButtonState.Pressed)
             {
                 Token.X++; Token.Y--;
                 if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                 {
                     Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                     Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                 }
                 process(Token.X, Token.Y, Token);
             }
         }
     }
     //diagonal bottom left
     if (Token.X - 1 > -1 && Token.Y + 1 < 8 && Dot.Board[Token.X - 1][Token.Y + 1].ID == "" | Dot.Board[Token.X - 1][Token.Y + 1].ID.Contains(enemy) && checKing(Token.X - 1, Token.Y + 1, 7))
     {
         if (Dot.point.Size.Intersects(Dot.Board[Token.X - 1][Token.Y + 1].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
         {
             Token.Size = new Rectangle((Token.X - 1) * Player.X + Player.W, (Token.Y + 1) * Player.Y, Player.width, Player.height);
             if (mouse.LeftButton == ButtonState.Pressed)
             {
                 Token.X--; Token.Y++;
                 if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                 {
                     Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                     Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                 }
                 process(Token.X, Token.Y, Token);
             }
         }
     }
     //diagonal bottom right
     if (Token.X + 1 < 8 && Token.Y + 1 < 8 && Dot.Board[Token.X + 1][Token.Y + 1].ID == "" | Dot.Board[Token.X + 1][Token.Y + 1].ID.Contains(enemy) && checKing(Token.X + 1, Token.Y + 1, 7))
     {
         if (Dot.point.Size.Intersects(Dot.Board[Token.X + 1][Token.Y + 1].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
         {
             Token.Size = new Rectangle((Token.X + 1) * Player.X + Player.W, (Token.Y + 1) * Player.Y, Player.width, Player.height);
             if (mouse.LeftButton == ButtonState.Pressed)
             {
                 Token.X++; Token.Y++;
                 if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                 {
                     Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                     Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                 }
                 process(Token.X, Token.Y, Token);
             }
         }
     }
 }
コード例 #10
0
        private void pictureBox1_MouseUp(object sender, MouseEventArgs e) //下棋
        {
            if (choice != 1 && choice != 2)                               //沒選玩家或電腦
            {
                return;
            }

            if (choice == 1)                      //玩家對弈
            {
                if (player == Chess.Black)        //黑棋
                {
                    check = m.setBlack(e.X, e.Y); //設定黑子
                }
                else
                {
                    check = m.setWhite(e.X, e.Y); //設定白子
                }
                pictureBox1.Invalidate();         //畫圖

                if (check)                        //下棋成功
                {
                    if (player == Chess.Black)    //檢查輸贏
                    {
                        check = m.checkWinLose(1);
                    }
                    else
                    {
                        check = m.checkWinLose(2);
                    }

                    if (check) //有贏家
                    {
                        if (player == Chess.Black)
                        {
                            ProgressLB.Text = "黑棋勝!";
                        }
                        else
                        {
                            ProgressLB.Text = "白棋勝!";
                        }
                        choice = 0;
                        countdown1(2);
                        countdown2(2);
                        return;
                    }

                    if (player == Chess.Black) //換人
                    {
                        player          = Chess.White;
                        ProgressLB.Text = "白棋回合";
                        countdown1(2);
                        countdown2(1);
                    }
                    else
                    {
                        player          = Chess.Black;
                        ProgressLB.Text = "黑棋回合";
                        countdown2(2);
                        countdown1(1);
                    }
                    total++;          //總棋子+1

                    if (total == 225) //棋盤已滿
                    {
                        ProgressLB.Text = "棋盘已满,本局平棋!";
                        choice          = 0;
                        countdown1(2);
                        countdown2(2);
                    }
                }
            }
            else if (choice == 2)          //玩家與電腦對弈
            {
                if (player == Chess.Black) //玩家是黑棋
                {
                    check    = m.setBlack(e.X, e.Y);
                    computer = 0; //電腦設為白棋
                }
                else
                {
                    check    = m.setWhite(e.X, e.Y);
                    computer = 1;
                }
                pictureBox1.Invalidate();      //畫圖

                if (check)                     //下棋成功
                {
                    if (player == Chess.Black) //檢查輸贏
                    {
                        check = m.checkWinLose(1);
                    }
                    else
                    {
                        check = m.checkWinLose(2);
                    }

                    if (check) //有贏家
                    {
                        if (player == Chess.Black)
                        {
                            ProgressLB.Text = "黑棋勝!";
                        }
                        else
                        {
                            ProgressLB.Text = "白棋勝!";
                        }
                        choice = 0;
                        return;
                    }
                    total++;

                    if (total == 225) //棋盤已滿
                    {
                        ProgressLB.Text = "棋盘已满,本局平棋!";
                        choice          = 0;
                    }
                    else
                    {
                        //電腦下棋
                        if (m.ComputerAIMove(computer)) //呼叫電腦下棋函式
                        {
                            pictureBox1.Invalidate();   //畫圖

                            if (computer == 1)          //檢查輸贏
                            {
                                check = m.checkWinLose(1);
                            }
                            else
                            {
                                check = m.checkWinLose(2);
                            }

                            if (check) //有贏家
                            {
                                if (computer == 1)
                                {
                                    ProgressLB.Text = "黑棋勝!";
                                }
                                else
                                {
                                    ProgressLB.Text = "白棋勝!";
                                }
                                choice = 0;
                                return;
                            }
                            total++;

                            if (total == 225) //棋盤已滿
                            {
                                ProgressLB.Text = "棋盘已满,本局平棋!";
                                choice          = 0;
                            }
                        }
                        else //電腦沒步走,玩家勝利
                        {
                            MessageBox.Show("恭喜你,你赢了!棋盘上所有点均为电脑的禁手点!", "本局结果", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            if (player == Chess.Black)
                            {
                                ProgressLB.Text = "黑棋勝!";
                            }
                            else
                            {
                                ProgressLB.Text = "白棋勝!";
                            }
                            choice = 0;
                            return;
                        }
                    }
                }
            }
        }
コード例 #11
0
ファイル: Ask.cs プロジェクト: alexeimun/onechess
        public static void Player_Click(MouseState mouse, Player player, char Enemy, Color color)
        {
            Color = color; Player = player; enemy = Enemy;

            if (!move)
            {
                Clear(Color);
                #region King
                if (Dot.point.Size.Intersects(player.King.Size) && player.King.Visible && !intersect)
                {
                    intersect = true;
                    if (DrawKingCells(player.King) && mouse.LeftButton == ButtonState.Pressed)
                    {
                        Dot.Token = player.King;
                        Dot.point.Texture = Dot.pointcollect[1].Texture;
                        Dot.Board[player.King.X][player.King.Y].ID = "";
                        move = true; id = 5; Asist = player.King;
                    }
                    else Dot.point.Texture = Dot.pointcollect[0].Texture;
                }
                #endregion
                if (checKing(player.King.X, player.King.Y, 7))
                {
                    #region pawns

                    for (int i = 0; i < 8; i++)
                    {
                        if (Dot.point.Size.Intersects(player.Pawn[i].Size) && player.Pawn[i].Visible && !intersect)
                        {
                            intersect = true;

                            bool Pass = false;
                            if (player.Rol) Pass = DrawUpPawnCells(Player.Pawn[i]);
                            else Pass = DrawDownPawnCells(Player.Pawn[i]);

                            if (Pass && mouse.LeftButton == ButtonState.Pressed)
                            {
                                Dot.Token = player.Pawn[i];
                                Dot.point.Texture = Dot.pointcollect[1].Texture;
                                Dot.Board[player.Pawn[i].X][player.Pawn[i].Y].ID = "";
                                move = true;
                                id = 0; Asist = player.Pawn[i];
                            }
                            else Dot.point.Texture = Dot.pointcollect[0].Texture;
                            break;
                        }
                    }
                    #endregion

                    #region Rook
                    for (int i = 0; i < 2; i++)
                    {
                        if (Dot.point.Size.Intersects(player.Rook[i].Size) && player.Rook[i].Visible && !intersect)
                        {
                            intersect = true;
                            if (DrawCellsinCrux(player.Rook[i]) && mouse.LeftButton == ButtonState.Pressed)
                            {
                                if (mouse.LeftButton == ButtonState.Pressed)
                                {
                                    Dot.Token = player.Rook[i];
                                    Dot.point.Texture = Dot.pointcollect[1].Texture;
                                    Dot.Board[player.Rook[i].X][player.Rook[i].Y].ID = "";
                                    move = true; id = 2; Asist = player.Rook[i];
                                }
                                else Dot.point.Texture = Dot.pointcollect[0].Texture;
                                break;
                            }
                        }
                    }
                    #endregion

                    #region Knight
                    for (int i = 0; i < 2; i++)
                    {
                        if (Dot.point.Size.Intersects(player.Knight[i].Size) && player.Knight[i].Visible && !intersect)
                        {
                            intersect = true;
                            if (DrawKnightCells(player.Knight[i]) && mouse.LeftButton == ButtonState.Pressed)
                            {
                                Dot.Token = player.Knight[i];
                                Dot.point.Texture = Dot.pointcollect[1].Texture;
                                Dot.Board[player.Knight[i].X][player.Knight[i].Y].ID = "";
                                move = true; id = 4; Asist = player.Knight[i]; break;
                            }
                            else Dot.point.Texture = Dot.pointcollect[0].Texture;
                            break;
                        }
                    }
                    #endregion

                    #region Bishop
                    for (int i = 0; i < 2; i++)
                    {
                        if (Dot.point.Size.Intersects(player.Bishop[i].Size) && player.Bishop[i].Visible && !intersect)
                        {
                            intersect = true;
                            if (DrawCellsinDiagonal(player.Bishop[i]) && mouse.LeftButton == ButtonState.Pressed)
                            {
                                Dot.Token = player.Bishop[i];
                                Dot.point.Texture = Dot.pointcollect[1].Texture;
                                Dot.Board[player.Bishop[i].X][player.Bishop[i].Y].ID = "";
                                move = true; id = 3; Asist = player.Bishop[i]; break;
                            }
                            else Dot.point.Texture = Dot.pointcollect[0].Texture;
                            break;
                        }
                    }
                    #endregion

                    #region Queen
                    if (Dot.point.Size.Intersects(player.Queen.Size) && player.Queen.Visible && !intersect)
                    {
                        intersect = true;
                        bool Crux = DrawCellsinCrux(player.Queen);
                        bool Diagonal = DrawCellsinDiagonal(player.Queen);
                        bool Pass = Diagonal || Crux;

                        if (mouse.LeftButton == ButtonState.Pressed && Pass)
                        {
                            Dot.Token = player.Queen;
                            Dot.point.Texture = Dot.pointcollect[1].Texture;
                            Dot.Board[player.Queen.X][player.Queen.Y].ID = "";
                            move = true; id = 1; Asist = player.Queen;
                        }
                        else Dot.point.Texture = Dot.pointcollect[0].Texture;
                    }
                    #endregion
                }

                #region Check Mate
                if (!checKing(player.King.X, player.King.Y, 7))
                {
                    if (!Stage.check)
                        Stage.Begin("CHECK...".ToCharArray());
                    Stage.check = true;
                }
                #endregion /Animation/
                intersect = false;
            }
            //If the player has any Token
            else Move(Asist, mouse, id);
            Dot.point.Size.X = mouse.X;
            Dot.point.Size.Y = mouse.Y;
        }
コード例 #12
0
 public DamageInfo setPartner(Chess _c)
 {
     source_partner = _c;
     return(this);
 }
コード例 #13
0
ファイル: StandardChessBuilder.cs プロジェクト: edotnet/Chess
 public void CreateChess()
 {
     chess = new Chess();
 }
コード例 #14
0
 public DamageInfo setActor(Chess _c)
 {
     source_actor = _c;
     return(this);
 }
コード例 #15
0
ファイル: GameMonitor.cs プロジェクト: eahs/EPCChess
        /*
         * public async Task TrackChallenge(ApplicationDbContext context, Game game)
         * {
         *  if (_challengeTasks.ContainsKey(game.ChallengeId))
         *      return;
         * }
         *
         * protected async Task<EventType> LichessMonitor (Game game)
         * {
         *  LichessApiClient client = new LichessApiClient(game.HomePlayer.User.AccessToken);
         *
         *  CancellationTokenSource cts = new CancellationTokenSource();
         *  _challengeTokens.Add(game.ChallengeId, cts);
         *
         *  await foreach (EventStreamResponse evt in client.Challenges.StreamIncomingEvents(cts.Token))
         *  {
         *      if (evt.Type == EventType.ChallengeCanceled ||
         *          evt.Type == EventType.ChallengeDeclined)
         *          return evt.Type;
         *  }
         *
         * }
         */

        protected override async Task ExecuteAsync(CancellationToken cancellationToken)
        {
            while (true)
            {
                using (IServiceScope scope = _provider.CreateScope())
                {
                    var context     = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>();
                    var config      = scope.ServiceProvider.GetRequiredService <IConfiguration> ();
                    var hubContext  = scope.ServiceProvider.GetRequiredService <IHubContext <GameHub> >();
                    var dataService = scope.ServiceProvider.GetRequiredService <DataService>();

                    try
                    {
                        // Get the API access token
                        var lichessAuthNSection = config.GetSection("Authentication:Lichess");
                        var appToken            = lichessAuthNSection["AppToken"];

                        // Create a client that can use the token
                        var client = new LichessApiClient(appToken);

                        // Get games from the last week that have not been completed
                        var matches = await context.Match.Where(m => m.IsVirtual && m.MatchStarted && !m.Completed)
                                      .Include(m => m.Games).ThenInclude(g => g.HomePlayer).ThenInclude(p => p.User)
                                      .Include(m => m.Games).ThenInclude(g => g.AwayPlayer).ThenInclude(p => p.User)
                                      .ToListAsync();

                        if (matches is not null)
                        {
                            foreach (var match in matches)
                            {
                                MatchUpdateViewModel vm = new MatchUpdateViewModel
                                {
                                    MatchId = match.MatchId,
                                    Games   = new List <GameJson>()
                                };

                                List <string> gameIds = new List <string>();

                                foreach (var game in match.Games)
                                {
                                    if (!game.Completed && !String.IsNullOrEmpty(game.ChallengeId))
                                    {
                                        gameIds.Add(game.ChallengeId);
                                    }
                                    else if (game.Completed)
                                    {
                                        vm.Games.Add(MapGameToJson(game));
                                    }
                                }

                                if (gameIds.Count > 0)
                                {
                                    CancellationTokenSource cts = new CancellationTokenSource();

                                    ExportGamesByIdsRequest request = new ExportGamesByIdsRequest
                                    {
                                        PgnInJson = true,
                                        Moves     = true,
                                        Clocks    = true,
                                        Evals     = false,
                                        Opening   = true
                                    };

                                    try
                                    {
                                        await foreach (LichessApi.Web.Models.Game ligame in client.Games
                                                       .ExportGamesByIds(request, gameIds, cts.Token))
                                        {
                                            // Remove this from the list
                                            gameIds.Remove(ligame.Id);

                                            Chess chess = new Chess();

                                            if (!String.IsNullOrEmpty(ligame.Moves))
                                            {
                                                try
                                                {
                                                    chess.loadSAN(ligame.Moves);
                                                }
                                                catch (Exception e)
                                                {
                                                    Log.Error(e, "Error loading SAN {0}", ligame.Moves);
                                                }
                                            }

                                            var game = match.Games.FirstOrDefault(g => g.ChallengeId.Equals(ligame.Id));

                                            if (game != null)
                                            {
                                                string fen = chess.Fen();

                                                game.CurrentFen      = fen;
                                                game.LastMove        = ligame.LastMoveAt;
                                                game.ChallengeStatus = ligame.Status.ToEnumString();
                                                game.ChallengeMoves  = ligame.Moves ?? "";

                                                if (ligame.Status == GameStatus.Timeout ||
                                                    ligame.Status == GameStatus.Aborted)
                                                {
                                                    ResetGame(game);
                                                }
                                                else if (ligame.Status == GameStatus.Started)
                                                {
                                                    game.IsStarted = true;
                                                }
                                                else if (ligame.Status == GameStatus.Draw ||
                                                         ligame.Status == GameStatus.Stalemate)
                                                {
                                                    // Result: 0 = Draw, 1 = Home Win, 2 = Away Win, 3 = Reset
                                                    GameResult result = GameResult.Draw;

                                                    await dataService.UpdateAndLogRatingCalculations(game, result);

                                                    game.Completed     = true;
                                                    game.CompletedDate = DateTime.Now;
                                                }
                                                else if (ligame.Status == GameStatus.OutOfTime ||
                                                         ligame.Status == GameStatus.Resign ||
                                                         ligame.Status == GameStatus.Mate)
                                                {
                                                    GameResult result = GameResult.Draw;

                                                    if (game.BoardPosition % 2 == 1)
                                                    {
                                                        // black player is home, white player is away
                                                        result = ligame.Winner.Equals("black")
                                                            ? GameResult.Player1Wins
                                                            : GameResult.Player2Wins;
                                                    }
                                                    else
                                                    {
                                                        // white player is home, black player is away
                                                        result = ligame.Winner.Equals("white")
                                                            ? GameResult.Player1Wins
                                                            : GameResult.Player2Wins;
                                                    }

                                                    // Everything beyond board 7 has flipped colors
                                                    if (game.BoardPosition > 7)
                                                    {
                                                        if (result == GameResult.Player1Wins)
                                                        {
                                                            result = GameResult.Player2Wins;
                                                        }
                                                        else
                                                        {
                                                            result = GameResult.Player1Wins;
                                                        }
                                                    }

                                                    await dataService.UpdateAndLogRatingCalculations(game, result);

                                                    game.Completed     = true;
                                                    game.CompletedDate = DateTime.Now;
                                                }
                                                else if (ligame.Status == GameStatus.Cheat)
                                                {
                                                    game.CheatingDetected = true;
                                                }

                                                context.Game.Update(game);
                                                await context.SaveChangesAsync();

                                                // Add game to json output
                                                vm.Games.Add(MapGameToJson(game));
                                            }
                                        }
                                    }
                                    catch (ApiInvalidRequestException e)
                                    {
                                        Log.Error(e, "GameMonitor : Invalid Api request");
                                    }
                                    catch (ApiUnauthorizedException e)
                                    {
                                        Log.Error(e, "GameMonitor : Unauthorized request");
                                    }
                                    catch (ApiRateLimitExceededException e)
                                    {
                                        Log.Error(e, "GameMonitor: All requests are rate limited using various strategies, to ensure the API remains responsive for everyone. Only make one request at a time. If you receive an HTTP response with a 429 status, please wait a full minute before resuming API usage.");
                                        await Task.Delay(60 * 1000);  // Wait 60 seconds due to rate limit exceeded
                                    }
                                    catch (Exception e)
                                    {
                                        Log.Error(e, "GameMonitor : Error occurred");
                                    }


                                    // Are there any games that we didn't get responses back for?
                                    if (gameIds.Count > 0)
                                    {
                                        foreach (string gameId in gameIds)
                                        {
                                            var game = match.Games.FirstOrDefault(g => g.ChallengeId.Equals(gameId));

                                            if (game != null)
                                            {
                                                // This is to check for challenge games that are created but we would normally have to monitor
                                                // by streaming events for every user

                                                // Game is created but we aren't getting status updates on it
                                                var response = await client.Connector.SendRawRequest(new Uri(game.ChallengeUrl), HttpMethod.Get);

                                                var body = response.Body.ToString();

                                                if (body.Contains("Challenge canceled") ||
                                                    body.Contains("Challenge declined"))
                                                {
                                                    ResetGame(game);

                                                    context.Game.Update(game);

                                                    await context.SaveChangesAsync();

                                                    // Add game to json output
                                                    vm.Games.Add(MapGameToJson(game));
                                                }
                                            }
                                        }
                                    }

                                    await hubContext.Clients.Groups("match_" + match.MatchId).SendAsync("UpdateMatches", vm);

                                    await Task.Delay(500);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.Error(ex, ex.Message);

                        // if the DB is not currently connected, wait 15 seconds and try again
                        await Task.Delay(TimeSpan.FromSeconds(15));

                        continue;
                    }
                }

                var task = Task.Delay(TimeSpan.FromSeconds(10), cancellationToken);
                try
                {
                    await task;
                }
                catch (TaskCanceledException)
                {
                    return;
                }
            }
        }
コード例 #16
0
        public int ExplorePos          = -1;               //切换模式时,SL探索模式的位置
        /// <summary>
        /// 触发起点的处理放在具体位置
        /// </summary>
        /// <returns>The IDs,which event condition ready.</returns>
        /// <param name="trigger">Trigger.</param>
        /// <param name="int_argu">骑士站立、贴近事件为格子ID.	点击事件为click_ID</param>
        public int[] isNowEventConditionReady(eEventTrigger trigger, int int_argu, Chess chess_argu)
        {
            List <int> events_ok = new List <int> ();

//			foreach (var _evt in event_list) {
            for (int checking_event_number = 0; checking_event_number < map_data.list_event_data.Count; checking_event_number++)
            {
                var _evt = map_data.list_event_data [checking_event_number];
                //判断触发时机是否符合
                if (trigger != _evt.condition.trigger_evt)
                {
                    continue;
                }
                //前置事件判断
                if (_evt.condition.pre_event_id >= 0 && map_data.list_event_data[_evt.condition.pre_event_id].triggered_times < _evt.condition.pre_event_launchtimes)
                {
                    continue;
                }
                //触发阶段判断
                if (_evt.condition.launch_phase != ePhaseType.All && Main.Inst.now_turnphase != null && _evt.condition.launch_phase != Main.Inst.now_turnphase.myType)
                {
                    continue;
                }
                //触发次数判断
                if (!(_evt.condition.trig_chance == 0 || _evt.condition.trig_chance > _evt.triggered_times))
                {
                    continue;
                }
                //全局开关1判断
                if (_evt.condition.gs_1 > 0 && !global_switch [_evt.condition.gs_1])
                {
                    continue;
                }
                //全局开关2判断
                if (_evt.condition.gs_2 > 0 && !global_switch[_evt.condition.gs_2])
                {
                    continue;
                }
                //触发参数对照
                switch (_evt.condition.trigger_evt)
                {
                case eEventTrigger.Reach_turn:
                    if (_evt.condition.trig_argu != now_turn)
                    {
                        continue;
                    }
                    break;

                case eEventTrigger.Click:
                    if (_evt.condition.trig_argu != int_argu)
                    {
                        continue;
                    }
                    break;

                case eEventTrigger.Kights_Stand:
                    //棋子对应的玩家有没有资格触发
                    if (!_evt.condition.players_who_can[(int)chess_argu.belong])
                    {
                        continue;
                    }
                    //查看棋子站的格子是否属于某个区域
                    bool match = false;
                    foreach (var item in Main.Inst.lv_ctrl.map_data.list_area_grid[_evt.condition.trig_argu].list)
                    {
                        if (item == chess_argu.container.number)
                        {
                            match = true;
                            break;
                        }
                    }
                    if (!match)
                    {
                        continue;
                    }
                    break;

                case eEventTrigger.Monter_Dead:
                    if (_evt.condition.trig_argu != int_argu)
                    {
                        continue;
                    }
                    break;

                case eEventTrigger.Phase_Change:
                //不需要额外判断
                default:
                    break;
                }

                //全局变量判断
                if (_evt.condition.glo_v > 0)
                {
                    switch (_evt.condition.glo_v_op)
                    {
                    case eCompareOP.大于:
                        if (!(global_variable [_evt.condition.glo_v] > _evt.condition.glo_v_compare))
                        {
                            continue;
                        }
                        break;

                    case eCompareOP.大于等于:
                        if (!(global_variable [_evt.condition.glo_v] >= _evt.condition.glo_v_compare))
                        {
                            continue;
                        }
                        break;

                    case eCompareOP.小于:
                        if (!(global_variable [_evt.condition.glo_v] < _evt.condition.glo_v_compare))
                        {
                            continue;
                        }
                        break;

                    case eCompareOP.小于等于:
                        if (!(global_variable [_evt.condition.glo_v] <= _evt.condition.glo_v_compare))
                        {
                            continue;
                        }
                        break;

                    case eCompareOP.等于:
                        if (!(global_variable [_evt.condition.glo_v] == _evt.condition.glo_v_compare))
                        {
                            continue;
                        }
                        break;

                    case eCompareOP.等于:
                        if (!(global_variable [_evt.condition.glo_v] != _evt.condition.glo_v_compare))
                        {
                            continue;
                        }
                        break;

                    default:
                        Debug.Log("关卡事件触发条件,变量对比方式错误");
                        break;
                    }
                }
                //携带道具判断
                if (!(_evt.condition.with_item > 0 && true))
                {
                    Debug.Log("携带道具判断未完成");
                }
                //携带角色判断
                if (!(_evt.condition.with_char > 0 && true))
                {
                    Debug.Log("携带角色判断未完成");
                }
                //怪物死亡判断
                //目标事件ID和自身ID相同时,表示所有怪物死光
                //其他表示指定的
                bool monster_dead = true;
                if (_evt.condition.EventMonter_Dead >= 0)
                {
                    //将召唤
                    foreach (var coming_event in events_ok)
                    {
                        foreach (var unit in map_data.list_unit_data)
                        {
                            //有召唤发生,且需要怪物全死
                            if (unit.m_launch_event_order == coming_event && _evt.condition.EventMonter_Dead == checking_event_number)
                            {
                                monster_dead = false;
                                break;
                            }
                            //有召唤发生,且怪物的召唤事件ID与需要死的怪物批次相同
                            else if (unit.m_launch_event_order == coming_event && coming_event == _evt.condition.EventMonter_Dead)
                            {
                                monster_dead = false;
                                break;
                            }
                            if (!monster_dead)
                            {
                                break;
                            }
                        }
                        if (!monster_dead)
                        {
                            break;
                        }
                    }
                    //已召唤
                    foreach (KeyValuePair <long, Chess> item in Main.Inst.dic_chess)
                    {
                        Chess ch = item.Value;
                        //-1是玩家召唤,但玩家打翻的还会算
                        //                  if (ch.shoukan_event > 0 && ch.shoukan_event <= now_event_order)

                        //怪物全死有效
                        if (_evt.condition.EventMonter_Dead == checking_event_number)
                        {
                            if (ch.belong < ePlayer.Player1 || ch.belong > ePlayer.Player4)
                            {
                                monster_dead = false;
                                break;
                            }
                        }
                        else
                        {
                            //指定批次怪物死亡有效
                            if ((ch.belong < ePlayer.Player1 || ch.belong > ePlayer.Player4) && ch.shoukan_event == _evt.condition.EventMonter_Dead)
                            {
                                monster_dead = false;
                                break;
                            }
                        }
                    }
                }
                if (!monster_dead)
                {
                    continue;
                }
                events_ok.Add(checking_event_number);

                //_evt.triggered_times++;   //
            }


            return(events_ok.ToArray());
            //胜利条件由事件决定
//			if (event_list.Count == now_event_order) {
//				Main.Instance.GameOver (ePlayer.Player2);
//				return false;
//			}
//			EventInfo evt = event_list[now_event_order];
//
//			if (!isFirstRun && Main.Instance.now_turnphase.myType != evt.launch_phase
//			 && evt.launch_phase != ePhaseType.All)
//				return false;
//			//当前0表示所有之前事件对应的怪物死亡
//			if (evt.condition.trigger == eEventTrigger.Phase_Change && evt.condition.EventMonter_Dead == 0) {
//				foreach(KeyValuePair<int,Chess> item in Main.Instance.dic_chess){
//					Chess ch = item.Value;
//					//-1是玩家召唤,但玩家打翻的还会算
////					if (ch.shoukan_event > 0 && ch.shoukan_event <= now_event_order)
//					if ((ch.belong< ePlayer.Player1 || ch.belong> ePlayer.Player4) && ch.shoukan_event <= now_event_order)
//						return false;
//				}
//				return true;
//			}
//			Debug.Log ("其他条件未完成");
//			return false;
        }
コード例 #17
0
ファイル: ChessPiece.cs プロジェクト: zxw8994/SimpleChess
 private void Start()
 {
     chess = FindObjectOfType <Chess>();
     this.GetComponent <Renderer>().material.color = originalColor;
     isMoving = false;
 }
コード例 #18
0
ファイル: WorldManager.cs プロジェクト: Reemhi2122/ChessGame
 public void StartChessGame()
 {
     currentChess = new Chess(chesspieces, currentWorld.size, currentWorld);
 }
コード例 #19
0
ファイル: Ask.cs プロジェクト: alexeimun/onechess
 private static void Move(Chess Token, MouseState mouse, int model)
 {
     Token.Size.X = mouse.X - Player.width / 2;
     Token.Size.Y = mouse.Y - Player.height / 2;
     switch (model)
     {
         case 0:
             #region pawns move
             if (Player.Rol)
             {
                 for (int a = Token.Y - 1; a >= Token.Y - (Token.initial ? 2 : 1) && Dot.Board[Token.X][a].ID == ""; a--)
                 {
                     if (Dot.point.Size.Intersects(Dot.Board[Token.X][a].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
                     {
                         Token.Size = new Rectangle(Token.X * Player.X + Player.W, a * Player.Y, Player.width, Player.height);
                         if (mouse.LeftButton == ButtonState.Pressed)
                         {
                             process(Token.X, Token.Y = a, Token);
                             Token.initial = false;
                         }
                         break;
                     }
                 }
                 //Chewing token X - 1, Y - 1
                 if (Token.X - 1 > -1 && Token.Y - 1 > -1 && Dot.point.Size.Intersects(Dot.Board[Token.X - 1][Token.Y - 1].Size)
                     && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size) && Dot.Board[Token.X - 1][Token.Y - 1].ID.Contains(enemy))
                 {
                     Token.Size = new Rectangle((Token.X - 1) * Player.X + Player.W, (Token.Y - 1) * Player.Y, Player.width, Player.height);
                     if (mouse.LeftButton == ButtonState.Pressed)
                     {
                         Token.Y--; Token.X--;
                         Dot.Board[Token.X][Token.Y].Token.Visible = false;
                         Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                         Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                         process(Token.X, Token.Y, Token);
                     }
                 }
                 //Chewing token X + 1, Y - 1
                 if (Token.X + 1 < 8 && Token.Y - 1 > -1 && Dot.point.Size.Intersects(Dot.Board[Token.X + 1][Token.Y - 1].Size)
                     && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size) && Dot.Board[Token.X + 1][Token.Y - 1].ID.Contains(enemy))
                 {
                     Token.Size = new Rectangle((Token.X + 1) * Player.X + Player.W, (Token.Y - 1) * Player.Y, Player.width, Player.height);
                     if (mouse.LeftButton == ButtonState.Pressed)
                     {
                         Token.Y--; Token.X++;
                         Dot.Board[Token.X][Token.Y].Token.Visible = false;
                         Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                         Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                         process(Token.X, Token.Y, Token);
                     }
                 }
             }
             else
             {
                 //black pawns
                 for (int a = Token.Y + 1; a <= Token.Y + (Token.initial ? 2 : 1) && Dot.Board[Token.X][a].ID == ""; a++)
                 {
                     if (Dot.point.Size.Intersects(Dot.Board[Token.X][a].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
                     {
                         Token.Size = new Rectangle(Token.X * Player.X + Player.W, a * Player.Y, Player.width, Player.height);
                         if (mouse.LeftButton == ButtonState.Pressed)
                         {
                             process(Token.X, Token.Y = a, Token);
                             Token.initial = false;
                         }
                         break;
                     }
                 }
                 //Chewing token X + 1, Y + 1
                 if (Token.X + 1 < 8 && Token.Y + 1 < 8 && Dot.point.Size.Intersects(Dot.Board[Token.X + 1][Token.Y + 1].Size)
                     && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size) && Dot.Board[Token.X + 1][Token.Y + 1].ID.Contains(enemy))
                 {
                     Token.Size = new Rectangle((Token.X + 1) * Player.X + Player.W, (Token.Y + 1) * Player.Y, Player.width, Player.height);
                     if (mouse.LeftButton == ButtonState.Pressed)
                     {
                         Token.Y++; Token.X++;
                         Dot.Board[Token.X][Token.Y].Token.Visible = false;
                         Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                         Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                         process(Token.X, Token.Y, Token);
                     }
                 }
                 //Chewing token X - 1, Y + 1
                 if (Token.X - 1 > -1 && Token.Y + 1 < 8 && Dot.point.Size.Intersects(Dot.Board[Token.X - 1][Token.Y + 1].Size)
                     && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size) && Dot.Board[Token.X - 1][Token.Y + 1].ID.Contains(enemy))
                 {
                     Token.Size = new Rectangle((Token.X - 1) * Player.X + Player.W, (Token.Y + 1) * Player.Y, Player.width, Player.height);
                     if (mouse.LeftButton == ButtonState.Pressed)
                     {
                         Token.Y++; Token.X--;
                         Dot.Board[Token.X][Token.Y].Token.Visible = false;
                         Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                         Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                         process(Token.X, Token.Y, Token);
                     }
                 }
             }
             break;
             #endregion
         case 1:
             #region queen move
             //seeking in Crux
             Crux(Token, mouse);
             //seeking in Diagonal
             Diagonal(Token, mouse);
             break;
             #endregion
         case 2:
             #region Rook move
             //seeking in Crux
             Crux(Token, mouse);
             break;
             #endregion
         case 3:
             #region bishop move
             //seeking in Diagonal
             Diagonal(Token, mouse);
             break;
             #endregion
         case 4:
             #region Knight move
             //seeking in Knight
             Knight(Token, mouse);
             break;
             #endregion
         case 5:
             #region king move
             //seeking in King
             King(Token, mouse);
             break;
             #endregion
     }
 }
コード例 #20
0
ファイル: ChessBoard.cs プロジェクト: shacleff/LianQiClient
    //----------------------------------------工具函数------------------------------------------------------------


    // 建立链接
    private void linkChessAndGrid(Chess chess, Grid grid)
    {
        chess._GridPos = grid.getPos();
        grid._Chess    = chess;
    }
コード例 #21
0
ファイル: Ask.cs プロジェクト: alexeimun/onechess
        private static void Diagonal(Chess Token, MouseState mouse)
        {
            //seeking diagonal top right
            diago = Z = Token.X + 1; eat = Token.Y - 1;
            for (int a = Token.Y - 1; a > -1 && Z < 8 && Dot.Board[Z][a].ID == ""; a--)
            {
                if (Dot.point.Size.Intersects(Dot.Board[Z][a].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
                {
                    Token.Size = new Rectangle(Z * Player.X + Player.W, a * Player.Y, Player.width, Player.height);

                    if (mouse.LeftButton == ButtonState.Pressed)
                        process(Token.X = Z, Token.Y = a, Token);
                    return;
                }
                Z++; diago = Z; eat = a - 1;
            }
            //eating diagonal top right
            if (diago < 8 && eat > -1 && Dot.Board[diago][eat].ID.Contains(enemy) &&
            Dot.point.Size.Intersects(Dot.Board[diago][eat].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
            {
                Token.Size = new Rectangle(diago * Player.X + Player.W, eat * Player.Y, Player.width, Player.height);

                if (mouse.LeftButton == ButtonState.Pressed)
                {
                    Token.Y = eat; Token.X = diago;
                    Dot.Board[Token.X][Token.Y].Token.Visible = false;
                    Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                    Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                    process(Token.X, Token.Y, Token);
                }
                return;
            }
            //seeking diagonal bottom right
            diago = Z = Token.X + 1; eat = Token.Y + 1;
            for (int a = Token.Y + 1; a < 8 && Z < 8 && Dot.Board[Z][a].ID == ""; a++)
            {
                if (Dot.point.Size.Intersects(Dot.Board[Z][a].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
                {
                    Token.Size = new Rectangle(Z * Player.X + Player.W, a * Player.Y, Player.width, Player.height);

                    if (mouse.LeftButton == ButtonState.Pressed)
                        process(Token.X = Z, Token.Y = a, Token);
                    return;
                }
                Z++; diago = Z; eat = a + 1;
            }
            //eating diagonal bottom right
            if (diago < 8 && eat < 8 && Dot.Board[diago][eat].ID.Contains(enemy) &&
            Dot.point.Size.Intersects(Dot.Board[diago][eat].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
            {
                Token.Size = new Rectangle(diago * Player.X + Player.W, eat * Player.Y, Player.width, Player.height);

                if (mouse.LeftButton == ButtonState.Pressed)
                {
                    Token.Y = eat; Token.X = diago;
                    Dot.Board[Token.X][Token.Y].Token.Visible = false;
                    Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                    Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                    process(Token.X, Token.Y, Token);
                }
                return;
            }
            //seeking diagonal top left
            diago = Z = Token.X - 1; eat = Token.Y - 1;
            for (int a = Token.Y - 1; a > -1 && Z > -1 && Dot.Board[Z][a].ID == ""; a--)
            {
                if (Dot.point.Size.Intersects(Dot.Board[Z][a].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
                {
                    Token.Size = new Rectangle(Z * Player.X + Player.W, a * Player.Y, Player.width, Player.height);

                    if (mouse.LeftButton == ButtonState.Pressed)
                        process(Token.X = Z, Token.Y = a, Token);
                    return;
                }
                Z--; diago = Z; eat = a - 1;
            }
            //eating diagonal top left
            if (diago > -1 && eat > -1 && Dot.Board[diago][eat].ID.Contains(enemy) &&
            Dot.point.Size.Intersects(Dot.Board[diago][eat].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
            {
                Token.Size = new Rectangle(diago * Player.X + Player.W, eat * Player.Y, Player.width, Player.height);

                if (mouse.LeftButton == ButtonState.Pressed)
                {
                    Token.Y = eat; Token.X = diago;
                    Dot.Board[Token.X][Token.Y].Token.Visible = false;
                    Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                    Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                    process(Token.X, Token.Y, Token);
                }
                return;
            }
            //seeking diagonal bottom left
            diago = Z = Token.X - 1; eat = Token.Y + 1;
            for (int a = Token.Y + 1; a < 8 && Z > -1 && Dot.Board[Z][a].ID == ""; a++)
            {
                if (Dot.point.Size.Intersects(Dot.Board[Z][a].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
                {
                    Token.Size = new Rectangle(Z * Player.X + Player.W, a * Player.Y, Player.width, Player.height);

                    if (mouse.LeftButton == ButtonState.Pressed)
                        process(Token.X = Z, Token.Y = a, Token);
                    return;
                }
                Z--; diago = Z; eat = a + 1;
            }
            //eating diagonal bottom left
            if (diago > -1 && eat < 8 && Dot.Board[diago][eat].ID.Contains(enemy) &&
            Dot.point.Size.Intersects(Dot.Board[diago][eat].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
            {
                Token.Size = new Rectangle(diago * Player.X + Player.W, eat * Player.Y, Player.width, Player.height);

                if (mouse.LeftButton == ButtonState.Pressed)
                {
                    Token.Y = eat; Token.X = diago;
                    Dot.Board[Token.X][Token.Y].Token.Visible = false;
                    Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                    Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                    process(Token.X, Token.Y, Token);
                }
                return;
            }
        }
コード例 #22
0
        static void Main(string[] args)
        {
            var chess = new Chess();

            chess.Run();
        }
コード例 #23
0
ファイル: Ask.cs プロジェクト: alexeimun/onechess
 private static bool DrawKnightCells(Chess Token)
 {
     bool Pass = false;
     //X top left
     if (Token.X - 2 > -1 && Token.Y - 1 > -1 && Dot.Board[Token.X - 2][Token.Y - 1].ID == "" | Dot.Board[Token.X - 2][Token.Y - 1].ID.Contains(enemy))
     {
         Pass = true;
         Token.Color = Color.Wheat;
         Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
         if (Dot.Board[Token.X - 2][Token.Y - 1].ID.Contains(enemy)) Dot.Board[Token.X - 2][Token.Y - 1].Color = Color.Red;
         else Dot.Board[Token.X - 2][Token.Y - 1].Color = Color.SpringGreen;
     }
     //Y top left
     if (Token.X - 1 > -1 && Token.Y - 2 > -1 && Dot.Board[Token.X - 1][Token.Y - 2].ID == "" | Dot.Board[Token.X - 1][Token.Y - 2].ID.Contains(enemy))
     {
         Pass = true;
         Token.Color = Color.Wheat;
         Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
         if (Dot.Board[Token.X - 1][Token.Y - 2].ID.Contains(enemy)) Dot.Board[Token.X - 1][Token.Y - 2].Color = Color.Red;
         else Dot.Board[Token.X - 1][Token.Y - 2].Color = Color.SpringGreen;
     }
     //X top right
     if (Token.X + 2 < 8 && Token.Y - 1 > -1 && Dot.Board[Token.X + 2][Token.Y - 1].ID == "" | Dot.Board[Token.X + 2][Token.Y - 1].ID.Contains(enemy))
     {
         Pass = true;
         Token.Color = Color.Wheat;
         Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
         if (Dot.Board[Token.X + 2][Token.Y - 1].ID.Contains(enemy)) Dot.Board[Token.X + 2][Token.Y - 1].Color = Color.Red;
         else Dot.Board[Token.X + 2][Token.Y - 1].Color = Color.SpringGreen;
     }
     //Y top right
     if (Token.X + 1 < 8 && Token.Y - 2 > -1 && Dot.Board[Token.X + 1][Token.Y - 2].ID == "" | Dot.Board[Token.X + 1][Token.Y - 2].ID.Contains(enemy))
     {
         Pass = true;
         Token.Color = Color.Wheat;
         Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
         if (Dot.Board[Token.X + 1][Token.Y - 2].ID.Contains(enemy)) Dot.Board[Token.X + 1][Token.Y - 2].Color = Color.Red;
         else Dot.Board[Token.X + 1][Token.Y - 2].Color = Color.SpringGreen;
     }
     //Y bottom left
     if (Token.X - 1 > -1 && Token.Y + 2 < 8 && Dot.Board[Token.X - 1][Token.Y + 2].ID == "" | Dot.Board[Token.X - 1][Token.Y + 2].ID.Contains(enemy))
     {
         Pass = true;
         Token.Color = Color.Wheat;
         Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
         if (Dot.Board[Token.X - 1][Token.Y + 2].ID.Contains(enemy)) Dot.Board[Token.X - 1][Token.Y + 2].Color = Color.Red;
         else Dot.Board[Token.X - 1][Token.Y + 2].Color = Color.SpringGreen;
     }
     //X bottom left
     if (Token.X - 2 > -1 && Token.Y + 1 < 8 && Dot.Board[Token.X - 2][Token.Y + 1].ID == "" | Dot.Board[Token.X - 2][Token.Y + 1].ID.Contains(enemy))
     {
         Pass = true;
         Token.Color = Color.Wheat;
         Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
         if (Dot.Board[Token.X - 2][Token.Y + 1].ID.Contains(enemy)) Dot.Board[Token.X - 2][Token.Y + 1].Color = Color.Red;
         else Dot.Board[Token.X - 2][Token.Y + 1].Color = Color.SpringGreen;
     }
     //Y bottom right
     if (Token.X + 1 < 8 && Token.Y + 2 < 8 && Dot.Board[Token.X + 1][Token.Y + 2].ID == "" | Dot.Board[Token.X + 1][Token.Y + 2].ID.Contains(enemy))
     {
         Pass = true;
         Token.Color = Color.Wheat;
         Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
         if (Dot.Board[Token.X + 1][Token.Y + 2].ID.Contains(enemy)) Dot.Board[Token.X + 1][Token.Y + 2].Color = Color.Red;
         else Dot.Board[Token.X + 1][Token.Y + 2].Color = Color.SpringGreen;
     }
     //X bottom right
     if (Token.X + 2 < 8 && Token.Y + 1 < 8 && Dot.Board[Token.X + 2][Token.Y + 1].ID == "" | Dot.Board[Token.X + 2][Token.Y + 1].ID.Contains(enemy))
     {
         Pass = true;
         Token.Color = Color.Wheat;
         Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
         if (Dot.Board[Token.X + 2][Token.Y + 1].ID.Contains(enemy)) Dot.Board[Token.X + 2][Token.Y + 1].Color = Color.Red;
         else Dot.Board[Token.X + 2][Token.Y + 1].Color = Color.SpringGreen;
     }
     return Pass;
 }
コード例 #24
0
ファイル: FrmBBDD.cs プロジェクト: javideve/ChessUA
        // Metodo BuscarMovimientos
        // Busca movimientos en bbdd dada
        private bool BuscarMovimientos()
        {
            // Obtener elo minimo y maximo
            int eloMin, eloMax;

            eloMin = 0;
            eloMax = 10000;

            switch (NSCmbElo.SelectedIndex)
            {
            // 1000-1399: Principiante
            case 1:
                eloMin = 1000;
                eloMax = 1399;
                break;

            // 1400-1599: Aficionado
            case 2:
                eloMin = 1400;
                eloMax = 1599;
                break;

            // 1600-1799: Club Medio
            case 3:
                eloMin = 1600;
                eloMax = 1799;
                break;

            // 1800-1999: Club Fuerte
            case 4:
                eloMin = 1800;
                eloMax = 1999;
                break;

            // 2000-2199: Exp. Nacional
            case 5:
                eloMin = 2000;
                eloMax = 2199;
                break;

            // 2200-2299: Ca. Maestro
            case 6:
                eloMin = 2200;
                eloMax = 2299;
                break;

            // 2300-2399: Maestro Fide
            case 7:
                eloMin = 2300;
                eloMax = 2399;
                break;

            // 2400-2499: Maestro Inter
            case 8:
                eloMin = 2400;
                eloMax = 2499;
                break;

            // 2500-2599: Gran Maestro
            case 9:
                eloMin = 2500;
                eloMax = 2599;
                break;

            // 2600-2699: Sup. Maestro
            case 10:
                eloMin = 2600;
                eloMax = 2699;
                break;

            // 2700-2799: Ca. Campeón
            case 11:
                eloMin = 2700;
                eloMax = 2799;
                break;

            // 2800+: Campeón Mundo
            case 12:
                eloMin = 2800;
                eloMax = 10000;
                break;
            }

            NSLvItems.RemoveItems(NSLvItems.Items);

            // Mostrar movimientos
            ArrayList movimientos = Program.bbdd.ConsultaObtenerMovimientos(NSCmbBBDD.Text, NSTxbFechaIni.Text.Replace('/', '-'),
                                                                            NSTxbFechaFin.Text.Replace('/', '-'), NSCmbJugador.Text, eloMin + "", eloMax + "");

            if (movimientos != null)
            {
                for (int i = 0; i < movimientos.Count; i += 8)
                {
                    string[] movS = movimientos[i + 7].ToString().Split(',');

                    string mov = Chess.NotacionAlgebraicaL(Convert.ToInt32(movS[0]), Convert.ToInt32(movS[1]), Convert.ToInt32(movS[2]),
                                                           Convert.ToInt32(movS[3]), Convert.ToInt32(movS[4]), Convert.ToInt32(movS[5]),
                                                           Convert.ToInt32(movS[6]), Convert.ToInt32(movS[7]), 0, 0);

                    NSLvItems.AddItem(movimientos[i + 3].ToString().Split(' ')[0], movimientos[i + 4].ToString(), movimientos[i + 5].ToString(), mov, movimientos[i + 7].ToString(), movimientos[i].ToString(), movimientos[i + 1].ToString(), movimientos[i + 6].ToString());
                }

                return(true);
            }

            return(false);
        }
コード例 #25
0
ファイル: Form1.cs プロジェクト: muupu/GoMoku
        private void read( )
        {
            //侦听本地的端口号
            udpclient = new UdpClient(Convert.ToInt32(txt_localport.Text));
            remote = null;
            //设定编码类型
            Encoding enc = Encoding.Unicode;
            int x, y;
            while (ReadFlag == true)
            {
                Byte[] data = udpclient.Receive(ref remote);
                //得到对方发送来的信息
                String strData = enc.GetString(data);
                string[] a = new string[5];
                a = strData.Split('|');
                switch (a[0])
                {
                    case "join":
                        //获取传送信息到本地端口号的远程计算机IP地址
                        string remoteIP = remote.Address.ToString();
                        //显示接收信息以及传送信息的计算机IP地址
                        SetStatus(remoteIP + "已经加入你是黑方请先走棋");
                        mplayer = Chess.Black;
                        can_go = true;  //能走棋
                        btnStart.Enabled = false;
                        break;
                    case "move":
                        x = Convert.ToInt16(a[1]);
                        y = Convert.ToInt16(a[2]);
                        SetStatus("对方下棋子位置:" + x.ToString() + "," + y.ToString());

                        //画对方棋子
                        Graphics g = this.pictureBox1.CreateGraphics();

                        if (Box[x, y] != Chess.none)
                            return;

                        if (mplayer == Chess.Black)
                        {
                            Image im = Image.FromFile(@"..\..\Resources\White.gif");
                            g.DrawImage(im, x * rectPix , y * rectPix , rectPix, rectPix);
                            //imageList1.Draw(g, x * rectPix + rectPix / 2, y * rectPix + rectPix / 2, (int)Chess.White);
                            Box[x, y] = Chess.White;
                        }
                        else
                        {
                            Image im = Image.FromFile(@"..\..\Resources\Black.gif");
                            g.DrawImage(im, x * rectPix , y * rectPix , rectPix, rectPix);
                            //imageList1.Draw(g, x * rectPix + rectPix / 2, y * rectPix + rectPix / 2, (int)Chess.Black);
                            Box[x, y] = Chess.Black;
                        }
                        //Box[p.X,p.Y]=mplayer;
                        can_go = true;
                        break;
                    case "over":
                        SetStatus(a[1] + "赢了此局");
                        MessageBox.Show("你赢了此局","恭喜!");
                        if (a[1] == "Black")
                            winner = Chess.Black;
                        else
                            winner = Chess.White;
                        can_go = false;
                        button2.Enabled = true;
                        break;
                    case "reset":
                        Reset_flag = true;
                        if (button2.Enabled == false) { reset(); Reset_flag = false; }
                        break;
                }
            }
        }
コード例 #26
0
 public override void Attack(Chess target)
 {
     base.Attack(target);
     ReleaseSkill(target);
 }
コード例 #27
0
 private static Chess[,] parseBoard(string board)
 {
     if (board.Length != Engine.MAXSTEP) {
         return null;
     }
     Chess[,] result = new Chess[Global.Width, Global.Height];
     for (int i = 0; i < Global.Height; i++) {
         for (int j = 0; j < Global.Width; j++) {
             result[j, i] = parseChess(board[i * Global.Width + j]);
         }
     }
     return result;
 }
コード例 #28
0
 public Rook(Chess chess, Team team) : base(chess, team)
 {
 }
 public bool Check_Index(int ind, ref Chess[] chessboard)
 {
     bool t = (ind >= 0) && (ind < chessboard.Length);
     if (t)
         return chessboard[ind].value < threshold;
     else
         return t;
 }
コード例 #30
0
    private bool CheckChessLine(Chess chess, Direction direction, List <Chess> temp_ChessGroup = null)
    {
        if (temp_ChessGroup == null)
        {
            temp_ChessGroup = new List <Chess>();
        }

        if (chess == null)
        {
            return(false);
        }
        temp_ChessGroup.Add(chess);
        if (temp_ChessGroup.Count >= GameManager.Instance.GameWinChessNum)
        {
            return(true);
        }
        int[] pos       = chess.Pos;
        Chess nextChess = null;

        switch (direction)
        {
        case Direction.Up:
            if (pos[1] > 0)
            {
                nextChess = chessArr[pos[0], pos[1] - 1];
            }
            break;

        case Direction.Down:
            if (pos[1] < chessArr.GetLength(1) - 1)
            {
                nextChess = chessArr[pos[0], pos[1] + 1];
            }
            break;

        case Direction.Left:
            if (pos[0] > 0)
            {
                nextChess = chessArr[pos[0] - 1, pos[1]];
            }
            break;

        case Direction.Right:
            if (pos[0] < chessArr.GetLength(0) - 1)
            {
                nextChess = chessArr[pos[0] + 1, pos[1]];
            }
            break;

        case Direction.LeftDown:
            if (pos[0] > 0 && pos[1] < chessArr.GetLength(1) - 1)
            {
                nextChess = chessArr[pos[0] - 1, pos[1] + 1];
            }
            break;

        case Direction.RightDown:
            if (pos[0] < chessArr.GetLength(0) - 1 && pos[1] < chessArr.GetLength(1) - 1)
            {
                nextChess = chessArr[pos[0] + 1, pos[1] + 1];
            }
            break;

        case Direction.LeftUp:
            if (pos[0] > 0 && pos[1] > 0)
            {
                nextChess = chessArr[pos[0] - 1, pos[1] - 1];
            }
            break;

        case Direction.RightUp:
            if (pos[0] < chessArr.GetLength(0) - 1 && pos[1] > 0)
            {
                nextChess = chessArr[pos[0] + 1, pos[1] - 1];
            }
            break;
        }

        if (nextChess != null)
        {
            return(CheckChessLine(nextChess, direction, temp_ChessGroup));
        }

        return(false);
    }
コード例 #31
0
 //开始走棋
 virtual public void StartMoveChessPlayer(Chess c)
 {
 }
コード例 #32
0
 private void Start()
 {
     chessGame = GameManager.Instance.chessGame;
 }
コード例 #33
0
 //Kallas på om en kung är utslagen
 public void gameOver(string gamestatus)
 {
     MessageBox.Show(gamestatus);
     Chess chess = new Chess(this);
     updateTable();
 }
コード例 #34
0
ファイル: Chess.cs プロジェクト: neolyster/18S103152
 // Use this for initialization
 void Start()
 {
     instance = this;
     ChessInit();
     CameraPoint = GameObject.Find("CameraPoint");
 }
コード例 #35
0
ファイル: Ask.cs プロジェクト: alexeimun/onechess
 private static void Knight(Chess Token, MouseState mouse)
 {
     //X buttom right
     if (Token.X + 2 < 8 && Token.Y + 1 < 8 && Dot.Board[Token.X + 2][Token.Y + 1].ID == "" | Dot.Board[Token.X + 2][Token.Y + 1].ID.Contains(enemy))
     {
         if (Dot.point.Size.Intersects(Dot.Board[Token.X + 2][Token.Y + 1].Size))
         {
             Token.Size = new Rectangle((Token.X + 2) * Player.X + Player.W, (Token.Y + 1) * Player.Y, Player.width, Player.height);
             if (mouse.LeftButton == ButtonState.Pressed)
             {
                 Token.X += 2; Token.Y++;
                 if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                 {
                     Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                     Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                 }
                 process(Token.X, Token.Y, Token);
             }
         }
     }
     //Y bottom right
     if (Token.X + 1 < 8 && Token.Y + 2 < 8 && Dot.Board[Token.X + 1][Token.Y + 2].ID == "" | Dot.Board[Token.X + 1][Token.Y + 2].ID.Contains(enemy))
     {
         if (Dot.point.Size.Intersects(Dot.Board[Token.X + 1][Token.Y + 2].Size))
         {
             Token.Size = new Rectangle((Token.X + 1) * Player.X + Player.W, (Token.Y + 2) * Player.Y, Player.width, Player.height);
             if (mouse.LeftButton == ButtonState.Pressed)
             {
                 Token.Y += 2; Token.X++;
                 if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                 {
                     Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                     Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                 }
                 process(Token.X, Token.Y, Token);
             }
         }
     }
     //X bottom left
     if (Token.X - 2 > -1 && Token.Y + 1 < 8 && Dot.Board[Token.X - 2][Token.Y + 1].ID == "" | Dot.Board[Token.X - 2][Token.Y + 1].ID.Contains(enemy))
     {
         if (Dot.point.Size.Intersects(Dot.Board[Token.X - 2][Token.Y + 1].Size))
         {
             Token.Size = new Rectangle((Token.X - 2) * Player.X + Player.W, (Token.Y + 1) * Player.Y, Player.width, Player.height);
             if (mouse.LeftButton == ButtonState.Pressed)
             {
                 Token.X -= 2; Token.Y++;
                 if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                 {
                     Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                     Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                 }
                 process(Token.X, Token.Y, Token);
             }
         }
     }
     //Y bottom left
     if (Token.X - 1 > -1 && Token.Y + 2 < 8 && Dot.Board[Token.X - 1][Token.Y + 2].ID == "" | Dot.Board[Token.X - 1][Token.Y + 2].ID.Contains(enemy))
     {
         if (Dot.point.Size.Intersects(Dot.Board[Token.X - 1][Token.Y + 2].Size))
         {
             Token.Size = new Rectangle((Token.X - 1) * Player.X + Player.W, (Token.Y + 2) * Player.Y, Player.width, Player.height);
             if (mouse.LeftButton == ButtonState.Pressed)
             {
                 Token.Y += 2; Token.X--;
                 if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                 {
                     Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                     Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                 }
                 process(Token.X, Token.Y, Token);
             }
         }
     }
     //X top right
     if (Token.X + 2 < 8 && Token.Y - 1 > -1 && Dot.Board[Token.X + 2][Token.Y - 1].ID == "" | Dot.Board[Token.X + 2][Token.Y - 1].ID.Contains(enemy))
     {
         if (Dot.point.Size.Intersects(Dot.Board[Token.X + 2][Token.Y - 1].Size))
         {
             Token.Size = new Rectangle((Token.X + 2) * Player.X + Player.W, (Token.Y - 1) * Player.Y, Player.width, Player.height);
             if (mouse.LeftButton == ButtonState.Pressed)
             {
                 Token.X += 2; Token.Y--;
                 if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                 {
                     Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                     Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                 }
                 process(Token.X, Token.Y, Token);
             }
         }
     }
     //Y top right
     if (Token.X + 1 < 8 && Token.Y - 2 > -1 && Dot.Board[Token.X + 1][Token.Y - 2].ID == "" | Dot.Board[Token.X + 1][Token.Y - 2].ID.Contains(enemy))
     {
         if (Dot.point.Size.Intersects(Dot.Board[Token.X + 1][Token.Y - 2].Size))
         {
             Token.Size = new Rectangle((Token.X + 1) * Player.X + Player.W, (Token.Y - 2) * Player.Y, Player.width, Player.height);
             if (mouse.LeftButton == ButtonState.Pressed)
             {
                 Token.Y -= 2; Token.X++;
                 if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                 {
                     Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                     Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                 }
                 process(Token.X, Token.Y, Token);
             }
         }
     }
     //Y top left
     if (Token.X - 1 > -1 && Token.Y - 2 > -1 && Dot.Board[Token.X - 1][Token.Y - 2].ID == "" | Dot.Board[Token.X - 1][Token.Y - 2].ID.Contains(enemy))
     {
         if (Dot.point.Size.Intersects(Dot.Board[Token.X - 1][Token.Y - 2].Size))
         {
             Token.Size = new Rectangle((Token.X - 1) * Player.X + Player.W, (Token.Y - 2) * Player.Y, Player.width, Player.height);
             if (mouse.LeftButton == ButtonState.Pressed)
             {
                 Token.Y -= 2; Token.X--;
                 if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                 {
                     Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                     Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                 }
                 process(Token.X, Token.Y, Token);
             }
         }
     }
     //X top left
     if (Token.X - 2 > -1 && Token.Y - 1 > -1 && Dot.Board[Token.X - 2][Token.Y - 1].ID == "" | Dot.Board[Token.X - 2][Token.Y - 1].ID.Contains(enemy))
     {
         if (Dot.point.Size.Intersects(Dot.Board[Token.X - 2][Token.Y - 1].Size))
         {
             Token.Size = new Rectangle((Token.X - 2) * Player.X + Player.W, (Token.Y - 1) * Player.Y, Player.width, Player.height);
             if (mouse.LeftButton == ButtonState.Pressed)
             {
                 Token.X -= 2; Token.Y--;
                 if (Dot.Board[Token.X][Token.Y].ID.Contains(enemy))
                 {
                     Dot.Board[Token.X][Token.Y].Token.Visible = false; Player.Earn += score(Dot.Board[Token.X][Token.Y].ID);
                     Stage.EarnedToken(Dot.Board[Token.X][Token.Y].Token.Texture, Dot.Board[Token.X][Token.Y].ID.Contains("2") ? 0 : 1);
                 }
                 process(Token.X, Token.Y, Token);
             }
         }
     }
 }
コード例 #36
0
ファイル: Chess.cs プロジェクト: yueliuprince/Ice
 public bool IsOpposite(Chess c)
 {
     return((int)group * (int)c.group < 0);
 }
コード例 #37
0
ファイル: Ask.cs プロジェクト: alexeimun/onechess
 private static void process(int x, int y, Chess Token)
 {
     if (Token.ID.Contains("Rook") || Token.ID.Contains("King")) Token.castle = false;
     Dot.Board[x][y].ID = Token.ID;
     Dot.Board[x][y].Token = Token;
     Dot.point.Texture = Dot.pointcollect[0].Texture;
     move = false; Turn = !Turn; pal = true;
     Clear(Color);
 }
コード例 #38
0
 //simply reset the rotation for the chess
 public static void resetChess(Chess chess)
 {
     chess.onBoard = true;
     chess.transform.eulerAngles = new Vector3(-270, 0, 180);
 }
コード例 #39
0
ファイル: Ask.cs プロジェクト: alexeimun/onechess
        private static void Crux(Chess Token, MouseState mouse)
        {
            //seeking up
            eat = Token.Y - 1;
            for (int a = Token.Y - 1; a > -1 && Dot.Board[Token.X][a].ID == ""; a--)
            {
                if (Dot.point.Size.Intersects(Dot.Board[Token.X][a].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
                {
                    Token.Size = new Rectangle(Token.X * Player.X + Player.W, a * Player.Y, Player.width, Player.height);
                    intersect = true;
                    if (mouse.LeftButton == ButtonState.Pressed)
                        process(Token.X, Token.Y = a, Token);
                    return;
                }
                eat = a - 1;
            }
            // eating up
            if (eat > -1 && Dot.Board[Token.X][eat].ID.Contains(enemy) && Dot.point.Size.Intersects(Dot.Board[Token.X][eat].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
            {
                Token.Size = new Rectangle(Token.X * Player.X + Player.W, eat * Player.Y, Player.width, Player.height); ;
                intersect = true;
                if (mouse.LeftButton == ButtonState.Pressed)
                {
                    Dot.Board[Token.X][eat].Token.Visible = false;
                    Stage.EarnedToken(Dot.Board[Token.X][eat].Token.Texture, Dot.Board[Token.X][eat].ID.Contains("2") ? 0 : 1);
                    Player.Earn += score(Dot.Board[Token.X][eat].ID);
                    process(Token.X, Token.Y = eat, Token);
                }
                return;
            }
            //seeking down
            eat = Token.Y + 1;
            for (int a = Token.Y + 1; a < 8 && Dot.Board[Token.X][a].ID == ""; a++)
            {
                if (Dot.point.Size.Intersects(Dot.Board[Token.X][a].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
                {
                    Token.Size = new Rectangle(Token.X * Player.X + Player.W, a * Player.Y, Player.width, Player.height);
                    intersect = true;
                    if (mouse.LeftButton == ButtonState.Pressed)
                        process(Token.X, Token.Y = a, Token);
                    return;
                }
                eat = a + 1;
            }
            // eating  down
            if (eat < 8 && Dot.Board[Token.X][eat].ID.Contains(enemy) && Dot.point.Size.Intersects(Dot.Board[Token.X][eat].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
            {
                Token.Size = new Rectangle(Token.X * Player.X + Player.W, eat * Player.Y, Player.width, Player.height); ;
                intersect = true;
                if (mouse.LeftButton == ButtonState.Pressed)
                {
                    Dot.Board[Token.X][eat].Token.Visible = false;
                    Stage.EarnedToken(Dot.Board[Token.X][eat].Token.Texture, Dot.Board[Token.X][eat].ID.Contains("2") ? 0 : 1);
                    Player.Earn += score(Dot.Board[Token.X][eat].ID);
                    process(Token.X, Token.Y = eat, Token);
                }
                return;
            }
            //seeking right
            eat = Token.X + 1;
            for (int a = Token.X + 1; a < 8 && Dot.Board[a][Token.Y].ID == ""; a++)
            {
                if (Dot.point.Size.Intersects(Dot.Board[a][Token.Y].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
                {
                    Token.Size = new Rectangle(a * Player.X + Player.W, Player.Y * Token.Y, Player.width, Player.height);
                    intersect = true;
                    if (mouse.LeftButton == ButtonState.Pressed)
                        process(Token.X = a, Token.Y, Token);
                    return;
                }
                eat = a + 1;
            }
            // eating right
            if (eat < 8 && Dot.Board[eat][Token.Y].ID.Contains(enemy) && Dot.point.Size.Intersects(Dot.Board[eat][Token.Y].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
            {
                Token.Size = new Rectangle(eat * Player.X + Player.W, Token.Y * Player.Y, Player.width, Player.height);

                if (mouse.LeftButton == ButtonState.Pressed)
                {
                    Dot.Board[eat][Token.Y].Token.Visible = false;
                    Stage.EarnedToken(Dot.Board[eat][Token.Y].Token.Texture, Dot.Board[eat][Token.Y].ID.Contains("2") ? 0 : 1);
                    Player.Earn += score(Dot.Board[eat][Token.Y].ID);
                    process(Token.X = eat, Token.Y, Token);
                }
                return;
            }
            //seeking left
            eat = Token.X - 1;
            for (int a = Token.X - 1; a > -1 && Dot.Board[a][Token.Y].ID == ""; a--)
            {
                if (Dot.point.Size.Intersects(Dot.Board[a][Token.Y].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
                {
                    Token.Size = new Rectangle(a * Player.X + Player.W, Player.Y * Token.Y, Player.width, Player.height);
                    intersect = true;
                    if (mouse.LeftButton == ButtonState.Pressed)
                        process(Token.X = a, Token.Y, Token);
                    return;
                }
                eat = a - 1;
            }
            // eating left
            if (eat > -1 && Dot.Board[eat][Token.Y].ID.Contains(enemy) && Dot.point.Size.Intersects(Dot.Board[eat][Token.Y].Size) && !Dot.point.Size.Intersects(Dot.Board[Token.X][Token.Y].Size))
            {
                Token.Size = new Rectangle(eat * Player.X + Player.W, Token.Y * Player.Y, Player.width, Player.height);
                intersect = true;
                if (mouse.LeftButton == ButtonState.Pressed)
                {
                    Dot.Board[eat][Token.Y].Token.Visible = false;
                    Stage.EarnedToken(Dot.Board[eat][Token.Y].Token.Texture, Dot.Board[eat][Token.Y].ID.Contains("2") ? 0 : 1);
                    Player.Earn += score(Dot.Board[eat][Token.Y].ID);
                    process(Token.X = eat, Token.Y, Token);
                }
                return;
            }
        }
コード例 #40
0
ファイル: GameManager.cs プロジェクト: zxw8994/SimpleChess
 private void BeginGame()
 {
     chessInstance = Instantiate(chessPrefab) as Chess;
     chessInstance.GenerateTiles();
     chessInstance.GeneratePieces();
 }
コード例 #41
0
ファイル: Ask.cs プロジェクト: alexeimun/onechess
        private static bool DrawCellsinCrux(Chess Token)
        {
            bool Pass = false;
            //seeking up
            eat = Token.Y - 1;
            for (int a = Token.Y - 1; a > -1 && Dot.Board[Token.X][a].ID == ""; a--)
            {
                Pass = true;
                Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
                Token.Color = Color.Wheat;
                Dot.Board[Token.X][a].Color = Color.SpringGreen;
                eat = a - 1;
            }
            //if it'll eat
            if (eat > -1 && Dot.Board[Token.X][eat].ID.Contains(enemy)) { Pass = true; Dot.Board[Token.X][eat].Color = Color.Red; Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue; }
            //seeking down
            eat = Token.Y + 1;
            for (int a = Token.Y + 1; a < 8 && Dot.Board[Token.X][a].ID == ""; a++)
            {
                Pass = true;
                Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
                Token.Color = Color.Wheat;
                Dot.Board[Token.X][a].Color = Color.SpringGreen;
                eat = a + 1;
            }
            //if it'll eat
            if (eat < 8 && Dot.Board[Token.X][eat].ID.Contains(enemy)) { Pass = true; Dot.Board[Token.X][eat].Color = Color.Red; Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue; }
            //seeking left
            eat = Token.X - 1;
            for (int a = Token.X - 1; a > -1 && Dot.Board[a][Token.Y].ID == ""; a--)
            {
                Pass = true;
                Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
                Token.Color = Color.Wheat;
                Dot.Board[a][Token.Y].Color = Color.SpringGreen;
                eat = a - 1;
            }
            //if it'll eat
            if (eat > -1 && Dot.Board[eat][Token.Y].ID.Contains(enemy)) { Pass = true; Dot.Board[eat][Token.Y].Color = Color.Red; Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue; }
            //seeking right
            eat = Token.X + 1;
            for (int a = Token.X + 1; a < 8 && Dot.Board[a][Token.Y].ID == ""; a++)
            {
                Pass = true;
                Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
                Token.Color = Color.Wheat;
                Dot.Board[a][Token.Y].Color = Color.SpringGreen;
                eat = a + 1;
            }
            //if it'll eat
            if (eat < 8 && Dot.Board[eat][Token.Y].ID.Contains(enemy)) { Pass = true; Dot.Board[eat][Token.Y].Color = Color.Red; Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue; }

            return Pass;
        }
コード例 #42
0
        /// <summary>
        /// 初始化所有委托
        /// </summary>
        public void InitHandle()
        {
            //如果两项委托为空
            if (GeneticAlgorithm.fitnessCalculator == null || Genome.genomeCreater == null)
            {
                //适应度度量函数
                GeneticAlgorithm.fitnessCalculator = delegate(Genome gene)
                {
                    //打开人工智能探路标记
                    Conf.AIRouterState = true;

                    //当前串中最大的威力
                    double maxPower = double.MinValue;

                    //当前串中最小的威力
                    double minPower = double.MaxValue;

                    //当前串中最大的威力棋子的位置
                    int maxPowerIndex = 0;

                    //当前串中最小的威力棋子的位置
                    int minPowerIndex = 0;

                    //设定当前添加的棋子类型
                    ChessType currentType = AIType;

                    for (int i = 0; i < gene.Genes.Length; i++)
                    {
                        //模拟更新棋盘中的棋子类型
                        Chess.UpdateChessTypeForAI(gene.Genes[i], currentType);

                        //计算单子威力*位权
                        double tempPower = SinglePower(gene.Genes[i], currentType) * 1 * Math.Pow(0.96, i);

                        if (tempPower > maxPower)
                        {
                            maxPowerIndex = i;
                            maxPower      = tempPower;
                        }

                        if (tempPower < minPower)
                        {
                            minPowerIndex = i;
                            minPower      = tempPower;
                        }

                        //当前的最大威力值>权值*100  退出循环
                        if (maxPower > (100 * Math.Pow(0.96, i)))
                        {
                            break;
                        }

                        //转换下棋方,currentTpye变换
                        if (currentType == ChessType.BLACK)
                        {
                            currentType = ChessType.WHITE;
                        }
                        else
                        {
                            currentType = ChessType.BLACK;
                        }
                    }

                    //赋值适应度
                    if (Math.Abs(minPower) > Math.Abs(maxPower))
                    {
                        gene.BestGenIndex = minPowerIndex;
                        gene.Fitness      = minPower;
                    }
                    else
                    {
                        gene.Fitness      = maxPower;
                        gene.BestGenIndex = maxPowerIndex;
                    }

                    //恢复对棋盘的改变
                    for (int i = 0; i < gene.Genes.Length; i++)
                    {
                        Chess.UpdateChessTypeForAI(gene.Genes[i], ChessType.NULL);
                    }

                    //关闭人工智能探路标记
                    Conf.AIRouterState = false;
                };

                //创建随机基因组的函数
                Genome.genomeCreater = createGensHandle;
            }
        }
コード例 #43
0
ファイル: Ask.cs プロジェクト: alexeimun/onechess
 private static bool DrawKingCells(Chess Token)
 {
     bool Pass = false;
     //right
     for (int i = Token.X + 1; i <= (Castling(Token.Y, 1) ? Token.X + 2 : Token.X + 1); i++)
         if (i < 8 && Dot.Board[i][Token.Y].ID == "" | Dot.Board[i][Token.Y].ID.Contains(enemy) && checKing(i, Token.Y, 7))
         {
             Pass = true;
             Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
             Token.Color = Color.Wheat;
             if (Dot.Board[i][Token.Y].ID.Contains(enemy)) Dot.Board[i][Token.Y].Color = Color.Red;
             else Dot.Board[i][Token.Y].Color = Color.SpringGreen;
         }
     //left
     for (int i = Token.X - 1; i >= (Castling(Token.Y, 0) ? Token.X - 2 : Token.X - 1); i--)
         if (i > -1 && Dot.Board[i][Token.Y].ID == "" | Dot.Board[i][Token.Y].ID.Contains(enemy) && checKing(i, Token.Y, 7))
         {
             Pass = true;
             Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
             Token.Color = Color.Wheat;
             if (Dot.Board[i][Token.Y].ID.Contains(enemy)) Dot.Board[i][Token.Y].Color = Color.Red;
             else Dot.Board[i][Token.Y].Color = Color.SpringGreen;
         }
     //down
     if (Token.Y + 1 < 8 && Dot.Board[Token.X][Token.Y + 1].ID == "" | Dot.Board[Token.X][Token.Y + 1].ID.Contains(enemy) && checKing(Token.X, Token.Y + 1, 7))
     {
         Pass = true;
         Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
         Token.Color = Color.Wheat;
         if (Dot.Board[Token.X][Token.Y + 1].ID.Contains(enemy)) Dot.Board[Token.X][Token.Y + 1].Color = Color.Red;
         else Dot.Board[Token.X][Token.Y + 1].Color = Color.SpringGreen;
     }
     //up
     if (Token.Y - 1 > -1 && Dot.Board[Token.X][Token.Y - 1].ID == "" | Dot.Board[Token.X][Token.Y - 1].ID.Contains(enemy) && checKing(Token.X, Token.Y - 1, 7))
     {
         Pass = true;
         Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
         Token.Color = Color.Wheat;
         if (Dot.Board[Token.X][Token.Y - 1].ID.Contains(enemy)) Dot.Board[Token.X][Token.Y - 1].Color = Color.Red;
         else Dot.Board[Token.X][Token.Y - 1].Color = Color.SpringGreen;
     }
     //diagonal bottom left
     if (Token.X - 1 > -1 && Token.Y + 1 < 8 && Dot.Board[Token.X - 1][Token.Y + 1].ID == "" | Dot.Board[Token.X - 1][Token.Y + 1].ID.Contains(enemy) && checKing(Token.X - 1, Token.Y + 1, 7))
     {
         Pass = true;
         Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
         Token.Color = Color.Wheat;
         if (Dot.Board[Token.X - 1][Token.Y + 1].ID.Contains(enemy)) Dot.Board[Token.X - 1][Token.Y + 1].Color = Color.Red;
         else Dot.Board[Token.X - 1][Token.Y + 1].Color = Color.SpringGreen;
     }
     //diagonal top right
     if (Token.X + 1 < 8 && Token.Y - 1 > -1 && Dot.Board[Token.X + 1][Token.Y - 1].ID == "" | Dot.Board[Token.X + 1][Token.Y - 1].ID.Contains(enemy) && checKing(Token.X + 1, Token.Y - 1, 7))
     {
         Pass = true;
         Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
         Token.Color = Color.Wheat;
         if (Dot.Board[Token.X + 1][Token.Y - 1].ID.Contains(enemy)) Dot.Board[Token.X + 1][Token.Y - 1].Color = Color.Red;
         else Dot.Board[Token.X + 1][Token.Y - 1].Color = Color.SpringGreen;
     }
     //diagonal bottom right
     if (Token.X + 1 < 8 && Token.Y + 1 < 8 && Dot.Board[Token.X + 1][Token.Y + 1].ID == "" | Dot.Board[Token.X + 1][Token.Y + 1].ID.Contains(enemy) && checKing(Token.X + 1, Token.Y + 1, 7))
     {
         Pass = true;
         Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
         Token.Color = Color.Wheat;
         if (Dot.Board[Token.X + 1][Token.Y + 1].ID.Contains(enemy)) Dot.Board[Token.X + 1][Token.Y + 1].Color = Color.Red;
         else Dot.Board[Token.X + 1][Token.Y + 1].Color = Color.SpringGreen;
     }
     //diagonal top left
     if (Token.X - 1 > -1 && Token.Y - 1 > -1 && Dot.Board[Token.X - 1][Token.Y - 1].ID == "" | Dot.Board[Token.X - 1][Token.Y - 1].ID.Contains(enemy) && checKing(Token.X - 1, Token.Y - 1, 7))
     {
         Pass = true;
         Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
         Token.Color = Color.Wheat;
         if (Dot.Board[Token.X - 1][Token.Y - 1].ID.Contains(enemy)) Dot.Board[Token.X - 1][Token.Y - 1].Color = Color.Red;
         else Dot.Board[Token.X - 1][Token.Y - 1].Color = Color.SpringGreen;
     }
     return Pass;
 }
コード例 #44
0
ファイル: GameManager.cs プロジェクト: dincaionut7/vChess
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                if (hit.transform.tag == "ChessPiece")
                {
                    if (currentSelection)
                    {
                        lastSel = currentSelection;
                    }

                    currentSelection = hit.transform.gameObject.GetComponent <Chess>();

                    if (!lastSel)
                    {
                        lastSel = currentSelection;
                    }

                    if (currentSelection != lastSel)
                    {
                        foreach (GameObject obj in GameObject.FindGameObjectsWithTag("floor"))
                        {
                            if (obj.GetComponent <Renderer>().material != obj.GetComponent <highlightMaterial>().m_default)
                            {
                                obj.GetComponent <Renderer>().material = obj.GetComponent <highlightMaterial>().m_default;
                            }
                        }
                    }

                    hit.transform.gameObject.GetComponent <Chess>().showMove();

                    Debug.Log(string.Format("current: {0} / last: {1}", currentSelection.GetType(), lastSel.GetType()));
                }

                if (hit.transform.tag == "floor")
                {
                    if (currentSelection)
                    {
                        if (hit.transform.gameObject.GetComponent <Renderer>().material != hit.transform.gameObject.GetComponent <highlightMaterial>().m_default)
                        {
                            currentSelection.pos    = hit.transform.position;
                            currentSelection.pos.y  = currentSelection.transform.position.y;
                            currentSelection.moving = true;
                            if (lastMove)
                            {
                                lastMove = currentMove;
                            }

                            currentMove = currentSelection;

                            if (!lastMove)
                            {
                                lastMove = currentMove;
                            }
                            foreach (GameObject obj in GameObject.FindGameObjectsWithTag("floor"))
                            {
                                if (obj.GetComponent <Renderer>().material != obj.GetComponent <highlightMaterial>().m_default)
                                {
                                    obj.GetComponent <Renderer>().material = obj.GetComponent <highlightMaterial>().m_default;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
コード例 #45
0
ファイル: Ask.cs プロジェクト: alexeimun/onechess
        private static bool DrawUpPawnCells(Chess Token)
        {
            bool Pass = false;
            if (Token.X - 1 > -1 && Token.Y - 1 > -1 && Dot.Board[Token.X - 1][Token.Y - 1].ID.Contains(enemy))
            {
                Pass = true; Dot.Board[Token.X - 1][Token.Y - 1].Color = Color.Red;
                Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
                Token.Color = Color.Wheat;
            }
            if (Token.X + 1 < 8 && Token.Y - 1 > -1 && Dot.Board[Token.X + 1][Token.Y - 1].ID.Contains(enemy))
            {
                Pass = true; Dot.Board[Token.X + 1][Token.Y - 1].Color = Color.Red;
                Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
                Token.Color = Color.Wheat;
            }

            for (int a = Token.Y - 1; a > -1 && a >= Token.Y - (Token.initial ? 2 : 1) && Dot.Board[Token.X][a].ID == ""; a--)
            {
                Pass = true;
                Dot.Board[Token.X][Token.Y].Color = Color.SkyBlue;
                Token.Color = Color.Wheat;
                Dot.Board[Token.X][a].Color = Color.SpringGreen;
            }
            return Pass;
        }
コード例 #46
0
        private static void processBoard(string[] boardParts, TextWriter output, NodeCounter counter)
        {
            // check params first
            if (boardParts.Length < 2)
            {
                output.Write("Error: not enough arguments supplied.\t");
                return;
            }
            Chess[,] board = parseBoard(boardParts[0]);
            if (board == null)
            {
                output.Write("Error: board not recognized.\t");
                return;
            }

            Chess mover = parseMover(boardParts[1]);

            if (mover == Chess.AVAILABLE)
            {
                output.Write("Error: mover not recognized.\t");
                return;
            }

            bool wld = false, warmup = false;
            int  mid = 0;

            for (int i = 2; i < boardParts.Length; i++)
            {
                string option = boardParts[i].ToUpper();
                if (option == "WLD")
                {
                    wld = true;
                }
                else if (option == "WARMUP")
                {
                    warmup = true;
                }
                else if (option.StartsWith("MID"))
                {
                    Int32.TryParse(option.Substring(3), out mid);
                    if (mid < 0)
                    {
                        mid = 0;
                    }
                }
            }

            Engine.clearCache();
            Engine engine = new Engine();

            engine.setBoard(board);

            DateTime     timeStart = DateTime.Now;
            SearchResult res       = (mid == 0) ? engine.solveExact(mover, wld) : engine.solve(mover, mid, false);
            TimeSpan     timeSpan  = DateTime.Now - timeStart;

            SearchStats stats = engine.getSearchStats();

            engine.Dispose();

            output.Write(resultString(res, wld, mid));
            output.Write("\t");
            output.Write(moveString(res));
            output.Write("\t");
            output.Write(nodesString(stats.EvaluationCount));
            output.Write("\t");
            output.Write(npsString(timeSpan, stats.EvaluationCount));
            output.Write("\t");
            output.Write(timeSpan.TotalSeconds.ToString("0.0") + " s");
            output.Write("\t");

            if (!warmup)
            {
                counter.totalNodes += stats.EvaluationCount;
                counter.totalTime  += timeSpan;
            }
        }
コード例 #47
0
ファイル: Form1.cs プロジェクト: muupu/GoMoku
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (can_go != true)
            {
                MessageBox.Show("不能走棋,请等对方");
                return;
            }
            //e.X为pictureBox1内的
            Graphics g = this.pictureBox1.CreateGraphics();
            int x = e.X / rectPix;
            int y = e.Y / rectPix;
            if (x < 0 || y < 0 || x >= 16 || y >= 16)
            {
                MessageBox.Show("超边界了");
                return;
            }

            Point p = new Point(x * rectPix + rectPix / 2, y * rectPix + rectPix / 2);

            //label1.Text = p.X.ToString() + "|" + p.Y.ToString() + "|" + e.X.ToString() + "  " + e.Y.ToString();
            string s1 = p.X.ToString() + "|" + p.Y.ToString();

            if (Box[x, y] != Chess.none)
                return;
            //label2.Text = p2.X.ToString() + "|" + p2.Y.ToString();

            Image im = Image.FromFile(@"..\..\Resources\" + mplayer.ToString() + ".gif");
            g.DrawImage(im, x * rectPix , y * rectPix , rectPix, rectPix);
            //imageList1.Draw(g, x * rectPix + rectPix / 2,y * rectPix + rectPix / 2, (int)mplayer);
            Box[x, y] = mplayer;
            //label2.Text = Box[x, y].ToString();

            string str_send = "move|" + x + "|" + y;
            can_go = false;

            send(str_send);

            if (win_lose() == true)//判断输赢否
            {
                str_send = "over|" + mplayer.ToString();
                winner = mplayer;
                SetStatus(mplayer.ToString() + "赢了此局!");
                button2.Enabled = true;
                send(str_send);
            }
        }
コード例 #48
0
ファイル: UndoButton.cs プロジェクト: alejandroom/chess
 void Start()
 {
     chess        = GameObject.FindObjectOfType <Chess> ();
     insideMenu   = false;
     insideButton = false;
 }
コード例 #49
0
ファイル: Form1.cs プロジェクト: muupu/GoMoku
 private void reset()
 {
     if (mplayer == Chess.Black)
     {
         if (Reset_flag == true)// 对方已经重新开始
         {
             SetStatus("你是白方,处于重新开始状态!");
             mplayer = Chess.White;
             can_go = false;
         }
         else
             SetStatus("你是白方,处于等待对方重新开始状态!");
     }
     else
     {
         if (Reset_flag == true)//对方已经重新开始
         {
             SetStatus("你是黑方,请先走棋");
             mplayer = Chess.Black;
             can_go = true;
         }
         else
             SetStatus("你是黑方,处于等待对方重新开始状态!");
     }
 }
コード例 #50
0
 public Rules()
 {
     dad   = new DragandDrop();
     chess = new Chess();
 }
コード例 #51
0
ファイル: Chess.cs プロジェクト: huanzheWu/HelpGrandMom
 void Awake()
 {
     Instance = this;
 }
コード例 #52
0
        public static void Run()
        {
            var chess = new Chess();

            chess.Run();
        }
コード例 #53
0
ファイル: Processor.cs プロジェクト: patwonder/craft-othello
 private Chess[,] getBoard(ulong black, ulong white)
 {
     Chess[,] board = new Chess[8, 8];
     ulong mask = 1;
     for (int i = 0; i < 8; i++) {
         for (int j = 0; j < 8; j++) {
             board[i, j] = ((black & mask) != 0 ? Chess.BLACK :
                 ((white & mask) != 0 ? Chess.WHITE : Chess.AVAILABLE));
             mask <<= 1;
         }
     }
     return board;
 }
コード例 #54
0
ファイル: Pole.cs プロジェクト: MaratAhtjamov/Chess
 public void BeginBoard()
 {
     Chess.BOARD = Chess.BoardLoad(Chess.BeginPosition);
     Chess.Board();
 }
コード例 #55
0
ファイル: Program.cs プロジェクト: Bambofy/SimpleChess
 static void Main()
 {
     Chess game = new Chess();
     game.Start();
 }
コード例 #56
0
 void IPointInterface.setChess(Chess chess)
 {
     this.currentChess = chess;
     setSprite(ChessSpriteFactory.getInstance().getChessSprite(chess));
 }
        public Chess[] ChessBoard(Vector3[] vertices, OpenTK.Vector4 dimensions)
        {
            int Chess_per_line = (int)((dimensions.Z / dimensions.X));
            int Chess_total = (int)(Chess_per_line * (dimensions.W / dimensions.Y));

            Chess[] Return = new Chess[Chess_total];

            float lwidth = 0, rwidth = dimensions.X, dheight = 0, uheight = dimensions.Y;

            double tot = 0, media = 0, quadmedia = 0, minus = variance_max;

            for (int x = 0; x < Chess_total; x++)
            {
                tot = 0; media = 0; quadmedia = 0;

                Return[x].value = 0;
                Return[x].index = x;
                Return[x].Position.X = lwidth;
                Return[x].Position.Y = rwidth;
                Return[x].Position.Z = dheight;
                Return[x].Position.W = uheight;

                for (int j = 0; j < vertices.Length; j++)
                {
                    if ((vertices[j].X >= lwidth) &&
                        (vertices[j].X <= rwidth) &&
                        (vertices[j].Z >= dheight) &&
                        (vertices[j].Z <= uheight))
                    {

                        media += vertices[j].Y;
                        quadmedia += Math.Pow(vertices[j].Y, 2);
                        tot++;
                    }
                }

                if (tot != 0)
                {
                    media /= tot; quadmedia /= tot;
                    Return[x].media = media;
                    //Console.WriteLine("m: " + media + "q: " + quadmedia + "tot " + tot);
            #warning arrotondamento per evitare oscillazioni
                    Return[x].value =  Math.Round( Math.Sqrt((quadmedia - Math.Pow(media, 2))) );

                    ///ulteriore condizione per evitare oscillazioni
                    ///
                    if (Return[x].value < 10)
                        Return[x].value = 1;
                    System.Diagnostics.Debug.WriteLine(Return[x].value);
                    if (Return[x].value > founded_var_max)
                        founded_var_max = Return[x].value;
                }
                else
                {
                    Return[x].media = 10000;
                    Return[x].value = (float)variance_max;
                }

                if (Return[x].value < minus)
                    minus = Return[x].value;

                // aggiorno la posizione

                lwidth += dimensions.X;
                rwidth += dimensions.X;

                if (((x + 1) % Chess_per_line) == 0 && (x != 0))
                {
                    uheight += dimensions.Y;
                    dheight += dimensions.Y;
                    lwidth = 0;
                    rwidth = dimensions.X;
                }

            }

            Console.WriteLine("Minus: " + minus);
            Console.WriteLine("Max: " + founded_var_max);
            return Return;
        }
コード例 #58
0
 public override System.Threading.Tasks.Task<System.Web.Mvc.ActionResult> ManageLogins(Chess.Web.Controllers.ManageController.ManageMessageId? message)
 {
     var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ManageLogins);
     ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "message", message);
     ManageLoginsOverride(callInfo, message);
     return System.Threading.Tasks.Task.FromResult(callInfo as ActionResult);
 }
コード例 #59
0
ファイル: Pole.cs プロジェクト: MaratAhtjamov/Chess
 public void Revers()
 {
     Chess.REVERS = !Chess.REVERS;
     Chess.Board();
 }
コード例 #60
0
    //下棋
    virtual public Chess setChess(int card_id, ePlayer card_belong, ChessContainer t_grid, BKKZ.POW01.AI.eAI_Type ai_type, bool trigger_shokan_skill, int shoukan_event, int event_sequence)
    {
        //TODO 后期加入召唤参数,如果是强制召唤才能把当前格子上的骑士顶开
        if (t_grid.my_chess != null)
        {
            t_grid.my_chess.KickAway();
        }

        //分支 pve玩家召唤时有可能是第二次召唤
        bool need_new = true;
        long chessid  = 0;

        if (Main.Inst.lv_ctrl.map_data.my_type == eMapType.PvE_Mult || Main.Inst.lv_ctrl.map_data.my_type == eMapType.PvE_Solo)
        {
            chessid  = Chess.genarateChessID(card_id, (int)card_belong, shoukan_event, event_sequence);
            need_new = !Main.Inst.dic_chess.ContainsKey(chessid);
        }
        Chess the_chess = null;

        if (need_new)
        {
            //创建棋子
            the_chess = Instantiate(BKTools.LoadAsset <GameObject>(eResBundle.Prefabs, PrefabPath.Chess)).GetComponent <Chess>();
            the_chess.attribute.card_id = card_id;
            the_chess.belong            = card_belong;
            the_chess.owner             = card_belong;
            the_chess.MouseDown         = Main.Inst.MouseDownOnChess;
            the_chess.MouseUp           = Main.Inst.MouseUpOnChess;
            //召唤信息——对应事件——玩家为-1
            the_chess.shoukan_event = shoukan_event;
            //事件ID确认后可以获得事件序号
            the_chess.shoukan_event_sequence = event_sequence;
            //初始化数据
            the_chess.initData();
            //初始化图片
            the_chess.initImage();

            Main.Inst.dic_chess.Add(the_chess.ChessID, the_chess);

            //创建AI
            if (card_belong < ePlayer.Player1 || card_belong > ePlayer.Player4)
            {
                BKKZ.POW01.AI.MonsterAI.createMonsterAI(the_chess.ChessID, ai_type);
            }
        }
        else
        {
            the_chess = Main.Inst.dic_chess[chessid];
            the_chess.gameObject.SetActive(true);
        }
        t_grid.appendChess(the_chess);
        //召唤技能
        if (trigger_shokan_skill)
        {
            the_chess.ShouKanSkillAndPincer();
        }

        //驱散迷雾
        //BKTools.FogLift(newchess.container.number, newchess.attribute.spd + GameRule.Default_PvE_Fog_Lift_Range, GameRule.Default_PvE_Fog_Lift_Range, new int[] { (int)newchess.belong });

        //		Main.Instance.b_setchess = true;
        //		Main.Instance.now_phase = ePhase.Battle;
        //		Main.Instance.b_phase_trigger = true;//从战斗阶段往主要阶段2

        // 只有主流会耗卡
        if (Main.Inst.now_turnphase.myType == ePhaseType.Main1)
        {
            UseHandCard();
        }

        if (Main.Inst.now_turnphase.myType != ePhaseType.Drama)
        {
            CheckMoveEvent(the_chess, nextPhaseDefault);
        }
        return(the_chess);
    }