Giter Club home page Giter Club logo

chess's Introduction

Chess

Chess for your browser, featuring different algorithms to play against and a two-player mode. This was a small project for myself during winter holiday to get my feet wet with JavaScript and HTML. View it here: https://hreherch.github.io/Chess/.

Testing

These files have been tested on Firefox and Chrome browsers, with a large focus on Chrome. The intention for this project was for personal use so extensive testing on a wide variety of browsers was not done.

Files

index.html

The html for the project. The chessboard view is set up here.

chess.js

Handles most of the model of the chessboard. Takes an OO approach.

chessAI.js

Depending on the selected mode for the AI, selects and makes a move for black. Depends entirely on chess.js.

Info

Board Storage

The chess board is stored as a 64 element array, with piece objects (or null) taking up each space. This potentially has room for improvement, considering the use of bitboards to store board information.

Heuristic

The board heuristic uses a simple weighted sum: (value of all black pieces) - (value of all white pieces), with traditional values of K=200, Q=9, Pawn=1, and so on. Because the board does not store information about what pieces it has still, the evaluation function must go through every tile and make this sum, leaving room for optimization.

License

This project is licenced under the MIT License - see LICENSE.

Acknowledgements

The chess icons used for this program were made by Freepik at www.flaticon.com licensed under CC 3.0 BY.

chess's People

Contributors

hreherch avatar

Watchers

James Cloos avatar  avatar

chess's Issues

Pieces are too coupled to a global instance of the board

This will affect progression in using a minmax search because it will always be trying to validate moves of the global instance instead of the clone.

Furthermore, if a piece tries to alter the board it affects the main/global board. ( Which may be the cause of the "cannot set property of hasMovedYet of null" error that occurs - i.e. when we check if we can castle, we accidentally begin castling and then it fails without resetting the piece ).

Update value of board on piece move

Currently when calling .getValue() of the board, it goes through each element in the board array and sums its value. We could update this value on every move instead since we are not using a deeper heuristic.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.