日々改善

今日の問題を明日に残さない!問題解決を図って行く様をリアルに描写していきます。経営コンサルの視点で物事を見ていきます。

チョロっ! オセロゲームのプログラミングできた✨

2024-08-25 | つれづれ
私の能登半島大震災が発生する直前の今年の目標が「プログラミングを習得する」でした。


ガハハハハ。。。
やりました!
作りました!
オセロゲーム♪
もちろん市販されているようなものではなく
超初心者が作った初歩中の初歩のものです。

ちなみに、出来上がって、ゲームを動かしたのが下記のような感じです。

Invalid input. Please enter two numbers separated by a space.
0 1 2 3 4 5 6 7
0
1
2
3   W B
4   B W
5
6
7
Current player: Black
Enter row and column (e.g. '3 4'): 3 2
0  1  2  3  4  5  6  7
0
1
2
3    B B B
4       B W
5
6
7
Current player: White
Enter row and column (e.g. '3 4'):

上記のプログラムを動かすためのコードが下記のプログラムです。

class Othello:
def __init__(self):
self.board = [[' ' for _ in range(8)] for _ in range(8)]
self.board[3][3] = self.board[4][4] = 'W'
self.board[3][4] = self.board[4][3] = 'B'
self.current_player = 'B'


def print_board(self):
print(' 0 1 2 3 4 5 6 7')
for i, row in enumerate(self.board):
print(i, ' '.join(row))


def is_valid_move(self, row, col):
if self.board[row][col] != ' ':
return False


for dr in [-1, 0, 1]:
for dc in [-1, 0, 1]:
if dr == 0 and dc == 0:
continue
if self.would_flip(row, col, dr, dc):
return True
return False


def would_flip(self, row, col, dr, dc):
r, c = row + dr, col + dc
if not (0 <= r < 8 and 0 <= c < 8) or self.board[r][c] == self.current_player:
return False
while 0 <= r < 8 and 0 <= c < 8 and self.board[r][c] != ' ':
if self.board[r][c] == self.current_player:
return True
r, c = r + dr, c + dc
return False


def make_move(self, row, col):
if not self.is_valid_move(row, col):
return False


self.board[row][col] = self.current_player
for dr in [-1, 0, 1]:
for dc in [-1, 0, 1]:
if dr == 0 and dc == 0:
continue
self.flip(row, col, dr, dc)


self.current_player = 'W' if self.current_player == 'B' else 'B'
return True


def flip(self, row, col, dr, dc):
if not self.would_flip(row, col, dr, dc):
return
r, c = row + dr, col + dc
while self.board[r][c] != self.current_player:
self.board[r][c] = self.current_player
r, c = r + dr, c + dc


def has_valid_move(self):
for row in range(8):
for col in range(8):
if self.is_valid_move(row, col):
return True
return False


def play(self):
while True:
self.print_board()
if not self.has_valid_move():
self.current_player = 'W' if self.current_player == 'B' else 'B'
if not self.has_valid_move():
break
print(f"No valid moves for {('Black' if self.current_player == 'B' else 'White')}. Skipping turn.")
continue


print(f"Current player: {('Black' if self.current_player == 'B' else 'White')}")
try:
row, col = map(int, input("Enter row and column (e.g. '3 4'): ").split())
if self.make_move(row, col):
pass
else:
print("Invalid move. Try again.")
except ValueError:
print("Invalid input. Please enter two numbers separated by a space.")


self.print_board()
black_count = sum(row.count('B') for row in self.board)
white_count = sum(row.count('W') for row in self.board)
print(f"Game over! Black: {black_count}, White: {white_count}")
if black_count > white_count:
print("Black wins!")
elif white_count > black_count:
print("White wins!")
else:
print("It's a tie!")


if __name__ == "__main__":
game = Othello()
game.play()

やった!
プログラマーになれるかも♪←なれんなれん!

今回のオセロゲームは
プログラム言語にPython
製作支援(いや、メイン?)にChatGPT
プログラム作成は、Claudeです。

ちなみに、私が出したプロンプトは
Claudeに「オセロゲームを作って下さい」
ChatGPTに「Pythonの使い方を教えて」
「修正が有ったら直してください」
「ゲームが動かないので原因を探し、解決策を教えてください」
「遊び方を教えてください」とわがまま放題を言って
オセロゲームが無事動きました。

初歩中の初歩のプログラミングですが
まったくコードも何もわからないですが
自分で作った(正確にはClaudeに作って貰った)初のプログラミングということで
今年の抱負のひとつはクリアしたということにしましょうヽ(^。^)ノ

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ビジネスを加速させる4大AI:... | トップ | 不安しかない »

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

つれづれ」カテゴリの最新記事