buto > /dev/null

だいたい急に挑戦してゴールにたどり着かずに飽きる日々です

pygameでお手軽ゲーム開発

矢印キーでケーキを取るゲームを作った

初めてゲームを作ってみた! プレイヤーを矢印キーで操作してカップケーキを取りに行くゲームです

カップケーキのマスに行くと左上のスコアが加算、カップケーキは他のマスに移動 ゲーム開始から20秒後にスコアを表示して終了

f:id:butorisa:20201020171652g:plain

背景画像はこちら

f:id:butorisa:20201020171716p:plain

プレイヤー、カップケーキは「いらすとや」からダウンロードしました

import pygame
from pygame.locals import *
import sys
from collections import namedtuple
import time

def main():
    # 画面サイズ
    screen_size = namedtuple('screen_size', 'width height')
    screen_size = screen_size(width=300, height=400)

    # スコアの位置
    pos_score = [10, 10]
    
    # プレイヤーの位置
    pos_player = [150, 345]
    
    # ケーキの位置
    pos_cake = [250, 50]
    
    pygame.init()
    
    # 既定のウィンドウ、32bit
    pygame.display.set_mode(screen_size, 0, 32)
    pygame.display.set_caption('cupcake')
    screen = pygame.display.get_surface()
    
    # 背景画像
    bg = pygame.image.load('board.png').convert_alpha()
    # 透過度
    rect_bg = bg.get_rect()
    
    # スコア
    score = 0
    
    # プレイヤー
    player = pygame.image.load('valentinesday_heart_girl.png').convert_alpha()
    rect_player = player.get_rect()
    rect_player.center = pos_player
    
    # カップケーキ
    cake = pygame.image.load('sweets_cupcake.png').convert_alpha()
    rect_cake = cake.get_rect()
    rect_cake.center = pos_cake# 
    
    # タイマースタート
    start_time = time.time()
    
    while(1):
        # プレイヤーの移動
        pressed_key = pygame.key.get_pressed()
        # ←
        if pressed_key[K_LEFT]:
            pos_player[0] -= 100
        # →
        if pressed_key[K_RIGHT]:
            pos_player[0] += 100
            
        # ↑
        if pressed_key[K_UP]:
            pos_player[1] -= 100
            
        # ↓
        if pressed_key[K_DOWN]:
            pos_player[1] += 100
            
        # 画面の端だったら動かない
        if pos_player[0] < 10:
            pos_player[0] += 100
            
        if pos_player[0] > 250:
            pos_player[0] -= 100
            
        if pos_player[1] < 10:
            pos_player[1] += 100
            
        if pos_player[1] > 350:
            pos_player[1] -= 100
            
        rect_player.center = pos_player
        
        # プレイヤーがケーキにたどり着いたらケーキは移動
        if rect_player.colliderect(rect_cake):
            
            # スコア加点
            score += 100
            pos_cake[0] += 100
            pos_cake[1] -= 100
            
            # 画面の端だったら反対側に移動
            pos_cake[0] = pos_cake[0] % 300
            pos_cake[1] = pos_cake[1] % 400
            rect_cake.center = pos_cake
        
        # 画面更新間隔
        pygame.time.wait(100)
        
        screen.fill((0, 0, 0, 0))
        # 背景描画
        screen.blit(bg, rect_bg)
        # スコア描画
        sysfont = pygame.font.SysFont(None, 20)
        rect_score = sysfont.render('SCORE:' + str(score), True, (160,100,65))
        screen.blit(rect_score, pos_score)
        # ケーキ描画
        screen.blit(cake, rect_cake)
        # プレイヤー描画
        screen.blit(player, rect_player)
        
        # タイムアウト
        current_time = time.time()
        if (current_time - start_time) >= 20:
            start_flg = False
            pos_msg = [50, 150]
            font_msg = pygame.font.SysFont(None, 50)
            rect_msg = font_msg.render('SCORE:' + str(score), True, (160,100,65))
            
            screen.fill((255, 250, 165, 0))
            screen.blit(rect_msg, pos_msg)
            
        pygame.display.update()
        
        for event in pygame.event.get():
            # 閉じるボタン押下
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
                
if __name__ == '__main__':
    main()