ソース全文
import pygame
import time
from random import *

# 初期化
pygame.init()
pygame.display.set_caption("pygame アプリ")
DISP_SIZE = (480, 480) # 横, 縦
surf = pygame.display.set_mode(DISP_SIZE)

# 色を定義しておく (タプル:固定)
COLOR_BG = (32, 32, 32)

# 座標, サイズ, 速度, 色 を管理するオブジェクトを定義
class MyRect:
    def __init__(self, _pos, _size, _speed, _color):
        self.pos = _pos
        self.size = _size
        self.speed = _speed
        self.color = _color
    def move(self):
        self.pos[0] += self.speed[0]
        self.pos[1] += self.speed[1]
    def invert_x(self):
    	self.speed[0] *= -1
    def invert_y(self):
    	self.speed[1] *= -1

# MyRect を格納するリスト
myRects = []
RECT_NUM = 30    # 作る個数
for i in range(RECT_NUM):
    myRects.append(
        MyRect(
            [randint(0, DISP_SIZE[0]-64), randint(0, DISP_SIZE[1]-64)], # 座標
            [64, 64], [4, 4], # サイズ, 速度
            (randint(0, 255), randint(0, 255), randint(0, 255)) # 色
        ))

# 閉じるを押すまでループ
running = True	
while running:
    for myRect in myRects:
        # 座標更新
        myRect.move()
        # もし画面端にたどり着いた場合は反転
        if myRect.pos[0] > (DISP_SIZE[0] - myRect.size[0]) or myRect.pos[0] < 0:
            myRect.invert_x()
        if myRect.pos[1] > (DISP_SIZE[1] - myRect.size[1]) or myRect.pos[1] < 0:
            myRect.invert_y()

    # 描画
    surf.fill(COLOR_BG)
    for myRect in myRects:
        pygame.draw.rect(surf, myRect.color, (*myRect.pos, *myRect.size))
    pygame.display.update()
    # ウェイト
    time.sleep(0.016)
    # イベント
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

実行結果は全く同じです。一体何を変えたというのでしょう。

# 座標, サイズ, 速度, 色 を管理するオブジェクトを定義
class MyRect:
    def __init__(self, _pos, _size, _speed, _color):
        self.pos = _pos
        self.size = _size
        self.speed = _speed
        self.color = _color
    def move(self):
        self.pos[0] += self.speed[0]
        self.pos[1] += self.speed[1]
    def invert_x(self):
    	self.speed[0] *= -1
    def invert_y(self):
    	self.speed[1] *= -1
途中、上記のような記述が登場します。これが先ほどとの違いです。これは クラス といいます。クラスを用いてプログラムを記述すると読みやすくなります。複数の四角形を動かす処理の部分を以前と比較してみます。

以前
    for i in range(RECT_NUM):        # 座標更新
        pos[i][0] += speed[i][0]
        pos[i][1] += speed[i][1]
現在
for myRect in myRects:
        # 座標更新
        myRect.move()
クラスを使わない場合、プログラムは計算式になりがちです。ところが、クラスを用いると、プログラムのソースを 「主語.述語」で記述できるようになります。