プログラミング言語「Python」で制作 Part94 | Photoshop CC Tutorials

今回はプログラミング言語の「Python」を使って作成しました。

 

自機が加速するプログラムです。

 

■ プログラム

import traceback
 
try:
    import sys
    from random import randint
    import pygame
    from pygame.locals import QUIT, Rect, KEYDOWN, K_SPACE, K_LEFT, K_RIGHT, K_UP, K_DOWN

    #-----------------------------------------------------------
    # Pygame初期設定
    #-----------------------------------------------------------
    pygame.init()
    pygame.key.set_repeat(5, 5)
    SURFACE = pygame.display.set_mode((800, 600))
    FPSCLOCK = pygame.time.Clock()

    #-----------------------------------------------------------
    # スーパークラス定義
    #-----------------------------------------------------------
    class Drawable:
        """ 全ての描画オブジェクトのスーパークラス """
        def __init__(self, rect, offset0, offset1):
            self.ship = pygame.image.load("ship.png")
            self.rect = rect

        def move(self, diff_x, diff_y):
            """ オブジェクトを移動 """
            self.rect.move_ip(diff_x, diff_y)

        def draw(self):
            """ オブジェクトを描画 """
            #pygame.draw.rect(SURFACE, (255, 250, 0), self.rect)
            SURFACE.blit(self.ship, self.rect.topleft)

    #-----------------------------------------------------------
    # サブクラス定義
    #-----------------------------------------------------------
    class Ship(Drawable):
        """ 自機オブジェクト """
        def __init__(self):
            super().__init__(Rect(0, 200, 90, 60), 0, 0)

    def main():
        """ メインルーチン """
        #-----------------------------------------------------------
        # インスタンス生成
        #-----------------------------------------------------------
        ship = Ship()
        ship_y = 0
        ship_x = 0
        rectA = Rect(400 - 50, 300, 100, 100)

        velocity = [0, 0]
        accel = (0.5, 0)
        score = 0
        game_over = False
        sysfont = pygame.font.SysFont(None, 36)
        bang_image = pygame.image.load("bang.png")

        #-----------------------------------------------------------
        # ループ処理
        #-----------------------------------------------------------
        while True:
            is_space_down = False
            is_left_down = False
            is_right_down = False
            is_up_down = False
            is_down_down = False

            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    sys.exit()
                elif event.type == KEYDOWN:
                    if event.key == K_SPACE:
                        is_space_down = True
                    elif event.key == K_LEFT:
                        is_left_down = True
                        ship_x -= 0.5
                    elif event.key == K_RIGHT:
                        is_right_down = True
                        ship_x += 0.5
                    elif event.key == K_UP:
                        is_up_down = True
                        ship_y -= 0.5
                    elif event.key == K_DOWN:
                        is_down_down = True
                        ship_y += 0.5

            # 自機を移動
            velocity[0] += accel[0]
            ship.move(velocity[0], velocity[1])

            if ship.rect.x > 890:
                ship.rect.x = 0
                velocity[0] = 0

            #ship.move(ship_x, ship_y)

            # 衝突判定
            #if ship.rect.colliderect(rectA):
            #    score_image = sysfont.render("Hitting!", True, (255, 255, 0))
            #else:
            #    score_image = sysfont.render("Not Hitting", True, (255, 255, 0))

            # 描画
            SURFACE.fill((0, 0, 0))

            """ ブロックを描画する """
            #pygame.draw.rect(SURFACE, (255, 255, 0), rectA)

            """ スコアを描画する """
            #score_image = sysfont.render("score is {}".format(score), True, (0, 0, 225))
            score_image = sysfont.render("velocity : {0}".format(velocity[0]), True, (255, 255, 0))
            SURFACE.blit(score_image, (600, 20))

            """ 爆発エフェクトを描画する """
            if game_over:
                SURFACE.blit(bang_image, (ship_x, ship_y-40))
            
            """ 自機を描画する """
            ship.draw()

            pygame.display.update()
            FPSCLOCK.tick(30)

    if __name__ == '__main__':
        main()

except Exception as e:
    print("エラー情報\n" + traceback.format_exc())

input()

 

■ 参考書

「Pythonゲームプログラミング 知っておきたい数学と物理の基本」

 

■ ゲーム用ライブラリ

「Pygame」

 

■ プログラミング言語