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:以下は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 10カ月前