11回目:pygameでゲームを作成する|台詞ファイルから台詞を出力する

RPGゲームなんかでは必須となる文字の描写についてやっていきたいと思います。

 

一番手っ取り早いのは、フォントファイルから文字を読み込んで描写することです。

 

(拡張子は.ttf)

 

デフォルトで入っている文字フォントを持ってきてもいいですし、フリーのフォントをダウンロードしてもOKです。

 

今回は、同じ階層にそのファイルを置いてください。

 

まずは普通に文字を出力する

ソースコード


#-*- coding:utf-8 -*-
import pygame
from pygame.locals import*
import sys

size=(640,480)	#スクリーンサイズ

pygame.init()
screen=pygame.display.set_mode(size)	#スクリーンの設定
pygame.display.set_caption("台詞を書き出す")	#タイトル

font=pygame.font.Font("JKG-L.ttf",60)	#フォントファイルと文字の大きさ
hello=font.render("hello",False,(255,255,255))	#出力したい文字となめらかさ(Trueだとなめらか)、文字色の設定

while(1):
 screen.fill((0,0,0))
 screen.blit(hello,(0,0))	

 pygame.display.update()

 for event in pygame.event.get():
  if event.type==QUIT:
   sys.exit()

 

これでhelloという文字が0,0の場所に出力されました。

スペースを押すと次のメッセージが出力

 

メッセージを配列に格納してスペースを押すと次の台詞が出力されるようにします。

 


#-*- coding:utf-8 -*-
import pygame
from pygame.locals import*
import sys

size=(640,480)	#スクリーンサイズ

pygame.init()
screen=pygame.display.set_mode(size)	#スクリーンの設定
pygame.display.set_caption("台詞を書き出す")	#タイトル

hello=[]	#配列宣言
check=0	#最初の文字

font=pygame.font.Font("JKG-L.ttf",60)	#フォントファイルと文字の大きさ

hello.append(font.render("hello1回目",True,(255,255,255)))	#出力したい文字となめらかさ(Trueだとなめらか)、文字色の設定
hello.append(font.render("hello2回目",True,(255,255,255)))	
hello.append(font.render("hello3回目",True,(255,255,255)))	

while(1):
 screen.fill((0,0,0))
 screen.blit(hello[check],(0,0))	

 pygame.display.update()

 for event in pygame.event.get():
  if event.type==QUIT:
   sys.exit()
  if event.type==KEYDOWN:
   if event.key==K_SPACE:	#スペースを押すとcheckに+1される
    check+=1
  if check==3:
   sys.exit()

 

これでスペースを押すと次の台詞に切り替わります。

 

しかしこれだとメインループがごちゃごちゃになってしまうので、「台詞配列を作る」を別のファイルで作成していきます。

 

ファイルを分けたバージョン

メインファイル


#-*- coding:utf-8 -*-
import pygame
from pygame.locals import*
import sys
import test13a	#外部ファイルの読み込み、場所は同じ階層
size=(640,480) #スクリーンサイズ

pygame.init()
screen=pygame.display.set_mode(size) #スクリーンの設定
pygame.display.set_caption("台詞を書き出す") #タイトル

check=0 #最初の文字

hello=[]
font=pygame.font.Font("JKG-L.ttf",60) #フォントファイルと文字の大きさ
hello=test13a.make_text(font) #右辺を訳すと「test13aの中のmake_text()を呼び出す」、呼び出した配列をhelloに

while(1):
screen.fill((0,0,0))
screen.blit(hello[check],(0,0))

pygame.display.update()

print (check)
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
if event.type==KEYDOWN:
if event.key==K_SPACE: #スペースを押すとcheckに+1される
check+=1
if check==3:
sys.exit()

サブファイル


#-*- coding:utf-8 -*-
import pygame
from pygame.locals import*

def make_text(font):
 textList=[]
 
 textList.append(font.render("hello1回目",True,(255,255,255)))	#出力したい文字となめらかさ(Trueだとなめらか)、文字色の設定
 textList.append(font.render("hello2回目",True,(255,255,255)))	
 textList.append(font.render("hello3回目",True,(255,255,255)))
 
 return textList

さらにそれに加えて台詞そのものを別のファイルに保存してまとめておくようにします。 それがこちら

 


1回目ですよ~ん,2回目ですよ~ん,3回目ですよ~ん

 

名前はserihu.txtです。同じように階層は一緒です。

 

メインファイル


#-*- coding:utf-8 -*-
import pygame
from pygame.locals import*
import sys

import test13a	#外部ファイルの読み込み、場所は同じ階層

size=(640,480)	#スクリーンサイズ

pygame.init()
screen=pygame.display.set_mode(size)	#スクリーンの設定
pygame.display.set_caption("台詞を書き出す")	#タイトル

check=0	#最初の文字

hello=[]
font=pygame.font.Font("JKG-L.ttf",60)	#フォントファイルと文字の大きさ
hello=test13a.LoadText("serihu.txt",font).make_text(font)	#右辺を訳すと「test13aの中のLoadTextの中のmake_textを呼び出す」、呼び出した配列をhelloに
	

while(1):
 screen.fill((0,0,0))
 screen.blit(hello[check],(0,0))

 pygame.display.update()
 
 print (check)
 for event in pygame.event.get():
  if event.type==QUIT:
   sys.exit()
  if event.type==KEYDOWN:
   if event.key==K_SPACE:	#スペースを押すとcheckに+1される
    check+=1
  if check==3:
   sys.exit()

サブファイル


#-*- coding:utf-8 -*-
import pygame
from pygame.locals import*
import codecs

class LoadText:
 def __init__(self,filename,font):
  self.font=font
  fp=codecs.open(filename,"r","utf-8-sig")
  for line in fp:	#fpの行のかず繰り返す
   line=line.rstrip()	#改行を除去
   self.textdata=line.split(",")	#,で区切る
  fp.close()

 def make_text(self,font):
  
  textList=[]
  for i in self.textdata:
   print (i)
   textList.append(self.font.render(str(i),True,(255,255,255)))	#出力したい文字となめらかさ(Trueだとなめらか)、文字色の設定

  return textList


これでファイルに台詞をまとめておけるため、簡単に編集ができるようになりました。

 

まとめ

今回は一人分の台詞を格納しましたが、台詞ファイルの2行目3行目と付け加えることもできます。

 

そのときは、格納する配列も増やしましょう。