オセロゲームできました
今回もChatGPTに頼んで5分で作って貰いました(笑)
Pythonがまったくわからないのでこのまま続けても進歩できなさそうですが…
とにかく、コードを公開します!
コード公開
# オセロ(リバーシ)二人用・ターミナル版
BOARD_SIZE = 8
EMPTY, BLACK, WHITE = '.', '●', '○'
DIRECTIONS = [(-1, -1), (-1, 0), (-1, 1),
(0, -1), (0, 1),
(1, -1), (1, 0), (1, 1)]
def create_board():
board = [[EMPTY for _ in range(BOARD_SIZE)] for _ in range(BOARD_SIZE)]
mid = BOARD_SIZE // 2
board[mid - 1][mid - 1], board[mid][mid] = WHITE, WHITE
board[mid - 1][mid], board[mid][mid - 1] = BLACK, BLACK
return board
def print_board(board):
print(" " + " ".join(map(str, range(BOARD_SIZE))))
for i, row in enumerate(board):
print(i, " ".join(row))
def on_board(x, y):
return 0 <= x < BOARD_SIZE and 0 <= y < BOARD_SIZE
def valid_moves(board, player):
opponent = WHITE if player == BLACK else BLACK
moves = []
for x in range(BOARD_SIZE):
for y in range(BOARD_SIZE):
if board[x][y] != EMPTY:
continue
for dx, dy in DIRECTIONS:
nx, ny = x + dx, y + dy
flipped = False
while on_board(nx, ny) and board[nx][ny] == opponent:
nx += dx
ny += dy
flipped = True
if flipped and on_board(nx, ny) and board[nx][ny] == player:
moves.append((x, y))
break
return moves
def make_move(board, x, y, player):
opponent = WHITE if player == BLACK else BLACK
board[x][y] = player
for dx, dy in DIRECTIONS:
nx, ny = x + dx, y + dy
line = []
while on_board(nx, ny) and board[nx][ny] == opponent:
line.append((nx, ny))
nx += dx
ny += dy
if on_board(nx, ny) and board[nx][ny] == player:
for px, py in line:
board[px][py] = player
def count_discs(board):
black = sum(row.count(BLACK) for row in board)
white = sum(row.count(WHITE) for row in board)
return black, white
def main():
board = create_board()
player = BLACK
while True:
print_board(board)
moves = valid_moves(board, player)
if not moves:
print(f"{player} は打てる場所がありません。パスします。")
player = WHITE if player == BLACK else BLACK
if not valid_moves(board, player):
print("どちらも打てる手がありません。ゲーム終了。")
break
continue
print(f"{player} の番です。")
print("可能な手:", moves)
try:
x, y = map(int, input("行 列 を入力(例: 2 3): ").split())
if (x, y) not in moves:
print("その位置には打てません。")
continue
except:
print("入力エラー。例: 2 3 のように入力してください。")
continue
make_move(board, x, y, player)
player = WHITE if player == BLACK else BLACK
b, w = count_discs(board)
print_board(board)
print(f"●: {b}, ○: {w}")
if b > w:
print("●(黒)の勝ち!")
elif w > b:
print("○(白)の勝ち!")
else:
print("引き分け!")
if __name__ == "__main__":
main()
今後の展開
さすがにPythonのプログラミングを勉強します!!
コメント