Question

Having issues with my move checker currently, it seems that the failsafe I put in my code to make it not look outside the bounds of the matrix isn't working, any suggestions?

There is also the issue that it doesn't seem to be working (i.e. I am still able to place pieces wherever I want!). The code I use earlier up is listed below as well

code:

function legal = legalMove()
    d_l = [0, -1];
    d_r = [0, 1];
    d_u = [-1, 0];
    d_d = [1, 0];
    d_ul = [-1, -1];
    d_ur = [-1, 1];
    d_dl = [1, -1];
    d_dr = [1, 1];
    directions = {'d_l' 'd_ul' 'd_u' 'd_ur' 'd_r' 'd_dr' 'd_d' 'd_dl'};
    valid_moves = zeros(8,8);

    for ci = 1:8
        for cj = 1:8
            if game_state(ci,cj) == 0 %check element = 0
        for count = 1:8
        d = eval( directions{count} );
        ti = ci+d(1);
        tj = cj+d(2);

        % Check if out of the board
            if (ti > 8 || ti < 1) || (tj > 8 || tj < 1)
                break
            else
        % Number of enemy pieces you went over
        cnt = 0;
        selected = game_state(ti, tj);

        % Move while going over enemy pieces
        while selected == player_number * -1
            ti = ti + d(1);
            tj = tj + d(2);
            selected = game_state(ti, tj);

            % Check if out of the board
                if (ti > 8 || ti < 1) || (tj > 8 || tj < 1)
                break
                else
                end

            % Count pieces you went over
            cnt = cnt + 1;
        end
            end

        % Check if you moved over enemy pieces & whether you landed on your piece
        if selected == player_number
            valid_moves(ti,tj) = 1;
        else
        end

        end
            else
            end
        end
    end

    if ~isempty(valid_moves)
        legal = 1;
    else
        legal = 0;
    end
end

Error returned when done @ boundries:

Attempted to access game_state(0,7); index must be a positive integer or
logical.

Error in umpire/legalMove (line 217)
                selected = game_state(ti, tj);

Error in umpire/buttonPress (line 85)
        legal = legalMove();

other piece:

function buttonPress(hObject, eventdata)



    ended = game_is_over();

    if ended == 1;
        setAllInactive();
        winner = calc_winner();
        if winner == -1;
            set(stat_text,'string','Winner is White! Restart?')
        elseif winner == 1;
            set(stat_text,'string','Winner is Black! Restart?')
        else
            set(stat_text,'string','Game is a tie! Restart?')
        end
    else
    end

    legal = legalMove();
    if legal ~= 1;
        set(stat_text,'Illegal move! Try again')
        return
    else
    end

    game_state(get(hObject,'userdata')) = player_number;
    drawScreen();
    player_number = player_number * -1;
end
Was it helpful?

Solution

In the second place where you assign variable selected (near the end of the function legalMove), you have out-of-board check in the wrong place.

Here's a fixed version

    % ...
    % Number of enemy pieces you went over
    cnt = 0;
    selected = game_state(ti, tj);

    % Move while going over enemy pieces
    while selected == player_number * -1
        ti = ti + d(1);
        tj = tj + d(2);

        % Check if out of the board
            if (ti > 8 || ti < 1) || (tj > 8 || tj < 1)
            break
            else
            end

        selected = game_state(ti, tj);

        % Count pieces you went over
        cnt = cnt + 1;
    end
        end

    % Check if you moved over enemy pieces & whether you landed on your piece
    if selected == player_number
        valid_moves(ti,tj) = 1;
    else
    end
end
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top