[ChatGPT, Cursor]プログラムレスの時代になった

VSCodeライクでAIに対応したCursorを試してみました。これはやばいですね。

あるサイトでちらっと見かけたので試してみたところ、オセロのプログラムをノーコードで本当に書けちゃいました。これはプログラマーの仕事を超効率化することでしょう。Pythonだけでなく、Arduinoの拡張機能も使えたので、応用範囲は広そうです。

指示したプロンプトは、たったのこれだけ。

  1. オセロゲームのプログラムを作ってください。
  2. オセロで駒を入力した後、裏表の判定が行われていません。
  3. 2コマ以上連続した判定がないようです。
  4. オセロでは相手の駒を裏返せない所に駒を置くことができません。その場合には、そのターンをパスするようなコードに修正してください。
  5. 置くべき駒の位置が理解しにくいようです。オセロ盤の罫線と、行、列にそれぞれ番号を追加してください。
  6. 入力待ちのメッセージに、〇か×か、どちらのターンかわかるように明示してください。

# 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.”)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です