すぐ影響されるブログ

アニメやマンガにすぐ影響されるミーハーのブログ

【画面設定】NEW GAME! 観ました。プログラミング始めます。(2-1)【Python 3】

f:id:kirintt:20180712063409p:plain
NEW GAME! 第3話「遅刻したらどうなるんだろう」より)

久々にソードマスターヤマト 誤植編を読んだら口癖が移っちゃったぜ。

pygame という python で使えるゲーム開発用ライブラリがあるんだぜ。
これを使って2Dアクションゲームを作っていくぜ。

ちなみにいま自分が使ってる anaconda 3 ってのには pygame が最初から入ってたから導入パートは飛ばすぜ。

今回は画面設定についてだぜ。
とりあえず画面表示に関する部分をやったぜ。

Python 3.6 で作業してます


前回
nagoyanofes.hatenadiary.jp

ソースコード

# -*- coding:utf-8 -*-   # 日本語使うぜ
import pygame   # pygame 使うぜ
from pygame.locals import *   # pygame.localsは略すぜ
import sys   # sys 使うぜ

def main():   # main て名前の関数作るぜ   
    pygame.init()   # pygame 初期化するぜ
    
    screen = pygame.display.set_mode((640, 480))   # ゲーム画面の設定だぜ
    
    player = pygame.image.load("1player.png").convert_alpha()   # プレイヤー画像はこれ使うぜ
    
    while (1):   # ループだぜ
        pygame.display.update()	# 画面を更新するぜ
        
        screen.blit(player,player.get_rect())   # 画面にプレイヤーを表示するぜ
        
        for event in pygame.event.get():   # イベント(キー入力等)を設定するぜ
            if event.type == pygame.QUIT:   # "閉じる"を押した時だぜ
                pygame.quit()   # pygame を終了するぜ
                sys.exit()   # python プログラムを終了するぜ
       
if __name__ == '__main__':   # このファイルが直接実行された時だぜ
    main()   # 関数 main を実行するぜ

実行結果

このコードを実行したらこんな感じになるぜ(プレイヤーの画像はStudio 4D 素材・2D ACG sideviewより)。
f:id:kirintt:20180712082430p:plain

コードの説明

(自信ニキのご指摘お待ちしております)
コメントアウトだけでわかりそうな箇所は省略するぜ。

【1~4行目】基本設定

# -*- coding:utf-8 -*-
import pygame   # pygame 使うぜ
from pygame.locals import *   # pygame.localsは略すぜ
import sys   # sys 使うぜ

プログラムで使うライブラリとかが書いてあるぜ。
要は自己紹介だぜ。

3行目

from pygame.locals import *

pygame で独自に設定されてる定数を使うぜ。
今回のコードでいうと17行目の "QUIT" がそれだぜ。

本来 "pygame.locals.QUIT" って書かなきゃ使えないのをこいつのおかげで省略できるんだぜ。
すごいぜ。

4行目

import sys

python プログラムの動作に使う定数とか関数とかを操るライブラリだぜ。
sys は system (システム) の略っぽいぜ。
とりあえず重要人物らしいぜ?

【6~21行目】main 関数

def main():   # main て名前の関数作るぜ   
    pygame.init()   # pygame 初期化するぜ
    
    screen = pygame.display.set_mode((640, 480))   # ゲーム画面の設定だぜ
    
    player = pygame.image.load("1player.png").convert_alpha()   # プレイヤー画像はこれ使うぜ
    
    while (1):   # ループだぜ
        pygame.display.update()	# 画面を更新するぜ
        
        screen.blit(player,player.get_rect())   # 画面にプレイヤーを表示するぜ
        
        for event in pygame.event.get():   # イベント(キー入力等)を設定するぜ
            if event.type == pygame.QUIT:   # "閉じる"を押した時だぜ
                pygame.quit()   # pygame を終了するぜ
                sys.exit()   # python プログラムを終了するぜ

ここがこのプログラムの実働部隊だぜ。
小分けにして解説していくぜ。

[7~11行目] 下準備
    pygame.init()   # pygame 初期化するぜ
    
    screen = pygame.display.set_mode((640, 480))   # ゲーム画面の設定だぜ
    
    player = pygame.image.load("1player.png").convert_alpha()   # プレイヤー画像はこれ使うぜ

この後突入するループに向けての下準備だぜ。

9行目

screen = pygame.display.set_mode((640, 480))

screen っていう変数にゲーム画面の大きさ設定を代入するぜ。
今回のケースだと、ヨコ640、タテ480ということになるぜ。

11行目

player = pygame.image.load("1player.png").convert_alpha()

プレイヤーとして画面に表示したい画像を読み込むぜ。
今回でいうと"1player.png"っていうファイルがそれだぜ。
使いたい画像はこのファイルと同じ場所に保存するようにするんだぜ。

[13~21行目] 本命のループ
    while (1):   # ループだぜ
        pygame.display.update()	# 画面を更新するぜ
        
        screen.blit(player,player.get_rect())   # 画面にプレイヤーを表示するぜ
        
        for event in pygame.event.get():   # イベント(キー入力等)を設定するぜ
            if event.type == pygame.QUIT:   # "閉じる"を押した時だぜ
                pygame.quit()   # pygame を終了するぜ
                sys.exit()   # python プログラムを終了するぜ

いよいよ本番だぜ。
ゲーム画面の表示を維持できるのはこのループのおかげなんだぜ。

16行目

screen.blit(player,player.get_rect())

ゲーム画面 (screen; 9行目) に読み込んだプレイヤー画像 (player; 11行目) を貼り付けるぜ (blit) 。

18行目

for event in pygame.event.get():

pygame 高校 event 組の出欠確認をしてるぜ。

19~21行目

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

QUIT クンが出席してた時(19行目)に起こる事件だぜ。
学校閉鎖 (20行目) からのワールド★エンド (21行目) だぜ。
QUIT クンは破壊神だった……?

【23, 24行目】"ゲーム" が始まるのか、始まらないのか

if __name__ == '__main__':
    main()

23行目の if 文は、このファイルが直接実行されているか、import で別のファイルが呼び出しているのかを判別しているぜ。
で、もし直接実行されているなら、main 関数を実行するぜ(24行目)。

例えるなら、顔認証が必要なチケットを導入してるライブで、本人かどうか確かめる入場管理スタッフみたいなモンだぜ。
スタッフがOKと判断したら、入場できる(=ゲームが始まる)ってワケだぜ。

参考サイト

1回目:pygameの使い方まとめ|pythonで初めてのゲームプログラミング | Python3やpygameを日本語で解説
 ☝今回いちばんお世話になったぜ。ありがとうだぜ。
Pygameでゲーム作成 - Qiita
 ☝大きな流れはこちらを参考にする予定だぜ。お世話になりますだぜ。
初心者のための pygame ガイド
 ☝display.set_mode と blit の関係を理解する時に参考になったぜ。ありがとうだぜ。
【Python入門】モジュールを扱う際に重要な「if __name__ == ‘__main__’:」とは? | プロナビ
 ☝「if __name__ == ‘__main__’:」についてわかりやすく説明してくれてるぜ。ありがとうだぜ。
Studio 4D 素材・2D ACG sideview
 ☝プレイヤーの画像を使用させて頂いたぜ。ありがとうだぜ。