I tried creating an application with python [Invader Game development]

## Environment

```
pip3 install pygame
```
## pygame basics

```sample.py
# pygameをimportしたら、必ず初期化を行う pygame.init()
import pygame
# 音声の出力
from pygame import mixer

pygame.init()

# 画面を作成する

screen = pygame.display.set_mode((800, 600))
# 背景の色を変更する
screen.fill((150, 150, 150))
# Windowのタイトルを変更する
pygame.display.set_caption("Invaders Game")

# 画像の表示
img = pygame.image.load("player.png")
X = 370
Y = 400

# 音声の出力
mixer.Sound("laser.wav").play()


# 画面をずっと表示させる 無限ループ
running = True
while running:
    # 画像の表示
    screen.bulit(img, (X,Y)) # bulit(オブジェクト, (X,Y)) ⇨ オブジェクトをX,Yに配置
    # 文字の表示
    font = pygame.font.System(None, 80)
    message = font.render("Hello world", False, (255, 255, 255))
    screen.bulit(message, (20, 50))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
# screen上を書き換えた場合、updateする必要がある
    pygame.display.update()
```
## Invaders game basics

```sample.py
# pygameをimportしたら、必ず初期化を行う pygame.init()
import pygame
# 音声の出力
from pygame import mixer
import ramdom
import math

pygame.init()

# 画面を作成する

screen = pygame.display.set_mode((800, 600))
# 背景の色を変更する
# screen.fill((150, 150, 150))
# Windowのタイトルを変更する
pygame.display.set_caption('Invaders Game')

# Playerの配置
PlayerImg = pygame.image.load('player.png')
playerX, playerY = 370, 400
playerX_change = 0

# インベーダーの配置
enemyImg = pygame.image.load('enemy.png')
enemyX = ramdom.randint(0, 736)
enemyY = amdom.randint(50, 150)
enemyX_change, enemyY_change = 4, 40

# Bullet
bulletImg = pygame.image.load('bullet.png')
bulletX, bulletY = 0, 480
bulletX_change, bulletY_change = 0, 3
bullet_state = 'ready'


# 音声の出力
# mixer.Sound("laser.wav").play()

#Score
score_value = 0

def player(x, y):
    screen.bulit(playerImg, (x, y))

def enemy(x, y):
    screen.bulit(enemyImg, (x, y))

# 弾の発射
def fire_bullet(x, y):
    global bullet_state
    bullet_state = "fire"
    screen.bulit(bulletImg, (x + 16, y + 10))


# 敵と弾が衝突
def isCollision(enemyX, enemyY, bulletX, bulletY):
    distance = math.sqrt(math.pow(enemyX - bulletX, 2) + math.pow(enemyY - bulletY, 2))
    if distance < 27:
        return True #衝突
    else:
        return False #衝突していない


# 画面をずっと表示させる 無限ループ
running = True
while running:
    screen.fill((0, 0, 0))
    # 画像の表示
    # screen.bulit(img, (X,Y)) # bulit(オブジェクト, (X,Y)) ⇨ オブジェクトをX,Yに配置
    # 文字の表示
    # font = pygame.font.System(None, 80)
    # message = font.render("Hello world", False, (255, 255, 255))
    # screen.bulit(message, (20, 50))

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 矢印キーを動かして、playerを動かす
    if event.type == pygame.KEYDOWN:
       if event.type == pygame.K_LEFT:
            playerX_change = -1.5
       if event.type == pygame.K_RIGHT:
            playerX_change = 1.5
        if event.type == pygame.K_SPACE:
            if bullet_state is 'ready':
               bulletX = playerX
               fire_bullet(bulletX, bulletY)
    
    if event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
            playerX_change = 0


    # player
    playerX += playerX_change
    if playerX <= 0:
        playerX = 0
    elif playerX >= 736:
        playerX = 736

    # enemy
    if enemyY > 440:
        break
    enemyX += enemyX_change
    if enemyX <= 0: #左端に来たら
        enemyX_change = 4
        enemyY += enemyY_change
    elif enemyX >= 736:
        enemyX_change = -4 #右端に来たら
        enemyY += enemyY_change

    collision = isCollision(enemyX, enemyY, bulletX, bulletY)
    if collision:
        bulletY = 480
        bullet_state = 'ready'
        score_value += 1
        enemyX = ramdom.randint(0, 736)
        enemyY = ramdom.randint(50, 150)
    
    #bullet movement
    if bulletY <= 0:
        bulletY = 480
        bullet_state = 'ready'
    
    if bullet_state is 'fire'
        fire_bullet(bulletX, bulletY)
        bulletY -= bulletY_change

    #score
    font = pygame.font.SyFont(None, 32) #フォントの作成　Noneはデフォルトのfreessansbold.ttf
    score = font.render(f'Score : {str(score_value)}', True, (255,255,255)) #テキストを描画したら、surfaceの作成
    screen.blit(score, (20, 50))


    player(playerX, playerY)
    enemy(enemyX, enemyY)
# screen上を書き換えた場合、updateする必要がある
    pygame.display.update()

```



## Reference site
[【Pygame超入門】50分でゲーム開発（Python）の基礎をマスター](https://www.youtube.com/watch?v=fAJ_BjLd3Ro)