Advertisement
asikpro13

Untitled

Mar 31st, 2020
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.97 KB | None | 0 0
  1. class TicTacToeBoard:
  2. def __init__(self):
  3. pass
  4.  
  5. winner = 0
  6. player = 2
  7. per = ''
  8. r21 = '-' # r - это типо клетка. Первая цифра равна ряду (начинаются с 2)
  9. r22 = '-' # вторая цифра равна клетке, то есть r21 == будет равна:
  10. r23 = '-' # первой клетке в первом ряду
  11. r31 = '-'
  12. r32 = '-'
  13. r33 = '-'
  14. r41 = '-'
  15. r42 = '-'
  16. r43 = '-'
  17. o = ''
  18. x = ''
  19.  
  20. def check(self):
  21. if self.r21 == 'X' and self.r31 == 'X' and self.r41 == 'X' \
  22. or self.r22 == 'X' and self.r32 == 'X' and self.r42 == 'X' \
  23. or self.r23 == 'X' and self.r33 == 'X' and self.r43 == 'X' \
  24. or self.r21 == 'X' and self.r22 == 'X' and self.r23 == 'X' \
  25. or self.r31 == 'X' and self.r32 == 'X' and self.r33 == 'X' \
  26. or self.r41 == 'X' and self.r42 == 'X' and self.r43 == 'X' \
  27. or self.r21 == 'X' and self.r32 == 'X' and self.r43 == 'X' \
  28. or self.r23 == 'X' and self.r32 == 'X' and self.r41 == 'X':
  29. return 'Победил игрок X'
  30. elif self.r21 == '0' and self.r31 == '0' and self.r41 == '0' \
  31. or self.r22 == '0' and self.r32 == '0' and self.r42 == '0' \
  32. or self.r23 == '0' and self.r33 == '0' and self.r43 == '0' \
  33. or self.r21 == '0' and self.r22 == '0' and self.r23 == '0' \
  34. or self.r31 == '0' and self.r32 == '0' and self.r33 == '0' \
  35. or self.r41 == '0' and self.r42 == '0' and self.r43 == '0' \
  36. or self.r21 == '0' and self.r32 == '0' and self.r43 == '0' \
  37. or self.r23 == '0' and self.r32 == '0' and self.r41 == '0':
  38. return 'Победил игрок 0'
  39. elif self.r21 != '-' and self.r22 != '-' and self.r23 != '-'\
  40. and self.r31 != '-' and self.r32 != '-' and self.r33 != '-'\
  41. and self.r41 != '-' and self.r42 != '-' and self.r43 != '-':
  42. return 'Ничья'
  43. else:
  44. return 'Продолжаем играть'
  45.  
  46. def row1(self, r1='-', r2='-', r3='-'):
  47. if self.r21 == '-' and r1 is not None:
  48. if r1 != '-':
  49. self.r21 = r1
  50. return self.check()
  51. else:
  52. self.r21 = '-'
  53.  
  54. if self.r22 == '-':
  55. if r2 != '-':
  56. self.r22 = r2
  57. return self.check()
  58. else:
  59. self.r22 = '-'
  60.  
  61. if self.r23 == '-':
  62. if r3 != '-':
  63. self.r23 = r3
  64. return self.check()
  65. else:
  66. self.r23 = '-'
  67. return [self.r21, self.r22, self.r23]
  68.  
  69. def row2(self, r1='-', r2='-', r3='-'):
  70. if self.r31 == '-' and r1 is not None:
  71. if r1 != '-':
  72. self.r31 = r1
  73. return self.check()
  74. else:
  75. self.r31 = '-'
  76.  
  77. if self.r32 == '-':
  78. if r2 != '-':
  79. self.r32 = r2
  80. return self.check()
  81. else:
  82. self.r32 = '-'
  83.  
  84. if self.r33 == '-':
  85. if r3 != '-':
  86. self.r33 = r3
  87. return self.check()
  88. else:
  89. self.r33 = '-'
  90.  
  91. return [self.r31, self.r32, self.r33]
  92.  
  93. def row3(self, r1='-', r2='-', r3='-'):
  94. if self.r41 == '-':
  95. if r1 != '-' and r1 is not None:
  96. self.r41 = r1
  97. return self.check()
  98. else:
  99. self.r41 = '-'
  100.  
  101. if self.r42 == '-':
  102. if r2 != '-' and r2 is not None:
  103. self.r42 = r2
  104. return self.check()
  105. else:
  106. self.r42 = '-'
  107.  
  108. if self.r43 == '-':
  109. if r3 != '-':
  110. self.r43 = r3
  111. return self.check()
  112. else:
  113. self.r43 = '-'
  114. return [self.r41, self.r42, self.r43] # редактиование поля
  115.  
  116. def new_game(self):
  117. self.winner = 0
  118. self.player = 2
  119. self.per = '-'
  120. self.r21 = '-'
  121. self.r22 = '-'
  122. self.r23 = '-'
  123. self.r31 = '-'
  124. self.r32 = '-'
  125. self.r33 = '-'
  126. self.r41 = '-'
  127. self.r42 = '-'
  128. self.r43 = '-'
  129. self.o = ''
  130. self.x = ''
  131.  
  132. def get_field(self): # возврат поля
  133. return self.row1(), self.row2(), self.row3()
  134.  
  135. def check_winner(self, s):
  136. if s == 'Победил игрок X':
  137. self.winner += 1
  138. self.x = 1
  139. return 'Победил игрок X'
  140. elif s == 'Победил игрок 0':
  141. self.winner += 1
  142. self.o = 1
  143. return 'Победил игрок 0'
  144. elif s == "Ничья":
  145. self.winner -= 1
  146. return 'Ничья'
  147. else:
  148. return 'Продолжаем играть'
  149.  
  150. def check_field(self):
  151. if self.x == 1:
  152. return 'X'
  153. elif self.o == 1:
  154. return '0'
  155. elif self.winner == -1:
  156. return 'D'
  157. else:
  158. return None
  159.  
  160. def make_move(self, row, col):
  161. if self.winner == 0:
  162. if self.player == 2: # ----------------------- выбор игрока:
  163. self.per = 'X'
  164. self.player += 1
  165. else:
  166. self.per = '0'
  167. self.player -= 1
  168. # --------------------------------------------- игрок делает ход
  169. if row == 1:
  170. if col == 1 and self.r21 == '-':
  171. s = self.row1(self.per)
  172. return self.check_winner(s)
  173. elif col == 2 and self.r22 == '-':
  174. s = self.row1(None, self.per)
  175. return self.check_winner(s)
  176. elif col == 3 and self.r23 == '-':
  177. s = self.row1(None, None, self.per)
  178. return self.check_winner(s)
  179. else:
  180. if self.player == 3:
  181. self.player -= 1
  182. else:
  183. self.player += 1
  184. return 'Клетка ' + str(row) + ', ' + str(col) + ' уже занята'
  185. elif row == 2:
  186. if col == 1 and self.r31 == '-':
  187. s = self.row2(self.per)
  188. return self.check_winner(s)
  189. elif col == 2 and self.r32 == '-':
  190. s = self.row2(None, self.per)
  191. return self.check_winner(s)
  192. elif col == 3 and self.r33 == '-':
  193. s = self.row2(None, None, self.per)
  194. return self.check_winner(s)
  195. else:
  196. if self.player == 3:
  197. self.player -= 1
  198. else:
  199. self.player += 1
  200. return 'Клетка ' + str(row) + ', ' + str(col) + ' уже занята'
  201. elif row == 3:
  202. if col == 1 and self.r41 == '-':
  203. s = self.row3(self.per)
  204. return self.check_winner(s)
  205. elif col == 2 and self.r42 == '-':
  206. s = self.row3(None, self.per)
  207. return self.check_winner(s)
  208. elif col == 3 and self.r43 == '-':
  209. s = self.row3(None, None, self.per)
  210. return self.check_winner(s)
  211. else:
  212. if self.player == 3:
  213. self.player -= 1
  214. else:
  215. self.player += 1
  216. return 'Клетка ' + str(row) + ', ' + str(col) + ' уже занята'
  217. else:
  218. return 'Игра уже завершена'
  219.  
  220.  
  221. new_game() – для создания новой игры;
  222. get_field() – для получения поля (список списков);
  223. check_field() – для проверки, есть ли победитель, который возвращает X, если победил первый игрок, 0, если второй, D, если ничья и None, если можно продолжать игру;
  224. make_move(row, col) – который устанавливает значение текущего хода в ячейку поля с координатами row, col, если это возможно, «переключает» ход игрока, а также возвращает сообщение «Победил игрок X» при победе крестиков, «Победил игрок 0» при победе ноликов, «Ничья» в случае ничьей и «Продолжаем играть», если победитель после данного хода неопределён.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement