2014-11-04 2 views
1

Мое назначение - Tic-Tac_Toe с использованием pygame и numpy. Я почти выполнил всю программу. Мне просто нужна помощь, чтобы понять, как найти победителя. I победитель найден, если суммирование ЛЮБОЙ строки, столбца или диагонали равно 3.Суммирование каждой строки, столбца и диагонали в матричной матрице 3x3

У меня есть две матрицы 3x3, заполненные 0. Назовем их xPlayer и oPlayer. Матрицы заполняются 1 каждый раз, когда игрок x или игрок o выбирает свой выбор в определенном месте. Поэтому, если игрок x выбирает [0,0], расположение матрицы в [0,0] получает значение 1. Это должно продолжаться до суммирования любой строки, столбца или диагонали 3. Если все места в обеих матрицах равны 1, то победителя нет.

Мне нужна помощь в поиске победителя. Я действительно новичок в python, поэтому я мало знаю об индексировании, хотя и в матрице. Любая помощь будет принята с благодарностью!

EDIT: В принципе, как вы находите суммирование каждой строке, столбце и диагонали, чтобы проверить, если любой из них равна 3.

ответ

2

Чтобы индексировать матрицу в numpy, просто используйте обозначение A [y, x] для ссылки на строку y и столбец x матрицы A. Если вы хотите сразу выбрать несколько значений из матрицы, вы можете использовать стандартные python list slicing. Например, чтобы выбрать самый левый столбец A, вы должны использовать A [:, 0].

В вашем случае, чтобы найти сумму столбцов вы могли бы сделать

sum(xPlayer[:,0]) 

вычислить сумму крайнего левого столбца xPlayer и

sum(xPlayer[0,:]) 

для верхнего ряда xPlayer. В случае диагоналей, вам просто нужно вручную добавить записи массива, так что одна из диагоналей будет:

xPlayer[0,0]+xPlayer[1,1]+xPlayer[2,2] 

В качестве альтернативы можно использовать Numpy функции для вычисления суммы по строкам и столбцам, где

xPlayer.sum(0) 

вычисляет сумму поперек строк в каждой колонке и

xPlayer.sum(1) 

вычисляет сумму через столбцов в каждой строке. Можно даже рассчитать диагонали без ручного указания индексов, так

sum(xPlayer.diagonal()) 

для верхнего левого нижнего правой диагонали и

sum(numpy.fliplr(xPlayer).diagonal()) 

для другой диагонали.

Редактировать: Для пояснения это относится к «массивам» в numpy.Все приведенные выше заявления все еще может быть использован для «матриц» либо путем преобразования матрицы в массив с помощью

arr = numpy.array(mat) 

или с помощью полученной матрицы соответствующим образом. Обратите внимание, что в последнем случае матрица не будет иметь одинаковую форму для всех операций.

+0

Wow это очень легко. Я чувствую себя очень глупо. Я должен был искать в глубине. Спасибо за вашу помощь –

+1

'индексировать матрицу в numpy' Вы имели в виду' index a * array * в numpy' – ssm

-1

установить логическое значение для проверки на каждом шагу, если кто-то выиграл. если он возвращает true, то чей поворот он выиграл

так, например, это x поворот, он играет победный ход, bool проверяет, победил ли кто-то, возвращает true, распечатать (игрок, чей ход) выиграл! и конец игры.

+0

Победитель определяется суммированием ЛЮБЫХ строк, столбцов или диагонали. Если любое из них равно 3, тогда выбирается победитель. Я мог бы реализовать то, что вы сказали, но это не помогло бы мне понять, как найти суммирование каждой строки, столбца и диагонали, чтобы проверить, равно ли они любого из них. –

+0

спасибо, что пометили меня, пытаясь помочь вам – Tyler

Смежные вопросы