Home » Forum Home » General

Topic: Swap2 PenteX?
Replies: 0   Views: 7,397   Pages: 1  

Search Forum

Back to Topic List Topics: [ Previous | Next ]
Replies: 0   Views: 7,397   Pages: 1  
watsu

Posts: 1,467
Registered: Dec 16, 2001
Home page
Swap2 PenteX?
Posted: Mar 5, 2024, 7:55 AM

I've heard good things about the newly released LMM Claude 3, so I decided to test it on some game code- 15x15 board Pente, where overlines are allowed, but don't win (allowing rare draw cases).

Basic game code:


class GameBoard:
def __init__(self):
self.board = [[' ' for _ in range(15)] for _ in range(15)]
self.player = 'X'
self.captured_pairs = {'X': 0, 'O': 0}

def is_valid_move(self, row, col):
return 0 <= row < 15 and 0 <= col < 15 and self.board[row][col] == ' '

def make_move(self, row, col):
self.board[row][col] = self.player
self.check_captures(row, col)
self.check_win(row, col)
self.player = 'O' if self.player == 'X' else 'X'

def check_captures(self, row, col):
player = self.player
opponent = 'O' if player == 'X' else 'X'

# Check horizontal captures
for i in range(col - 1, -1, -1):
if self.board[row] == opponent:
if i == 0 or self.board[row][i - 1] == player:
break
elif self.board[row] == ' ':
break
else:
j = i + 1
while j < col and self.board[row][j] == opponent:
j += 1
if j < col:
continue
self.capture_pairs(row, i, row, j - 1, player)
break

for i in range(col + 1, 15):
if self.board[row] == opponent:
if i == 14 or self.board[row][i + 1] == player:
break
elif self.board[row] == ' ':
break
else:
j = i - 1
while j >= 0 and self.board[row][j] == opponent:
j -= 1
if j >= 0:
continue
self.capture_pairs(row, i, row, j + 1, player)
break

# Check vertical captures
for i in range(row - 1, -1, -1):
if self.board[col] == opponent:
if i == 0 or self.board[i - 1][col] == player:
break
elif self.board[col] == ' ':
break
else:
j = i + 1
while j < row and self.board[j][col] == opponent:
j += 1
if j < row:
continue
self.capture_pairs(i, col, j - 1, col, player)
break

for i in range(row + 1, 15):
if self.board[col] == opponent:
if i == 14 or self.board[i + 1][col] == player:
break
elif self.board[col] == ' ':
break
else:
j = i - 1
while j >= 0 and self.board[j][col] == opponent:
j -= 1
if j >= 0:
continue
self.capture_pairs(j + 1, col, i, col, player)
break

def capture_pairs(self, row1, col1, row2, col2, player):
for i in range(row1, row2 + 1):
for j in range(col1, col2 + 1):
self.board[j] = ' '
self.captured_pairs[player] += (row2 - row1 + 1) // 2

def check_win(self, row, col):
player = self.player
opponent = 'O' if player == 'X' else 'X'

# Check horizontal win
count = 1
for i in range(col - 1, -1, -1):
if self.board[row] == player:
count += 1
else:
break

for i in range(col + 1, 15):
if self.board[row] == player:
count += 1
else:
break

if count == 5:
print(f"Player {player} wins!")
exit()

# Check vertical win
count = 1
for i in range(row - 1, -1, -1):
if self.board[col] == player:
count += 1
else:
break

for i in range(row + 1, 15):
if self.board[col] == player:
count += 1
else:
break

if count == 5:
print(f"Player {player} wins!")
exit()

# Check diagonal win (top-left to bottom-right)
count = 1
i, j = row - 1, col - 1
while i >= 0 and j >= 0:
if self.board[j] == player:
count += 1
else:
break
i -= 1
j -= 1

i, j = row + 1, col + 1
while i < 15 and j < 15:
if self.board[j] == player:
count += 1
else:
break
i += 1
j += 1

if count == 5:
print(f"Player {player} wins!")
exit()

# Check diagonal win (top-right to bottom-left)
count = 1
i, j = row - 1, col + 1
while i >= 0 and j < 15:
if self.board[j] == player:
count += 1
else:
break
i -= 1
j += 1

i, j = row + 1, col - 1
while i < 15 and j >= 0:
if self.board[j] == player:
count += 1
else:
break
i += 1
j -= 1

if count == 5:
print(f"Player {player} wins!")
exit()

# Check for draw
if self.captured_pairs['X'] + self.captured_pairs['O'] == 112:
print("Draw!")
exit()

def print_board(self):
print(" " + " ".join(map(str, [chr(i) for i in range(ord('a'), ord('o') + 1)])))
for i in range(15):
row = [self.board[j] if self.board[j] != ' ' else '.' for j in range(15)]
print(f"{i + 1:2d} {' '.join(row)}")

def play_game():
board = GameBoard()
while True:
board.print_board()
player = 'X' if board.player == 'X' else 'O'
row = int(input(f"Player {player}, enter row: ")) - 1
col = ord(input(f"Player {player}, enter column: ").lower()) - ord('a')
if board.is_valid_move(row, col):
board.make_move(row, col)
else:
print("Invalid move, try again.")

if __name__ == "__main__":
play_game()

Swap2 opening code:
class GameBoard:
def __init__(self):
self.board = [[' ' for _ in range(15)] for _ in range(15)]
self.player = None
self.captured_pairs = {'X': 0, 'O': 0}

def is_valid_move(self, row, col):
return 0 <= row < 15 and 0 <= col < 15 and self.board[row][col] == ' '

def make_move(self, row, col):
self.board[row][col] = self.player
self.check_captures(row, col)
self.check_win(row, col)
self.player = 'O' if self.player == 'X' else 'X'

# ... (the rest of the GameBoard class remains the same)

def pie_rule_opening():
board = GameBoard()
print("Pie rule opening:")
print("Player X, place two X pieces and one O piece on the board.")
while True:
row1 = int(input("Enter row for X: ")) - 1
col1 = ord(input("Enter column for X: ").lower()) - ord('a')
if board.is_valid_move(row1, col1):
board.board[row1][col1] = 'X'
break
else:
print("Invalid move, try again.")

while True:
row2 = int(input("Enter row for X: ")) - 1
col2 = ord(input("Enter column for X: ").lower()) - ord('a')
if board.is_valid_move(row2, col2):
board.board[row2][col2] = 'X'
break
else:
print("Invalid move, try again.")

while True:
row3 = int(input("Enter row for O: ")) - 1
col3 = ord(input("Enter column for O: ").lower()) - ord('a')
if board.is_valid_move(row3, col3):
board.board[row3][col3] = 'O'
break
else:
print("Invalid move, try again.")

board.print_board()

print("Player O, choose an option:")
print("1. Place an O piece on the board and play as O.")
print("2. Switch pieces and play as X.")
print("3. Add one X and one O piece, and let X choose who plays first.")

choice = int(input("Enter your choice (1, 2, or 3): "))

if choice == 1:
board.player = 'O'
while True:
row = int(input("Player O, enter row: ")) - 1
col = ord(input("Player O, enter column: ").lower()) - ord('a')
if board.is_valid_move(row, col):
board.make_move(row, col)
break
else:
print("Invalid move, try again.")
elif choice == 2:
board.player = 'X'
while True:
row = int(input("Player O, enter row for O: ")) - 1
col = ord(input("Player O, enter column for O: ").lower()) - ord('a')
if board.is_valid_move(row, col):
board.board[row][col] = 'O'
break
else:
print("Invalid move, try again.")
elif choice == 3:
while True:
row1 = int(input("Player O, enter row for X: ")) - 1
col1 = ord(input("Player O, enter column for X: ").lower()) - ord('a')
if board.is_valid_move(row1, col1):
board.board[row1][col1] = 'X'
break
else:
print("Invalid move, try again.")

while True:
row2 = int(input("Player O, enter row for O: ")) - 1
col2 = ord(input("Player O, enter column for O: ").lower()) - ord('a')
if board.is_valid_move(row2, col2):
board.board[row2][col2] = 'O'
break
else:
print("Invalid move, try again.")

board.print_board()
player_choice = input("Player X, choose who plays first (X or O): ").upper()
if player_choice == 'X':
board.player = 'X'
else:
board.player = 'O'
else:
print("Invalid choice, starting a new game.")
return play_game()

return board

def play_game():
board = pie_rule_opening()
while True:
board.print_board()
player = board.player
row = int(input(f"Player {player}, enter row: ")) - 1
col = ord(input(f"Player {player}, enter column: ").lower()) - ord('a')
if board.is_valid_move(row, col):
board.make_move(row, col)
else:
print("Invalid move, try again.")

if __name__ == "__main__":
play_game()

Does it work? Dunno.


Retired from TB Pente, but still playing live games & exploring variants like D, poof and boat
Replies: 0   Views: 7,397   Pages: 1  
Back to Topic List
Topics: [ Previous | Next ]


Powered by Jive Software