皆さんは、ゲームのガチャで爆死したことがありますか?
私は何度もあります。
しかし、ガチャで欲しいキャラなどが出たときのうれしさを知ってしまったため、何度も引いてしまうのです。
そこで、今回は疑似ガチャGUIアプリを作ってガチャの確率の恐ろしさを知り、ガチャ欲を抑えられるようにしようと思います!
概要
今回は疑似ガチャアプリということで、
・GUIアプリ
・ボタンを押すとランダムで3つのレア度のうちの1つの値が増える
というプログラムを作っていきます!
プログラム
まずはライブラリのインポート。
今回はGUIアプリでランダムの要素があるのでこれをインポート。
import tkinter
import random
tkinterはGUIアプリの制作に便利なライブラリです。
では、いろいろ宣言していきましょう。
money = 0
R6 = 0
R5 = 0
R4 = 0
moneyは使った金額(ガチャを回した回数×100円)、
R6,R5,R4はそれぞれ★6,★5,★4が排出された回数です。
app = tkinter.Tk()
app.geometry(
"600x400"
)
app.title(
"闇ガチャ"
)
canvas = tkinter.Canvas(
app,
width = 700,
height = 500,
bg = "black"
)
canvas.place(
x=-5,
y=-5
)
これはGUIアプリの設定です。
app.~はそれぞれウィンドウの大きさとタイトルです。
canvas.~はアプリの文字などを配置できる土台の設定です。app,はappのウィンドウに、width,heightはそれぞれ横幅,縦幅、bgは背景の色を設定してます。placeは座標です。なぜマイナスなのかというと、マイナスにしないと左に余白ができてしまうからです。y=は別にいらないかも、、まあ一応。
次にテキストの初期値を設定していきましょう。
Text = tkinter.Label(app,font=("system",30),text="使った金額:"+str(money)+
"円\n★6:"+str(R6)+"回\n★5:"+str(R5)+"回\n★4:"+str(R4)+"回")
Text.place(x=240,y=100)
Text2 = tkinter.Label(app,font=("system",30),text="ガチャ")
Text2.place(x=100,y=100)
Textでは金額や排出されたレア度の数を表示します。フォントとテキストを設定しています。
str()は整数型(int)を文字列型(str)に変換するという意味です。こうしないと文字列に混ぜて表示できない。
Text2は前回排出されたレア度を表示します。あとは同じ。
placeもcanvasのときとほぼ同じ意味。
ガチャを回したときの処理をする関数をつくりましょう。
def click_func():
global Text
global Text2
global money
global R6
global R5
global R4
p6 = 1
p5 = 25
p4 = 74
pAll = p6+p5+p4
まずは今までの変数をグローバル変数として使うことを宣言しましょう。これがないと関数内でしかその値が維持されなくなります。まあ、関数外で使うことなさそうだけれども。一応しといたほうが便利。
p~は★~の排出される比率です。pAllはその合計。
この場合、★6は1%、★5は25%、★4は74%です。自由に変えてOK。
money += 100
r = random.randint(1,pAll)
if r <= p6:
Text2["text"]="★6"
R6 += 1
if r > p6 and r <= p5-p6:
Text2["text"]="★5"
R5 += 1
if r > p5-p6 and r <= pAll:
Text2["text"]="★4"
R4 += 1
Text["text"]=("使った金額:"+str(money)+"円\n★6:"+str(R6)+
"回\n★5:"+str(R5)+"回\n★4:"+str(R4)+"回")
上から、
使った金額に+100、
1からpAllのランダムな値を生成、
その値がp6以下ならText2を★6に変更、
R6に+1、
p6+1以上p5-p6以下ならText2を★5に変更、
R4に+1、
p5-p6+1以上pAll以下ならText2を★4に変更、
R3に+1、
Textの値を変更
という意味です。
lavelウィジェットのテキストを変更する際は["text"]をつけなければなりません。
最後にボタンを追加し、テキストを描画し続けるようにします。
button = tkinter.Button(app,text="100円",command=click_func,bg="white")
button.place(x=200,y=300)
app.mainloop()
buttonのcommandでclick_funcを設定することで、ボタンがクリックされたときclick_func関数が実行されるようになります。
app.mainloop()は、アプリのウィンドウやウィジェットを描画し続けるようにする処理です。
では実行しましょう。
100円のボタンをクリック
ちゃんと動作しましたか?
これで完成です!
ガチャを回しまくれてストレス発散になりますね!
これも改造して遊べそう。
最後に全体のコードを載せて終わります。
import tkinter
import random
money = 0
R6 = 0
R5 = 0
R4 = 0
app = tkinter.Tk()
app.geometry(
"600x400"
)
app.title(
"闇ガチャ"
)
canvas = tkinter.Canvas(
app,
width = 700,
height = 500,
bg = "black"
)
canvas.place(
x=-5,
y=-5
)
Text = tkinter.Label(app,font=("system",30),text="使った金額:"+str(money)+
"円\n★6:"+str(R6)+"回\n★5:"+str(R5)+"回\n★4:"+str(R4)+"回")
Text.place(x=240,y=100)
Text2 = tkinter.Label(app,font=("system",30),text="ガチャ")
Text2.place(x=100,y=100)
def click_func():
global Text
global Text2
global money
global R6
global R5
global R4
p6 = 1
p5 = 25
p4 = 74
pAll = p6+p5+p4
money += 100
r = random.randint(1,pAll)
if r <= p6:
Text2["text"]="★6"
R6 += 1
if r > p6 and r <= p5-p6:
Text2["text"]="★5"
R5 += 1
if r > p5-p6 and r <= pAll:
Text2["text"]="★4"
R4 += 1
Text["text"]=("使った金額:"+str(money)+"円\n★6:"+str(R6)+
"回\n★5:"+str(R5)+"回\n★4:"+str(R4)+"回")
button = tkinter.Button(app,text="100円",command=click_func,bg="white")
button.place(x=200,y=300)
app.mainloop()
以上、pythonで疑似ガチャGUIアプリを作ろう!でした。