ใ€Pygameใ€‘ใƒ–ใƒญใƒƒใ‚ฏๅดฉใ—ใฎไฝœใ‚Šๆ–นใจใ‚ตใƒณใƒ—ใƒซใ‚ณใƒผใƒ‰๏ผˆๅŠนๆžœ้Ÿณไป˜ใ๏ผ‰

Pygameใ‚’็”จใ„ใฆใƒ–ใƒญใƒƒใ‚ฏๅดฉใ—ใ‚’ไฝœใ‚‹ๆ–นๆณ•ใจใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใ‚’่งฃ่ชฌใ—ใพใ™ใ€‚

Pygameใงใƒ–ใƒญใƒƒใ‚ฏๅดฉใ—ใ‚ฒใƒผใƒ ใฎไฝœๆˆ

ๅ‰ๅ›žใฎ่จ˜ไบ‹ใ€Œใ‚นใƒ—ใƒฉใ‚คใƒˆใฎไฝฟใ„ๆ–นใจใ‚ฐใƒซใƒผใƒ—ๅŒ–ใ€ใจใ€Œใ‚นใƒ—ใƒฉใ‚คใƒˆๅŒๅฃซใฎ่ก็ชๅˆคๅฎšใจ่ทณใญ่ฟ”ใ‚Šใ€ใฎๆดป็”จไพ‹ใจใ—ใฆใ€ไปฅไธ‹ใฎใƒ–ใƒญใƒƒใ‚ฏๅดฉใ—ใ‚ฒใƒผใƒ ใ‚’ไฝœๆˆใ™ใ‚‹ๆ–นๆณ•ใ‚’่งฃ่ชฌใ—ใพใ™ใ€‚

ใ€ไปŠๅ›žไฝฟ็”จใ™ใ‚‹็”ปๅƒใ€‘
Windowsใฎใƒšใ‚คใƒณใƒˆใ‚ฝใƒ•ใƒˆใงไฝœใ‚Šใพใ—ใŸใ€‚ใƒชใƒณใ‚ฏๅ…ˆใ‹ใ‚‰ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใฆใ”่‡ช็”ฑใซใŠไฝฟใ„ใใ ใ•ใ„ใ€‚

ใ€ไปŠๅ›žไฝฟ็”จใ™ใ‚‹้Ÿณๅฃฐใ€‘
ใ€Œ็„กๆ–™ BGMใƒปๅŠนๆžœ้Ÿณใฎใƒ•ใƒชใƒผ้Ÿณๆบ็ด ๆ(Springin’ Sound Stock)ๆง˜ใ€ใ‹ใ‚‰ใŠๅ€Ÿใ‚Šใ—ใพใ—ใŸใ€‚

  • paddle_sound.mp3ใƒปใƒปใƒปใƒชใƒณใ‚ฏๅ…ˆใฎ้Ÿณๅฃฐใƒ•ใ‚กใ‚คใƒซใ€Œ8bitไธ‹้™9.mp3ใ€ใ‚’ไฝฟ็”จใ—ใพใ—ใŸ
  • block_sound.mp3ใƒปใƒปใƒปใƒชใƒณใ‚ฏๅ…ˆใฎ้Ÿณๅฃฐใƒ•ใ‚กใ‚คใƒซใ€Œ็ ดๅฃŠ้Ÿณ_ใŸใใ•ใ‚“็ ดๅฃŠ.mp3ใ€ใ‚’ไฝฟ็”จใ—ใพใ—ใŸ
  • gameover_sound.mp3ใƒปใƒปใƒปใƒชใƒณใ‚ฏๅ…ˆใฎ้Ÿณๅฃฐใƒ•ใ‚กใ‚คใƒซใ€Œ8bit้ธๆŠž8.mp3ใ€ใ‚’ไฝฟ็”จใ—ใพใ—ใŸ

ๅ‹•็”ป่งฃ่ชฌ็‰ˆ

ๆœฌใƒšใƒผใ‚ธใฎๅ†…ๅฎนใฏไปฅไธ‹ๅ‹•็”ปใงใ‚‚่งฃ่ชฌใ—ใฆใ„ใพใ™ใ€‚

ใ‚ตใƒณใƒ—ใƒซใ‚ณใƒผใƒ‰


ใ‚ณใƒผใƒ‰่งฃ่ชฌ

ไธŠ่จ˜ใ‚ตใƒณใƒ—ใƒซใ‚ณใƒผใƒ‰ใฎๅ„้ƒจๅˆ†ใ‚’่งฃ่ชฌใ—ใพใ™ใ€‚

1. ใ‚คใƒณใƒใƒผใƒˆใจๅฎšๆ•ฐใฎๅฎš็พฉ

import math
import sys
import pygame
from pygame.locals import *
  • mathใจsysใฏPythonใฎๆจ™ๆบ–ใƒฉใ‚คใƒ–ใƒฉใƒชใงใ‚คใƒณใƒใƒผใƒˆใ—ใพใ™ใ€‚
  • pygameใฏใ‚ฒใƒผใƒ ้–‹็™บ็”จใฎใƒฉใ‚คใƒ–ใƒฉใƒชใงใ‚คใƒณใƒใƒผใƒˆใ—ใพใ™ใ€‚
  • pygame.localsใ‹ใ‚‰็‰นๅฎšใฎๅฎšๆ•ฐใ‚’ใ‚คใƒณใƒใƒผใƒˆใ—ใพใ™ใ€‚

2. ็”ป้ขใ‚ตใ‚คใ‚บใจใƒ•ใ‚กใ‚คใƒซใƒ‘ใ‚นใฎๅฎš็พฉ

# ็”ป้ขใ‚ตใ‚คใ‚บ
SCREEN = Rect(0, 0, 400, 400)

# ็”ปๅƒใƒ•ใ‚กใ‚คใƒซใฎใƒ‘ใ‚น
PADDLE_IMG_PATH = "/Users/github/sample/python/pygame/breakout/sample01/assets/img/paddle.png"
BLOCK_IMG_PATH = "/Users/github/sample/python/pygame/breakout/sample01/assets/img/block.png"
BALL_IMG_PATH = "/Users/github/sample/python/pygame/breakout/sample01/assets/img/ball.png"

# ้Ÿณๅฃฐใƒ•ใ‚กใ‚คใƒซใฎใƒ‘ใ‚น
PADDLE_SOUND_PATH = "/Users/github/sample/python/pygame/breakout/sample01/assets/mp3/paddle_sound.mp3"
BLOCK_SOUND_PATH = "/Users/github/sample/python/pygame/breakout/sample01/assets/mp3/block_sound.mp3"
GAMEOVER_SOUND_PATH = "/Users/github/sample/python/pygame/breakout/sample01/assets/mp3/gameover_sound.mp3"
  • ็”ป้ขใ‚ตใ‚คใ‚บใ‚’ๅฎš็พฉใ€‚
  • ็”ปๅƒใ‚„้Ÿณๅฃฐใƒ•ใ‚กใ‚คใƒซใฎใƒ‘ใ‚นใ‚’ๅฎš็พฉใ€‚

3. ใƒ‘ใƒ‰ใƒซใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚ฏใƒฉใ‚น

# ใƒใƒ‰ใƒซใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚ฏใƒฉใ‚น
class Paddle(pygame.sprite.Sprite):
    # ใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟ๏ผˆๅˆๆœŸๅŒ–ใƒกใ‚ฝใƒƒใƒ‰๏ผ‰
    def __init__(self, filename):
        pygame.sprite.Sprite.__init__(self, self.containers)
        self.image = pygame.image.load(filename).convert()
        self.rect = self.image.get_rect()
        self.rect.bottom = SCREEN.bottom - 20          # ใƒ‘ใƒ‰ใƒซใฎyๅบงๆจ™

    def update(self):
        self.rect.centerx = pygame.mouse.get_pos()[0]  # ใƒžใ‚ฆใ‚นใฎxๅบงๆจ™ใ‚’ใƒ‘ใƒ‰ใƒซใฎxๅบงๆจ™ใซ
        self.rect.clamp_ip(SCREEN)                     # ใ‚ฒใƒผใƒ ็”ป้ขๅ†…ใฎใฟใง็งปๅ‹•
  • ใƒ‘ใƒ‰ใƒซใฎ็”ปๅƒใ‚’่ชญใฟ่พผใฟใ€ไฝ็ฝฎใ‚’่จญๅฎšใ€‚
  • ใƒžใ‚ฆใ‚นใฎไฝ็ฝฎใซๅฟœใ˜ใฆใƒ‘ใƒ‰ใƒซใ‚’็งปๅ‹•ใ€‚

4. ใƒœใƒผใƒซใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚ฏใƒฉใ‚น

ใ“ใฎใ‚ฏใƒฉใ‚นใฏใ€ใƒœใƒผใƒซใฎๅ‹•ใใ‚’็ฎก็†ใ—ใ€ใ‚ฒใƒผใƒ ใฎ้€ฒ่กŒใ‚’ๅˆถๅพกใ™ใ‚‹้‡่ฆใช้ƒจๅˆ†ใงใ™ใ€‚
็‰นใซใ€่ก็ชๅ‡ฆ็†ใ‚„ๅๅฐ„่ง’ๅบฆใฎ่จˆ็ฎ—ใŒ่‚ใจใชใ‚Šใพใ™ใ€‚

# ใƒœใƒผใƒซใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚ฏใƒฉใ‚น
class Ball(pygame.sprite.Sprite):
    # ใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟ๏ผˆๅˆๆœŸๅŒ–ใƒกใ‚ฝใƒƒใƒ‰๏ผ‰
    def __init__(self, filename, paddle, blocks, score, speed, angle_left, angle_right):
        pygame.sprite.Sprite.__init__(self, self.containers)
        self.image = pygame.image.load(filename).convert()
        self.rect = self.image.get_rect()
        self.dx = self.dy = 0  # ใƒœใƒผใƒซใฎ้€Ÿๅบฆ
        self.paddle = paddle  # ใƒ‘ใƒ‰ใƒซใธใฎๅ‚็…ง
        self.blocks = blocks  # ใƒ–ใƒญใƒƒใ‚ฏใ‚ฐใƒซใƒผใƒ—ใธใฎๅ‚็…ง
        self.update = self.start # ใ‚ฒใƒผใƒ ้–‹ๅง‹็Šถๆ…‹ใซๆ›ดๆ–ฐ
        self.score = score
        self.hit = 0  # ้€ฃ็ถšใงใƒ–ใƒญใƒƒใ‚ฏใ‚’ๅฃŠใ—ใŸๅ›žๆ•ฐ
        self.speed = speed # ใƒœใƒผใƒซใฎๅˆๆœŸ้€Ÿๅบฆ
        self.angle_left = angle_left # ใƒ‘ใƒ‰ใƒซใฎๅๅฐ„ๆ–นๅ‘(ๅทฆ็ซฏ:135ๅบฆ๏ผ‰
        self.angle_right = angle_right # ใƒ‘ใƒ‰ใƒซใฎๅๅฐ„ๆ–นๅ‘(ๅณ็ซฏ:45ๅบฆ๏ผ‰
  • initใƒกใ‚ฝใƒƒใƒ‰: ใƒœใƒผใƒซใฎๅˆๆœŸ่จญๅฎšใ‚’่กŒใ„ใพใ™ใ€‚
  • ็”ปๅƒใฎ่ชญใฟ่พผใฟใ€ไฝ็ฝฎใฎ่จญๅฎšใ€้€ŸๅบฆใฎๅˆๆœŸๅŒ–ใ€ใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚ฐใƒซใƒผใƒ—ใ€Œblocksใ€ใธใฎ่ฟฝๅŠ ใ€ใƒ‘ใƒ‰ใƒซใ‚„ใƒ–ใƒญใƒƒใ‚ฏใธใฎๅ‚็…งใ‚’่กŒใฃใฆใ„ใพใ™ใ€‚
  • ใƒ‘ใƒ‰ใƒซใ‚„ใƒ–ใƒญใƒƒใ‚ฏใจใฎ่ก็ชใ‚’็ฎก็†ใ€‚
    # ใ‚ฒใƒผใƒ ้–‹ๅง‹็Šถๆ…‹๏ผˆใƒžใ‚ฆใ‚นใ‚’ๅทฆใ‚ฏใƒชใƒƒใ‚ฏๆ™‚ใ™ใ‚‹ใจใƒœใƒผใƒซๅฐ„ๅ‡บ๏ผ‰
    def start(self):
        # ใƒœใƒผใƒซใฎๅˆๆœŸไฝ็ฝฎ(ใƒ‘ใƒ‰ใƒซใฎไธŠ)
        self.rect.centerx = self.paddle.rect.centerx
        self.rect.bottom = self.paddle.rect.top

        # ๅทฆใ‚ฏใƒชใƒƒใ‚ฏใงใƒœใƒผใƒซๅฐ„ๅ‡บ
        if pygame.mouse.get_pressed()[0] == 1:
            self.dx = 0
            self.dy = -self.speed
            self.update = self.move
  • startใƒกใ‚ฝใƒƒใƒ‰: ใ‚ฒใƒผใƒ ้–‹ๅง‹ๆ™‚ใฎใƒœใƒผใƒซใฎไฝ็ฝฎใ‚’ใƒ‘ใƒ‰ใƒซใฎไธŠใซ่จญๅฎšใ—ใ€ๅทฆใ‚ฏใƒชใƒƒใ‚ฏใงใƒœใƒผใƒซใ‚’ๅฐ„ๅ‡บใ—ใพใ™ใ€‚
    # ใƒœใƒผใƒซใฎๆŒ™ๅ‹•
    def move(self):
        self.rect.centerx += self.dx
        self.rect.centery += self.dy

        # ๅฃใจใฎๅๅฐ„
        if self.rect.left < SCREEN.left:    # ๅทฆๅด
            self.rect.left = SCREEN.left
            self.dx = -self.dx              # ้€Ÿๅบฆใ‚’ๅ่ปข
        if self.rect.right > SCREEN.right:  # ๅณๅด
            self.rect.right = SCREEN.right
            self.dx = -self.dx
        if self.rect.top < SCREEN.top:      # ไธŠๅด
            self.rect.top = SCREEN.top
            self.dy = -self.dy

        # ใƒ‘ใƒ‰ใƒซใจใฎๅๅฐ„(ๅทฆ็ซฏ:135ๅบฆๆ–นๅ‘, ๅณ็ซฏ:45ๅบฆๆ–นๅ‘, ใใ‚Œไปฅๅค–:็ทšๅฝข่ฃœ้–“)
        # 2ใคใฎspriteใŒๆŽฅ่งฆใ—ใฆใ„ใ‚‹ใ‹ใฉใ†ใ‹ใฎๅˆคๅฎš
        if self.rect.colliderect(self.paddle.rect) and self.dy > 0:
            self.hit = 0                                # ้€ฃ็ถšใƒ’ใƒƒใƒˆใ‚’0ใซๆˆปใ™
            (x1, y1) = (self.paddle.rect.left - self.rect.width, self.angle_left)
            (x2, y2) = (self.paddle.rect.right, self.angle_right)
            x = self.rect.left                          # ใƒœใƒผใƒซใŒๅฝ“ใŸใฃใŸไฝ็ฝฎ
            y = (float(y2-y1)/(x2-x1)) * (x - x1) + y1  # ็ทšๅฝข่ฃœ้–“
            angle = math.radians(y)                     # ๅๅฐ„่ง’ๅบฆ
            self.dx = self.speed * math.cos(angle)
            self.dy = -self.speed * math.sin(angle)
            self.paddle_sound.play()                    # ๅๅฐ„้Ÿณ

        # ใƒœใƒผใƒซใ‚’่ฝใจใ—ใŸๅ ดๅˆ
        if self.rect.top > SCREEN.bottom:
            self.update = self.start                    # ใƒœใƒผใƒซใ‚’ๅˆๆœŸ็Šถๆ…‹ใซ
            self.gameover_sound.play()
            self.hit = 0
            self.score.set_score(0)                               # ใ‚นใ‚ณใ‚ขใ‚’0็‚นใซใ™ใ‚‹
            #self.score.add_score(-100)                  # ใ‚นใ‚ณใ‚ขๆธ›็‚น-100็‚น
  • moveใƒกใ‚ฝใƒƒใƒ‰: ใƒœใƒผใƒซใฎ็งปๅ‹•ใจ่ก็ชๅ‡ฆ็†ใ‚’่กŒใ„ใพใ™ใ€‚ๅฃใ‚„ใƒ‘ใƒ‰ใƒซใ€ใƒ–ใƒญใƒƒใ‚ฏใจใฎ่ก็ชใ‚’ๆคœๅ‡บใ—ใ€ๅๅฐ„ใ‚„ใ‚นใ‚ณใ‚ขใฎๆ›ดๆ–ฐใ‚’่กŒใ„ใพใ™ใ€‚

ใƒ–ใƒญใƒƒใ‚ฏใจใƒœใƒผใƒซใฎ่ก็ชๅˆคๅฎšใจใƒ–ใƒญใƒƒใ‚ฏใฎๅ‰Š้™ค

blocks_collided = pygame.sprite.spritecollide(self, self.blocks, True)
if blocks_collided:  # ่ก็ชใƒ–ใƒญใƒƒใ‚ฏใŒใ‚ใ‚‹ๅ ดๅˆ
    oldrect = self.rect
    for block in blocks_collided:
        # ใƒœใƒผใƒซใŒๅทฆใ‹ใ‚‰ใƒ–ใƒญใƒƒใ‚ฏใธ่ก็ชใ—ใŸๅ ดๅˆ
        if oldrect.left < block.rect.left and oldrect.right < block.rect.right:
            self.rect.right = block.rect.left
            self.dx = -self.dx

        # ใƒœใƒผใƒซใŒๅณใ‹ใ‚‰ใƒ–ใƒญใƒƒใ‚ฏใธ่ก็ชใ—ใŸๅ ดๅˆ
        if block.rect.left < oldrect.left and block.rect.right < oldrect.right:
            self.rect.left = block.rect.right
            self.dx = -self.dx

        # ใƒœใƒผใƒซใŒไธŠใ‹ใ‚‰ใƒ–ใƒญใƒƒใ‚ฏใธ่ก็ชใ—ใŸๅ ดๅˆ
        if oldrect.top < block.rect.top and oldrect.bottom < block.rect.bottom:
            self.rect.bottom = block.rect.top
            self.dy = -self.dy

        # ใƒœใƒผใƒซใŒไธ‹ใ‹ใ‚‰ใƒ–ใƒญใƒƒใ‚ฏใธ่ก็ชใ—ใŸๅ ดๅˆ
        if block.rect.top < oldrect.top and block.rect.bottom < oldrect.bottom:
            self.rect.top = block.rect.bottom
            self.dy = -self.dy
        self.block_sound.play()     # ๅŠนๆžœ้Ÿณใ‚’้ณดใ‚‰ใ™
        self.hit += 1               # ่ก็ชๅ›žๆ•ฐ
        self.score.add_score(self.hit * 10)   # ่ก็ชๅ›žๆ•ฐใซๅฟœใ˜ใฆใ‚นใ‚ณใ‚ขๅŠ ็ฎ—
  • pygame.sprite.spritecollide(self, self.blocks, True): ใƒœใƒผใƒซ (self) ใจใƒ–ใƒญใƒƒใ‚ฏ (self.blocks) ใฎ่ก็ชใ‚’ใƒใ‚งใƒƒใ‚ฏใ—ใพใ™ใ€‚็ฌฌไธ‰ๅผ•ๆ•ฐใฎ True ใฏใ€ใƒœใƒผใƒซใจ่ก็ชใ—ใŸใƒ–ใƒญใƒƒใ‚ฏใ‚’ใ‚ฐใƒซใƒผใƒ—ใ‹ใ‚‰ๅ‰Š้™คใ™ใ‚‹ใ“ใจใ‚’ๆ„ๅ‘ณใ—ใพใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ใƒ–ใƒญใƒƒใ‚ฏใŒๆถˆใˆใพใ™ใ€‚
  • if blocks_collided:: ่ก็ชใ—ใŸใƒ–ใƒญใƒƒใ‚ฏใŒใ‚ใ‚‹ๅ ดๅˆใซๅ‡ฆ็†ใ‚’่กŒใ„ใพใ™ใ€‚
  • for block in blocks_collided:: ่ก็ชใ—ใŸใ™ในใฆใฎใƒ–ใƒญใƒƒใ‚ฏใซๅฏพใ—ใฆๅ‡ฆ็†ใ‚’่กŒใ„ใพใ™ใ€‚
  • ๅ„ๆ–นๅ‘ใ‹ใ‚‰ใฎ่ก็ชๅˆคๅฎš: ใƒœใƒผใƒซใŒใƒ–ใƒญใƒƒใ‚ฏใซใฉใฎๆ–นๅ‘ใ‹ใ‚‰่ก็ชใ—ใŸใ‹ใ‚’ๅˆคๅฎšใ—ใ€ใƒœใƒผใƒซใฎๅๅฐ„ๆ–นๅ‘ใ‚’ๅค‰ๆ›ดใ—ใพใ™ใ€‚
  • self.block_sound.play(): ่ก็ช้Ÿณใ‚’ๅ†็”Ÿใ—ใพใ™ใ€‚
  • self.hit += 1: ่ก็ชๅ›žๆ•ฐใ‚’ใ‚ซใ‚ฆใƒณใƒˆใ—ใพใ™ใ€‚
  • self.score.add_score(self.hit * 10): ่ก็ชๅ›žๆ•ฐใซๅฟœใ˜ใฆใ‚นใ‚ณใ‚ขใ‚’ๅŠ ็ฎ—ใ—ใพใ™ใ€‚

5. ใƒ–ใƒญใƒƒใ‚ฏใ‚ฏใƒฉใ‚น

class Block(pygame.sprite.Sprite):
    def __init__(self, filename, x, y):
        pygame.sprite.Sprite.__init__(self, self.containers)
        self.image = pygame.image.load(filename).convert()
        self.rect = self.image.get_rect()
        # ใƒ–ใƒญใƒƒใ‚ฏใฎๅทฆไธŠๅบงๆจ™
        self.rect.left = SCREEN.left + x * self.rect.width
        self.rect.top = SCREEN.top + y * self.rect.height
  • __init__ใƒกใ‚ฝใƒƒใƒ‰: ใƒ–ใƒญใƒƒใ‚ฏใฎๅˆๆœŸๅŒ–ใ‚’่กŒใ„ใพใ™ใ€‚
    • pygame.sprite.Sprite.__init__(self, self.containers): ใ‚นใƒ—ใƒฉใ‚คใƒˆใฎๅˆๆœŸๅŒ–ใ‚’่กŒใ„ใ€ใƒ–ใƒญใƒƒใ‚ฏใ‚’ใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚ฐใƒซใƒผใƒ—ใซ่ฟฝๅŠ ใ—ใพใ™ใ€‚
    • self.image = pygame.image.load(filename).convert(): ใƒ–ใƒญใƒƒใ‚ฏใฎ็”ปๅƒใ‚’่ชญใฟ่พผใฟใ€self.imageใซ่จญๅฎšใ—ใพใ™ใ€‚
    • self.rect = self.image.get_rect(): ็”ปๅƒใฎ็Ÿฉๅฝข๏ผˆไฝ็ฝฎใจใ‚ตใ‚คใ‚บ๏ผ‰ใ‚’ๅ–ๅพ—ใ—ใ€self.rectใซ่จญๅฎšใ—ใพใ™ใ€‚
    • self.rect.leftใจself.rect.top: ใƒ–ใƒญใƒƒใ‚ฏใฎๅทฆไธŠๅบงๆจ™ใ‚’่จญๅฎšใ—ใพใ™ใ€‚xใจyใฎๅ€คใซๅŸบใฅใ„ใฆใ€ใƒ–ใƒญใƒƒใ‚ฏใฎไฝ็ฝฎใ‚’่จˆ็ฎ—ใ—ใพใ™ใ€‚

6. ใ‚นใ‚ณใ‚ขใ‚ฏใƒฉใ‚น

class Score():
    def __init__(self, x, y):
        self.sysfont = pygame.font.SysFont(None, 20)
        self.score = 0
        (self.x, self.y) = (x, y)
    def draw(self, screen):
        img = self.sysfont.render("SCORE:" + str(self.score), True, (255,255,250))
        screen.blit(img, (self.x, self.y))
    def add_score(self, x):
        self.score += x
    def set_score(self, score):
        self.score = score
  • __init__ใƒกใ‚ฝใƒƒใƒ‰: ใ‚นใ‚ณใ‚ขใฎๅˆๆœŸๅŒ–ใ‚’่กŒใ„ใพใ™ใ€‚
    • self.sysfont = pygame.font.SysFont(None, 20): ใƒ•ใ‚ฉใƒณใƒˆใ‚’่จญๅฎšใ—ใพใ™ใ€‚ใ‚ตใ‚คใ‚บใฏ20ใƒ”ใ‚ฏใ‚ปใƒซใงใ™ใ€‚
    • self.score = 0: ใ‚นใ‚ณใ‚ขใ‚’0ใซๅˆๆœŸๅŒ–ใ—ใพใ™ใ€‚
    • (self.x, self.y) = (x, y): ใ‚นใ‚ณใ‚ขใฎ่กจ็คบไฝ็ฝฎใ‚’่จญๅฎšใ—ใพใ™ใ€‚
  • drawใƒกใ‚ฝใƒƒใƒ‰: ใ‚นใ‚ณใ‚ขใ‚’็”ป้ขใซๆ็”ปใ—ใพใ™ใ€‚
    • img = self.sysfont.render("SCORE:" + str(self.score), True, (255,255,250)): ใ‚นใ‚ณใ‚ขใ‚’ใƒ†ใ‚ญใ‚นใƒˆใจใ—ใฆใƒฌใƒณใƒ€ใƒชใƒณใ‚ฐใ—ใ€็”ปๅƒใจใ—ใฆ็”Ÿๆˆใ—ใพใ™ใ€‚
    • screen.blit(img, (self.x, self.y)): ็”Ÿๆˆใ—ใŸใ‚นใ‚ณใ‚ข็”ปๅƒใ‚’ๆŒ‡ๅฎšใ—ใŸไฝ็ฝฎใซๆ็”ปใ—ใพใ™ใ€‚
  • add_scoreใƒกใ‚ฝใƒƒใƒ‰: ใ‚นใ‚ณใ‚ขใ‚’ๅŠ ็ฎ—ใ—ใพใ™ใ€‚
    • self.score += x: ็พๅœจใฎใ‚นใ‚ณใ‚ขใซๆŒ‡ๅฎšใ•ใ‚ŒใŸๅ€คใ‚’ๅŠ ็ฎ—ใ—ใพใ™ใ€‚
  • set_scoreใƒกใ‚ฝใƒƒใƒ‰: ใ‚นใ‚ณใ‚ขใ‚’่จญๅฎšใ—ใพใ™ใ€‚
    • self.score = score: ใ‚นใ‚ณใ‚ขใ‚’ๆŒ‡ๅฎšใ•ใ‚ŒใŸๅ€คใซ่จญๅฎšใ—ใพใ™ใ€‚

7. ใ‚ฒใƒผใƒ ใฎใƒกใ‚คใƒณใƒซใƒผใƒ—

ใ‚ฒใƒผใƒ ใฎไธป่ฆใชใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚’ๅˆๆœŸๅŒ–ใ—ใ€้ฉๅˆ‡ใชใ‚ฐใƒซใƒผใƒ—ใซ่ฟฝๅŠ ใ™ใ‚‹ใ“ใจใงใ€ๆ็”ปใ‚„่ก็ชๅˆคๅฎšใ‚’ๅŠน็Ž‡็š„ใซ่กŒใˆใ‚‹ใ‚ˆใ†ใซใ—ใฆใ„ใพใ™ใ€‚

ๆ็”ป็”จใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚ฐใƒซใƒผใƒ—

group = pygame.sprite.RenderUpdates()
  • group: ใ™ในใฆใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚’็ฎก็†ใ™ใ‚‹ใ‚ฐใƒซใƒผใƒ—ใงใ™ใ€‚ใ“ใฎใ‚ฐใƒซใƒผใƒ—ใฏใ€ใ‚นใƒ—ใƒฉใ‚คใƒˆใฎๆ็”ปใจๆ›ดๆ–ฐใ‚’่กŒใ„ใพใ™ใ€‚

่ก็ชๅˆคๅฎš็”จใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚ฐใƒซใƒผใƒ—

blocks = pygame.sprite.Group()
  • blocks: ใƒ–ใƒญใƒƒใ‚ฏใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚’็ฎก็†ใ™ใ‚‹ใ‚ฐใƒซใƒผใƒ—ใงใ™ใ€‚ใ“ใฎใ‚ฐใƒซใƒผใƒ—ใฏใ€ใƒœใƒผใƒซใจใฎ่ก็ชๅˆคๅฎšใซไฝฟ็”จใ•ใ‚Œใพใ™ใ€‚

ใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚ฐใƒซใƒผใƒ—ใซ่ฟฝๅŠ 

Paddle.containers = group
Ball.containers = group
Block.containers = group, blocks
  • Paddle.containers: ใƒ‘ใƒ‰ใƒซใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚’groupใซ่ฟฝๅŠ ใ—ใพใ™ใ€‚
  • Ball.containers: ใƒœใƒผใƒซใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚’groupใซ่ฟฝๅŠ ใ—ใพใ™ใ€‚
  • Block.containers: ใƒ–ใƒญใƒƒใ‚ฏใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚’groupใจblocksใฎไธกๆ–นใซ่ฟฝๅŠ ใ—ใพใ™ใ€‚

Block.containersใซgroupใจblocksใฎไธกๆ–นใ‚’่ฟฝๅŠ ใ™ใ‚‹็†็”ฑใฏใ€ใƒ–ใƒญใƒƒใ‚ฏใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใŒๆ็”ปใจ่ก็ชๅˆคๅฎšใฎไธกๆ–นใซ้–ขไฟ‚ใ™ใ‚‹ใŸใ‚ใงใ™ใ€‚

  • ๆ็”ปใฎใŸใ‚ใฎใ‚ฐใƒซใƒผใƒ— (group)
    • ๆ็”ป: groupใฏใ€ใ™ในใฆใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚’ๆ็”ปใ™ใ‚‹ใŸใ‚ใฎใ‚ฐใƒซใƒผใƒ—ใงใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ใƒ–ใƒญใƒƒใ‚ฏใŒ็”ป้ขใซ่กจ็คบใ•ใ‚Œใพใ™ใ€‚
    • ๆ›ดๆ–ฐ: groupใฏใ€ใ‚นใƒ—ใƒฉใ‚คใƒˆใฎไฝ็ฝฎใ‚„็Šถๆ…‹ใ‚’ๆ›ดๆ–ฐใ™ใ‚‹ใŸใ‚ใซใ‚‚ไฝฟ็”จใ•ใ‚Œใพใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ใ‚ฒใƒผใƒ ใฎ้€ฒ่กŒใซๅˆใ‚ใ›ใฆใ‚นใƒ—ใƒฉใ‚คใƒˆใŒ้ฉๅˆ‡ใซๅ‹•ไฝœใ—ใพใ™ใ€‚
  • ่ก็ชๅˆคๅฎšใฎใŸใ‚ใฎใ‚ฐใƒซใƒผใƒ— (blocks)
    • ่ก็ชๅˆคๅฎš: blocksใฏใ€ใƒœใƒผใƒซใจใฎ่ก็ชๅˆคๅฎšใ‚’่กŒใ†ใŸใ‚ใฎใ‚ฐใƒซใƒผใƒ—ใงใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ใƒœใƒผใƒซใŒใƒ–ใƒญใƒƒใ‚ฏใซๅฝ“ใŸใฃใŸใจใใซ้ฉๅˆ‡ใชๅๅฟœ๏ผˆใƒ–ใƒญใƒƒใ‚ฏใฎๆถˆๅคฑใ‚„ใ‚นใ‚ณใ‚ขใฎๆ›ดๆ–ฐ๏ผ‰ใŒ่กŒใ‚ใ‚Œใพใ™ใ€‚

ใ“ใฎใ‚ˆใ†ใซใ€ใƒ–ใƒญใƒƒใ‚ฏใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚’ไธกๆ–นใฎใ‚ฐใƒซใƒผใƒ—ใซ่ฟฝๅŠ ใ™ใ‚‹ใ“ใจใงใ€ใ‚ฒใƒผใƒ ใฎๆ็”ปใจ่ก็ชๅˆคๅฎšใฎไธกๆ–นใ‚’ๅŠน็Ž‡็š„ใซ็ฎก็†ใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

ใ€่ฃœ่ถณใ€‘
`pygame.sprite.spritecollide(self, self.blocks, True)`ใฏใ€ๆŒ‡ๅฎšใ•ใ‚ŒใŸใ‚นใƒ—ใƒฉใ‚คใƒˆ๏ผˆใƒœใƒผใƒซ๏ผ‰ใจใ‚ฐใƒซใƒผใƒ—๏ผˆ`blocks`๏ผ‰ๅ†…ใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใจใฎ่ก็ชใ‚’ใƒใ‚งใƒƒใ‚ฏใ—ใพใ™ใ€‚

ใ‚‚ใ—ใ€`Block.containers = group, blocks`ใ‚’`Block.containers = group`ใซๅค‰ๆ›ดใ™ใ‚‹ใจใ€ใƒ–ใƒญใƒƒใ‚ฏใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใŒ`blocks`ใ‚ฐใƒซใƒผใƒ—ใซ่ฟฝๅŠ ใ•ใ‚Œใชใใชใ‚Šใพใ™ใ€‚
ใคใพใ‚Šใ€`pygame.sprite.spritecollide(self, self.blocks, True)`ใงใƒ–ใƒญใƒƒใ‚ฏใจใฎ่ก็ชใŒๆคœๅ‡บใ•ใ‚Œใชใใชใ‚Šใพใ™ใ€‚ใใฎ็ตๆžœใ€ใƒœใƒผใƒซใŒใƒ–ใƒญใƒƒใ‚ฏใซๅฝ“ใŸใฃใฆใ‚‚ใƒ–ใƒญใƒƒใ‚ฏใŒๆถˆใˆใšใ€ใ‚นใ‚ณใ‚ขใ‚‚ๆ›ดๆ–ฐใ•ใ‚Œใพใ›ใ‚“ใ€‚

ใƒœใƒผใƒซ่‡ชไฝ“ใฏไป–ใฎใ‚นใƒ—ใƒฉใ‚คใƒˆ๏ผˆใƒ‘ใƒ‰ใƒซใ‚„ใƒ–ใƒญใƒƒใ‚ฏ๏ผ‰ใจใฎ่ก็ชๅˆคๅฎšใ‚’่กŒใ„ใพใ™ใŒใ€ใƒœใƒผใƒซใŒไป–ใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใจ่ก็ชใ™ใ‚‹ๅฏพ่ฑกใจใฏใชใ‚‰ใชใ„ใŸใ‚ใ€`blocks`ใ‚ฐใƒซใƒผใƒ—ใซๅซใพใ‚Œใ‚‹ๅฟ…่ฆใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚

ใƒ‘ใƒ‰ใƒซใฎไฝœๆˆ

paddle = Paddle(PADDLE_IMG_PATH)
  • paddle: ใƒ‘ใƒ‰ใƒซใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚’ไฝœๆˆใ—ใ€็”ปๅƒใ‚’่ชญใฟ่พผใฟใพใ™ใ€‚

ใƒ–ใƒญใƒƒใ‚ฏใฎไฝœๆˆ

for x in range(1, 15):
    for y in range(1, 11):
        Block(BLOCK_IMG_PATH, x, y)
  • ใƒ–ใƒญใƒƒใ‚ฏใฎ้…็ฝฎ: 14ๅˆ—ร—10่กŒใฎใƒ–ใƒญใƒƒใ‚ฏใ‚’ไฝœๆˆใ—ใ€ๅ„ใƒ–ใƒญใƒƒใ‚ฏใฎไฝ็ฝฎใ‚’่จญๅฎšใ—ใพใ™ใ€‚

ใ‚นใ‚ณใ‚ขใฎ่กจ็คบ

score = Score(10, 10)
  • score: ใ‚นใ‚ณใ‚ข่กจ็คบ็”จใฎใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝœๆˆใ—ใ€็”ป้ขใฎๅบงๆจ™(10, 10)ใซ้…็ฝฎใ—ใพใ™ใ€‚

ใƒœใƒผใƒซใฎไฝœๆˆ

Ball(BALL_IMG_PATH, paddle, blocks, score, 5, 135, 45)
  • Ball: ใƒœใƒผใƒซใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚’ไฝœๆˆใ—ใ€ๅˆๆœŸ่จญๅฎšใ‚’่กŒใ„ใพใ™ใ€‚ใƒ‘ใƒ‰ใƒซใ€ใƒ–ใƒญใƒƒใ‚ฏใ€ใ‚นใ‚ณใ‚ขใ€้€Ÿๅบฆใ€ๅๅฐ„่ง’ๅบฆใชใฉใ‚’่จญๅฎšใ—ใพใ™ใ€‚

ใƒซใƒผใƒ—ๅ‡ฆ็†ใฎๅฎŸ่กŒใ‚’็ถ™็ถšใ™ใ‚‹ใƒ•ใƒฉใ‚ฐ

running = True  # ใƒซใƒผใƒ—ๅ‡ฆ็†ใฎๅฎŸ่กŒใ‚’็ถ™็ถšใ™ใ‚‹ใƒ•ใƒฉใ‚ฐ
  • running: ใ‚ฒใƒผใƒ ใƒซใƒผใƒ—ใ‚’็ถ™็ถšใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ‚’ๅˆถๅพกใ™ใ‚‹ใƒ•ใƒฉใ‚ฐใงใ™ใ€‚Trueใฎ้–“ใฏใƒซใƒผใƒ—ใŒ็ถšใใพใ™ใ€‚

8. ใƒกใ‚คใƒณใƒซใƒผใƒ—

while running:
    clock.tick(60)      # ใƒ•ใƒฌใƒผใƒ ใƒฌใƒผใƒˆ(60fps)
    screen.fill((0,20,0))
    # ๅ…จใฆใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚ฐใƒซใƒผใƒ—ใ‚’ๆ›ดๆ–ฐ
    group.update()
    # ๅ…จใฆใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚ฐใƒซใƒผใƒ—ใ‚’ๆ็”ป       
    group.draw(screen)
    # ใ‚นใ‚ณใ‚ขใ‚’ๆ็”ป  
    score.draw(screen) 
    # ็”ป้ขๆ›ดๆ–ฐ 
    pygame.display.update()
  • clock.tick(60): ใƒ•ใƒฌใƒผใƒ ใƒฌใƒผใƒˆใ‚’60FPSใซ่จญๅฎšใ—ใพใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ใ‚ฒใƒผใƒ ใฎๅ‹•ไฝœใŒไธ€ๅฎšใฎ้€Ÿๅบฆใง้€ฒ่กŒใ—ใพใ™ใ€‚
  • screen.fill((0,20,0)): ็”ป้ขใ‚’็ท‘่‰ฒใงๅก—ใ‚Šใคใถใ—ใพใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Šใ€ๅ‰ใฎใƒ•ใƒฌใƒผใƒ ใฎๆฎ‹ๅƒใŒๆถˆใˆใพใ™ใ€‚
  • group.update(): ใ™ในใฆใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใฎ็Šถๆ…‹ใ‚’ๆ›ดๆ–ฐใ—ใพใ™ใ€‚ๅ„ใ‚นใƒ—ใƒฉใ‚คใƒˆใฎupdateใƒกใ‚ฝใƒƒใƒ‰ใŒๅ‘ผใณๅ‡บใ•ใ‚Œใพใ™ใ€‚
  • group.draw(screen): ใ™ในใฆใฎใ‚นใƒ—ใƒฉใ‚คใƒˆใ‚’็”ป้ขใซๆ็”ปใ—ใพใ™ใ€‚
  • score.draw(screen): ใ‚นใ‚ณใ‚ขใ‚’็”ป้ขใซๆ็”ปใ—ใพใ™ใ€‚
  • pygame.display.update(): ็”ป้ขใ‚’ๆ›ดๆ–ฐใ—ใ€ๆ็”ปๅ†…ๅฎนใ‚’่กจ็คบใ—ใพใ™ใ€‚

ใ‚คใƒ™ใƒณใƒˆๅ‡ฆ็†

for event in pygame.event.get():
    # ้–‰ใ˜ใ‚‹ใƒœใ‚ฟใƒณใŒๆŠผใ•ใ‚ŒใŸใ‚‰็ต‚ไบ†
    if event.type == QUIT: 
        running = False
    # ใ‚ญใƒผใ‚คใƒ™ใƒณใƒˆ
    if event.type == KEYDOWN:
        # Escใ‚ญใƒผใŒๆŠผใ•ใ‚ŒใŸใ‚‰็ต‚ไบ†
        if event.key == K_ESCAPE:   
            running = False
  • ใ‚คใƒ™ใƒณใƒˆใƒซใƒผใƒ—: ใƒฆใƒผใ‚ถใƒผใฎๅ…ฅๅŠ›ใ‚„ใ‚ทใ‚นใƒ†ใƒ ใฎใ‚คใƒ™ใƒณใƒˆใ‚’ๅ‡ฆ็†ใ—ใพใ™ใ€‚
  • QUITใ‚คใƒ™ใƒณใƒˆ: ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใฎ้–‰ใ˜ใ‚‹ใƒœใ‚ฟใƒณใŒๆŠผใ•ใ‚ŒใŸๅ ดๅˆใซ็™บ็”Ÿใ—ใ€runningใ‚’Falseใซใ—ใฆใƒซใƒผใƒ—ใ‚’็ต‚ไบ†ใ—ใพใ™ใ€‚
  • KEYDOWNใ‚คใƒ™ใƒณใƒˆ: ใ‚ญใƒผใŒๆŠผใ•ใ‚ŒใŸใจใใซ็™บ็”Ÿใ—ใพใ™ใ€‚
  • K_ESCAPEใ‚ญใƒผ: Escใ‚ญใƒผใŒๆŠผใ•ใ‚ŒใŸๅ ดๅˆใ€runningใ‚’Falseใซใ—ใฆใƒซใƒผใƒ—ใ‚’็ต‚ไบ†ใ—ใพใ™ใ€‚

9. ็ต‚ไบ†ๅ‡ฆ็†

pygame.quit()
sys.exit()
  • pygame.quit(): Pygameใ‚’็ต‚ไบ†ใ—ใ€ใƒชใ‚ฝใƒผใ‚นใ‚’่งฃๆ”พใ—ใพใ™ใ€‚
  • sys.exit(): ใƒ—ใƒญใ‚ฐใƒฉใƒ ใ‚’็ต‚ไบ†ใ—ใพใ™ใ€‚

้–ข้€ฃใƒšใƒผใ‚ธ

Pygameใฎไฝฟใ„ๆ–นใซใคใ„ใฆใฏไปฅไธ‹ใƒšใƒผใ‚ธใง่งฃ่ชฌใ—ใฆใ„ใพใ™ใ€‚

ใ€Pygame่ถ…ๅ…ฅ้–€ใ€‘ไฝฟใ„ๆ–นใจใ‚ตใƒณใƒ—ใƒซใ‚ฒใƒผใƒ ใ‚’่งฃ่ชฌ
Pygameใง2Dใ‚ฒใƒผใƒ ใ‚’็ฐกๅ˜ใซๅˆถไฝœใ™ใ‚‹ๆ–นๆณ•ใ‚’ๅ…ฅ้–€่€…ๅ‘ใ‘ใซ่งฃ่ชฌใ—ใพใ™ใ€‚

Pythonๅ…จ่ˆฌใซใคใ„ใฆใฏไปฅไธ‹ใƒšใƒผใ‚ธใง่งฃ่ชฌใ—ใฆใ„ใพใ™ใ€‚

ใ€Python่ถ…ๅ…ฅ้–€ใ€‘ไฝฟใ„ๆ–นใจใ‚ตใƒณใƒ—ใƒซ้›†
Pythonใฎไฝฟใ„ๆ–นใซใคใ„ใฆใ€ๅŸบ็คŽๆ–‡ๆณ•ใ‹ใ‚‰ๅฟœ็”จไพ‹ใพใงๅ…ฅ้–€่€…ๅ‘ใ‘ใซ่งฃ่ชฌใ—ใพใ™ใ€‚
ใ“ใฎ่จ˜ไบ‹ใ‚’ๆ›ธใ„ใŸไบบ
่ฅฟไฝๆŠ€็ ”

Pythonไฝฟ็”จๆญด10ๅนดไปฅไธŠใ€‚็ ”็ฉถใ€ไป•ไบ‹ใ€่ถฃๅ‘ณใงใƒ‡ใƒผใ‚ฟๅˆ†ๆžใ‚„ไฝœๆฅญ่‡ชๅ‹•ๅŒ–ใชใฉใซๆดป็”จใ—ใฆใใŸใƒŽใ‚ฆใƒใ‚ฆใ‚’ๆƒ…ๅ ฑ็™บไฟกใ—ใฆใ„ใพใ™ใ€‚
่ฉณใ—ใ„ใƒ—ใƒญใƒ•ใ‚ฃใƒผใƒซใ‚„ใŠๅ•ๅˆใ›ใฏใ“ใกใ‚‰ใฎใƒšใƒผใ‚ธใพใงใ€‚
โ‡“Youtubeใ‚„X๏ผˆๆ—งTwitter๏ผ‰ใงใ‚‚ๆƒ…ๅ ฑ็™บไฟกไธญใงใ™๏ผ

่ฅฟไฝๆŠ€็ ”ใ‚’ใƒ•ใ‚ฉใƒญใƒผใ™ใ‚‹
PyGame

ใ‚ณใƒกใƒณใƒˆ

  1. ใŸใ™ใ‘ใฆใƒผใƒผ ใ‚ˆใ‚Š:

    # ๅฃใจใฎๅๅฐ„
    if self.rect.left SCREEN.right: # ๅณๅด

    ใ“ใ“ใฎ้ƒจๅˆ†ใซใ‚จใƒฉใƒผใŒๅ‡บใฆใ—ใพใ„ใพใ™ๅŽŸๅ› ใฏไฝ•ใงใ—ใ‚‡ใ†ใ‹๏ผŸ

  2. ใ‚ใ‚ใ‚ ใ‚ˆใ‚Š:

    # ๅฃใจใฎๅๅฐ„
    if self.rect.left SCREEN.right: # ๅณๅด

    ใ“ใ“ใฎ้ƒจๅˆ†ใซใ‚จใƒฉใƒผใŒๅ‡บใฆใ—ใพใ„ใพใ™ใ€‚
    ใพใ ใพใ ๅˆๅฟƒ่€…ใงใจใ‚Šใ‚ใˆใšใ‚ณใƒ”ใƒผ๏ผ†ใƒšใƒผใ‚นใƒˆใงๅฎŸ่กŒใ—ใฆใ„ใ‚‹ใ ใ‘ใชใฎใงใ™ใŒใ€ๅ›ฐใฃใฆใ„ใพใ™ใ€‚
    =ใ€€ใŒใชใ„ใฎใŒๅŽŸๅ› ใงใ—ใ‚‡ใ†ใ‹๏ผŸ

    ใ‚ˆใ‚ใ—ใใŠ้ก˜ใ„ใ—ใพใ™ใ€‚

    • ็ฎก็†ไบบ ใ‚ˆใ‚Š:

      ใ‚ณใƒกใƒณใƒˆใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ™ใ€‚
      ใ”ๆŒ‡ๆ‘˜ใฎใจใŠใ‚Š็ญ‰ๅทใ€ไธ็ญ‰ๅทใŒใชใ„ใฎใŒๅŽŸๅ› ใงใ™ใ€‚
      ่จ˜ไบ‹ใฎใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใ‚’ไฟฎๆญฃใ—ใพใ—ใŸใฎใงใ”็ขบ่ชใใ•ใ ใ„ใ€‚

  3. Tetsu ใ‚ˆใ‚Š:

    ไฝฟ็”จใ—ใฆใ„ใ‚‹pngใฏใฉใ“ใงๅ…ฅๆ‰‹ใงใใพใ™ใ‹๏ผŸ
    URLใจใ‹ใ‚ใ‚Œใฐๆ•™ใˆใฆใใ ใ•ใ„ใ€‚

    • ็ฎก็†ไบบ ใ‚ˆใ‚Š:

      ็”ปๅƒใƒ•ใ‚กใ‚คใƒซไธŠใงๅณใ‚ฏใƒชใƒƒใ‚ฏใ—ใ€[็”ปๅƒใƒ•ใ‚กใ‚คใƒซใ‚’ไฟๅญ˜ใ™ใ‚‹]ใชใฉใ‚’้ธๆŠžใ™ใ‚‹ใจๅ…ƒ็”ปๅƒใ‚’ไฟๅญ˜ใงใใพใ™ใ€‚

  4. ใ‚ใ‹ใ‚‰ใชใ„ๅคช้ƒŽ ใ‚ˆใ‚Š:

    ๅ‚่€ƒใซใ•ใ›ใฆใ„ใŸใ ใ„ใฆใŠใ‚Šใพใ™ใ€‚

    ใฉใ†ใ—ใฆใ‚‚ใ€ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใ‚’ๅ…ฅใ‚Œ่พผใ‚“ใงใฟใŸใฎใงใ™ใŒใ€importใฎ็ฎ‡ๆ‰€ใง่ชญใฟ่พผใฟใพใ›ใ‚“ใ€‚

    ๅฎŒๆˆๅ“ใจๆฏ”่ผƒใ‚’ใ—ใŸใ„ใฎใงใƒ•ใ‚กใ‚คใƒซใ‚’ใ„ใŸใ ใ‘ใ‚Œใฐๅนธใ„ใงใ™ใ€‚
    ใฉใ“ใŒใงใใฆใ„ใชใ„ใฎใ‹ๆฏ”่ผƒใ‚’ใ—ใŸใ„ใงใ™ใ€‚
    ไฝ•ๅ’ใ‚ˆใ‚ใ—ใใŠ้ก˜ใ„ใ„ใŸใ—ใพใ™ใ€‚

    • ็ฎก็†ไบบ ใ‚ˆใ‚Š:

      ๆŽฒ่ผ‰ใ—ใฆใ„ใ‚‹ใƒ—ใƒญใ‚ฐใƒฉใƒ ใŒๅฎŒๆˆ็‰ˆใงใ™ใ€‚
      ใ‚ฒใƒผใƒ ๅ†…ใงใƒญใƒผใƒ‰ใ™ใ‚‹็”ปๅƒใƒ•ใ‚กใ‚คใƒซใฏๆ—ขใซๆŽฒ่ผ‰ใ—ใฆใŠใ‚Šใพใ™ใŒใ€้Ÿณๅฃฐใƒ•ใ‚กใ‚คใƒซใฏๅ†้…ๅธƒ็ฆๆญขใฎใƒ•ใƒชใƒผ้Ÿณๆบใ‚’ไฝฟ็”จใ—ใฆใ„ใ‚‹ใŸใ‚
      ๅ…ฅๆ‰‹ๅ…ˆใ‚’็ดนไป‹ใ™ใ‚‹ใพใงใจใชใฃใฆใŠใ‚Šใพใ™ใ€‚
      ใใฎใŸใ‚ใ€ๅ…จใƒ•ใ‚กใ‚คใƒซไธ€ๅผใ‚’ใ”ๆไพ›ใจใ„ใ†ใฎใฏใงใใพใ›ใ‚“ใฎใงใ€ใ”็†่งฃใ„ใŸใ ใ‘ใพใ™ใจๅนธใ„ใงใ™ใ€‚
      importใงใ‚จใƒฉใƒผใŒๅ‡บใฆใ„ใ‚‹ใจใ„ใ†ใ“ใจใฏpygameใƒขใ‚ธใƒฅใƒผใƒซใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใงใใฆใ„ใชใ„ๅฏ่ƒฝๆ€งใŒใ‚ใ‚Šใพใ™ใฎใง
      ๅ†ๅบฆใ€ใ€Œpip install pygameใ€ใงใ‚คใƒณใ‚นใƒˆใƒผใƒซใ•ใ‚Œใฆใฟใฆใฏใ„ใ‹ใŒใงใ—ใ‚‡ใ†ใ‹ใ€‚

  5. ๅŒฟๅ ใ‚ˆใ‚Š:

    LinuxใงPythonใ‚’ๅ‹‰ๅผทใ—ๅง‹ใ‚ใŸ็ด ไบบใงใ™ใ€‚
    ใƒ•ใ‚กใ‚คใƒซใฎ้ƒจๅˆ†ใง่‹ฅๅนฒไฟฎๆญฃใ‚’่ฆใ—ใพใ—ใŸใŒใ€็„กไบ‹ๅ‹•ใใพใ—ใŸใ€‚

    ใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ™ใ€‚