前提・実現したいこと
プログラミング初心者です。
Python tkinterで簡単なゲームを作っています。
メインウィンドウのボタンを押すと別のウィンドウが出て、その別ウィンドウでゲームを行いたいのですが、
発生している問題・エラーメッセージ
File "C:\python\Graduation study\OXゲーム施策.py", line 46, in mark if player == 1: NameError: name 'player' is not defined
というエラーが出てしまいます。
該当のソースコード
python
1import tkinter as tk 2import tkinter.ttk as ttk 3import random 4import winsound 5 6def sub_window(): 7 win = tk.Toplevel() 8 win.geometry("640x480") 9 cv= tk.Canvas(win,background="gold", width=640, height=480) 10 cv.place(x=0, y=0) 11 12 def init_data(): 13 global init, data 14 data = [[init for i in range(3)] for j in range(3)] 15 def judge(): 16 global data 17 data = [[init for i in range(3)] for j in range(3)] 18 for i in range(3): 19 if data[i][0] != 0: 20 if data[i][0] == data[i][1] and data[i][0] == data[i][2]: 21 return data[i][0] 22 for j in range(3): 23 if data[0][j] != 0: 24 if data[0][j] == data[1][j] and data[0][j] == data[2][j]: 25 return data[0][j] 26 if data[1][1] != 0: 27 if data[0][0] == data[1][1] and data[0][0] == data[2][2]: 28 return data[1][1] 29 elif data[0][2] == data[1][1] and data[0][2] == data[2][0]: 30 return data[1][1] 31 for i in range(3): 32 for j in range(3): 33 if data[j][i] == 0: 34 return 0 35 return -2 36 37 def turn(): 38 global player 39 return player * (-1) 40 def mark(e): 41 global date, player 42 data = [[init for i in range(3)] for j in range(3)] 43 for i in range(3): 44 for j in range(3): 45 if e.widget == btn[j][i]: 46 if player == 1: 47 e.widget["text"] = "〇" 48 data[j][i] = 1 49 elif player ==-1: 50 e.widget["text"] = "×" 51 data[j][i] = -1 52 player = turn() 53 54 if judge() == 1: 55 print("先行プレイヤーの勝利") 56 init_data() 57 init_text() 58 elif judge() == -1: 59 print("後攻プレイヤーの勝利") 60 init_data() 61 init_text() 62 elif judge() == -2: 63 print("引き分けです") 64 init_data() 65 init_text() 66 67#ボタンのテキストを初期化 68 def init_text(): 69 global btn 70 for i in range(3): 71 for j in range(3): 72 btn[i][j]["text"] = "" 73 win.title("〇×ゲーム") 74 player = 1 75 init = 0 76 data = [[init for i in range(3)] for j in range(3)] 77 w = 20 78 h = 5 79 btn = [[tk.Button(win, width=w, height=h) for i in range(3)] for j in range(3)] 80 for i in range(3): 81 for j in range(3): 82 btn[j][i].grid(column=j, row=i) 83 win.bind("<1>", mark) 84 win.mainloop() 85 86 87#-------------------------------------------------------------------------- 88# rootメインウィンドウの設定 89root = tk.Tk() 90root.geometry("600x600") 91root.title("シュミレーションゲーム") 92canvas0= tk.Canvas(background="#cea", width=600, height=600) 93canvas0.place(x=0, y=0) 94label0= tk.Label(canvas0, text="ゲーム施策") 95label0.place(x=300,y=450,anchor=tk.CENTER) 96button = tk.Button(canvas0, text="サブウィンドウ生成", command=sub_window) 97button.place(x=300,y=500) 98root.mainloop()
line41の global date, player で
playerと定義してるのにplayerが見つからないといわれてしまうのはなぜでしょうか。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。