Создание фоновой карты PACMAN в MATLAB

Итак, в настоящее время я занимаюсь созданием PACMAN на MATLAB, но, похоже, не могу понять, как начать генерацию карты на основной фигуре. Я могу либо использовать файл .png с фоном в классе uint8 RGB, но этот случай не позволяет мне регистрировать стены, препятствующие пути PACMAN и призраков. Другой метод, который, как мне кажется, сработает, состоит в том, чтобы просто создать карту самостоятельно с 0, 1 и 2, которые представляют расположение черных пустых пикселей, синих стен (заполненных) и точек (желтых) соответственно. Однако при попытке использовать последний метод у меня возникла проблема с назначением цвета каждому конкретному индексу матрицы 300 x 300 в методе переключения регистра в противном случае. Любые предложения о том, как продолжить? Буду очень признателен за любой ответ, и ниже приведен пример кода, который я пытался создать до сих пор:

function level = LevelOne()
% the functionality of this function is to generate the walls that
% PACMAN and the ghosts cannot cross

% Create color map
color = [255 75 75; % red 1
153 0 0; % dark red 2
255 255 153; % light yellow 3
255 102 178; % pink 4
0 0 0; % black 5
0 255 255; % light blue 6
0 0 255; % blue 7
255 255 153; % light yellow 8
192 192 192; % silver 9
255 255 255]/255; % white 10

%create general map area
level = zeros(300);


%create location of filled in walls(represented by 1's)
level(18:38,37:70) = 1;
level(65:75,37:70) = 1;
level(300-18:300-38,300-37:300-70) = 1;
level(300-65:300-75,300-37:300-70) = 1;


[x,y] = size(level);

axis([0 x 0 y])
for ii = 1:x
    for jj = 1:y
        switch level(ii,jj)
            case 1 %represents a blue wall

            case 0 %represents an empty black space for PACMAN & Ghosts to move through

            case 2 %represents the location of the fruit

            case 3 %represents the location 

            otherwise

        end
    end

person Chris Valencia    schedule 02.12.2017    source источник


Ответы (1)


Если я правильно понял проблему, вы можете загрузить данные матрицы из изображения (которое можно легко нарисовать в приложении для редактирования фотографий) в новую матрицу, получив лучшее из обоих миров. Что-то вроде этого:

image = imread('map.png');
grayLevel = image(row, column); ' Get the pixel like that if it is grayscale image.
rgbColor = impixel(image, column, row); ' Get the pixel like that if it is colorful image.

Следующим шагом является зацикливание данных изображения и копирование их в матрицу (возможно, тем временем преобразование цветов в ваши значения 0/1/2/3).

Я вообще не проверял это, но вот моя попытка:

level = zeros(300);
[x,y] = size(level);

% Copy from image.
for ii = 1:x
    for jj = 1:y
        level(ii,jj) = image(ii, jj); % Here maybe convert blue to 1, etc yourself. I only copy data here.
    end
end

% Render it.
axis([0 x 0 y])
for ii = 1:x
    for jj = 1:y
        switch level(ii,jj)
            case 1 %represents a blue wall
                rectangle('Position',[ii, jj, 1, 1],'FaceColor',[0 0 .5],'EdgeColor','b', 'LineWidth', 1)
            case 0 %represents an empty black space for PACMAN & Ghosts to move through
                rectangle('Position',[ii, jj, 1, 1],'FaceColor',[0 0 0],'EdgeColor','b', 'LineWidth', 1)

            case 2 %represents the location of the fruit

            case 3 %represents the location 

            otherwise

        end
    end
end

И это должно нарисовать прямоугольник, если вы об этом спрашиваете:

rectangle('Position',[1,2,5,10],'FaceColor',[0 0 .5],'EdgeColor','b', 'LineWidth', 1)

Как правило, попробуйте выполнить поиск в Google, так как это даст вам больше информации. Теперь перемещение вещей и удаление вещей из сюжета - это другая проблема...

Некоторые ссылки:

https://www.mathworks.com/help/matlab/ref/rectangle.html https://www.mathworks.com/matlabcentral/answers/151779-how-to-extract-the-value-pixel-value-from-image

person NoOne    schedule 02.12.2017