VSCodeライクでAIに対応したCursorを試してみました。これはやばいですね。
あるサイトでちらっと見かけたので試してみたところ、オセロのプログラムをノーコードで本当に書けちゃいました。これはプログラマーの仕事を超効率化することでしょう。Pythonだけでなく、Arduinoの拡張機能も使えたので、応用範囲は広そうです。
指示したプロンプトは、たったのこれだけ。
- オセロゲームのプログラムを作ってください。
- オセロで駒を入力した後、裏表の判定が行われていません。
- 2コマ以上連続した判定がないようです。
- オセロでは相手の駒を裏返せない所に駒を置くことができません。その場合には、そのターンをパスするようなコードに修正してください。
- 置くべき駒の位置が理解しにくいようです。オセロ盤の罫線と、行、列にそれぞれ番号を追加してください。
- 入力待ちのメッセージに、〇か×か、どちらのターンかわかるように明示してください。
# Othello game in Python
class Othello:
def __init__(self):
self.board = [[‘ ‘ for _ in range(8)] for _ in range(8)]
self.board[3][3] = ‘X’
self.board[3][4] = ‘O’
self.board[4][3] = ‘O’
self.board[4][4] = ‘X’
self.player = ‘X’
def print_board(self):
print(” 0 1 2 3 4 5 6 7″)
print(” +—————+”)
for i, row in enumerate(self.board):
print(f”{i}|{‘ ‘.join(row)}|”)
print(” +—————+”)
print()
def is_valid_move(self, x, y):
if self.board[x][y] != ‘ ‘:
return False
directions = [(0, 1), (1, 0), (0, -1), (-1, 0), (1, 1), (-1, -1), (1, -1), (-1, 1)]
opponent = ‘O’ if self.player == ‘X’ else ‘X’
for dx, dy in directions:
nx, ny = x + dx, y + dy
while 0 <= nx < 8 and 0 <= ny < 8 and self.board[nx][ny] == opponent:
nx += dx
ny += dy
if 0 <= nx < 8 and 0 <= ny < 8 and self.board[nx][ny] == self.player:
return True
return False
def flip_pieces(self, x, y):
directions = [(0, 1), (1, 0), (0, -1), (-1, 0), (1, 1), (-1, -1), (1, -1), (-1, 1)]
opponent = ‘O’ if self.player == ‘X’ else ‘X’
for dx, dy in directions:
nx, ny = x + dx, y + dy
to_flip = []
while 0 <= nx < 8 and 0 <= ny < 8 and self.board[nx][ny] == opponent:
to_flip.append((nx, ny))
nx, ny = nx + dx, ny + dy
if 0 <= nx < 8 and 0 <= ny < 8 and self.board[nx][ny] == self.player:
for fx, fy in to_flip:
self.board[fx][fy] = self.player
def make_move(self, x, y):
if not self.is_valid_move(x, y):
return False
self.board[x][y] = self.player
self.flip_pieces(x, y)
self.player = ‘O’ if self.player == ‘X’ else ‘X’
return True
def game_over(self):
for row in self.board:
if ‘ ‘ in row:
return False
return True
if __name__ == “__main__”:
game = Othello()
while not game.game_over():
game.print_board()
while True:
user_input = input(f”{game.player}’s turn. Enter your move: “).split()
if len(user_input) == 2:
try:
x, y = map(int, user_input)
if game.make_move(x, y):
break
except ValueError:
print(“Invalid input. Please enter two integers.”)
else:
print(“Invalid input. Please enter two integers.”)