Проверьте взятое местоположение на доске Tic Tac Toe Matlab

Я пытаюсь сделать небольшую функцию, которая проверяет, занято ли место на доске Tic Tac Toe или нет. Я создал массив нулей, называемый tttArray, где, когда каждое место заполнено, его местоположение изменяется на 1. Поэтому я сначала получаю ввод от игрока из функции ниже.

function [pXInputRow, pXInputCol] = pickXspot(playerInput)
%This function is to take inputs from Player X
pXInputRow = 0;
pXInputCol = 0;
%Set text for Row/Col Prompt
prompt = {'Row (1,2, or 3)', '(Col (1, 2, or 3)'};
name = 'Player X Turn';
%Show prompt to input values
playerInput = inputdlg(prompt, name);
pXInputRow = str2num(playerInput{2});
pXInputCol = str2num(playerInput{1});
tttArray(pXInputRow, pXInputCol) = 1;
end

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

function  [spotTaken] = checktaken(tttArray)
%Function used to check if spot is taken
%Setup Error Messages
errorMessage = 'This spot is taken, please choose another spot';
errorMessageTitle = 'Spot Taken';
if tttArray(pXInputRow, pXInputCol) || tttArray(pOInputRow, pOInputCol) == 1
    msgbox(errorMessage, errorMessageTitle)
    spotTaken = 1;
end
end

Тем не менее, я продолжаю получать следующую ошибку после того, как запускаю и помещаю строку/столбец в диалоговое окно подсказки. Какие-либо предложения?

Not enough input arguments.
Error in checktaken (line 8)
if tttArray(pXInputRow, pXInputCol) || tttArray(pOInputRow, pOInputCol) == 1

person Anas Yousef    schedule 04.10.2015    source источник
comment
stackoverflow.com/questions/32980638/ Решил проблему...   -  person Anas Yousef    schedule 07.10.2015


Ответы (1)


Пара проблем.

Вы предоставили tttArray в качестве входного параметра вашей функции checkTaken в качестве аргумента вызова:

function  [spotTaken] = checktaken(tttArray)

но вы, похоже, не предоставили параметры строки и столбца pXInputRow, pXInputCol или pOInputRow, pOInputCol в качестве аргументов.

Таким образом, эти параметры не определены при вызове

if tttArray(pXInputRow, pXInputCol) || tttArray(pOInputRow, pOInputCol) == 1

Вам нужно предоставить эти координаты в качестве аргументов вашей функции checkTaken.

Вы можете использовать метод грубой силы

function  [spotTaken] = checktaken(tttArray, pXInputRow, pXInputCol, pOInputRow, pOInputCol)

или вы можете сделать что-то более элегантное, например, поместить координаты в массив.

Другая проблема заключается в том, что если вы хотите проверить, равен ли какой-либо из элементов массива 1, ваш синтаксис оператора if неверен.

на самом деле у вас есть

if a || b == 1

но это, вероятно, не то, что вы хотите. См. документацию Matlab в разделе приоритет оператора.

Вместо этого вы, вероятно, хотите

if (a == 1) || (b == 1)

так что вы, если оператор должен быть

if (tttArray(pXInputRow, pXInputCol)  ==1) || (tttArray(pOInputRow, pOInputCol) == 1)
person paisanco    schedule 04.10.2015
comment
По какой-то причине Matlab по-прежнему говорит, что для функции требуется больше входных данных... Я не уверен, что еще мне нужно добавить сейчас? Тем не менее, я исправил синтаксическую ошибку, хороший улов, спасибо. - person Anas Yousef; 05.10.2015