ソース全文
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

実行すると、次のようになります。


今回も、前回との差分箇所を説明していきます。

# 作る個数
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回でいいです。