Pygame入門 ブロック崩しのパドルをマウスで動かす

import pygame
import sys

SCREEN = pygame.Rect(0, 0, 400, 400)
FPS = 30

WHITE = (255, 255, 255)
GREEN = (0, 255, 0)

PADDLE_WIDTH = 60
PADDLE_HEIGHT = 20
PADDLE_POS_Y = SCREEN.bottom - PADDLE_HEIGHT * 2

pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode(SCREEN.size)
paddle = pygame.Surface((PADDLE_WIDTH, PADDLE_HEIGHT))
paddle.fill(GREEN)

while True:
    screen.fill(WHITE)

    PADDLE_POS_X = pygame.mouse.get_pos()[0]
    if PADDLE_POS_X > (SCREEN.right - PADDLE_WIDTH):
        PADDLE_POS_X = SCREEN.right - PADDLE_WIDTH
    screen.blit(paddle, (PADDLE_POS_X, PADDLE_POS_Y))

    pygame.display.update()
    clock.tick(FPS)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

Pygame入門 画像をSpriteにして動かす

import pygame
import sys

SCREEN = pygame.Rect(0, 0, 400, 400)
WHITE = (255, 255, 255)

class Ball(pygame.sprite.Sprite):
    def __init__(self, image_file, pos, speed):
        pygame.sprite.Sprite.__init__(self)
        x, y = pos
        vx, vy = speed
        self.image = pygame.image.load(image_file)
        w = self.image.get_width()
        h = self.image.get_height()
        self.rect = pygame.Rect(x, y, w, h)
        self.vx = vx
        self.vy = vy

    def update(self):
        self.rect.move_ip(self.vx, self.vy)
        if self.rect.left < SCREEN.left or SCREEN.right < self.rect.right:
            self.vx = -self.vx
        if self.rect.top < SCREEN.top or SCREEN.bottom < self.rect.bottom:
            self.vy = -self.vy
        self.rect = self.rect.clamp(SCREEN)

    def draw(self, surface):
        surface.blit(self.image, self.rect)

def main():
    pygame.init()
    screen = pygame.display.set_mode(SCREEN.size)
    ball = Ball('ball.png', (200, 200), (5, 10))
    clock = pygame.time.Clock()

    while True:
        clock.tick(30)
        screen.fill(WHITE)
        ball.update()
        ball.draw(screen)
        pygame.display.update()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

main()

実行結果

f:id:collatz:20220404163421g:plain

Pygame入門 画像を動かす

import pygame
import sys

SCREEN = pygame.Rect(0, 0, 400, 400)
FPS = 30
WHITE = (255, 255, 255)

def main():
    pygame.init()
    clock = pygame.time.Clock()
    screen = pygame.display.set_mode(SCREEN.size)

    ball = pygame.image.load('ball.png')
    ball_width = ball.get_size()[0]
    ball_height = ball.get_size()[1]
    ball_x = 100 #ballの初期x座標
    ball_y = 200 #ballの初期y座標
    ball_dx = 5 #ballのx座標移動量
    ball_dy = 5 #ballのy座標移動量

    while True:
        screen.fill(WHITE)
        screen.blit(ball, (ball_x, ball_y))

        #画面の左端か右端に移動したら、x座標の移動方向を変える
        if (ball_x < SCREEN.left) or (SCREEN.right - ball_width < ball_x):
            ball_dx *= -1

        #画面の上端か下端に移動したら、y座標の移動方向を変える
        if (ball_y < SCREEN.top) or (SCREEN.bottom - ball_height < ball_y):
            ball_dy *= -1

        #ballを移動させる
        ball_x += ball_dx
        ball_y += ball_dy

        pygame.display.update()
        clock.tick(FPS)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

if __name__ == '__main__':
    main()

Pygame入門 図形(四角)を動かす

import pygame
import sys

SCREEN_SIZE = (400, 400)
WHITE = (255, 255, 255)
RED   = (255,   0,   0)
FPS = 1

def main():
    pygame.init()
    clock = pygame.time.Clock()
    screen = pygame.display.set_mode(SCREEN_SIZE)
    ball = pygame.Rect(100, 100, 10, 10)

    while True:
        screen.fill(WHITE)
        pygame.draw.rect(screen, RED, ball)
        ball.move_ip(10, 0)
        pygame.display.update()
        clock.tick(FPS)

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

if __name__ == '__main__':
    main()

Pygame入門 マウスポインターの座標を取得する

マウスポインターの座標を取得して、画面に数値で表示する。

import pygame
from pygame.locals import *
import sys

SCREEN_SIZE = (400, 400)

def main():
    pygame.init()
    screen = pygame.display.set_mode(SCREEN_SIZE)   # 画面の大きさを設定する
    pygame.display.set_caption('mouse')   # 画面のタイトルを設定する
    font = pygame.font.Font(None, 60)

    while True:
        pygame.display.update()
        mouseX, mouseY = pygame.mouse.get_pos()
        text = font.render(f'{mouseX}, {mouseY}', True, (255, 0, 0))
        screen.fill((255, 255, 255))
        screen.blit(text, [0, 0])

        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

if __name__ == '__main__':
    main()

Pygame入門 図形(四角)を行列に並べて表示する

import pygame
from pygame.locals import *   # 定数QUITを使うため。importしない場合は、pygame.QUITとする。
import sys

SCREEN_WIDTH = 400
SCREEN_HEIGHT = 300
SCREEN_SIZE = (SCREEN_WIDTH, SCREEN_HEIGHT)

ROW = 3 # 表示する四角の行数
COLUMN = 5 # 表示する四角の列数
MARGIN = 10 # 表示する四角の間隔
RECT_WIDTH = (SCREEN_WIDTH - (MARGIN * (COLUMN + 1))) / COLUMN # 表示する四角の幅
RECT_HEIGHT = 20 # 表示する四角の高さ

def main():
    pygame.init()
    screen = pygame.display.set_mode(SCREEN_SIZE)   # 画面の大きさを設定する
    pygame.display.set_caption('figure')   # 画面のタイトルを設定する

    while True:
        screen.fill((255, 255, 255))   # 画面を白く塗りつぶす

        # 赤色の四角を行列に並べて描く
        for r in range(ROW):
            for c in range(COLUMN):
                x = MARGIN * (c + 1) + RECT_WIDTH * c
                y = MARGIN * (r + 1) + RECT_HEIGHT * r
                pygame.draw.rect(screen, (255, 0, 0), Rect(x, y, RECT_WIDTH, RECT_HEIGHT))
        pygame.display.update()

        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

if __name__ == '__main__':
    main()

Pygame入門 図形(四角)を表示する

import pygame
from pygame.locals import *   # 定数QUITを使うため。importしない場合は、pygame.QUITとする。
import sys

SCREEN_SIZE = (400, 300)

def main():
    pygame.init()
    screen = pygame.display.set_mode(SCREEN_SIZE)   # 画面の大きさを設定する
    pygame.display.set_caption('figure')   # 画面のタイトルを設定する

    while True:
        screen.fill((255, 255, 255))   # 画面を白く塗りつぶす

        # 赤色の四角を描く 左上の座標が(10, 10)、長さと高さが(50, 20)
        pygame.draw.rect(screen, (255, 0, 0), Rect(10, 10, 50, 20))
        pygame.display.update()

        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

if __name__ == '__main__':
    main()