質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

受付中

pythonのtkinterでラベルを使って6から0まで表示し、0になったらまた6から始めるといった処理をしたいです。

tera877
tera877

総合スコア5

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0回答

0リアクション

0クリップ

123閲覧

投稿2022/11/25 04:35

編集2022/11/25 04:56

前提

pythonのtkinterをつかって簡易的なタイピングゲームを作っています。
全体的な動きはできており、一度ゲームが終了したら、ウィンドを閉じるのではなく、タイトルに戻るというボタンを作って何回でもプレイできるようにしたいです。

そのため、制限時間なども0になったら終了と同時に、次のプレイのために制限時間をもう一度設定しなおさなければいけません。

問題は56行目です。timer_numという変数に数字を入れて、timer_labelというラベルの数字と同じだったら
-1秒するといった処理をしています。なので2週目のために、main()(ゲームが終了したら戻ってくるところ)のところで最初の変数定義と同様に、timer_num = 6にして、timer_labelのテキストも6にしました。二つの数字が一致しているため、一週目と同じように-1秒されてほしいのですが、6で止まってしまいます。

実現したいこと

2週目以降のゲーム中の制限時間のカウントダウンを、1週目と同様の動きにしたいです。

発生している問題・エラーメッセージ

該当のソースコード

python

import tkinter as tk import random root = tk.Tk() root.geometry("1200x600") root.title("タイピングゲーム") words1 = ["オムライス", "流れ星", "おままごと", "チワワ", "オーストリア", "ベット", "バスタオル", "日焼け止め", "パパイヤ", "みそ汁" ,"マグロ", "落ち葉", "紙コップ", "クリーム", "空手家", "教科書", "アルバイト", "桃アイス", "イチゴミルク", "キツツキ", "キャベツ", "ごみ箱", "おしぼり", "ヘルメット"] words2 = ["omuraisu", "nagarebosi", "omamagoto", "tiwawa", "o-sutoria", "betto", "basutaoru", "hiyakedome", "papaiya", "misosiru", "maguro", "otiba", "kamikoppu", "kuri-mu", "karateka", "kyoukasyo", "arubaito", "momoaisu", "itigomiruku", "kitutuki", "kyabetu", "gomibako", "osibori", "herumetto"] num_list = random.sample(range(24), 24) #乱数リスト index = 0 count_num = 4 #スタートのカウントダウン timer_num = 6 #残り時間 word_count = 0 #タイプワード数 word_label1 = tk.Label(text=words1[num_list[index]], foreground="#66CCFF", font=("",40)) #平仮名 word_label2 = tk.Label(text=words2[num_list[index]], foreground="#66CCFF", font=("",40)) #ローマ字 ans_label = tk.Label(text="", font=("",60)) #キー入力の受け取り time_left_label = tk.Label(text="残り時間: 秒", font=("",20)) #残り時間 timer_label = tk.Label(text=6, font=("",20)) word_count_label = tk.Label(text=f"タイプワード数:{word_count}", font=("",20)) end_label = tk.Label(text="終了!!", font=("",50)) #終了画面 score_label = tk.Label(text=f"あなたのタイプワード数は{word_count}です", font=("",30)) #スコア count_label = tk.Label(text=4, font=("",100)) #スタートのカウントダウン rule_label = tk.Label(text="スタートボタンを押すとカウントダウンが始まりまり、3秒後にゲームが始まります。\ \nゲームが始まると、タイプワードが表示されるので、タイピングを始めてください。\n\n \ ヒントとしてローマ字が表示されていますが、\n打ち込んだローマ字と異なっていてもタイプワードが打ち込めていれば大丈夫です。", font=("",20)) #####初期画面##### def main(): title_label.pack(ipady=60) rule_button.place(x=750, y=300) start_button.place(x=250, y=300) return_button.pack_forget() #タイトルに戻るボタンの非表示 rule_label.pack_forget() end_label.pack_forget() score_label.pack_forget() end_button.pack_forget() global word_count global timer_num word_count = 0 word_count_label.configure(text=f"タイプワード数:{word_count}") ans_label.configure(text="") timer_num == 6 timer_label.configure(text=6) #####タイプ画面##### def type_screen(): word_label1.pack(ipady=60) word_label2.pack() ans_label.pack(ipady=40) time_left_label.place(x=0, y=0) timer_label.place(x=140, y=0) word_count_label.place(x=0, y=50) timer() #####残り時間の表示と終了時の関数呼び出し##### def timer(): global timer_num if timer_num == timer_label["text"]: timer_num -= 1 timer_label.configure(text=timer_num) if timer_num > 0: root.after(1000, timer) elif timer_num == 0: timer_label.place_forget() end() #####終了時の間数##### def end(): word_label1.pack_forget() word_label2.pack_forget() ans_label.pack_forget() time_left_label.place_forget() #timer_label.place_forget() word_count_label.place_forget() #タイプ画面のウィジェットの非表示 end_label.pack(ipady=60) score_label.pack(ipady=30) end_button.pack(ipady=10) #####スタートのカウントダウン##### def countdown(): start_button.place_forget() title_label.pack_forget() rule_button.place_forget() #初期画面の非表示 count_label.pack(expand=True) global count_num if count_num == count_label["text"]: count_num -= 1 count_label.configure(text=count_num) if count_num > 0: root.after(1000, countdown) elif count_num == 0: count_label.pack_forget() count_num = 4 count_label.configure(text=count_num) type_screen() #####遊び方の説明画面##### def rule(): start_button.place_forget() title_label.pack_forget() rule_button.place_forget() #初期画面の非表示 rule_label.pack() return_button.pack() title_label = tk.Label(text="タイピングゲーム", font=("",50)) #タイトル rule_button = tk.Button(text="遊び方", font=("",30), command=rule) #遊び方ボタン start_button = tk.Button(text="スタート", font=("",30), command=countdown) #スタートボタン return_button = tk.Button(text="タイトルに戻る", font=("",30), command=main) #タイトルに戻るボタン end_button = tk.Button(text="タイトルに戻る", font=("",30), command=main) #####キー入力##### def type_event(event): global index global word_count text = ans_label["text"] length = len(event.keysym) #入力キーの文字数 if event.keysym == "BackSpace": ans_label["text"] = text[:-1] elif event.keysym == "minus": ans_label["text"] += "-" elif length >= 2: ans_label["text"] += "" else: ans_label["text"] += event.keysym if ans_label["text"] == word_label2["text"]: ans_label.configure(text="") word_count += 1 index += 1 word_label1.configure(text=words1[num_list[index]]) word_label2.configure(text=words2[num_list[index]]) word_count_label.configure(text=f"タイプワード数:{word_count}") if word_count >= 20: score_label.configure(text=f"あなたのタイプワード数は{word_count}で、点数は100点です!\n達人レベルのタイピング力を持っています!") elif word_count >= 15: score_label.configure(text=f"あなたのタイプワード数は{word_count}で、点数は80点です!") elif word_count >= 10: score_label.configure(text=f"あなたのタイプワード数は{word_count}で、点数は60点です!") elif word_count >= 5: score_label.configure(text=f"あなたのタイプワード数は{word_count}で、点数は40点です!") elif word_count < 5: score_label.configure(text=f"あなたのタイプワード数は{word_count}で、点数は20点です!") root.bind("<KeyPress>", type_event) #関数とキー入力の紐づけ main() #初期画面の表示 root.mainloop()

試したこと

ゲームが始まる前のカウントダウン(count_numとcount_label)で実現したい操作はできています。(114行目)
そのためゲーム中のカウントダウンでも同じことをしているつもりなのですが、なぜか動きません。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

y_waiwai

2022/11/25 04:49

このままではコードが読めないので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
tera877

2022/11/25 04:56

ご指摘ありがとうございます。更新しました
退会済みユーザー

退会済みユーザー

2022/11/25 07:57

コピペ時のミスかもしれませんが、timer_num == 6 のところはイコールが1個じゃないと意味のない文になってしまいます。
tera877

2022/11/25 08:53

全く見えていませんでした。その部分を直したら動きました。本当に助かります。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。