第四話 同じタイトルが連続で表示されるのを防ぐ ~モンスター森の世界わんこ
フレ登録、ブクマ、ポイント、ご質問などお気軽にどうぞ。
なおコードの左に全角スペースが2個入っている所が、実行時にエラーになる場合は、Tabに変更して実行してください。
みなさんこんにちは。なろう系タイトルジェネレータ開発の第四話です。
第三話では、設定しておいた3つのタイトルから、1つをランダムに選んで表示させるという機能を追加しました。しかし、たまたま選んだタイトルが一致して、ボタンを押したのに変化がないように見えることがありますね。今回は、それを防ぎ、ボタンを押したら必ずタイトルを変化させるようにします。
これを実現するための方法としては、ざっと考えて次の2つがありそうです。
①前回表示したタイトルを覚えておき、これと違うタイトルが選ばれるまで、何度も選び直す。
②前回ランダムに選んだ数字を覚えておき、これと一致する数字が発生した場合、数字をずらすような処理をさせる
コーディングが比較的簡単なのは、①のような気がしますが、①にすると、「たまたま同じ数字が延々と選ばれ続けた場合、処理が終了しない」、という新たな問題が発生します。ですのでここでは、②を実現しようと思います。
※コンピューターで生成される乱数は、ある程度きれいにばらつくように設計されているため、「たまたま同じ数字が延々と選ばれ続ける」ような確率は、現実的にはほぼゼロと思って問題ありません。
方針は決まりましたので、変更してみましょう。
変更その1、「前回選んだ数」を覚えておくための、変数を定義します。
n_pre=-1
変更その2、display_title()関数を次のように変更します。
def display_title():
# txt_title["text"]="自動作成ボタンが押されました"
global n_pre
if n_pre==-1:
n=random.randint(0,2)
else:
n=random.randint(0,1)
if n==n_pre:
n=n+1
txt_title["text"]=list_title[n]
n_pre=n
上の内容について、簡単に説明したいのですけど、「グローバル変数」、「ローカル変数」についての説明が必要になった場合、めっちゃ長くなってしまいますので、今回は説明は省かせていただきます。
上の2つの変更で、コード全体がどうなったかを示しておきます。
(ここから)
# -*- coding: utf-8 -*-
import tkinter
import random
list_title=["悪役令嬢転生したら本気だす","本好きのスライムだった件","ゼロから始めるスライム食堂"]
n_pre=-1
#ウインドウ設定
tk=tkinter.Tk()
tk.title(u"なろう系タイトルジェネレータ")
tk.minsize(480,200)
#ウインドウ表示
win=tkinter.Canvas(bg="black",width=480,height=200)
win.place(x=0,y=0)
btn_quit = tkinter.Button(tk, text='終了')
btn_quit.place(x=130, y=80)
btn_create = tkinter.Button(tk, text='自動作成')
btn_create.place(x=50, y=80)
txt_title=tkinter.Label(text=u"ここにランダムで作成したタイトルが表示されます。")
txt_title.place(x=0,y=0)
def display_title():
# txt_title["text"]="自動作成ボタンが押されました"
global n_pre
if n_pre==-1:
n=random.randint(0,2)
else:
n=random.randint(0,1)
if n==n_pre:
n=n+1
txt_title["text"]=list_title[n]
n_pre=n
btn_create["command"]=display_title
def destroy_tk():
tk.destroy()
btn_quit["command"]=destroy_tk
tk.mainloop()
(ここまで)
どうですか? ボタンを押したときに、必ず別のタイトルに切り替わるようになりましたか?
今回はここまでです。次回は「登録しておいたキーワードを適当にいくつか選び、それらをくっつけたものをタイトルとして表示する」という処理に、変更したいと思います。やっとここまで来ましたね。
では次回またお会いしましょう。




