Last active
December 17, 2015 11:59
-
-
Save vgmoose/5606428 to your computer and use it in GitHub Desktop.
port of https://github.com/pdonlon/checkers to python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
count = 0 | |
board = [x[:] for x in [[0]*8]*8] | |
def drawBoard(): | |
for i in range(0, len(board)): | |
if(i>0): | |
sys.stdout.write(" | "+str(i-1)) | |
print("") | |
for k in range(0, len(board[0])): | |
if(board[i][k] == 0): | |
'''if(board[i][k] != 1): #TODO only when graphics are ready | |
if(k%2 ==0): #vertical column is even #TODO see below change code accordingly | |
if((i+1)%2 == 0): #horizontal row even | |
board[i][k] = 3 #red | |
} | |
else | |
board[i][k] = 4 #black | |
} | |
if((k+1)%2 ==0) #vertical column is odd | |
if((k+1)%2 == 0): | |
if((i+1)%2 == 0): #horizontal row even | |
board[i][k] = 4 #black | |
} | |
else | |
board[i][k] = 3 #red | |
} | |
}''' | |
sys.stdout.write(". ") | |
if(board[i][k] == 1 ): | |
sys.stdout.write("o ") | |
if(board[i][k] == 2 ): | |
sys.stdout.write("a ") | |
''' if(board[i][k] ==3) | |
sys.stdout.write("r ") | |
if(board[i][k] ==4) #TODO Change to values that don't | |
sys.stdout.write("b ")''' #Interfere with kings (possibly negatives) | |
if(board[i][k] == 3): | |
sys.stdout.write("8 ") | |
if(board[i][k] == 4): | |
sys.stdout.write("@ ") | |
print(" | 7") | |
print("0 1 2 3 4 5 6 7 ") | |
def gameOver(): | |
redCounter= 0 | |
redKingCounter = 0 | |
blackCounter = 0 | |
blackKingCounter = 0 | |
for i in range(0, len(board)): | |
for k in range(0, len(board[0])): | |
if(board[i][k] == 1): | |
redCounter += 1 | |
if(board[i][k] == 3): | |
redKingCounter += 1 | |
if(board[i][k] == 2): | |
blackCounter += 1 | |
if(board[i][k] == 4): | |
blackKingCounter += 1 | |
if( ((redCounter == 0) and (redKingCounter == 0)) or | |
((blackCounter == 0) and (blackKingCounter == 0))): | |
finished = True | |
else: | |
finished = False | |
return finished | |
def initializeBoard(): | |
for i in range(0, len(board)): | |
for k in range(0, len(board[0])): | |
if(i != 3 and i != 4): #middle of board shouldn't have pieces | |
if(i<3): | |
if(i%2 == 0 and k%2 ==0): #every even red piece | |
board[i][k] = 1 | |
if((i+1)%2 == 0 and (k+1)%2 ==0): #every odd red piece | |
board[i][k] = 1 | |
if(i>4): | |
if(i%2 == 0 and k%2 ==0): #every even black piece | |
board[i][k] = 2 | |
if((i+1)%2 == 0 and (k+1)%2 ==0): #every odd black piece | |
board[i][k] = 2 | |
drawBoard() | |
def move(startY, startX, direction): | |
if((board[startY][startX] == 2) or (board[startY][startX] == 3) or | |
(board[startY][startX] == 4)): #includes kings | |
if(direction == ("up right") and board[startY-1][startX+1] == 0): | |
board[startY-1][startX+1]= board[startY][startX] | |
board[startY][startX] = 0 | |
if(direction == ("up left") and board[startY-1][startX-1] == 0): | |
board[startY-1][startX-1]= board[startY][startX] | |
board[startY][startX] = 0 | |
for k in range(0, len(board)): | |
if(board[0][k] == 2): | |
board[0][k] = 4 #make into Black King | |
if((board[startY][startX] == 1 ) or (board[startY][startX] == 3) or | |
(board[startY][startX] == 4)): | |
if(direction == ("down right") and board[startY+1][startX+1] == 0): | |
board[startY+1][startX+1]= board[startY][startX] | |
board[startY][startX] = 0 | |
if(direction == ("down left") and board[startY+1][startX-1] == 0): | |
board[startY+1][startX-1]= board[startY][startX] | |
board[startY][startX] = 0 | |
for k in range(0, len(board)): | |
if(board[7][k] == 1): | |
board[7][k] = 3 #make into Red King | |
drawBoard() | |
def jump(startY, startX, direction): | |
if(board[startY][startX] == 4): | |
if(direction == ("up right") and board[startY-2][startX+2] == 0 | |
and ((board[startY-1][startX+1] == 1) or (board[startY-1][startX+1] == 3))): | |
board[startY-2][startX+2]=4 | |
board[startY-1][startX+1]=0 | |
board[startY][startX] = 0 | |
if(direction == ("up left") and board[startY-2][startX-2] == 0 | |
and ((board[startY-1][startX-1] == 1) or(board[startY-1][startX-1] == 3))): | |
board[startY-2][startX-2]=4 | |
board[startY-1][startX-1]=0 | |
board[startY][startX] = 0 | |
if(direction == ("down right") and board[startY+2][startX+2] == 0 | |
and ((board[startY+1][startX+1] == 1) or (board[startY+1][startX+1] == 3))): | |
board[startY+2][startX+2]=4 | |
board[startY+1][startX+1]=0 | |
board[startY][startX] = 0 | |
if(direction == ("down left") and board[startY+2][startX-2] == 0 | |
and ((board[startY+1][startX-1] == 1) or(board[startY+1][startX-1] == 3))): | |
board[startY+2][startX-2]=4 | |
board[startY+1][startX-1]=0 | |
board[startY][startX] = 0 | |
if(board[startY][startX] == 3): | |
if(direction == ("up right") and board[startY-2][startX+2] == 0 | |
and ((board[startY-1][startX+1] == 2) or (board[startY-1][startX+1] == 4))): | |
board[startY-2][startX+2]=3 | |
board[startY-1][startX+1]=0 | |
board[startY][startX] = 0 | |
if(direction == ("up left") and board[startY-2][startX-2] == 0 | |
and ((board[startY-1][startX-1] == 2) or(board[startY-1][startX-1] == 4))): | |
board[startY-2][startX-2]=3 | |
board[startY-1][startX-1]=0 | |
board[startY][startX] = 0 | |
if(direction == ("down right") and board[startY+2][startX+2] == 0 | |
and ((board[startY+1][startX+1] == 2) or (board[startY+1][startX+1] == 4))): | |
board[startY+2][startX+2]=3 | |
board[startY+1][startX+1]=0 | |
board[startY][startX] = 0 | |
if(direction == ("down left") and board[startY+2][startX-2] == 0 | |
and ((board[startY+1][startX-1] == 2) or(board[startY+1][startX-1] == 4))): | |
board[startY+2][startX-2]=3 | |
board[startY+1][startX-1]=0 | |
board[startY][startX] = 0 | |
if(board[startY][startX] == 2): | |
if(direction == ("up right") and board[startY-2][startX+2] == 0 | |
and ((board[startY-1][startX+1] == 1) or (board[startY-1][startX+1] == 3))): | |
board[startY-2][startX+2]=2 | |
board[startY-1][startX+1]=0 | |
board[startY][startX] = 0 | |
if(direction == ("up left") and board[startY-2][startX-2] == 0 | |
and ((board[startY-1][startX-1] == 1) or(board[startY-1][startX-1] == 3))): | |
board[startY-2][startX-2]=2 | |
board[startY-1][startX-1]=0 | |
board[startY][startX] = 0 | |
for k in range(0, len(board)): | |
if(board[0][k] == 2): | |
board[0][k] = 4 #make into Black King | |
if(board[startY][startX] == 1): | |
if(direction == ("down right") and board[startY+2][startX+2] == 0 | |
and ((board[startY+1][startX+1] == 2) or (board[startY+1][startX+1] == 4))): | |
board[startY+2][startX+2]=1 | |
board[startY+1][startX+1]=0 | |
board[startY][startX] = 0 | |
if(direction == ("down left") and board[startY+2][startX-2] == 0 | |
and ((board[startY+1][startX-1] == 2) or(board[startY+1][startX-1] == 4))): | |
board[startY+2][startX-2]=1 | |
board[startY+1][startX-1]=0 | |
board[startY][startX] = 0 | |
drawBoard() | |
initializeBoard() | |
while (gameOver() == False): | |
global count | |
if(count%2==1): | |
print("Red would you like to move or jump?") | |
redDecide = raw_input() | |
print("Where are you starting?") | |
startY = int(raw_input()) | |
startX = int(raw_input()) | |
print("What direction are you going?") | |
redDirection = raw_input() | |
if((board[startY][startX] == 1) or (board[startY][startX] == 3)): | |
if (redDecide == "jump"): | |
jump(startY, startX, redDirection) | |
if (redDecide == "move"): | |
move(startY, startX, redDirection) | |
count += 1 | |
else: | |
print("Black would you like to move or jump?") | |
blackDecide = raw_input() | |
print("Where are you starting?") | |
startY = int(raw_input()) | |
startX = int(raw_input()) | |
print("What direction are you going?") | |
blackDirection = raw_input() | |
if((board[startY][startX] == 2) or (board[startY][startX] == 4)): | |
if (blackDecide == "jump"): | |
jump(startY, startX, blackDirection) | |
if (blackDecide == "move"): | |
move(startY, startX, blackDirection) | |
count += 1 | |
drawBoard() | |
drawBoard() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment