-
Notifications
You must be signed in to change notification settings - Fork 0
/
FileModeFunctions.py
154 lines (129 loc) · 5.78 KB
/
FileModeFunctions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
from Models import Pawn, King, GoldGeneral, SilverGeneral, Bishop, Rook
from Functions import *
from printingFunctions import *
def addPieceToBoard(alphaPiece, alphaPosition, board):
"""
Add a piece defined from file to board
Inputs: alphaPiece -- string representation of piece ex: "p" for lower player Pawn
alphaPosition -- string representation of board position ex: "a1" which is (0,0) on board
board -- board to add piece to
"""
#Get the index on board of the piece
piecePos = fromAlphaToIndex(alphaPosition)
#Initialize piece based on line
if "p" in alphaPiece:
piece = Pawn.Pawn("lower", piecePos[0], piecePos[1])
elif "P" in alphaPiece:
piece = Pawn.Pawn("UPPER", piecePos[0], piecePos[1])
elif "k" in alphaPiece:
piece = King.King("lower", piecePos[0], piecePos[1])
elif "K" in alphaPiece:
piece = King.King("UPPER", piecePos[0], piecePos[1])
elif "g" in alphaPiece:
piece = GoldGeneral.GoldGeneral("lower", piecePos[0], piecePos[1])
elif "G" in alphaPiece:
piece = GoldGeneral.GoldGeneral("UPPER", piecePos[0], piecePos[1])
elif "s" in alphaPiece:
piece = SilverGeneral.SilverGeneral("lower", piecePos[0], piecePos[1])
elif "S" in alphaPiece:
piece = SilverGeneral.SilverGeneral("UPPER", piecePos[0], piecePos[1])
elif "r" in alphaPiece:
piece = Rook.Rook("lower", piecePos[0], piecePos[1])
elif "R" in alphaPiece:
piece = Rook.Rook("UPPER", piecePos[0], piecePos[1])
elif "B" in alphaPiece:
piece = Bishop.Bishop("UPPER", piecePos[0], piecePos[1])
elif "b" in alphaPiece:
piece = Bishop.Bishop("lower", piecePos[0], piecePos[1])
#Promoted piece, so promote the piece
if "+" in alphaPiece:
piece.promote()
#update board with the newly initialized piece
board[piecePos[0]][piecePos[1]] = piece
return
def initCaptures(game, capturesList, player):
"""
Initialize Player Captures from File
Input: player --- 0 for UPPER player Captures, 1 for lower player Captures
capturesList --- list of captured pieces
game --- game object
"""
#Upper Player
if player == 0:
for item in capturesList:
#Piece position does not matter for now becuase that will get updated when the piece is dropped
if item == "P":
game.upperPlayer.addCapture(Pawn.Pawn("UPPER", 1, 1))
elif item == "K":
game.upperPlayer.addCapture(King.King("UPPER", 1, 1))
elif item == "G":
game.upperPlayer.addCapture(GoldGeneral.GoldGeneral("UPPER", 1, 1))
elif item == "S":
game.upperPlayer.addCapture(SilverGeneral.SilverGeneral("UPPER", 1, 1))
elif item == "B":
game.upperPlayer.addCapture(Bishop.Bishop("UPPER", 1, 1))
elif item == "R":
game.upperPlayer.addCapture(Rook.Rook("UPPER", 1, 1))
#Lower player
elif player == 1:
for item in capturesList:
#Piece position does not matter for now becuase that will get updated when the piece is dropped
if item == "p":
game.lowerPlayer.addCapture(Pawn.Pawn("lower", 1, 1))
elif item == "k":
game.lowerPlayer.addCapture(King.King("lower", 1, 1))
elif item == "g":
game.lowerPlayer.addCapture(GoldGeneral.GoldGeneral("lower", 1, 1))
elif item == "s":
game.lowerPlayer.addCapture(SilverGeneral.SilverGeneral("lower", 1, 1))
elif item == "b":
game.lowerPlayer.addCapture(Bishop.Bishop("lower", 1, 1))
elif item == "r":
game.lowerPlayer.addCapture(Rook.Rook("lower", 1, 1))
return
def getMoveCommand(line):
"""
get the move defined in text file
returns: move in space seperated list
Example: line = "move a1 a2"
commandList = ["move", "a1", "a2"]
"""
commandList = line.split(" ")
#Get rid of the newline in the last element of the list
if "\n" in line:
lastElement = commandList[len(commandList) - 1]
lastElement = lastElement[:len(lastElement) - 1]
commandList[len(commandList) - 1] = lastElement
return commandList
def printIsInCheck(game):
"""
Called only from file mode game
Handles getting all moves out of check and printing them
returns: list of possible moves
-1 if checkmate and game ended
"""
#Get possible MOVES to get out of check
possibleMoves = getPossibleMovesOutCheck(game.playerTurn, game.board)
#Get possible DROPS to get out of check
if game.playerTurn == "lower":
possibleDrops = getPossibleDropsOutCheck(game.playerTurn, game.board, game.lowerPlayer.captures)
elif game.playerTurn == "UPPER":
possibleDrops = getPossibleDropsOutCheck(game.playerTurn, game.board, game.upperPlayer.captures)
#Exists no moves or drops to get out of check ---> Checkmate
if not possibleMoves and not possibleDrops:
game.Checkmate = True
if game.playerTurn == "lower":
game.gameWinner = "UPPER"
else:
game.gameWinner = "lower"
game.returnMessage = " Checkmate."
game.endGame()
return -1
#Otherwise get the string representation of the moves and drops
else:
alphaPossibleMoves = ListPossibleCheckMoves(game, possibleMoves)
alphaPossibleDrops = ListPossibleCheckDrops(game, possibleDrops)
#Combine moves and drops
combinedList = alphaPossibleMoves + alphaPossibleDrops
combinedList.sort()
return combinedList