나는 Python 클래스를위한 프로그램을 작성하고있다. Tic Tac Toe 게임을 만들려면 반드시 OOP를 사용해야합니다. 내가 완료 한 몇 가지 요구 사항이 있습니다. 최종 요구 사항은 컴퓨터 플레이어가 차단하는 것과 같은 일을하는 '똑똑한'것이어야 할 때 연속적인 장소를 재생해야한다는 것입니다. 교수님은 실제로이 일을하는 방법에 대한 지침을 제공하지 않으므로 조금 당황 스럽습니다.객체 지향 Tic Tac Toe in Python
나는 지금 프로그램에서 플레이어가 수평 행을 통해 우승 한 것이 아닌가를 확인하려고 시도하고 있습니다. 여기에 내 코드가 있습니다 (매우 지저분하고 비효율적입니다.).
from random import randint
class TTT:
board = [[' ' for row in range(3)] for col in range(3)]
currentgame = []
def print(self):
print("\n-----\n".join(["|".join(row) for row in self.board]))
def mark(self,pos,mark):
x,y = pos
self.board[x][y] = mark
def win(self,mark):
if mark == self.board[0][0] == self.board[1][1] == self.board[2][2]:
return True
if mark == self.board[2][0] == self.board[1][1] == self.board[0][2]:
return True
elif mark == self.board[0][0] == self.board[1][0] == self.board[2][0]:
return True
elif mark == self.board[1][0] == self.board[1][1] == self.board[1][2]:
return True
elif mark == self.board[0][1] == self.board[1][1] == self.board[2][1]:
return True
elif mark == self.board[0][2] == self.board[1][2] == self.board[2][2]:
return True
elif mark == self.board[0][0] == self.board[0][1] == self.board[0][2]:
return True
elif mark == self.board[2][0] == self.board[2][1] == self.board[2][2]:
return True
else:
return False
def choose(self,mark):
if self.board == [[' ', ' ', ' '], [' ', ' ', ' '], [' ', ' ', ' ']]:
self.mark((randint(0,2),randint(0,2)),mark)
def choose(self,mark):
spotx = randint(0,2)
spoty = randint(0,2)
if self.board[spotx][spoty] == ' ':
self.mark((spotx,spoty),mark)
else:
self.choose(mark)
def choose(self,mark):
spotx = randint(0,2)
spoty = randint(0,2)
if self.rowabouttowin(mark) == (0,0) or (0,1) or (0,2) or (1,0) or (1,1) or (1,2) or (2,0) or (2,1) or (2,2):
self.mark((self.rowabouttowin(mark)),mark)
if self.legalspace(spotx,spoty):
self.mark((spotx,spoty),mark)
else:
self.choose(mark)
def legalspace(self,spotx,spoty):
if self.board[spotx][spoty] == ' ':
return True
else:
return False
def rowabouttowin(self,mark):
for row in range(3):
if self.board[row] == [mark,mark,'']:
return (row,2)
if self.board[row] == [mark,'',mark]:
return (row,1)
if self.board[row] == ['',mark,mark]:
return (row,0)
else:
return 4
내 문제는 내가 오류 메시지가 얻을 수 있습니다 : 할당 크게 넘어로, 여기에 지식의 내 영역에서 솔직히
Traceback (most recent call last):
File "<pyshell#194>", line 1, in <module>
x.choose('x')
File "/Users/richiehoffman/Documents/Python Programs/Tic Tac Toe.py", line 64, in choose
self.mark((self.rowabouttowin(mark)),mark)
File "/Users/richiehoffman/Documents/Python Programs/Tic Tac Toe.py", line 23, in mark
x,y = pos
TypeError: 'int' object is not iterable
난 무엇 클래스의 일의 몇 우리 객체 지향 파이썬에 보냈다. 내가 선택 또는 반복 가능한 데이터 대신 정수를 출력하는 rowabouttowin 메서드의 일부 지점에서 오류가 발생했다고 확신합니다.
어떤 도움이 필요합니까? 이것은 그런데
self.mark()
에 예상대로 int
대신 (int,int)
반환
조금 벗어난 주제이지만, 실제로 똑똑한 IA를 구현하려면 [xkcd tic-tac-toe map] (http://xkcd.com/832/)을 확인하십시오. 당연히 당신은 가끔 IA가 부합되도록하기 위해 차선책을 수행하게합니다. – lucasg