見出し画像

pyxelで「選び取りカード」を作る

1歳の誕生日の時に行う「選び取り」という行事があるようです。子供の前カードやアイテムを置き、どれを選び取るか見て、将来を占うものとのこと。「はさみ」なら「手先が器用になる」とか「お金」なら「お金持ちになる」とかみたいですね。
今回縁があり「選び取りカード」を作ってみることになりました。ネットを見ると自作している人もいるので、何とかなるだろうの精神でGO!

import pyxel

class APP:
 def __init__(self):
     pyxel.init(32, 48, caption="BD",scale=10)
     
     pyxel.load('1stBD.pyxres')
     
     pyxel.mouse(False)
     
     self.view_pos = 0
     self.txt_pos = 0
     self.st = 0
     
     self.font_list = {
        "a":[0,0],
        "A":[8,0],
        "i":[16,0],
        "I":[24,0],
        "u":[32,0],
        "U":[40,0],
        "e":[48,0],
        "E":[56,0],
        "o":[64,0],
        "O":[72,0],
        "KA":[80,0],
        "GA":[88,0],
        "KI":[96,0],
        "GI":[104,0],
        "KU":[112,0],
        "GU":[120,0],
        "KE":[128,0],
        "GE":[136,0],
        "KO":[144,0],
        "GO":[152,0],
        "SA":[160,0],
        "ZA":[168,0],
        "SI":[176,0],
        "JI":[184,0],
        "SU":[192,0],
        "ZU":[200,0],
        "SE":[208,0],
        "ZE":[216,0],
        "SO":[224,0],
        "ZO":[232,0],
        "TA":[240,0],
        "DA":[248,0],
        "TI":[0,8],
        "DI":[8,8],
        "tu":[16,8],
        "TU":[24,8],
        "DU":[32,8],
        "TE":[40,8],
        "DE":[48,8],
        "TO":[56,8],
        "DO":[64,8],
        "NA":[72,8],
        "NI":[80,8],
        "NU":[88,8],
        "NE":[96,8],
        "NO":[104,8],
        "HA":[112,8],
        "BA":[120,8],
        "PA":[128,8],
        "HI":[136,8],
        "BI":[144,8],
        "PI":[152,8],
        "HU":[160,8],
        "BU":[168,8],
        "PU":[176,8],
        "HE":[184,8],
        "BE":[192,8],
        "PE":[200,8],
        "HO":[208,8],
        "BO":[216,8],
        "PO":[224,8],
        "MA":[232,8],
        "MI":[240,8],
        "MU":[248,8],
        "ME":[0,16],
        "MO":[8,16],
        "ya":[16,16],
        "YA":[24,16],
        "yu":[32,16],
        "YU":[40,16],
        "yo":[48,16],
        "YO":[56,16],
        "RA":[64,16],
        "RI":[72,16],
        "RU":[80,16],
        "RE":[88,16],
        "RO":[96,16],
        "wa":[104,16],
        "WA":[112,16],
        "WI":[120,16],
        "WE":[128,16],
        "WO":[136,16],
        "NN":[144,16],
        "!":[152,16],
        "?":[160,16],
        "-":[168,16],
        ".":[176,16],
        ",":[184,16],
        }
     
     self.text_list = {
        "0":["HA","SA","MI",],
        "1":["O","KA","NE"],
        "2":["HO","NN"],
        "3":["BO","-","RU",],
        "4":["PA","SO","KO","NN",],
        "5":["GA","tu","KI",],
     }
     
     pyxel.run(self.update, self.draw)
    
 def update(self):
     if pyxel.btnp(pyxel.KEY_SPACE):
         self.view_pos += 16
         self.txt_pos += 1
         if self.view_pos >80:
             self.view_pos = 0
             self.txt_pos = 0
             
     if self.st == 1:
         self.view_pos += 16
         self.txt_pos += 1
         if self.view_pos >80:
             self.view_pos = 0
             self.txt_pos = 0
             
     if pyxel.btnp(pyxel.KEY_S):
         if self.st == 0:
             self.st = 1
         else:
             self.st = 0
     

 def draw(self):
     pyxel.cls(0)
     
     pyxel.rect(0, 0, 32, 23, 7)
     pyxel.rectb(0, 0, 32, 23, self.view_pos / 16 + 8)
     self.Draw_fonts(self.text_list[str(self.txt_pos)],1, 28)
     pyxel.blt(8,4,0,self.view_pos,0,16,16,14)
     
 def Draw_fonts(self,txt,x,y):  
    txt_count = len(txt)      
    for i in range(txt_count):
        #Key check
        font_xy = self.font_list[txt[i]]
      
        fontx = font_xy[0]
        fonty = font_xy[1]
        pyxel.blt(x + 8 * i,y,1,fontx,fonty,8,8,14)
     

                 
APP()

▲コードとしてはこんな感じ。ひらがな表示用の部分がかさんでますがだいぶ短いです。「S」を押すと絵柄が変わり始め、もう一度「S」でストップ。

ダウンロード (1)

▲動かすとこんな感じ。絵柄は6種類です。

ここまで書いておいてなんですが、実際は印刷して使いました。赤ちゃんの前にPCを置くわけないので、当たり前でしたね。

ただ、pyxelはちょっとしたドット絵をかいたり、それを動かすのにはとても便利なライブラリだと思います。色も抑えられているので、僕のような初心者でも迷うことがないですし、コード上での使い方もわかりやすいです。

▲使った.pyxresファイルです。本体コードの.pyファイルと同じ階層に置くことで動作します。

今回はここまで。
読んでいただきありがとうございました。

ここまで読んでいただきありがとうございます!