ソース全文
import pygame
import time
from random import *
# 初期化
pygame.init()
pygame.display.set_caption("pygame アプリ")
DISPLAY_SIZE = (480, 480) # 横, 縦
surf = pygame.display.set_mode(DISPLAY_SIZE)
# 色を定義しておく (タプル:固定)
COLOR_BG = (32, 32, 32)
# 作る個数
RECT_NUM = 30
# 座標, サイズ, 速度, 色 (リスト:変更可)
pos = []
size = []
speed = []
color = []
# リストのリストを作成
for i in range(RECT_NUM):
pos.append([randint(0, DISPLAY_SIZE[0]-64), randint(0, DISPLAY_SIZE[1]-64)])
size.append([64, 64])
speed.append([4, 4])
color.append((randint(0, 255), randint(0, 255), randint(0, 255)))
# 閉じるを押すまでループ
running = True
while running:
# 個数分処理を繰り返す
for i in range(RECT_NUM):
# 座標更新
pos[i][0] += speed[i][0]
pos[i][1] += speed[i][1]
# もし画面端にたどり着いた場合は反転
if pos[i][0] > (DISPLAY_SIZE[0] - size[i][0]) or pos[i][0] < 0:
speed[i][0] *= -1
if pos[i][1] > (DISPLAY_SIZE[1] - size[i][1]) or pos[i][1] < 0:
speed[i][1] *= -1
# 描画
surf.fill(COLOR_BG)
for i in range(RECT_NUM):
pygame.draw.rect(surf, color[i], (*pos[i], *size[i]))
pygame.display.update()
# ウェイト
time.sleep(0.016)
# イベント
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
実行すると、次のようになります。
![](動く四角形群.gif)
今回も、前回との差分箇所を説明していきます。
# 作る個数
RECT_NUM = 30
# 座標, サイズ, 速度, 色 (リスト:変更可)
pos = []
size = []
speed = []
color = []
今回は複数の四角形が動きます。それぞれの X,Y 座標を管理する必要があるため、リストのリストを作ります。サイズ等、他の要素も同様です。
# リストのリストを作成
for i in range(RECT_NUM):
pos.append([randint(0, DISPLAY_SIZE[0]-64), randint(0, DISPLAY_SIZE[1]-64)])
size.append([64, 64])
speed.append([4, 4])
color.append((randint(0, 255), randint(0, 255), randint(0, 255)))
randint
でランダムな場所に座標を設定しています。append
でリストに追加します。四角形のサイズ、速度は固定にしています。色も座標のようにランダムにしています。なお、今回は速度に Y 軸も足してみました。なので、斜めに動きます。
# 個数分処理を繰り返す
for i in range(RECT_NUM):
# 座標更新
pos[i][0] += speed[i][0]
pos[i][1] += speed[i][1]
# もし画面端にたどり着いた場合は反転
if pos[i][0] > (DISPLAY_SIZE[0] - size[i][0]) or pos[i][0] < 0:
speed[i][0] *= -1
if pos[i][1] > (DISPLAY_SIZE[1] - size[i][1]) or pos[i][1] < 0:
speed[i][1] *= -1
座標の更新箇所ですが、個数分の処理を行うために for
を使用することになりました。
# 描画
surf.fill(COLOR_BG)
for i in range(RECT_NUM):
pygame.draw.rect(surf, color[i], (*pos[i], *size[i]))
pygame.display.update()
四角形の描画も for
で繰り返します。ただし、update
はウインドウ全体に対する処理なので1回でいいです。