質問編集履歴

3

 

2022/11/30 04:56

投稿

usagi_
usagi_

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,16 +1,17 @@
1
1
  ### 前提
2
2
 
3
3
  tkinterで三目並べ(〇×ゲーム)を作っています。
4
- 一通り作成したものの、オブジェクトボタンを押ても何も起きず困っています。
4
+ 一通り作成したものの、以下ようなエラーが出てまい実行できず困っています。
5
5
 
6
6
  ### 実現したいこと
7
7
 
8
8
  - [ ] ボタンを押すと〇×が記載され、三目並べができるようになる
9
9
 
10
10
  ### 発生している問題・エラーメッセージ
11
-
11
+ ```
12
- エラーメッセージはありませんが、ボタンを押しても反応しません。
12
+ root.bind("<1>", play)
13
-
13
+ NameError: name 'play' is not defined
14
+ ```
14
15
  ### 該当のソースコード
15
16
 
16
17
  ```python

2

該当コードの完全版を表記

2022/11/30 04:46

投稿

usagi_
usagi_

スコア1

test CHANGED
File without changes
test CHANGED
@@ -32,6 +32,38 @@
32
32
  for i in range(3):
33
33
  for j in range(3):
34
34
  self.btn[j][i].grid(column=j, row=i)
35
+
36
+ #データの初期化
37
+ def init_turn(self):
38
+ self.board = [[self.init for i in range(3)] for j in range(3)]
39
+
40
+ #盤面関連の関数
41
+ def check_board(self):
42
+ #垂直方向
43
+ for i in range(3):
44
+ if self.board[i][0] != 0:
45
+ if self.board[i][0] == self.board[i][1] and self.board[i][0] == self.board[i][2]:
46
+ return self.board[i][0]
47
+
48
+ #水平方向
49
+ for j in range(3):
50
+ if self.board[0][j] != 0:
51
+ if self.board[0][j] == self.board[1][j] and self.board[0][j] == self.board[2][j]:
52
+ return self.board[0][j]
53
+
54
+ #対角方向
55
+ if self.board[1][1] != 0:
56
+ if self.board[0][0] == self.board[1][1] and self.board[0][0] == self.board[2][2]:
57
+ return self.board[1][1]
58
+ elif self.board[0][2] == self.board[1][1] and self.board[0][2] == self.board[2][0]:
59
+ return self.board[1][1]
60
+
61
+ for i in range(3):
62
+ for j in range(3):
63
+ if self.board[j][i] == 0:
64
+ return 0
65
+
66
+ return -2
35
67
 
36
68
  #プレイヤー交代
37
69
  def change_turn(self):
@@ -53,15 +85,36 @@
53
85
 
54
86
  self.turn = self.change_turn()
55
87
 
88
+ if self.check_board() == 1:
89
+ print("先行プレイヤーの勝ちです")
90
+ self.init_turn()
91
+ self.init_text()
92
+ elif self.check_board() == -1:
93
+ print("後攻プレイヤーの勝ちです")
94
+ self.init_turn()
95
+ self.init_text()
96
+ elif self.check_board() == -2:
97
+ print("引き分けです")
98
+ self.init_turn()
99
+ self.init_text()
100
+
101
+ #ボタンのテキストを初期化
102
+ def init_text(self):
103
+ for i in range(3):
104
+ for j in range(3):
105
+ self.btn[i][j]["text"] = ""
106
+
56
107
  def main():
57
108
  #ウィンドウの作成
58
109
  root = tk.Tk()
59
110
  f = MyFrame(root)
60
111
  f.pack()
112
+ root.bind("<1>", play)
61
113
  f.mainloop()
62
114
 
63
115
  if __name__ == '__main__':
64
116
  main()
117
+
65
118
 
66
119
  ```
67
120
 

1

 

2022/11/30 04:13

投稿

usagi_
usagi_

スコア1

test CHANGED
@@ -1 +1 @@
1
- tkinterで三目並べを作成中だが動作
1
+ tkinterで三目並べ(〇×ゲーム)を作成し
test CHANGED
File without changes