Giter Site home page Giter Site logo

swordfight's Introduction

Build Status

Swordfight

"A game of chess is like a sword fight. You must think first before you move." (Shaolin and Wu Tang)

Swordfight is a chess engine (no GUI, just a chess AI). It's CECP-compatible and works with XBoard GUI.

Usage

  1. Download the latest release jar file.
  2. Install XBoard (should be available in your favorite package manager).
  3. Run xboard and choose Engine -> Load New 1st Engine. To add Swordfight as a new engine you need to set "Engine Directory" to to the directory containing the jar file and type java -jar <jar_filename> in "Engine Command". This will make Swordfight play as black.
  4. Play.

Alternatively if you want to run the latest version from the repository:

  1. Download this repo.
  2. Install Leiningen (requires Java JDK version 6 or later).
  3. Install XBoard.
  4. Run xboard and choose Engine -> Load New 1st Engine. To add Swordfight as a new engine you need to point to the repo directory and set lein run as command. This will make Swordfight play as black.
  5. Play.

Swordfight currently uses parallelized alpha-beta pruning (YBWC) with Tomasz Michniewski's simplified evaluation function. If you run xboard -debug there will be some debugging info in the xboard.debug file.

XBoard window

You can also play without a GUI by running lein run and using a command line interface like in the session below (user input is after the > prompt). A monospaced font in your terminal is highly recommended for the debug output (chess board):

# {:xboard-mode false, :debug-mode true, :edition-current-color W}
# {:white-can-castle-ks true, :black-can-castle-qs true, :last-move [     ], :edited false, :turn W, :black-can-castle-ks true, :moves-cnt 0, :white-can-castle-qs true}
#
# 8  ♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜
# 7  ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟
# 6                 
# 5                 
# 4                 
# 3                 
# 2  ♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙
# 1  ♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖
#
#    a b c d e f g h
#
> e2e4
# {:white-can-castle-ks true, :black-can-castle-qs true, :last-move [e2 e4], :edited false, :turn B, :black-can-castle-ks true, :moves-cnt 1, :white-can-castle-qs true}
#
# 8  ♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜
# 7  ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟
# 6                 
# 5                 
# 4          ♙      
# 3                 
# 2  ♙ ♙ ♙ ♙   ♙ ♙ ♙
# 1  ♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖
#
#    a b c d e f g h
#
move b8c6
# {:xboard-mode false, :debug-mode true, :edition-current-color W}
# {:white-can-castle-ks true, :black-can-castle-qs true, :last-move [b8 c6], :edited false, :turn W, :black-can-castle-ks true, :moves-cnt 2, :white-can-castle-qs true}
#
# 8  ♜   ♝ ♛ ♚ ♝ ♞ ♜
# 7  ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟
# 6      ♞          
# 5                 
# 4          ♙      
# 3                 
# 2  ♙ ♙ ♙ ♙   ♙ ♙ ♙
# 1  ♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖
#
#    a b c d e f g h
#
>

I think the unicode chess pieces look pretty neat!

♜ ♖ ♞ ♘ ♝ ♗ ♛ ♕ ♚ ♔ ♟ ♙

Depending on the terminal the colors may be confusing. ♜ is black.

Protocol

This engine will slowly become more and more CECP-compatible. Basically what it means is it reads from standard input and writes to standard output following a commonly used protocol, which is based on GNU Chess CLI and designed by Tim Mann, the author of XBoard. It's quite possible that Swordfight will support Universal Chess Interface or other protocols in the future.

Here's what the author himself says about CECP:

Originally, xboard was just trying to talk to the existing command-line interface of GNU Chess 3.1+ and 4, which was designed for people to type commands to. So the communication protocol is very ad-hoc. It might have been good to redesign it early on, but because xboard and GNU Chess are separate programs, I didn't want to force people to upgrade them together to versions that matched. I particularly wanted to keep new versions of xboard working with old versions of GNU Chess, to make it easier to compare the play of old and new gnuchess versions. I didn't foresee the need for a clean protocol to be used with other chess engines in the future.

Did you know?

The field of computer chess started with Programming a Computer for Playing Chess, a 1950 paper by Claude Shannon. Why is it that old papers are better than new ones? I don't know.

Did you know that the number of possible positions in chess is bigger than the number of atoms in the observable universe? That's a lot of positions!

License

Distributed under the 2-clause BSD license.

swordfight's People

Contributors

replomancer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

swordfight's Issues

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.