我如何编辑战舰板上的网格以在 Matlab 中表示船只
how can I edit grids on a battleship board to represent ships in Matlab
我正在使用 subplot() 和 pcolor(zeros(7,7));为战舰游戏生成下图(请参阅下面的 link)。我正在尝试更改特定网格的颜色以表示船只,但我无法弄清楚,请问我能得到帮助吗,例如,我需要将“您的面板”中的网格 22 和 23 更改为红色,并且已有图已更新,未获取新图
最简单的方法是为 create/colour 一个特定的方块设置一个函数,这样就很简单了,并且可以在整个游戏中循环使用。下面我创建了局部函数 drawSquare(bs,N,player,color)
,它接受棋盘大小 (bs
)、平方数 (N
)、玩家 ('top'
或 'bottom'
) 和颜色,可以是任何有效的 MATLAB colorspec
.
然后我创建了另一个函数 setup(bs)
,多次调用它来为每个玩家创建“棋盘”。
然后你可以看到它就像调用drawSquare( bs, 3, 'top', 'r' );
一样简单将顶部玩家的方格数字3变成红色。
同样很容易调用 drawSquare( bs, 4, 'top', [0.6,0.5,0.5] );
为该玩家的方块 4 涂上灰色调,以显示类似于战舰游戏中的“命中”方块。
figure(100);
bs = 6; % board size
% Initialise the board
setup( bs );
% Example usage colouring in specific squares
drawSquare( bs, 3, 'top', 'r' )
drawSquare( bs, 4, 'top', [0.6,0.5,0.5] );
function setup( bs )
clf; % clear the board
for ii = 1:(bs^2)
% Loop over all squares, make the base boards
drawSquare( bs, ii, 'top', 'w' );
drawSquare( bs, ii, 'bottom', 'w' );
end
% Format the plots without ticks and with titles
subplot( 2, 1, 1 );
set( gca, 'XTickLabel', '', 'YTickLabel', '', 'BoxStyle', 'full' );
title( 'Computer Board' );
subplot( 2, 1, 2 );
set( gca, 'XTickLabel', '', 'YTickLabel', '', 'BoxStyle', 'full' );
title( 'Your Board' );
end
function drawSquare( bs, N, player, color )
% sq = square size, N = square number, player = 'top' or 'bottom'
% color = valid plot colour for different square types
x = mod(N-1,bs); % x axis in grid
y = floor( (N-1)/bs ); % y axis in grid
if strcmpi( player, 'top' )
subplot( 2, 1, 1 ); % top player is subplot 1
x = bs - x; % top player square 1 is bottom-right
else
subplot( 2, 1, 2 ); % bottom player is subplot 2
y = bs - y; % bottom player square 1 is top-left
end
xp = [x, x+1, x+1, x]; % x coordinates of grid square
yp = [y, y, y+1, y+1]; % y coordinates of grid square
patch( xp, yp, color ); % use patch to make coloured square
text( x+(1/2), y+(1/2), num2str(N), 'HorizontalAlignment', 'center' );
end
我正在使用 subplot() 和 pcolor(zeros(7,7));为战舰游戏生成下图(请参阅下面的 link)。我正在尝试更改特定网格的颜色以表示船只,但我无法弄清楚,请问我能得到帮助吗,例如,我需要将“您的面板”中的网格 22 和 23 更改为红色,并且已有图已更新,未获取新图
最简单的方法是为 create/colour 一个特定的方块设置一个函数,这样就很简单了,并且可以在整个游戏中循环使用。下面我创建了局部函数 drawSquare(bs,N,player,color)
,它接受棋盘大小 (bs
)、平方数 (N
)、玩家 ('top'
或 'bottom'
) 和颜色,可以是任何有效的 MATLAB colorspec
.
然后我创建了另一个函数 setup(bs)
,多次调用它来为每个玩家创建“棋盘”。
然后你可以看到它就像调用drawSquare( bs, 3, 'top', 'r' );
一样简单将顶部玩家的方格数字3变成红色。
同样很容易调用 drawSquare( bs, 4, 'top', [0.6,0.5,0.5] );
为该玩家的方块 4 涂上灰色调,以显示类似于战舰游戏中的“命中”方块。
figure(100);
bs = 6; % board size
% Initialise the board
setup( bs );
% Example usage colouring in specific squares
drawSquare( bs, 3, 'top', 'r' )
drawSquare( bs, 4, 'top', [0.6,0.5,0.5] );
function setup( bs )
clf; % clear the board
for ii = 1:(bs^2)
% Loop over all squares, make the base boards
drawSquare( bs, ii, 'top', 'w' );
drawSquare( bs, ii, 'bottom', 'w' );
end
% Format the plots without ticks and with titles
subplot( 2, 1, 1 );
set( gca, 'XTickLabel', '', 'YTickLabel', '', 'BoxStyle', 'full' );
title( 'Computer Board' );
subplot( 2, 1, 2 );
set( gca, 'XTickLabel', '', 'YTickLabel', '', 'BoxStyle', 'full' );
title( 'Your Board' );
end
function drawSquare( bs, N, player, color )
% sq = square size, N = square number, player = 'top' or 'bottom'
% color = valid plot colour for different square types
x = mod(N-1,bs); % x axis in grid
y = floor( (N-1)/bs ); % y axis in grid
if strcmpi( player, 'top' )
subplot( 2, 1, 1 ); % top player is subplot 1
x = bs - x; % top player square 1 is bottom-right
else
subplot( 2, 1, 2 ); % bottom player is subplot 2
y = bs - y; % bottom player square 1 is top-left
end
xp = [x, x+1, x+1, x]; % x coordinates of grid square
yp = [y, y, y+1, y+1]; % y coordinates of grid square
patch( xp, yp, color ); % use patch to make coloured square
text( x+(1/2), y+(1/2), num2str(N), 'HorizontalAlignment', 'center' );
end