【Python/Pyxel】ウマ娘が公開されないのならば、こちらで作ってしまえばいいのではという話 ～パドック編～

[前回の記事(出走登録編)はこちらから](https://qiita.com/JING0222/items/65523184ce302d66086d)

#勢力を拡大しました
前回記事を更新してから、更に違う友人にウマ娘を布教してきました。「続きが気になる」と言ってくれたので、次回遊ぶ時にも少しずつ一緒に観ていこうと思います。
周りが少しずつ、沼にハマってくれています。**よし。**

#お手軽ガチャシミュレータ
ウマ娘がアプリゲームとして実装された際には、もちろん**ガチャ機能**がつくでしょう。
ということで、前回紹介したサンプルコードを基に簡単なガチャシミュレータを作ってみましょう。

```
import pyxel
#乱数生成のためにインポートが必要
import random

class App:
    def __init__(self):
        #画面表示設定
        pyxel.init(160, 120, caption="ガチャシミュレーション")
        #結果を格納する変数の設定
        self.result = "A"
        #フラグを格納する変数の設定
        self.flags = False
        pyxel.run(self.update, self.draw)

    def update(self):
        #「Q」を押すと終了
        if pyxel.btnp(pyxel.KEY_Q):
            pyxel.quit()
        #「W」を押すとフラグの切り替え
        if pyxel.btnp(pyxel.KEY_W):
            if self.flags == True:
               self.flags =  False
            else:
                self.flags = True
    
    def draw(self):
        #フラグがFalseの時は「self.roulette()」(ガチャ機能)が走る
        if self.flags == False:
           self.roulette()
        #背景色の設定
        pyxel.cls(12)
        #ガチャ結果表示設定
        pyxel.text(55, 41, self.result, 0)

    def roulette(self):
        #乱数を用いて判定(説明を補完)
        judge  = random.uniform(0,100)
        if   judge < 10:
            self.result = "Special Week"
        elif 10.0 <= judge < 20.0:
            self.result = "Silence Suzuka"
        elif 20.0 <= judge < 30.0:
            self.result = "Tokai Teio"
        elif 30.0 <= judge < 40.0:
            self.result = "Vodka"
        elif 40.0 <= judge < 50.0:
            self.result = "Daiwa Scarlet" 
        elif 50.0 <= judge < 60.0:
            self.result = "Gold Ship"         
        elif 60.0 <= judge < 70.0:
            self.result = "Mejiro McQueen" 
        elif 70.0 <= judge < 80.0:
            self.result = "Glass Wonder"
        elif 80.0 <= judge < 90.0:
            self.result = "El Condor Pasa"
        elif 90.0 <= judge < 100.0:
            self.result = "Seiun Sky" 
        
        #判定に応じた結果を返す
        return self.result


App()
```
###動きの概要
起動すると、画面内で10人のウマ娘の名前がルーレットされます。その状態で「W」キーを押下することで、ルーレットを止めることができます。
前回同様、「Q」キーを押下すると画面を閉じることができます。

![pyxel-190315-223512.gif](https://qiita-image-store.s3.amazonaws.com/0/381032/edc7eed6-c022-131f-2ad2-9470ee7e42c6.gif)

###変数の設定
このソース内では、結果を格納するための変数とフラグを格納するための変数の2つを設定しています。
こちらは、pyxel.run(self.update, self.draw)の前に定義する必要があるみたいです。
(色んな失敗があったのですが、失敗したソースコードと結果が取得できていませんでした…。
変数を定義する場所を適宜変えながら結果の違いを見てみてください。僕も後で見てみようと思います。)

###ガチャシミュレーション部分
def roulette(self):内の変数judge部分を見てみましょう。

```
judge  = random.uniform(0,100)
```

random.uniform(x,y)でx以上y未満の浮動小数点数をランダムに生成してくれます。
これを判定材料として、それに応じた結果を返すという仕組みになっています。

**至ってシンプル。**

###「W」キーを押したときの挙動
```
        #「W」を押すとフラグの切り替え
        if pyxel.btnp(pyxel.KEY_W):
            if self.flags == True:
               self.flags =  False
            else:
                self.flags = True
```
「W」キーを押すと、上記のようにself.flagがTrueの時はFalseに、Falseの時はTrueにしてくれるようになっています。

では、self.flagが切り替わったら何があるというのでしょう。


```
    def draw(self):
        #フラグがFalseの時は「self.roulette()」(ガチャ機能)が走る
        if self.flags == False:
           self.roulette()
        #背景色の設定
        pyxel.cls(12)
        #ガチャ結果表示設定
        pyxel.text(55, 41, self.result, 0)
```

def draw(self)内を見てみると、self.flagがFalseの時はガチャ機能が起動しますが、
Trueの場合のことは何も書かれていません。

**何も書かれていないということは、何もされないのです。**

何もされないということは、resultの中身も変わらないため、同じ結果が表示され続けることとなります。

先ほど挙げた挙動例のgif内で言うと、キャラ名が回らずに同じ名前が表示され続けているところが、フラグがtrueのままになっている部分です。

#少しの工夫でとても楽しいガチャができました

サンプルコードから、基本構文はあまりいじっていないはずです。
新要素としては、乱数を生成してランダム要素を入れるという発想ぐらいですかね。

自分で作ったものにこういうのもなんですが、**これだけでも楽しいです。**
自分でシミュレーターを作ってしまえば、**実質無料でガチャ引き放題です。**

自分の好きなゲームやキャラクターを基に、上記のソースのキャラクター名のところを変えてみるだけでも
楽しいと思いますよ！

**※ただし、Pyxelはテキストを日本語表示することができません。なので、自分も敢えて英語表記を使用しています。**

#次回はついに出走
次回はついに、ウマ娘たちが走り出します！
基本はできていて、少しずつ改良を加えている段階です。
Pyxel用のドット絵を描くことができる、Pyxel Editorの使用方法も解説予定です。

それではまた次回！