
Are any of you evil enough to oppose the "good" team?
Code: Select all
// EvilBot.cs
using ChessChallenge.API;
using System;
namespace ChessChallenge.Example
{
// A simple bot that can spot mate in one, and always captures the most valuable piece it can.
// Plays randomly otherwise.
public class EvilBot : IChessBot
{
// Piece values: null, pawn, knight, bishop, rook, queen, king
int[] pieceValues = { 0, 100, 300, 300, 500, 900, 10000 };
public Move Think(Board board, Timer timer)
{
Move[] allMoves = board.GetLegalMoves();
// Pick a random move to play if nothing better is found
Random rng = new();
Move moveToPlay = allMoves[rng.Next(allMoves.Length)];
int highestValueCapture = 0;
foreach (Move move in allMoves)
{
// Always play checkmate in one
if (MoveIsCheckmate(board, move))
{
moveToPlay = move;
break;
}
// Find highest value capture
Piece capturedPiece = board.GetPiece(move.TargetSquare);
int capturedPieceValue = pieceValues[(int)capturedPiece.PieceType];
if (capturedPieceValue > highestValueCapture)
{
moveToPlay = move;
highestValueCapture = capturedPieceValue;
}
}
return moveToPlay;
}
// Test if this move gives checkmate
bool MoveIsCheckmate(Board board, Move move)
{
board.MakeMove(move);
bool isMate = board.IsInCheckmate();
board.UndoMove(move);
return isMate;
}
}
}