pygameで始めるpythonプログラム 2(キャラクターを出してみる編)
はじめに
前回の記事でpygameを使って画面を出しましたが、今回はキャラクターを画面上に置いてみます。
やること
画面にプレーヤーとして赤い四角、ゴールとして青い四角を置いてみます。ついでにキャラクターを配置する位置は画面サイズに依存するので、画面サイズを定数化したいと思います。
コード
これが今回作成したコード。
import pygame
import sys
# 定数の設定
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
# Pygameの初期化
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("ゲームタイトル")
# ゲームのメインクラス
class Game:
def __init__(self):
self.character_pos = [50, SCREEN_HEIGHT - 100]
self.goal_pos = [SCREEN_WIDTH - 70, SCREEN_HEIGHT - 150]
def run(self):
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
screen.fill((255, 255, 255))
pygame.draw.rect(screen, (255,0,0), (*self.character_pos, 50, 50))
pygame.draw.rect(screen, (0,0,255), (*self.goal_pos, 50, 100))
pygame.display.flip()
# ゲームの開始
if __name__ == "__main__":
game = Game()
game.run()
前回との差分
# 定数の設定
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
これは画面サイズを定数として定義しています。この定数を色んなところで使い回します。ここには書いてませんが、画面サイズを直接数値入力していた箇所を定数に置き換えていますよ。pygame.display.set_modeのところです。
class Game:
def __init__(self):
self.character_pos = [50, SCREEN_HEIGHT - 100]
self.goal_pos = [SCREEN_WIDTH - 70, SCREEN_HEIGHT - 150]
Gameクラスにコンストラクタを設定し、キャラクター(プレーヤ)とゴールのポジションをクラス変数として定義し、初期位置を設定しておきます。こういう書き方をしておけば、初期位置が画面サイズに依存するよう計算されるので、画面サイズが変わっても両端からの位置は変わらないですね。
def run(self):
while True:
...
pygame.draw.rect(screen, (255,0,0), (*self.character_pos, 50, 50))
pygame.draw.rect(screen, (0,0,255), (*self.goal_pos, 50, 100))
Gameクラスのrunメソッドの無限ループの中で赤い四角と、青い四角(縦長)をpygame.drawで書きます。
ちなみに、*self.character_posの「*」はリストのアンパックと言って、[50, SCREEN_HEIGHT - 100]となっているリストが、ただの50, SCREEN_HEIGHT - 100となります。
つまり、
(*self.character_pos, 50, 50)
が
(50, SCREEN_HEIGHT - 100, 50, 50)
となってくれるわけですね。「*」が無いと、
([50, SCREEN_HEIGHT - 100], 50, 50)
となっておかしなことになりますね。
実行してみる
誰がなんと言おうと、キャラクターとゴールが画面に出ました。もう、2Dアクションゲーム作る気満々ですよね。
次やること
当然キャラクターを動かしたいですよね。