初心者向けのPythonゲームプログラミング入門講座(第3回:ドラクエの戦闘シーンみたいな動きを作ろう)

プログラミング入門講座

どうも、こんにちは、だんなです。

2020年、プログラミング教育が小学校で必修化されることをきっかけに、本業システムエンジニアのだんなが息子に簡単なプログラミング(Python:パイソン)を教えているうちに、自分もだんだんスイッチが入ってしまい約30年ぶりにゲームを作ってみたくなりました

本業はゲーム屋さんではありませんので、ゲームが大好きな小学生の息子から「ここの動きがおかしい」とか「こうしないと面白くない」などの意見をもらいながら、プログラムを作っていく過程をブログ記事に残していきます。今から子供にプログラミングを教えたい、親子で一緒に学んでみたい方にもpythonのインストールから進められるお勧めの入門記事になると思います。

だんな
だんな

第3回のゲームはコチラ「ドラクエの戦闘シーンみたいな動き」を作ります。

だんなのゲームプログラミング講座(第3回:ドラクエの戦闘シーンみたいな動きを作ろう)

このゲームプログラミング入門講座では、pythonライブラリを使って開発ができる環境をパソコンにインストールして、プログラムを作って行きます。まだ環境が作れていない方は、先にこちらの記事をご覧下さい。
第1回:pythonライブラリを使える開発環境をパソコンにインストールしよう

誰に向けての記事なのか
  • 簡単なプログラミングを作ってみて、すごく楽しいと思った方
  • 配布されているライブラリを使って、アレコレ試してみたい方
記事の内容は何か
  • Python開発環境(Anaconda)を使ってプログラムを実行します。
  • pygameライブラリを使ってゲームを作る入門過程を記事にしていきます。
  • 疑問点があれば、コメントやtwitterに書いてくれればお答えします
記事を読むメリットは何か
  • 100万種類以上あるpythonの各種ライブラリを使える実行環境を構築。
  • pythonのプログラム言語で簡単なゲームを作る入門過程を覚えられます。

本業のシステムエンジニアの皆さんがプログラミングをする場合と同じように、少し面倒な準備が必要になりますが、このプログラミング入門講座では「すべて無料で」プログラム実行できます。

実行手順は以下の3点となります。

プログラム実行までの手順

(準備①) pythonの開発環境(Anaconda)のインストール
(準備②) ゲーム作成用ライブラリpygameのインストール

入門① Anaconda付属のプログラムエディタ(Spyder)を開く。
入門② Spyderでプログラムを書く。または、ダウンロードしたファイルを開く。
入門③ Spyderで実行ボタンを押す。



(準備①) pythonの開発環境(Anaconda)のインストール

インストールがまだ終わっていない方は、こちらの記事をご覧下さい。
第1回:pythonライブラリを使える開発環境をパソコンにインストールしよう

(準備②) ゲーム作成用ライブラリpygameのインストール

インストールがまだ終わっていない方は、こちらの記事をご覧下さい。
第1回:pythonライブラリを使える開発環境をパソコンにインストールしよう

入門① Anaconda付属のプログラムエディタ(Spyder)を開く。

プログラムを書いたり実行したりするAnaconda付属のプログラムエディタ(Spyder)を開きます。

プログラムエディタについては、いろんな種類の無料ツールがダウンロードできるようになっていますので、Spyderが合わない方や環境構築に自信のある方は探してみて下さい。ちなみに私は、仕事の開発では「eclipse」と「Visual Studio Code」をメインで使っています。

入門② Spyderでプログラムを書く。または、ダウンロードしたファイルを開く。

第3回は、私だんなが作成してアップロードしたファイルをダウンロードして実行してみましょう。アップロード先は、GitHub(ギットハブ)というサイトになります。
https://github.com/mat-tun-neo/draque-msg

GitHub(ギットハブ)は、ソフトウェア開発のプラットフォームであり、ソースコードをホスティングする。コードのバージョン管理システムにはGitを使用する。Ruby on RailsおよびErlangで記述されており、アメリカのカリフォルニア州サンフランシスコ市に拠点を置くGitHub社によって保守されている。

ウィキペディア(Wikipedia) https://ja.wikipedia.org/wiki/GitHub

GitHubのアップロード先から、以下の手順でzip圧縮ファイルをダウンロードして下さい。

ダウンロードが終わったら、自分の好みの場所に解凍して下さい。解凍したフォルダをSpyderで表示して、いよいよプログラムを実行していきます。

画面右の「ファイルエクスプローラー」を使って、解凍したdraque-msgフォルダにたどり着いて下さい。

実行するpythonのプログラムファイル「DraqueMsg.py」をダブルクリックして、画面左のエディタに表示させて下さい。

入門③ Spyderで実行ボタンを押す。

さて、いよいよゲームプログラムを実行します。メニューより「実行」→「プロファイル」をクリックして下さい。(「F10」キーを押しても同じことが可能です。)

無事、ドラクエの戦闘シーンみたいな動きが表示されましたか?

ちなみに、ゲーム画面で「ESC」キーを押すとエディタ画面に戻れます。初めてSpyderを使う方は徐々に使い方に慣れていきましょう!

次回の入門講座では、ドラクエの戦闘シーンみたいな動きのプログラムの各部分がなぜそのような動作をするのかを解説しようと思っています。お楽しみに!

from pygame_functions import *

# 定数
SCREEN_X = 1200
SCREEN_Y = 800
FONT_SIZE = 30
FONT_COLOR = "white"
FONT_FILE = "fonts/DragonQuestFCIntact.ttf"
BG_COLOR = "black"
BGM = makeSound("sounds/battle.ogg")
SOUND = makeSound("sounds/pi.ogg")
KOIKE_IMAGE = "images/koike.png"
HIKAKIN_IMAGE = "images/hikakin.png"
MESSAGE_SIZE = 40
MESSAGE_COLOR = "green"

WAKU_KADO_1 = "&"
WAKU_KADO_2 = "’"
WAKU_KADO_3 = ")"
WAKU_KADO_4 = "("
WAKU_YOKO_1 = "#"
WAKU_YOKO_2 = "%"
WAKU_TATE_1 = "”"
WAKU_TATE_2 = "$"
WAKU_SPACE = " "

screen = screenSize(SCREEN_X, SCREEN_Y)

def draw_status():
    str_status = "&##=こいけゆ###’&##########’<br>"\
                "”          $”          $<br>"\
                "” とうきょうとちじ $”   ちから:255$<br>"\
                "”   <      $”   <      $<br>"\
                "” せいへつ:おんな $”  すはやさ:132$<br>"\
                "”   <      $”          $<br>"\
                "”  レヘル: 99 $” たいりょく:255$<br>"\
                "”          $”          $<br>"\
                "”   HP:653 $”  かしこさ: 62$<br>"\
                "”          $”          $<br>"\
                "”   MP:  0 $” うんのよさ:140$<br>"\
                ")%%%%%%%%%%(”  <       $<br>"\
                "&##########’”さいたいHP:653$<br>"\
                "”  <       $”  <       $<br>"\
                "^ はくれメタルのけん$”さいたいMP:  0$<br>"\
                "”  <       $”   <      $<br>"\
                "^ はくれメタルよろい$” こうけきカ:385$<br>"\
                "”          $”    <     $<br>"\
                "^ ちからのたて   $”  しゅひカ:193$<br>"\
                "”          $”          $<br>"\
                "^ てっかめん    $”¥:10000000$<br>"\
                ")%%%%%%%%%%()%%%%%%%%%%("
    Label1 = makeLabel(str_status, FONT_SIZE, 150, 30, fontColour=FONT_COLOR, font=FONT_FILE, background=BG_COLOR)
    showLabel(Label1)

class Message():
    def __init__(self, person, str, x, y, hideflg=True, size=MESSAGE_SIZE, color=MESSAGE_COLOR, bgcolor=BG_COLOR):
        self.str_array = str.split(',')
        self.waku_width = max([len(x) for x in self.str_array])
        if len(person) > 0: 
            self.message = WAKU_KADO_1 + WAKU_YOKO_1 * 1 + person + WAKU_YOKO_1 * (self.waku_width - len(person) - 1) + WAKU_KADO_2 + "<br>"
        else:
            self.message = WAKU_KADO_1 + WAKU_YOKO_1 * self.waku_width + WAKU_KADO_2 + "<br>"
        #self.message += WAKU_TATE_1 + WAKU_SPACE * self.waku_width + WAKU_TATE_2 + "<br>"
        for i in range(len(self.str_array)):
            self.message += WAKU_TATE_1
            self.message += self.str_array[i] + " " * ( self.waku_width - len(self.str_array[i]) )
            self.message += WAKU_TATE_2 + "<br>"
        self.message += WAKU_TATE_1 + WAKU_SPACE * (self.waku_width - 4) + "{   " + WAKU_TATE_2 + "<br>"
        self.message += WAKU_KADO_3 + WAKU_YOKO_2 * self.waku_width + WAKU_KADO_4
        self.label = makeLabel(self.message, size, x, y, fontColour=color, font=FONT_FILE, background=bgcolor)
        showLabel(self.label)
        while True:
            if keyPressed("space"):
                break
        playSound(SOUND)
        while keyPressed("space"):
            pass
        if hideflg:
            self.hide()
    def hide(self):
        hideLabel(self.label)
    
str_waku_1_start = "&##########’<br>"\
        "”        <<br>"\
        "”アリーナの こうけき!<br>"\
        "”        <<br>"\
        "”かいしんの いちけき!<br>"\
        "”< >        <  <<br>"\
        "”テスヒサロに 262のタメーシ!<br>"

str3 = "!”#$%&’()=~|<br>"\
        "@「;:」<br>"\
        "{+*}<>?_<br>"

playSound(BGM, -1)
draw_status()

koi = makeSprite(KOIKE_IMAGE)
showSprite(koi)
transformSprite(koi, 0, 1.8)
moveSprite(koi, 880, 20)

hika = makeSprite(HIKAKIN_IMAGE)
showSprite(hika)
transformSprite(hika, 0, 1)
moveSprite(hika, 15, 15)

pause(5000)
mes = Message("だんな",\
               "     < <,ゆーちゅーふ て,"\
               " ,ヒカキンさんと こいけ とちじの,"\
               " ,たいだんの ようすを みました。"\
               ,100, 230, color="white")
mes = Message("だんな",\
               " ,ヒカキンさん とてもわかいのに,"\
               "           <      <   <,にほんのことをよくかんかえていて すはらしいてす。,"\
               "<,ほくにも なにかてつだえないか とおもい,"\
               ",たいだんの ようすを ドラクエけいしきにして,"\
               ">   < > <,ハイソンて フロクラムをつくってみました。"\
               ,60, 230, color="white")
mes = Message("ヒカキン",\
               ",こいけとちじ、,"\
               "                  <,わかいみんなへ せいかくなじょうほうか,"\
               ",とどくように しつもんさせて ください。"\
               ,120, 30, color="pink")
mes = Message("こいけゆ",\
               "     <<,ゆーちゅーふて 3つのみつのことを はなして,"
               "      <  <<,くれて ありかとうこさいます。"\
               ,100, 350)
mes = Message("こいけゆ",\
               " <,すこい みなさんに みてもらって,"\
               "   <,いるんてすよね。"\
               ,100, 350)
mes1 = Message("ヒカキン",\
               "   <     <,いま ほくたちに てきること,"\
               "  <       <,やるへきことは なんてしょうか?"\
               ,120, 30, hideflg=False, color="pink")
mes = Message("こいけゆ",\
               "       <           <,せんじつ くにか きんきゅうじたいせんけん,"\
               " ,って いうのを だしました。,"\
               "             <,とうきょうと は そのせんけんを うけて"\
               ,100, 350)
mes = Message("こいけゆ",\
               " ,みなさんに こうしてください ああしてください,"\
               " ,という きんきゅうじたい そち を,"\
               "  <        <,おねかいしている わけてす。"\
               ,100, 350)
mes = Message("こいけゆ",\
               "    <   <,そのなかて いちはん おおきいのは"\
               ,100, 350)
mes = Message("こいけゆ",\
               " ,お う ち に  い ま し ょ う  ,"\
               " ,ステイ ホーム,"\
               "       <,って ことなんてす。"\
               ,100, 350)
mes = Message("こいけゆ",\
               " ,とはいえ ね,"\
               " ,おかいもの とか ひつような ものありますよね。"\
               ,100, 350)
mes = Message("こいけゆ",\
               "  <       >,コンヒニ とか スーハー などは,"\
               " ,あいています から にちじょうひん を かいに,"\
               " ,いくことは もんだい ありません。"\
               ,100, 350)
mes = Message("こいけゆ",\
               " ,だけど きほんは おうちに いてくださいね,"\
               "     <,ということてす。"\
               ,100, 350)
mes1.hide()
mes = Message("ヒカキン",\
               " < <,じふんか コロナ ウイルスなんじゃ ないか と,"\
               "  <           < <,うたかいのある しょうじょうか てたときに,"\
               "              <,どこに れんらくしたら よいてしょう?"\
               ,120, 30, color="pink")
mes2 = Message("ヒカキン",\
               "      <      < <,どういう うこきを するのか ヘストなのか,"\
               "         <,を おききしたい てす。"\
               ,120, 30, hideflg=False, color="pink")
mes = Message("こいけゆ",\
               "         <    <   <,いくつかの ルートか あるんてすけれとも,"\
               "  ,いつも いっていらっしゃる かかりつけの,"\
               "         < <,おいしゃさんに ます てんわしてください。"\
               ,100, 350)
mes = Message("こいけゆ",\
               "                     <,もう かんせんしている かもしれない なかて,"\
               " ,そこにいくと おいしゃさんや まっているひとに,"\
               "            <,うつっちゃうことも かんかえられます。"\
               ,100, 350)
mes = Message("こいけゆ",\
               "  <  <  <  <,なのて ますは てんわて そうだん,"\
               " ,していただきたい。"\
               ,100, 350)
mes2.hide()
mes3 = Message("ヒカキン",\
               "                 <,10だい 20だいの かんせんしゃか,"\
               "     <        <,ふえているか わかいひとは とんなことに,"\
               "     <   <,きをつけれは いいてすか?"\
               ,120, 30, hideflg=False, color="pink")
mes = Message("こいけゆ",\
               "               <,3つの みつを さけてもらうのか,"\
               ",わかい ひとにも じゅうように なります。"\
               ,100, 350)
mes = Message("こいけゆ",\
               "                      <,おっしゃるとおり 10だいのかた のかんせんか,"\
               "       <,ふえて いるんてすよ。"\
               ,100, 350)
mes = Message("こいけゆ",\
               "            <,ろうにゃくなんにょ とわす,"\
               "                   <,きほん いえに いましょう ということてすね。"\
               ,100, 350)
mes3.hide()
mes = Message("こいけゆ",\
               " ,ひとと ひとの きょりを 2メートルあける,"\
               " ,ことも せかいの じょうしきに なっています。"\
               ,100, 350)
mes = Message("ヒカキン",\
               "   <  <,たとえは レシをまつときに しっかりと,"\
               "               <  <,きょりを はなすことを こころかけれは,"\
               "  < <        <,1かけつこの かんせんしゃか てんと ち,"\
               "      <,ということ てすね?"
               ,120, 30, color="pink")
mes = Message("こいけゆ",\
               "          <,はい そういうこと てす。"\
               ,100, 350)
mes = Message("こいけゆ",\
               "  <,さいこに わかい みなさんには おうちに,"\
               "          < <,いていただいて そこて へんきょうや,"\
               " ,ネットを つかって ともだちと はなしをしたり,"\
               ,100, 350)
mes = Message("こいけゆ",\
               "       >,ときには かんはい したり して,"\
               " ,おうちに いていただきたいと おもいます。"\
               ,100, 350)
mes = Message("こいけゆ",\
               "                 <,コロナの ときは こんなふうに すこしたよなぁ,"\
               "     <<,と おもいてか かたれるように いちにちも,"\
               "                  <,はやく このコロナウイルスに みんなて,"\
               " ,うちかって いきたいと おもいます。"\
               ,100, 350)
mes = Message("こいけゆ",\
               " <   <,すへて しふんのこと だとおもって,"\
               "             <,コロナウイルスたいさくの こきょうりょくを,"\
               "  <,おねかいします。,"\
               "                <,おうちにいましょう よろしくおねかいします。"\
               ,100, 350)
mes = Message("ヒカキン",\
               "        <           <,いま ゆーちゅーはーや インフルエンサーか,"\
               "<        >     <  <,てきることは やっはり おうちて すこそう,"\
               "  <              < <,なんてすよね。 これを みている とうきょうしゃ,"\
               "<      <  <,かいましたら ほくらて ひろめて いきましょう。"
               ,120, 30, color="pink")
mes = Message("だんな",\
               "   > <,この ふろくらむは,"\
               "      < <<      <,あゆすた のフロクて ソースコートを,"\
               "            <  <,こうかい しています。 せひ こらん ください。"\
               ,100, 220, color="white")
endWait()

以上、だんなのゲームプログラミング入門講座でした。

だんな
だんな

次回はコチラ

pythonゲームプログラミングのおすすめの書籍

ゲームセンターあらしと学ぶ プログラミング入門 まんが版こんにちはPython(すがや みつる (著))

だんな
だんな

Pythonでゲームプログラミングをしたい方にオススメな本を紹介します。

超オススメ!

プログラミング入門講座
シェアする
だんなをフォローする


あゆすた

コメント