ChatGPTさんが話題になっているので、遅ればせながらオセロゲームを作成してみました
オセロゲームを作りたいとChatGPTさんにお願い
吐き出された内容を書き記すと、
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を使ってソースコードを実行してみる
おぉー、出されたソースコードだけでちゃんと表示されている!
マス目の区切りなどの細かいものはないものの、ちゃんとゲームとして遊べそうな期待感を持たせてくれます
では、実際にソースコードを書いてみて、遊んでみましょう!
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を使用して、上記のソースコードを実行してみると…
なぬ…
オセロのはずなのに、挟んだ駒が裏返ってくれない…だと…
これではゲームとして遊べないじゃないか!
ChatGPTさんへ苦情
ということで、ChatGPTさんに駒が裏返らないことを伝えてみました。
なんと、駒を置くときのmake_move関数の改善版を作ってくれました!!!
改善版をいざ実行!
では、実際にこの改善版のコードへ差し替えて実行してみましょう!
無事に挟んだ駒がひっくり返ってくれました!
そして、最後まで実行することもできました!
改善できるところは多そうですが、大枠のところをChatGPTさんで作ることができることがよくわかりました!
またいろいろと試してみたいと思います!