AIメーカー

チャットAIを作れる、AIと遊べる
powered by ONJ.open2ch
トップに戻る

!ai にコードを書かせよう

ソース:http://hayabusa.open2ch.net/test/read.cgi/livejupiter/1680688639/
open2chさん 2023-04-05 18:57:19
概要を見る AIとチャット41
一覧に戻る
表示範囲:
A:具体的なルールとしては以下の通りとします。

1. プログラムはpythonで書きます。
2. 利用するライブラリは自由ですが、できるだけ標準ライブラリ内で実装するようにします。
3. インデントはスペース4つの半角空白で行います。
4. 変数や関数の命名には、なるべく意味のある名前を使用します。
5. コードの意図が分かりやすくなるように、必要に応じてコメントを入れます。

以下に、将棋ゲームのコードを示します。

```
# -*- coding: utf-8 -*-

import random

def select_pieces(player):
"""プレイヤーが選択できる駒のリストを返す関数"""
if player == "先手":
return ["玉", "飛", "角", "金", "銀", "桂", "香", "歩"]
else:
return ["玉", "飛", "角", "金", "銀", "桂", "香", "歩"]

def shuffle_pieces():
"""駒の並びをシャッフルする関数"""
all_pieces = ["玉", "飛", "角", "金", "銀", "桂", "香", "歩"] * 2
random.shuffle(all_pieces)
return all_pieces

def play_shogi():
"""将棋ゲームをプレイする関数"""
print("将棋ゲームを開始します")

player1 = input("先手のプレイヤー名を入力してください > ")
player2 = input("後手のプレイヤー名を入力してください > ")

# 先手・後手の初期駒選択
pieces1 = select_pieces("先手")
pieces2 = select_pieces("後手")

# 先手・後手の駒をシャッフル
shuffled_pieces = shuffle_pieces()

# ボードの初期化
board = [[" " for x in range(9)] for y in range(9)]

# 先手・後手の駒を配置
for i, piece in enumerate(shuffled_pieces):
if i < 18:
x, y = divmod(i, 9)
board[x][y] = piece
else:
break

# ターン管理用変数
turn = 1

# ゲーム開始
while True:
# ターンプレイヤーの選択
if turn % 2 == 1:
player = player1
pieces = pieces1
else:
player = player2
pieces = pieces2

# ターンプレイヤーに駒選択
while True:
print("{}の番です".format(player))
print("残っている駒は以下の通りです:")
for i, piece in enumerate(pieces):
print("{}: {}".format(i+1, piece))

piece_id = int(input("どの駒を使いますか? > "))
if piece_id < 1 or piece_id > len(pieces):
print("正しい番号を選んでください")
else:
break

# 駒を配置
while True:
x = int(input("x座標を選んでください > "))
y = int(input("y座標を選んでください > "))

if x < 0 or x > 8 or y < 0 or y > 8:
print("正しい座標を選んでください")
elif board[x][y] != " ":
print("その場所には既に駒があります")
else:
board[x][y] = pieces.pop(piece_id-1)
break

# ボード表示
print("現在のボード:")
for row in board:
print(row)

# ターン終了
turn += 1

# 終了判定
if "玉" not in pieces1 or "玉" not in pieces2:
winner = player1 if "玉" not in pieces2 else player2
print("{}の勝ちです!".format(winner))
break
```

このコードでは、まずプレイヤー名の入力を受け取ります。その後、先手・後手それぞれが選択できる駒をリストとして用意し、駒の並びをシャッフルします。次に、初期状態のボードを2次元リストとして表現し、駒をランダムに配置します。

その後、先手から順に駒を選択して配置する操作を繰り返します。ターンプレイヤーが選択できる駒は、事前に選択したリストから選択することができます。また、駒の配置は空いているマスから選んで行います。

最後に、勝敗が決した場合はその旨を表示してゲームを終了します。このコードでは、勝敗の判定は玉の有無で行うことにしていますが、将棋のルールによっては他の条件が必要な場合もあります。
2023-04-09 11:02:28 10カ月前