Oleg Tarasenko
Oleg Tarasenko

Reputation: 9610

python: Chess moves validation

Does anybody know if there is a free python chess moves validation function available somewhere?

What I need. I have a diagram stored as a string, and move candidate. What I need is to see if move candidate is valid for the diagram.

Would be really interested to see examples, if possible.


The string looks this way:

ememememememememememememememememememembbememwpemememememememwpemembkememememememememememememememememwbembrememememwkemememememem

I understand it may seem stupid, but I find it the easiest to encode position this way. Move candidate for me is just another such position (which happened after next move, can change this behavior I think)

Upvotes: 6

Views: 10328

Answers (6)

Rainy
Rainy

Reputation: 1106

I've made a simple chess implementation with move validation here: https://github.com/akulakov/pychess

Validation logic is in each piece's "moves()" method, and you can validate your own move by generating full list of moves and checking if your move is there.

Upvotes: 0

Wolph
Wolph

Reputation: 80111

Just use the source of one of the Python Chess programs like PyChess or Python Chess

Specifically, the valid moves for pychess: https://code.google.com/p/pychess/source/browse/lib/pychess/Utils/lutils/validator.py

Upvotes: 3

mofoe
mofoe

Reputation: 3804

I know this is a rather old question, but my brother and me were looking for the same thing and we came across this awesome little python module called Chessnut.

Here is an example of its use:

#!/usr/bin/python
from Chessnut import Game

chessgame = Game(fen="rnbq1rk1/ppppp1bp/5np1/5p2/2PP4/2NBPN2/PP3PPP/R1BQK2R b KQ - 4 6")
print chessgame  

print chessgame.get_moves()

# apply a move 
chessgame.apply_move(chessgame.get_moves()[1])

print chessgame

and here the generated output:

rnbq1rk1/ppppp1bp/5np1/5p2/2PP4/2NBPN2/PP3PPP/R1BQK2R b KQ - 4 6
['b8a6', 'b8c6', 'd8e8', 'f8e8', 'f8f7', 'g8h8', 'g8f7', 'a7a6', 'a7a5', 'b7b6', 'b7b5', 'c7c6', 'c7c5', 'd7d6', 'd7d5', 'e7e6', 'e7e5', 'g7h8', 'g7h6', 'h7h6', 'h7h5', 'f6e8', 'f6d5', 'f6e4', 'f6g4', 'f6h5', 'g6g5', 'f5f4']
r1bq1rk1/ppppp1bp/2n2np1/5p2/2PP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 5 7

Awesome! :) Thanks cgearhart!

Upvotes: 4

jedi_coder
jedi_coder

Reputation: 1396

Check out ChessBoard.

Unfortunately it has some drawbacks:

  • it seems to be abandoned, because the bugs reported more than one year ago in the comments don't seem to be fixed
  • the code is not really PEP-8 compliant
  • some methods are very ugly and big, not all methods have docstrings
  • there are no unit tests, so digging into that code might be a challenge (I've already tried it at least twice and failed)

The good thing is that the code is GPL so you can play with it as long as you stick to that license.

Upvotes: 0

John Machin
John Machin

Reputation: 83032

You are missing information e.g. whose turn to move, whether each king has ever moved (means castling is not allowed), the "en passant" status of each pawn. That aside, it would be a very instructive exercise for you to write your own, using a not-very-complicated board representation like the 10x12-element array described here (except that you'd linearise it to a 120-element array).

Upvotes: 5

dimo414
dimo414

Reputation: 48884

Wouldn't hurt to look at some of the related answers on the side: Chess move validation library and https://stackoverflow.com/questions/1239913/smallest-chess-playing-program stand out to me.

Though personally I'm in favor of building your own.

Upvotes: 1

Related Questions