2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ChatGPTを使ってオセロゲームを作ってみた

Posted at

ChatGPTさんが話題になっているので、遅ればせながらオセロゲームを作成してみました

オセロゲームを作りたいとChatGPTさんにお願い

まずは、下記のようにChatGPTさんに入力してみました
image.png

そうしたら、早速ソースコードを出力してくれました。
image.png

吐き出された内容を書き記すと、

class Othero:
    def __init__(self):
        self.board = [[' ' for _ in range(6)] for _ in range(6)]
        self.board[2][2] = 'W'
        self.board[3][3] = 'W'
        self.board[2][3] = 'B'
        self.board[3][2] = 'B'
        self.current_player = 'B'

    def display_board(self):
        print('  0 1 2 3 4 5')
        for i in range(6):
            print(f'{i} {" ".join(self.board[i])}')
        print()

    def make_move(self, row, col):
        if self.board[row][col] != ' ':
            return False
        self.board[row][col] = self.current_player
        self.current_player = 'W' if self.current_player == 'B' else 'B'
        return True

    def is_valid_move(self, row, col):
        if self.board[row][col] != ' ':
            return False
        for dr, dc in [(0, 1), (0, -1), (1, 0), (-1, 0), (1, 1), (-1, -1), (1, -1), (-1, 1)]:
            r, c = row + dr, col + dc
            while 0 <= r < 6 and 0 <= c < 6 and self.board[r][c] != ' ' and self.board[r][c] != self.current_player:
                r += dr
                c += dc
            if 0 <= r < 6 and 0 <= c < 6 and self.board[r][c] == self.current_player and (r != row + dr or c != col + dc):
                return True
        return False

    def get_valid_moves(self):
        valid_moves = []
        for i in range(6):
            for j in range(6):
                if self.is_valid_move(i, j):
                    valid_moves.append((i, j))
        return valid_moves

    def get_winner(self):
        black_count = 0
        white_count = 0
        for i in range(6):
            for j in range(6):
                if self.board[i][j] == 'B':
                    black_count += 1
                elif self.board[i][j] == 'W':
                    white_count += 1
        if black_count > white_count:
            return 'B'
        elif white_count > black_count:
            return 'W'
        else:
            return None

さらっと見た感じなんとなく動きそうに見えますね~

Let's動作確認!

ので、GoogleColaboratoryを使ってソースコードを実行してみる
image.png

おぉー、出されたソースコードだけでちゃんと表示されている!
マス目の区切りなどの細かいものはないものの、ちゃんとゲームとして遊べそうな期待感を持たせてくれます
では、実際にソースコードを書いてみて、遊んでみましょう!

objOthero = Othero()

while True:
    objOthero.display_board()
    print('You can move ')
    print(objOthero.get_valid_moves())
    print('Input Row')
    moverow = int(input())
    print('Input Column')
    movecol = int(input())
    objOthero.make_move(moverow, movecol)
    if objOthero.get_valid_moves() == []:
        objOthero.display_board()
        print(objOthero.get_winner())
        break

同じくColaboratoryを使用して、上記のソースコードを実行してみると…
image.png

なぬ…
オセロのはずなのに、挟んだ駒が裏返ってくれない…だと…
これではゲームとして遊べないじゃないか!

ChatGPTさんへ苦情

ということで、ChatGPTさんに駒が裏返らないことを伝えてみました。
image.png

なんと、駒を置くときのmake_move関数の改善版を作ってくれました!!!

改善版をいざ実行!

では、実際にこの改善版のコードへ差し替えて実行してみましょう!
image.png

無事に挟んだ駒がひっくり返ってくれました!
そして、最後まで実行することもできました!
image.png

改善できるところは多そうですが、大枠のところをChatGPTさんで作ることができることがよくわかりました!
またいろいろと試してみたいと思います!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?