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:おっしゃる通りです、インデントが抜けてしまっています。以下は、適切なインデントを加え、正しく動作するよう修正したコードです。

```
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 10カ月前