gpt4 book ai didi

c++ - 打印点和框

转载 作者:太空狗 更新时间:2023-10-29 21:06:02 26 4
gpt4 key购买 nike

我正在写一个 dots and boxes为一个类(class)编写程序并准备好一切,除了我在打印网格时遇到问题。

注意:网格可以是从 2x2 到 9x9 的任意大小。一个二乘二的网格必须像这样打印才能标准输出:

a + + +    //after some moves:  a +-+ +
|P|
b + + + b +-+ +

c + + + c + + +
1 2 3 1 2 3

我有一个点、边和框的数据结构。并且网格对象对于每个类都有一个一维 vector 。

ie dots 是网格上所有点的 vector ,edges 是网格上所有边的 vector (每条边有两个点)boxes 是网格上所有框的 vector (每个框有四个边)

盒子有一个枚举,表示谁拥有盒子 Player 或 Computer并且边缘有一个 bool 值表示它们是否被采用,还有一个 bool 值表示它们是否垂直。

当我尝试打印网格时,我感到很困惑,因为网格可以有多种尺寸。

因为 (size) 边打印在偶数(水平)行上,而(size+1)打印在奇数(垂直)上。

我希望我解释清楚了。

谢谢!

最佳答案

把你的边缘放在一个序列(一个 vector )中。

gridsize = 2 : hh vvv hh vvv hh

这就是您注意到 horizo​​ntal = 2 和 vertical = size + 1 的结果。

现在找出为不同边获取不同值的算法。以下是我如何根据您的示例将边缘存储到 vector 中:

Your first (empty) 2x2 grid: 00 000 00 000 00
Your second 2x2 grid: 10 110 10 000 00

当我打印出网格时,我在 for 循环中使用了行和列。

// I consider the (row, col) to be the box.
// Each row loop prints one horizontal line and (possibly) one vertical line.
// Access to the edge vector is based on this (row, col) pair.
for (int row = 0; row < size + 1; row++) /* +1 to draw the bottom line. */
{
if (row < size) /* Bottom most horizontal row not followed by vertical. */
for (int col = 0; col < size + 1; col++) /* +1 to draw rightmost line. */
}

从 b1 到 b2 的边存储在位置 5(从 0 开始计数,计算可能的边)。你是如何获得这个职位的?

您可能想在这里停下来,自己解决剩下的问题。我用笔和纸!

从 b1 到 b2 的边(根据我的算法)是第二行第一列 (1, 0) 的一部分。打印水平边缘时,这里是计算边缘在 vector 中的位置的方法。

Horizontal edge: pos = (row * (size + size + 1)) + col

从a2到b2的边是第一行第二列(0, 2)的一部分。打印垂直边缘时需要调整它

Vertical edge: pos = (row * (size + size + 1)) + size + col

关于c++ - 打印点和框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8435770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com