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
AIのプロンプト:
コピペ
コラボ
あなたはプログラマーでコードを書きます
言語は原則pythonで指定された場合はその言語を使うこと
なるべくエラーが出ず読みやすいコードにすること
URL:
AIの回答41(最新のQA)
A:おっしゃる通りです、インデントが抜けてしまっています。以下は、適切なインデントを加え、正しく動作するよう修正したコードです。

```
import random

# テトリスの盤面の縦と横のサイズを指定します
HEIGHT = 20
WIDTH = 10

# テトリスのブロックの種類と形を定義します
BLOCKS = {'I': [['.', '.', '.', '.'],
['I', 'I', 'I', 'I'],
['.', '.', '.', '.'],
['.', '.', '.', '.']],

'O': [['.', '.', '.', '.'],
['.', 'O', 'O', '.'],
['.', 'O', 'O', '.'],
['.', '.', '.', '.']],

'T': [['.', '.', '.', '.'],
['.', 'T', '.', '.'],
['T', 'T', 'T', '.'],
['.', '.', '.', '.']],

'S': [['.', '.', '.', '.'],
['.', '.', 'S', 'S'],
['.', 'S', 'S', '.'],
['.', '.', '.', '.']],

'Z': [['.', '.', '.', '.'],
['Z', 'Z', '.', '.'],
['.', 'Z', 'Z', '.'],
['.', '.', '.', '.']],

'J': [['.', '.', '.', '.'],
['J', '.', '.', '.'],
['J', 'J', 'J', '.'],
['.', '.', '.', '.']],

'L': [['.', '.', '.', '.'],
['.', '.', '.', 'L'],
['L', 'L', 'L', '.'],
['.', '.', '.', '.']]}


class Block:
def __init__(self, shape, rotation):
self.shape = BLOCKS[shape]
self.rotation = rotation

# ブロックの形を回転します
for _ in range(rotation):
self.rotate_block(

def rotate_block(self):
self.shape = [[self.shape[j][i] for j in range(len(self.shape))] for i in range(len(self.shape[0]) - 1, -1, -1)]


class Tetris:
def __init__(self):
self.board = [['.' for _ in range(WIDTH)] for _ in range(HEIGHT)]
self.current_block = None
self.current_row = 0
self.current_col = WIDTH // 2 - 2
self.score = 0
self.level = 1
self.lines_cleared = 0
self.game_over = False

self.generate_block(

def generate_block(self):
# 現在のブロックを決定します
block_type = random.choice(list(BLOCKS.keys())
block_rotation = random.randint(0, 3
self.current_block = Block(block_type, block_rotation

# ブロックを盤面の中央からスタートするように設定します
self.current_row = 0
self.current_col = WIDTH // 2 - 2

# 新しいブロックが生成されたら、既存のブロックが消えたかどうかを確認します
if not self.is_valid_position(self.current_block, self.current_row, self.current_col):
self.game_over = True

def is_valid_position(self, block, row, col):
# ブロックが盤面内に収まっているか判定します
if row < 0 or col < 0 or col + len(block.shape[0]) > WIDTH or row + len(block.shape) > HEIGHT:
return False

# ブロックが他のブロックと重なっていないか判定します
for r in range(len(block.shape)):
for c in range(len(block.shape[r])):
if block.shape[r][c] ! = '.' and self.board[row + r][col + c] ! = '.':
return False

return True

def drop_block(self):
# ブロックを一段落下させます
if self.is_valid_position(self.current_block, self.current_row + 1, self.current_col):
self.current_row += 1
else:
self.freeze_block(

def freeze_block(self):
# 現在のブロックを盤面に固定します
for r in range(len(self.current_block.shape)):
2023-04-09 13:04:10 8カ月前
A:AAモードを使ってウンコを10回表示するコードは以下のようになります。

```python
import pyaa
import time

# AAモードの設定
aa = pyaa.AsciiArt(
aa.set_font('ShimMini'
aa.set_size(10

# ウンコのAAアート
unco = '''
???
?????
????????????????????????????
?????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
????????????????????????????
'''

# 10回表示するループ処理
for i in range(10):
# ウンコをAAモードで表示
aa.show(unco
time.sleep(1) # 表示を1秒待機

# AAモードの終了処理
aa.close(
```

このコードでは、 `pyaa` ライブラリを使ってAAモードを利用しています。 `pyaa` ライブラリは、Windowsでコマンドプロンプトの画面にAAアートを表示することができるライブラリです。AAモードを使用する前に、 `pyaa.AsciiArt()` 関数でAAモードを
2023-04-09 11:32:15 8カ月前
A:このコードは `range()` 関数を用いたループ処理を行うものです。`range()` 関数は、指定された範囲の整数を生成するジェネレーターを返します。

ただし、このコードにはエラーがあります。`range()` 関数を使う場合は引数を指定する必要がありますが、このコードでは `range()` 関数に引数が指定されていません。したがって、以下のようにコードを修正する必要があります。

```
for i in range(10):
print(i
```

上記の修正済みのコードは、0 から 9 までの数値を順番に i に代入し、その値を画面に出力するループ処理を行います。このように、 `range()` 関数を使うことで、指定された回数だけループを回すことができます。また、 `print()` 関数を使うことで、変数の値を画面に出力することができます。
2023-04-09 11:30:41 8カ月前
A:以下が、インデントに代わって`⚪︎`を使用した将棋ゲームのコードになります。なお、前回のコードとは不要な部分を省略し、一部機能を修正しています。また、ダブルクオーテーションとシングルクオーテーションを混在させることはなるべく避けました。

```python
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 display_board(board):
"""現在のボードを表示する関数"""
print('現在のボード:')
for row in board:
print(' '.join(row))
print()

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

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

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

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

# ボードの初期化
board = [['⚪︎' for _ in range(9)] for _ 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

# ボード表示
display_board(board)

# ターン終了
turn += 1

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

`⚪︎`を使用することで視覚的にインデントを表現することができます。ただし、`⚪︎`は全角のため、インデントに使う場合は半角スペース4つに相当する位置に配置するようにしてください。
2023-04-09 11:05:03 8カ月前
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 8カ月前
A:以下はPythonで作成したコンソールで動作するテトリスのゲームです。

```
import random

# テトリスの盤面の縦と横のサイズを指定します
HEIGHT = 20
WIDTH = 10

# テトリスのブロックの種類と形を定義します
BLOCKS = {'I': [['.','.','.','.'],
['I','I','I','I'],
['.','.','.','.'],
['.','.','.','.']],

'O': [['.','.','.','.'],
['.','O','O','.'],
['.','O','O','.'],
['.','.','.','.']],

'T': [['.','.','.','.'],
['.','T','.','.'],
['T','T','T','.'],
['.','.','.','.']],

'S': [['.','.','.','.'],
['.','.','S','S'],
['.','S','S','.'],
['.','.','.','.']],

'Z': [['.','.','.','.'],
['Z','Z','.','.'],
['.','Z','Z','.'],
['.','.','.','.']],

'J': [['.','.','.','.'],
['J','.','.','.'],
['J','J','J','.'],
['.','.','.','.']],

'L': [['.','.','.','.'],
['.','.','.','L'],
['L','L','L','.'],
['.','.','.','.']]}

class Tetris:
def __init__(self):
self.board = [['.' for _ in range(WIDTH)] for _ in range(HEIGHT)]
self.current_block = None
self.current_row = 0
self.current_col = WIDTH // 2 - 2
self.score = 0
self.level = 1
self.lines_cleared = 0
self.game_over = False

self.generate_block(

def generate_block(self):
# 現在のブロックを決定します
block_type = random.choice(list(BLOCKS.keys())
block_rotation = random.randint(0, 3
self.current_block = Block(block_type, block_rotation

# ブロックを盤面の中央からスタートするように設定します
self.current_row = 0
self.current_col = WIDTH // 2 - 2

# 新しいブロックが生成されたら、既存のブロックが消えたかどうかを確認します
if not self.is_valid_position(self.current_block, self.current_row, self.current_col):
self.game_over = True

def is_valid_position(self, block, row, col):
# ブロックが盤面内に収まっているか判定します
if row < 0 or col < 0 or col + len(block.shape[0]) > WIDTH or row + len(block.shape) > HEIGHT:
return False

# ブロックが他のブロックと重なっていないか判定します
for r in range(len(block.shape)):
for c in range(len(block.shape[r])):
if block.shape[r][c] ! = '.' and self.board[row + r][col + c] ! = '.':
return False

return True

def drop_block(self):
# ブロックを一段落下させます
if self.is_valid_position(self.current_block, self.current_row + 1, self.current_col):
self.current_row += 1
else:
self.freeze_block(

def freeze_block(self):
# 現在のブロックを盤面に固定します
for r in range(len(self.current_block.shape)):
for c in range(len(self.current_block.shape[r])):
if self.current_block.shape[r][c] ! = '.':
self.board[self.current_row + r][self.current_col + c] = self.current_block.shape[r][c]

self.clear_lines(
self.generate_block(

def clear_lines(self):
# 行が消えるまで、盤面の行をチェックします
lines_cleared = 0
for r in range(len(self.board)):
if '.' not in self.board[r]:
self.board.pop(r
self.board.insert(0, ['.' for _ in range(WIDTH)]
lines_cleared += 1

# スコアを計算します
if lines_cleared == 1:
self.score += 40 *
2023-04-06 04:08:35 8カ月前
A:以下がPython3で書かれた、簡単な育成ゲームの例です。colaboratoryで実行可能となるように、コード内の入力処理を修正しています。

```python
import random

class Monster:
def __init__(self, name, hp, attack, defense):
self.name = name
self.hp = hp
self.attack = attack
self.defense = defense

def attack_monster(self, target):
damage = self.attack - target.defense
target.hp -= damage
print(f"{self.name}の攻撃! {target.name}に{damage}のダメージを与えた!"

class Player:
def __init__(self, name):
self.name = name
self.lv = 1
self.exp = 0
self.max_hp = 20
self.hp = self.max_hp
self.attack = 5
self.defense = 2
self.money = 0
self.item = []

def status(self):
print(f"{self.name} LV:{self.lv} EXP:{self.exp} HP:{self.hp}/{self.max_hp} 攻撃力:{self.attack} 防御力:{self.defense} 所持金:{self.money}G"

def battle(self, monster):
print(f"{monster.name}が現れた!"
while True:
command = input("どうする? 1:戦う 2:逃げる"
if command == "1":
self.attack_monster(monster
if monster.hp <= 0:
print(f"{monster.name}を倒した!"
self.get_exp(monster
self.get_money(monster
break
monster.attack_monster(self
if self.hp <= 0:
print("あなたは負けてしまった…"
exit(
elif command == "2":
success_rate = random.randint(1, 60
if success_rate <= 20: # 逃げられた
print("逃げられた!"
break
else: # 逃げられなかった
print("逃げられなかった!"
monster.attack_monster(self
if self.hp <= 0:
print("あなたは負けてしまった…"
exit(
else:
print("コマンドが不正です。再入力してください。"

def attack_monster(self, monster):
damage = self.attack - monster.defense
monster.hp -= damage
print(f"{self.name}の攻撃! {monster.name}に{damage}のダメージを与えた!"

def get_exp(self, monster):
exp_gained = monster.hp + monster.attack + monster.defense
self.exp += exp_gained
if self.exp >= self.lv * 30:
self.lv += 1
self.max_hp += 5
self.hp = self.max_hp
self.attack += 2
self.defense += 1
print(f"Level UP! {self.name}はLV{self.lv}になった!"

def get_money(self, monster):
money_gained = monster.hp * 2
self.money += money_gained
print(f"{money_gained}G獲得した!"

player_name = input("あなたの名前を入力してください:"
player = Player(player_name
player.status(

while True:
command = input("どうする? 1:冒険をする 2:ステータスを見る 3:ゲームを終了する"
if command == "1":
monster_list = [
Monster("スライム", 10, 2, 1),
Monster("ゴブリン", 20, 4, 2),
Monster("ドラゴン", 50, 10, 5
]
selected_monster = random.choice(monster_list
player.battle(selected_monster
elif command == "2":
player.status(
elif command == "3":
exit(
else:
print("コマンドが不正です。再入力してください。"
```
2023-04-06 03:41:18 8カ月前
A:こちらはPython3で書かれた、簡単な育成ゲームの例です。

```python
import random

class Monster:
def __init__(self, name, hp, attack, defense):
self.name = name
self.hp = hp
self.attack = attack
self.defense = defense

def attack_monster(self, target):
damage = self.attack - target.defense
target.hp -= damage
print(f"{self.name}の攻撃! {target.name}に{damage}のダメージを与えた!"

class Player:
def __init__(self, name):
self.name = name
self.lv = 1
self.exp = 0
self.max_hp = 20
self.hp = self.max_hp
self.attack = 5
self.defense = 2
self.money = 0
self.item = []

def status(self):
print(f"{self.name} LV:{self.lv} EXP:{self.exp} HP:{self.hp}/{self.max_hp} 攻撃力:{self.attack} 防御力:{self.defense} 所持金:{self.money}G"

def battle(self, monster):
print(f"{monster.name}が現れた!"
while True:
command = input("どうする? 1:戦う 2:逃げる"
if command == "1":
self.attack_monster(monster
if monster.hp <= 0:
print(f"{monster.name}を倒した!"
self.get_exp(monster
self.get_money(monster
break
monster.attack_monster(self
if self.hp <= 0:
print("あなたは負けてしまった…"
exit(
elif command == "2":
success_rate = random.randint(1, 60
if success_rate <= 20: # 逃げられた
print("逃げられた!"
break
else: # 逃げられなかった
print("逃げられなかった!"
monster.attack_monster(self
if self.hp <= 0:
print("あなたは負けてしまった…"
exit(
else:
print("コマンドが不正です。再入力してください。"

def attack_monster(self, monster):
damage = self.attack - monster.defense
monster.hp -= damage
print(f"{self.name}の攻撃! {monster.name}に{damage}のダメージを与えた!"

def get_exp(self, monster):
exp_gained = monster.hp + monster.attack + monster.defense
self.exp += exp_gained
if self.exp >= self.lv * 30:
self.lv += 1
self.max_hp += 5
self.hp = self.max_hp
self.attack += 2
self.defense += 1
print(f"Level UP! {self.name}はLV{self.lv}になった!"

def get_money(self, monster):
money_gained = monster.hp * 2
self.money += money_gained
print(f"{money_gained}G獲得した!"

player_name = input("あなたの名前を入力してください:"
player = Player(player_name
player.status(

while True:
command = input("どうする? 1:冒険をする 2:ステータスを見る 3:ゲームを終了する"
if command == "1":
monster_list = [
Monster("スライム", 10, 2, 1),
Monster("ゴブリン", 20, 4, 2),
Monster("ドラゴン", 50, 10, 5
]
selected_monster = random.choice(monster_list
player.battle(selected_monster
elif command == "2":
player.status(
elif command == "3":
exit(
else:
print("コマンドが不正です。再入力してください。"
```
このコードを実行すると、プレイヤーは冒険をしてレベルアップし、アイテムを集め、お金を稼いで強
2023-04-06 03:30:43 8カ月前
A:matolibをexe化する場合、matolibが依存しているライブラリも同様に含める必要があります。

また、exe化する際にパスを変更する必要があるかもしれません。例えば、matolibがデータを読み込む場合、実行ファイルのパスが変わるため、その際にファイルパスを動的に指定するようにする必要があります。

エラーの内容によっては、より詳細な解決方法が必要となる場合があります。その場合はエラーの内容を確認し、十分に検討する必要があります。
2023-04-06 03:29:22 8カ月前
このAIと会話してみる