2

好的,现在我正在尝试通过 Matlab 编码创建一个连接四游戏;现在游戏还处于婴儿期,但我的问题是我要么无法在每个方格中绘制图形,要么根本无法绘制“圆形”图形。请以任何可能的方式提供帮助。此外,如果有人知道任何连接四个 matlab 教程,将不胜感激。

  function [] = Kinect4(nrRows, nrCols)
  board = zeros(nrRows, nrCols);

  nrMoves = 0;

        set(gca, 'xlim', [0 nrCols]);
        set(gca, 'ylim', [0 nrRows]);

        for r = 1 : 1 : nrRows - 1
        line([0, nrCols], [r, r], ...
        'LineWidth', 4, 'Color', [0 0 1]);
        end

        for c = 1 : 1 : nrCols - 1
        line([c, c], [0, nrRows], ...
        'LineWidth', 4, 'Color', [0 0 1]);
        end

  DrawBoard(nrRows, nrCols)
  hold on;

  while nrMoves < nrRows * nrCols                    %Computes ability to move polygon
       [x, y] = ginput(1); 
        r = ceil(y); % convert to row index
        c = ceil(x); % convert to column index

angles = 0 : 1 : 360;
        x = cx + r .* cosd(angles);
        y = cy + r .* sind(angles);

        plot(x, y, 'Color', [1 1 1], 'LineWidth', 3);
        axis square;
  end 
  end 
4

1 回答 1

2

以下是对代码的一些修复。

  1. 删除线DrawBoard(nrRows, nrCols)。不确定您是否将它作为评论放在那里,因为您已经绘制了电路板,或者是否DrawBoard是一个单独的功能。
  2. 更改了计算,rc给出了你想把钉子放进去的单元格的中心。这是通过从每个单元格中减去 0.5 来完成的。
  3. 将行更改x = cx + r .* cosd(angles);x = c + 0.5*cosd(angles);. 在前一个中,变量cx是未定义r的,我使用的不是钉子的半径,而是0.5可以用适当的变量替换它。但是这个想法是绘制一个半径圆0.5(以便它适合一个单元格),其中心c沿 x 轴偏移。y沿 y 轴偏移挂钩的类似更改。
  4. plot将命令中的颜色更改[0 0 0]为黑色。[1 1 1]是白色的,在白色背景上是不可能看到的 :)。我建议使用'k'黑色、'b'蓝色等。有关基本颜色规范,请参阅 matlab 文档。
  5. 我猜你还没有实现重力,以便钉子向下移动。您还需要检查一个单元格是否已填充。一旦你得到一个工作代码,所有这些和其他改进(比如删除不必要的 for 循环、更好的绘制钉子的方法等)都会留下。

这是一个“工作”代码:

function [] = Kinect4(nrRows, nrCols)
    board = zeros(nrRows, nrCols);

    nrMoves = 0;

        set(gca, 'xlim', [0 nrCols]);
        set(gca, 'ylim', [0 nrRows]);

        for r = 1 : 1 : nrRows - 1
            line([0, nrCols], [r, r], ...
            'LineWidth', 4, 'Color', [0 0 1]);
        end

        for c = 1 : 1 : nrCols - 1
            line([c, c], [0, nrRows], ...
            'LineWidth', 4, 'Color', [0 0 1]);
        end

        axis square;
        hold on;

    while nrMoves < nrRows * nrCols        %Computes ability to move polygon
        [x, y] = ginput(1); 
        r = ceil(y) - 0.5;
        c = ceil(x) - 0.5;

        angles = 0 : 1 : 360;
        x = c + 0.5*cosd(angles);
        y = r + 0.5*sind(angles);

        plot(x, y, 'Color', [0 0 0], 'LineWidth', 3);
    end 
end 
于 2012-12-06T03:30:02.703 回答