- Demo
- About the Project
- Tech Stack
- File Structure
- Getting Started
- Features
- Usage
- Theory and Approach
- Future Scope
- Acknowledgements
- Contributors
- Material
- Positional Advantage
- Control of the center
- Control of the center files
- Control of the center ranks
- Control of the center diagonals
- Control of the center squares
- Control of the center squares
- King Safety
- Castling
- King's
- Position
- Number of pieces attacking it
- Number of pieces defending it
- Number of pieces defending the King
- Double Pawns
- Queen Mobility
- King Mobility
- Freedom of Movement
- Knight Support Based on these factors, the AI assigns an evaluation score to each gamestate. Then the AI uses the NegMax algorithm with alpha-beta pruning to determine the best move at each gamestate.
- Python
-
Pygame
- Pygame is a Python library that is commonly used for developing 2D games. It provides a set of modules that allow developers to create games and multimedia applications. Pygame is built on top of the Simple DirectMedia Layer (SDL) library, which provides low-level access to audio, keyboard, mouse, joystick, and graphics hardware.
- Pygame is a popular choice for game development because it is easy to learn and use, and it provides a lot of functionality out of the box. It includes modules for handling graphics, sound, input, and networking, among other things.
- In the context of the provided code excerpt, Pygame is being used to build a chess game.Pygame is a Python library that is commonly used for developing 2D games. It provides a set of modules that allow developers to create games and multimedia applications. Pygame is built on top of the Simple DirectMedia Layer (SDL) library, which provides low-level access to audio, keyboard, mouse, joystick, and graphics hardware.
- Pygame is a popular choice for game development because it is easy to learn and use, and it provides a lot of functionality out of the box. It includes modules for handling graphics, sound, input, and networking, among other things.
- Pygame is being used to build a chess game.
- Numpy
- NumPy, short for Numerical Python, is a fundamental package for scientific computing in Python.
- It provides support for arrays, matrices and a large library of high-level mathematical functions to operate on these arrays.
- NumPy's array object is more efficient and faster than Python's native list.
- It is an open-source module and is used in a wide range of applications including linear algebra, Fourier transform, and matrix computations.
- NumPy is also interoperable and can seamlessly and speedily integrate with a wide variety of databases.
- It is a key package in the field of machine learning, data analysis, and complex visualizations.
. ├── Notes |── RohanC1.pdf ├── AdityaC1P1.pdf ├── AdityaC1P2.pdf |── MiniProjects |── Aditya |── NatureOrientedGeneticAlgorithm |──code ├── main.py |──... |── Flappy Bird |──... |── Rohan |── Genetic_Monkey_Shakespeare_Simulation |──... |── Snake Game |──... |── README.md ├── CHESS_AI-PROJECT_REPORT.pdf ├── ChessAI ├── images ├── ... ├── AI.py ├── engine.py ├── main.py .
- Python 3
- Pygame
- Numpy
- Clone the repository
-
Select whether you want to play versus computer, against another player locally, or watch the game of two computers
From the Appropriate flag in the main.py file
''' playerone = True playertwo = False Indicates that the player is playing against the computer True indicates that the player is a human player False indicates that the player is a computer player '''
- Install pygame
- On the Terminal, run:
- Pygame should get installed
pip install pygame
- Run main.py
python main.py
- The Home Screen of the Game should appear on your screen
- Play against the computer
- Play against another player locally
- Watch the game of two computers
- Live Valid Move Checking
- Castling
- En Passant
- Promotion with its own menu
- Checkmate
- Stalemate
- Undo Moves
- Reset Game
- Run main.py
- The Home Screen of the Game should appear on your screen
- Follow the message on the screen
Press any key to start the game
- The Game Screen should appear on your screen
- Click a Chess piece to highlight it Valid Landing Squares
- Click a Valid Landing Square to move the Chess piece to that square
- Use
Ctrl + Z
Button to undo a move - Use
Ctrl + R
Button to reset the game - If Pawn Promotion occurs for the pawn of the human player, follow the instructions on the on-screen menu to do pawn promotion to your chosen piece
- Play the game until Checkmate or Stalemate occurs
- Initialization: Pygame is first initialized using
pygame.init()
. This function initializes all the modules required for Pygame. - Creating a Game Window: Pygame creates a game window or screen using
pygame.display.set_mode()
. This is where all the game objects, animations, and text will be displayed. - Game Loop: Pygame runs a game loop where the game events are continuously checked and game objects are updated and drawn on the game window.
- Event Handling: Pygame handles different types of events like keyboard input, mouse movement, button clicks, etc. These events are used to control the game characters or to trigger certain game actions.
- Drawing and Updating Game Objects: Pygame provides functions to draw game objects on the game window. It also provides functions to update the game window so that the changes become visible.
- Sound and Music: Pygame has modules to play sound effects and music. This adds to the overall game experience.
- Timing: Pygame provides a way to track and control time. This is used to control the speed of game characters or to introduce delay in certain game actions.
- Collision Detection: Pygame provides simple collision detection. This is used to detect when game characters or objects collide with each other.
- Game Over: Pygame provides functions to end the game and quit the game window.
- More Use of Genetic Algorithm in The AI part
- Better tuning of Parameter weights
- A database to store player information
- More Game Modes
https://drive.google.com/file/d/1-EqixFDe9Iy7AqRsp5VVrwxX8uG5FjgJ/view?usp=sharing
AI Move
Home Screen
Our Chess Board
Chess Board With Pieces
Undo Move
Castling Move
Checkmate
Stalemate
Enpassant Capture
Reset Game
To create a highly intelligent AI opponent for players to play using the NegMax algorithm for evaluation of different possible moves and then choosing the best on the basis of evaluation score.
The project is a chess AI that can play against a human player. The AI uses the NegMax algorithm with alpha-beta pruning to determine the best move at each gamestate.
This project is built using the following technologies:
Game Tree: The algorithm starts by generating a game tree, which is a representation of all possible moves from the current position. Each node in the tree represents a possible game state, and each edge represents a move.
Evaluation Function: For each leaf node (end game state), the algorithm uses an evaluation function to assign a numerical value. This value represents the "goodness" of the game state for the AI. In chess, the evaluation function might consider factors like material balance, king safety, pawn structure, etc.
Negation Principle: The Negamax algorithm is based on the principle that the value of a position to a player is the negation of the value of that position to the other player. This simplifies the implementation of the algorithm, as it only needs to consider the perspective of the AI, not the opponent.
Search: The algorithm performs a depth-first search of the game tree. When it reaches a leaf node, it propagates the score back up to the parent node, negating the score at each level. This is based on the assumption that each player will choose the move that maximizes their minimum score (hence "minimax").
The Best Move: Once all scores are propagated, the AI chooses the move that leads to the highest score.
Alpha-beta pruning is an optimization technique for the Negmax algorithm. It reduces the number of nodes that need to be evaluated in the game tree by eliminating branches that don't need to be searched because they can't possibly influence the final decision.
Here's how it works in the context of the provided code:
Alpha and Beta: Alpha is the best value that the maximizer currently can guarantee at that level or above. Beta is the best value that the minimizer currently can guarantee at that level or above.
Pruning:: During the search, the algorithm keeps track of the best scoring option found so far. If it finds a move that scores higher than what the opponent could potentially achieve (beta), it stops evaluating the remaining moves (break), as the opponent would never allow this situation to occur.
Updating Alpha: If the score of the current move (maxScore) is greater than the current best (alpha), the best score is updated. This is because the maximizer has found a better move.
Score Negation: The score is negated when passed to the recursive call because the perspective changes from maximizer to minimizer or vice versa.
Alpha Beta Inversion: Alpha and beta values are inverted when passed to the recursive call because the roles of the maximizer and minimizer are swapped.
In summary, alpha-beta pruning allows the algorithm to ignore parts of the search tree that are irrelevant to the final decision, which can greatly improve efficiency in games with large search trees, like chess.
Project Mentor Siddeshsingh Tanwar for his support and guidance throughout the duration of the project.
Community of Coders(COC) for providing us with the opportunity to work on this project.