読者です 読者をやめる 読者になる 読者になる

人工知能に関する断創録

人工知能、認知科学、心理学、ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習・Deep Learningに関する記事が多いです。



プレイヤーの描画

Pygame

まずは一番簡単なところから作ります。プレイヤーを画面に描いてみます。プレイヤーですが、

f:id:aidiary:20100605232944p:plain

を使います。この素材は、DotWorldさん(リンク切れ)からお借りしています。ここの素材はドラクエのような旧き良きRPGっぽくてすごく好きです。

RPGでは、マップ、イベント、画像、サウンドなどたくさんのファイルを使うのでZIPでまとめて配布することにします。Pygameでは素材はすべてdataにまとめて放り込むみたいな慣習があるのでdataフォルダにまとめています。ソースコードは解凍して見てください。

Pythonの世界ではPy〜とか〜pyいう名前がよく使われます。ここでは、PythonでRPGを作るということでPyRPGと命名しようと思います。

pyrpg01.zip
f:id:aidiary:20100605232945p:plain

サンプルスクリプト

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pygame
from pygame.locals import *
import sys
import os
 
SCR_RECT = Rect(0, 0, 640, 480)
 
def load_image(filename, colorkey=None):
    filename = os.path.join("data", filename)
    try:
        image = pygame.image.load(filename)
    except pygame.error, message:
        print "Cannot load image:", filename
        raise SystemExit, message
    image = image.convert()
    if colorkey is not None:
        if colorkey is -1:
            colorkey = image.get_at((0,0))
        image.set_colorkey(colorkey, RLEACCEL)
    return image
 
def main():
    pygame.init()
    screen = pygame.display.set_mode(SCR_RECT.size)
    pygame.display.set_caption(u"PyRPG 01 プレイヤーの描画")
    
    playerImg = load_image("player1.png", -1)  # プレイヤー
    
    while True:
        screen.fill((0,0,255))
        screen.blit(playerImg, (0,0))  # プレイヤーを描画
        pygame.display.update()
        for event in pygame.event.get():
            if event.type == QUIT:
                sys.exit()
            if event.type == KEYDOWN and event.key == K_ESCAPE:
                sys.exit()
 
if __name__ == "__main__":
    main()

イメージの仕様

画像は32x32ピクセルのPNG形式です。今後使うマップチップ(扉とか壁とか宝箱とか)もすべて32x32 ピクセルのPNG形式に統一しています。PNGじゃなくてもGIFやBMPでもかまいません。Pygameではまったく同じように扱えます。またPNG には透過処理(絵の背景を透明にする処理)を施していません。Pygameでは簡単に透過色(アルファ値)を設定できるのであえてしませんでした。画像をロードする関数load_image()は透過色を設定していないことを前提にしています。

プレイヤーの描画は非常に簡単です。基礎編のイメージを描画する(2008/5/5)に詳しくまとめたので参照してください。はじっこでいじけてますね!これから少しずつRPGらしくしていきます。