Ejemplo n.º 1
0
        /// <summary>
        /// Generate a random move for the player to make.
        /// </summary>
        /// <param name="board">The current board.</param>
        /// <param name="move">Receives the chosen move.</param>
        /// <returns>If true, a valid move was found.</returns>
        private bool GenerateMoveRandom(Board board, out Move move)
        {
            // safety-check the board parameter
            if (board == null)
            {
                throw new ArgumentNullException("board");
            }

            move = new Move(-1, -1);

            // check if there is a valid move
            if (!board.HasValidMove(BoardColor))
            {
                return(false);
            }

            // search for a new move randomly
            do
            {
                move = new Move(random.Next(board.BoardSize),
                                random.Next(board.BoardSize));
            }while(!board.IsValidMove(BoardColor, move));

            return(true);
        }
Ejemplo n.º 2
0
        public override void Update(Board board)
        {
            // safety check the parameter
            if (board == null)
            {
                throw new ArgumentNullException("board");
            }
            // quit now if it's not my turn
            if (board.CurrentColor != BoardColor)
            {
                return;
            }

            // check if we have a valid move
            if (checkValidMove)
            {
                if (board.HasValidMove(BoardColor))
                {
                    checkValidMove = false;                     // already checked, waiting for selection
                }
                else
                {
                    board.Pass(BoardColor);
                }
            }

            // if we don't have any input, don't bother
            if (inputState == null)
            {
                return;
            }

            // apply selection-movement input and generate a desired movement
            Point cursorMovement = new Point(0, 0);
            float degrees        = (int)SimpleArcCamera.Rotation % 360 - 180;

            if (Math.Abs(degrees) < 45)
            {
                if (inputState.IsPieceSelectionUp(playerIndex))
                {
                    cursorMovement.Y--;
                }
                if (inputState.IsPieceSelectionDown(playerIndex))
                {
                    cursorMovement.Y++;
                }
                if (inputState.IsPieceSelectionLeft(playerIndex))
                {
                    cursorMovement.X--;
                }
                if (inputState.IsPieceSelectionRight(playerIndex))
                {
                    cursorMovement.X++;
                }
            }
            else if ((degrees >= 45) && (degrees < 135))
            {
                if (inputState.IsPieceSelectionUp(playerIndex))
                {
                    cursorMovement.X++;
                }
                if (inputState.IsPieceSelectionDown(playerIndex))
                {
                    cursorMovement.X--;
                }
                if (inputState.IsPieceSelectionLeft(playerIndex))
                {
                    cursorMovement.Y--;
                }
                if (inputState.IsPieceSelectionRight(playerIndex))
                {
                    cursorMovement.Y++;
                }
            }
            else if (Math.Abs(degrees) >= 135)
            {
                if (inputState.IsPieceSelectionUp(playerIndex))
                {
                    cursorMovement.Y++;
                }
                if (inputState.IsPieceSelectionDown(playerIndex))
                {
                    cursorMovement.Y--;
                }
                if (inputState.IsPieceSelectionLeft(playerIndex))
                {
                    cursorMovement.X++;
                }
                if (inputState.IsPieceSelectionRight(playerIndex))
                {
                    cursorMovement.X--;
                }
            }
            else if ((degrees > -135) && (degrees <= -45))
            {
                if (inputState.IsPieceSelectionUp(playerIndex))
                {
                    cursorMovement.X--;
                }
                if (inputState.IsPieceSelectionDown(playerIndex))
                {
                    cursorMovement.X++;
                }
                if (inputState.IsPieceSelectionLeft(playerIndex))
                {
                    cursorMovement.Y++;
                }
                if (inputState.IsPieceSelectionRight(playerIndex))
                {
                    cursorMovement.Y--;
                }
            }
            // check for valid move and apply
            if (board.IsValidSpace(cursorPosition.X + cursorMovement.X,
                                   cursorPosition.Y + cursorMovement.Y))
            {
                cursorPosition.X += cursorMovement.X;
                cursorPosition.Y += cursorMovement.Y;
            }

            // apply play-piece input
            if (inputState.IsPlayPiece(playerIndex))
            {
                Move move = new Move(cursorPosition.X, cursorPosition.Y);
                if (board.IsValidMove(BoardColor, move))
                {
                    board.ApplyMove(BoardColor, move);
                    checkValidMove = true;
                }
                else
                {
                    AudioManager.PlayCue("Drop_Illegal");
                }
            }
        }
Ejemplo n.º 3
0
		public override void Update( Board board ) {
			// safety check the parameter
			if( board == null ) {
				throw new ArgumentNullException( "board" );
			}
			// quit now if it's not my turn
			if( board.CurrentColor != BoardColor ) {
				return;
			}

			// check if we have a valid move
			if( checkValidMove ) {
				if( board.HasValidMove( BoardColor ) ) {
					checkValidMove = false; // already checked, waiting for selection
				} else {
					board.Pass( BoardColor );
				}
			}

			// if we don't have any input, don't bother
			if( inputState == null ) {
				return;
			}

			// apply selection-movement input and generate a desired movement
			Point cursorMovement = new Point( 0, 0 );
			float degrees = (int)SimpleArcCamera.Rotation % 360 - 180;
			if( Math.Abs( degrees ) < 45 ) {
				if( inputState.IsPieceSelectionUp( playerIndex ) ) {
					cursorMovement.Y--;
				}
				if( inputState.IsPieceSelectionDown( playerIndex ) ) {
					cursorMovement.Y++;
				}
				if( inputState.IsPieceSelectionLeft( playerIndex ) ) {
					cursorMovement.X--;
				}
				if( inputState.IsPieceSelectionRight( playerIndex ) ) {
					cursorMovement.X++;
				}
			} else if( ( degrees >= 45 ) && ( degrees < 135 ) ) {
				if( inputState.IsPieceSelectionUp( playerIndex ) ) {
					cursorMovement.X++;
				}
				if( inputState.IsPieceSelectionDown( playerIndex ) ) {
					cursorMovement.X--;
				}
				if( inputState.IsPieceSelectionLeft( playerIndex ) ) {
					cursorMovement.Y--;
				}
				if( inputState.IsPieceSelectionRight( playerIndex ) ) {
					cursorMovement.Y++;
				}
			} else if( Math.Abs( degrees ) >= 135 ) {
				if( inputState.IsPieceSelectionUp( playerIndex ) ) {
					cursorMovement.Y++;
				}
				if( inputState.IsPieceSelectionDown( playerIndex ) ) {
					cursorMovement.Y--;
				}
				if( inputState.IsPieceSelectionLeft( playerIndex ) ) {
					cursorMovement.X++;
				}
				if( inputState.IsPieceSelectionRight( playerIndex ) ) {
					cursorMovement.X--;
				}
			} else if( ( degrees > -135 ) && ( degrees <= -45 ) ) {
				if( inputState.IsPieceSelectionUp( playerIndex ) ) {
					cursorMovement.X--;
				}
				if( inputState.IsPieceSelectionDown( playerIndex ) ) {
					cursorMovement.X++;
				}
				if( inputState.IsPieceSelectionLeft( playerIndex ) ) {
					cursorMovement.Y++;
				}
				if( inputState.IsPieceSelectionRight( playerIndex ) ) {
					cursorMovement.Y--;
				}
			}
			// check for valid move and apply
			if( board.IsValidSpace( cursorPosition.X + cursorMovement.X,
				cursorPosition.Y + cursorMovement.Y ) ) {
				cursorPosition.X += cursorMovement.X;
				cursorPosition.Y += cursorMovement.Y;
			}

			// apply play-piece input
			if( inputState.IsPlayPiece( playerIndex ) ) {
				Move move = new Move( cursorPosition.X, cursorPosition.Y );
				if( board.IsValidMove( BoardColor, move ) ) {
					board.ApplyMove( BoardColor, move );
					checkValidMove = true;
				} else {
					AudioManager.PlayCue( "Drop_Illegal" );
				}
			}
		}