LoginSignup
0
1

Pygameド素人がRPGを作る レベル2

Last updated at Posted at 2023-10-26

前回→(https://qiita.com/Red-Jersey/items/195f413a86f6294c00c7)

はじめに

こんにちは。赤ジャージです。
今回は前回に引き続きpygameでのRPG制作です。

Pygameは挫折する要素が多すぎる!!!

プログラミング初心者が趣味で最初に触れる言語は大体Python(所説あり)で、その目的の大半はゲーム制作(???)です。その過程で大体の人がPygameを使うことになるのですが、初心者視点ではpygameは魑魅魍魎が跋扈する極めて複雑怪奇な現代のラビリンスです。とにかく難しい。挫折する。
僕もpygameを学び始めて早2年。全く使いこなせていません。╰(‘ω’ )╯三
もしつまずいたとしてもあまり気にせず行きましょう。(なぜ話したし)

ゲーム制作とは(哲学)

僕にとってゲーム制作とは、仮想世界の創造、つまり神への昇格です。(厨二病)
生き物も、言語も、文化も、さらには概念、物理法則すら自分で作れます。あなたがゲームを作るということは、あなたは仮想世界の創造主足りうるのです(SSSS.GRIDMANみたいな)。そう思うと妙に愛着が湧いてきませんか?ゲームの制作意欲が湧いてきませんか?このPC上の自分だけの無限世界を、とことん可愛がってあげましょう(狂気)

今回の目標

前回、ウィンドウの表示まで行きました。
今回のテーマは、ズバリ、テキストの表示です!
Pygameのサポートされている機能には、テキストを描画する機能があります。ここら辺は難しくないので、今回はサクッと説明します。

文字創造

ゲームには、文字が必要です。何らかの説明書きがないと、自分や味方、敵のステータス、技の効果やストーリーまでもがわからずじまいです。

テキストの表示1
import pygame
from pygame.locals import *
import sys

pygame.init()
screen = pygame.display.set_mode((640,480))
pygame.display.set_caption("Hello, world!")

font = pygame.font.SysFont(None, 80)
text1 = font.render("Hello, world!", False, (0,0,0))
text2 = font.render("Hello, world!", True, (255,0,0))
text3 = font.render("Hello, world!", True, (255,0,0), (255,255,0))
 
while True:
    screen.fill((255,255,255))
    
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
            
    screen.blit(text1, (20,50))
    screen.blit(text2, (20,150))
    screen.blit(text3, (20,250))
    
    pygame.display.update()

このコードを実行すると、こうなります
2.png
ところで、文字というものにはフォントがありますよね?pygameではまずフォントを指定し、テキストを作成、表示しています。

関数変数キーワードの解説

pygame.font.Sysfont(None,80): pygame.fontでpygameのfontライブラリにアクセスし、Sysfont()でシステムフォントを指定します。この場合、Noneと選択しているのでデフォルトのフォントが使われます。また、Sysfontの第二引数は文字の大きさになっていて、この場合80なので80ピクセルの文字が使われます。まあこだわりがないなら何も考えずにpygame.font.Sysfont(None,サイズはお好みで)と入力すればOKです。

text = font.render(): このメソッドはテキストを作るためのものです。引数が多いので箇条書きで。
・第一引数: テキストの本文を入力します。
・第二引数: 文字を滑らかにするか(アンチエイリアシング)を決めます。基本的にはTrue。
・第三引数: 文字本体の色をRGBで指定します。
・第四引数: 文字の背景の色をRGBで指定します。(デフォルトではなし)

screen.blit(text,(x座標,y座標)): 文字をスクリーンに表示します。第一引数は表示する変数、第二引数は表示する座標です。(指定した座標がテキストの左上の座標になります。)

転生勇者は英語を話せない

ここで、ある問題が発生します。pygameはデフォルトで日本語非対応!!!
というものです。日本語でtextを作っても、バグって文字化けします。これは、pygameに日本語のフォントがないことに由来します。なので、こっちで用意しなければなりません。僕はipaxeg.ttfファイル(ipaexゴシック)を使っています。
窓の社で無料でダウンロードできるので、オススメです。
☟これです。
https://forest.watch.impress.co.jp/library/software/ipaexfont/
コードとフォントファイルは必ず同じフォルダまたは同じ作業スペースに入れて下さい。そうしないと動きません。

日本語で押し通る

テキストの表示2
import pygame
from pygame.locals import *
import sys

pygame.init()
screen = pygame.display.set_mode((640,480))
pygame.display.set_caption("日本語で押し通る")
 
font = pygame.font.Font("ipaexg.ttf", 80)
text1 = font.render("こんにちは!", False, (0,0,0))
text2 = font.render("こんにちは!", True, (255,0,0))
text3 = font.render("こんにちは!", True, (255,0,0), (255,255,0))
 
while True:
    screen.fill((255,255,255))
    
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
            
    screen.blit(text1, (20,50))
    screen.blit(text2, (20,150))
    screen.blit(text3, (20,250))

    pygame.display.update()

うまくいけばこうなるはずです。
3.png

関数変数キーワードの解説

font = pygame.font.Font("ipaexg.ttf",80): 今回は、SysFontではなくFontを使っています。システムフォントではなく、外部のフォントを使うときpygame.font.Fontを使います。
フォントファイルの拡張子は、.ttfが一般的です。

まとめ

フォントを用意(font = pygame.font.SysFont or Font(フォント名,大きさ))

テキストを作成(text = font.render(テキスト,True,(R,G,B)))

テキストを表示(screen.blit(text,(x座標,y座標)))
こんな感じで文字をウィンドウに表示させています。

Result

今回は、文字を表示できるようにしました。文字はゲームにおいて極めて重要な役割を持つので、極めて重要な役割を持ちます(大事なことなので2回言いました)
外部ファイルを使ってコードを書くとバグることがよくあります。僕の場合vscodeで画像を読み込ませるのが難しかったり、日本語を表示させようとして何回もバグったりします(おま環)
バグって上手くいかなくても根気よくやりましょう。そのうちできます

参考文献

この記事はこのブログを嚙み砕いて説明しております...(そのうちオリジナルRPGを作るようになるんだよね?ね??)
https://aidiary.hatenablog.com/entry/20080507/1269694935

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1