#!/usr/bin/python3 def drawChequerboard(status,players=[],space="░",toprow="1234567"): bstr = "" bstr += toprow+"\n" for row in status: for cell in row: if cell == 0: bstr += space else: try: bstr += players[cell-1] except IndexError: bstr += str(cell) bstr += "\n" return bstr def initChequerboard(cols=7,rows=6): board = list() for row in range(rows): board.append([0]*7) return board def dropChip(board,move_str,player): failure = (False,0) try: move = int(move_str)-1 except ValueError: return failure if move < 0 or move >= len(board[0]): return failure free_space = -1 for row in board: if row[move] != 0: break else: free_space += 1 if free_space == -1: return failure board[free_space][move] = player return board, checkFour(board,free_space,move) def checkFour(board,row,col): sumOr = lambda a,b : (a[0]+b[0], a[1]+b[1]) orients = { "N":(1,0),"S":(-1,0),"E":(0,1),"W":(0,-1) } player = board[row][col] points = 0 count = 0 count += countTokens(board,orients["N"],row,col) count += countTokens(board,orients["S"],row,col) if count >= 3: points +=1 count = 0 count += countTokens(board,orients["E"],row,col) count += countTokens(board,orients["W"],row,col) if count >= 3: points +=1 count = 0 count += countTokens(board,sumOr( orients["N"],orients["E"] ),row,col ) count += countTokens(board,sumOr( orients["S"],orients["W"] ),row,col ) if count >= 3: points +=1 count = 0 count += countTokens(board,sumOr( orients["N"],orients["W"] ),row,col ) count += countTokens(board,sumOr( orients["S"],orients["E"] ),row,col ) if count >= 3: points +=1 return points def countTokens(board,check,row,col): player = board[row][col] offX = check[0] offY = check[1] count = 0 while True: if row+offY < 0 or row+offY >= len(board[row])-1 or col+offX < 0 or col+offX > len(board) or (board[row+offY][col+offX] != player) : break else: count += 1 offX += check[0] offY += check[1] return count def checkPly(board,row,col,player): if row < 0 or col < 0: return False try: if board[row][col] == player: return True else: return False except IndexError: return False if __name__ == "__main__": board = initChequerboard() match = True player = 1 points_1 = 0 points_2 = 0 while match: print( drawChequerboard(board) ) print("Player 1:"+str(points_1)) print("Player 2:"+str(points_2)) move = input("Player "+str(player)+" turn:") if move == "q": print("quitting") quit() valid, point = dropChip(board,move,player) if not(valid): print("Invalid move") else: board = valid if player == 2: points_2 += point player = 1 else: points_1 += point player = 2 match = False for row in board: for cell in row: if cell == 0: match = True print("Match over") print( drawChequerboard(board) ) print("Player 1 scored "+str(points_1)+" points") print("Player 2 scored "+str(points_2)+" points") if points_1 > points_2: print("Player 1 won!") elif points_2 > points_1: print("Player 2 won!") else: print("Draw!")