# Chess Game board = ["r", "n", "b", "q", "k", "b", "n", "r", "x", "x", "x", "x", "x", "x", "x", "x", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "X", "X", "X", "X", "X", "X", "X", "X", "R", "N", "B", "Q", "K", "B", "N", "R"] # Black and White squares will be useful when checking bishop moves blackSquares = [0,2,4,6,9,11,13,15,16,18,20,22,25,27,29,31,32,34,36,38,41,43,45,47,48,50, 52,54,57,59,61,63] whiteSquares = [1,3,5,7,8,10,12,14,17,19,21,23,24,26,28,30,33,35,37,39,40,42,44,46,49,51, 53,55,56,58,60,62] # 0 for white and 1 for black player = 0 destination = 0 origin = 0 movingPiece = "" def introScreen(): print("Hello, welcome to the Chess Notation Viewer") print("This allows you to view every stage of a notated chess") print("match as it would appear on the board.") input() print("The lower case letters represent White pieces and the") print("upper case letters represent Black pieces.") input() print("Enter the notations and the board will show the moves.") print("Here is the original position.") # translates a letter-number coordinate such as e4 to a position on the board, eg 28 def coordinate(letter, number,notation): location = (ord(notation[letter]) - 97) + 8 * (int(notation[number]) - 1) return location def calculateInput(): notation = input() origin = 0 if player == 0: # This is for moves made by pawns if notation[0].islower() == True: if notation[1] == "x": destination = coordinate(2,3,notation) origin = coordinate(0,3,notation) - 8 else: destination = coordinate(0,1,notation) if board[destination - 8] == "x": origin = destination - 8 if board[destination - 16] == "x": origin = destination - 16 movingPiece = "x" # This is for moves made by bishops if notation[0] == "B": if notation[1] == "x": destination = coordinate(2,3,notation) else: destination = coordinate(1,2,notation) if destination in whiteSquares: for i in range(31): if board[whiteSquares[i]] =="b": origin = whiteSquares[i] else: for i in range(31): if board[blackSquares[i]] =="b": origin = blackSquares[i] movingPiece = "b" # This is for moves made by Queens if notation[0] == "Q": if notation[1] == "x": destination = coordinate(2,3,notation) else: destination = coordinate(1,2,notation) for i in range(63): if board[1] == "q": origin = i movingPiece = "q" # This is for moves made by kings if notation[0] == "K": if notation[1] == "x": destination = coordinate(2,3,notation) else: destination = coordinate(1,2,notation) for i in range(63): if board[1] == "k": origin = i movingPiece = "k" if notation[0] == "N": knightMoves = [15,17,6,10,-10,-6,-17,-15] destination = coordinate(len(notation)-2, len(notation) - 1,notation) if len(notation) > 3 and notation[1] != "x": if notation[1].isalpha() == True: for i in range(7): if board[(ord(notation[1]) - 97)+8*i] == "n": origin = (ord(notation[1]) - 97)+8*i else: for i in range(7): if board[8*(int(notation[1])-1)+i] == "n": origin = 8*(int(notation[1])-1)+i else: if destination <= 15: if knightMoves.count(-17) == 1: knightMoves.remove(-17) if knightMoves.count(-15) == 1: knightMoves.remove(-15) if destination <= 7: if knightMoves.count(-10) == 1: knightMoves.remove(-10) if knightMoves.count(-6) == 1: knightMoves.remove(-6) if destination >= 48: if knightMoves.count(15) == 1: knightMoves.remove(15) if knightMoves.count(17) == 1: knightMoves.remove(17) if destination >= 56: if knightMoves.count(6) == 1: knightMoves.remove(6) if knightMoves.count(10) == 1: knightMoves.remove(10) if destination % 8 == 0 or destination % 8 == 1: if knightMoves.count(6) == 1: knightMoves.remove(6) if knightMoves.count(-10) == 1: knightMoves.remove(-10) if destination % 8 == 0: if knightMoves.count(15) == 1: knightMoves.remove(15) if knightMoves.count(-17) == 1: knightMoves.remove(-17) if destination % 8 == 6 or destination % 8 == 7: if knightMoves.count(10) == 1: knightMoves.remove(10) if knightMoves.count(-6) == 1: knightMoves.remove(-6) if destination % 8 == 7: if knightMoves.count(17) == 1: knightMoves.remove(17) if knightMoves.count(-15) == 1: knightMoves.remove(-15) for i in range(len(knightMoves)): if board[destination + knightMoves[i]] == "n": origin = destination + knightMoves[i] movingPiece = "n" if notation[0] == "R": destination = coordinate(len(notation)-2, len(notation) - 1,notation) if len(notation) > 3 and notation[1] != "x": if notation[1].isalpha() == True: for i in range(7): if board[(ord(notation[1]) - 97)+8*i] == "r": origin = (ord(notation[1]) - 97)+8*i else: for i in range(7): if board[8*(int(notation[1])-1)+i] == "r": origin = 8*(int(notation[1])-1)+i else: for i in range(int(((destination % 8 + 56) - destination)/8 - 1)): if board[destination + 8 * (i+1)] == "r": origin = destination + 8 * (i+1) break elif board[destination + 8 * (i+1)] == " ": pass else: break for i in range(int((destination - (destination % 8))/8 - 1)): if board[destination - 8 * (i+1)] == "r": origin = destination - 8 * (i+1) break elif board[destination + 8 * (i+1)] == " ": pass else: break for i in range(int(destination % 8 - 1)): if board[destination - (i+1)] == "r": origin = destination -(i+1) break elif board[destination - (i+1)] == " ": pass else: break for i in range(int(6 - destination % 8)): if board[destination + (i+1)] == "r": origin = destination + (i+1) break elif board[destination + (i+1)] == " ": pass else: break movingPiece = "r" if player == 1: # This is for moves made by pawns if notation[0].islower() == True: if notation[1] == "x": destination = coordinate(2,3,notation) origin = coordinate(0,3,notation) + 8 else: destination = coordinate(0,1,notation) if board[destination + 8] == "X": origin = destination + 8 if board[destination + 16] == "X": origin = destination + 16 movingPiece = "X" # This is for moves made by bishops if notation[0] == "B": if notation[1] == "x": destination = coordinate(2,3,notation) else: destination = coordinate(1,2,notation) if destination in whiteSquares: for i in range(31): if board[whiteSquares[i]] =="B": origin = whiteSquares[i] else: for i in range(31): if board[blackSquares[i]] =="B": origin = blackSquares[i] movingPiece = "B" # This is for moves made by Queens if notation[0] == "Q": if notation[1] == "x": destination = coordinate(2,3,notation) else: destination = coordinate(1,2,notation) for i in range(63): if board[i] == "Q": origin = i movingPiece = "Q" # This is for moves made by kings if notation[0] == "K": if notation[1] == "x": destination = coordinate(2,3,notation) else: destination = coordinate(1,2,notation) for i in range(63): if board[i] == "K": origin = i movingPiece = "K" if notation[0] == "N": knightMoves = [15,17,6,10,-10,-6,-17,-15] destination = coordinate(len(notation)-2, len(notation) - 1,notation) if len(notation) > 3 and notation[1] != "x": if notation[1].isalpha() == True: for i in range(7): if board[(ord(notation[1]) - 97)+8*i] == "N": origin = (ord(notation[1]) - 97)+8*i else: for i in range(7): if board[8*(int(notation[1])-1)+i] == "N": origin = 8*(int(notation[1])-1)+i else: if destination <= 15: if knightMoves.count(-17) == 1: knightMoves.remove(-17) if knightMoves.count(-15) == 1: knightMoves.remove(-15) if destination <= 7: if knightMoves.count(-10) == 1: knightMoves.remove(-10) if knightMoves.count(-6) == 1: knightMoves.remove(-6) if destination >= 48: if knightMoves.count(15) == 1: knightMoves.remove(15) if knightMoves.count(17) == 1: knightMoves.remove(17) if destination >= 56: if knightMoves.count(6) == 1: knightMoves.remove(6) if knightMoves.count(10) == 1: knightMoves.remove(10) if destination % 8 == 0 or destination % 8 == 1: if knightMoves.count(6) == 1: knightMoves.remove(6) if knightMoves.count(-10) == 1: knightMoves.remove(-10) if destination % 8 == 0: if knightMoves.count(15) == 1: knightMoves.remove(15) if knightMoves.count(-17) == 1: knightMoves.remove(-17) if destination % 8 == 6 or destination % 8 == 7: if knightMoves.count(10) == 1: knightMoves.remove(10) if knightMoves.count(-6) == 1: knightMoves.remove(-6) if destination % 8 == 7: if knightMoves.count(17) == 1: knightMoves.remove(17) if knightMoves.count(-15) == 1: knightMoves.remove(-15) for i in range(len(knightMoves) - 1): if board[destination + knightMoves[i]] == "N": origin = destination + knightMoves[i] movingPiece = "N" if notation[0] == "R": destination = coordinate(len(notation)-2, len(notation) - 1,notation) if len(notation) > 3 and notation[1] != "x": if notation[1].isalpha() == True: for i in range(7): if board[(ord(notation[1]) - 97)+8*i] == "R": origin = (ord(notation[1]) - 97)+8*i else: for i in range(7): if board[8*(int(notation[1])-1)+i] == "R": origin = 8*(int(notation[1])-1)+i else: for i in range(int(((destination % 8 + 56) - destination)/8 - 1)): if board[destination + 8 * (i+1)] == "R": origin = destination + 8 * (i+1) break elif board[destination + 8 * (i+1)] == " ": pass else: break for i in range(int((destination - (destination % 8))/8 - 1)): if board[destination - 8 * (i+1)] == "R": origin = destination - 8 * (i+1) break elif board[destination + 8 * (i+1)] == " ": pass else: break for i in range(int(destination % 8 - 1)): if board[destination - (i+1)] == "R": origin = destination -(i+1) break elif board[destination - (i+1)] == " ": pass else: break for i in range(int(6 - destination % 8)): if board[destination + (i+1)] == "R": origin = destination + (i+1) break elif board[destination + (i+1)] == " ": pass else: break movingPiece = "R" if notation == "0-0" or notation == "O-O": if player == 0: board[6] = "k" board[5] = "r" board[7] = " " board[4] = " " if player == 1: board[62] = "K" board[61] = "R" board[63] = " " board[60] = " " elif notation == "0-0-0" or notation == "O-O-O": if player == 0: board[2] = "k" board[3] = "r" board[0] = " " board[4] = " " if player == 1: board[58] = "K" board[59] = "R" board[56] = " " board[60] = " " else: board[destination] = movingPiece board[origin] = " " def showScreen(): print(" ---------------------------------") print(" | | | | | | | | |") print("8| " + board[56] + " | " + board[57] + " | " + board[58] + " | " + board[59] + " | " + board[60] + " | " + board[61] + " | " + board[62] + " | " + board[63] + " |") print(" | | | | | | | | |") print(" ---------------------------------") print(" | | | | | | | | |") print("7| " + board[48] + " | " + board[49] + " | " + board[50] + " | " + board[51] + " | " + board[52] + " | " + board[53] + " | " + board[54] + " | " + board[55] + " |") print(" | | | | | | | | |") print(" ---------------------------------") print(" | | | | | | | | |") print("6| " + board[40] + " | " + board[41] + " | " + board[42] + " | " + board[43] + " | " + board[44] + " | " + board[45] + " | " + board[46] + " | " + board[47] + " |") print(" | | | | | | | | |") print(" ---------------------------------") print(" | | | | | | | | |") print("5| " + board[32] + " | " + board[33] + " | " + board[34] + " | " + board[35] + " | " + board[36] + " | " + board[37] + " | " + board[38] + " | " + board[39] + " |") print(" | | | | | | | | |") print(" ---------------------------------") print(" | | | | | | | | |") print("4| " + board[24] + " | " + board[25] + " | " + board[26] + " | " + board[27] + " | " + board[28] + " | " + board[29] + " | " + board[30] + " | " + board[31] + " |") print(" | | | | | | | | |") print(" ---------------------------------") print(" | | | | | | | | |") print("3| " + board[16] + " | " + board[17] + " | " + board[18] + " | " + board[19] + " | " + board[20] + " | " + board[21] + " | " + board[22] + " | " + board[23] + " |") print(" | | | | | | | | |") print(" ---------------------------------") print(" | | | | | | | | |") print("2| " + board[8] + " | " + board[9] + " | " + board[10] + " | " + board[11] + " | " + board[12] + " | " + board[13] + " | " + board[14] + " | " + board[15] + " |") print(" | | | | | | | | |") print(" ---------------------------------") print(" | | | | | | | | |") print("1| " + board[0] + " | " + board[1] + " | " + board[2] + " | " + board[3] + " | " + board[4] + " | " + board[5] + " | " + board[6] + " | " + board[7] + " |") print(" | | | | | | | | |") print(" ---------------------------------") print(" a b c d e f g h ") introScreen() showScreen() while 1 == 1: calculateInput() player = (player + 1) % 2 showScreen()