如何添加到现有号码? C++

Posted

技术标签:

【中文标题】如何添加到现有号码? C++【英文标题】:How to add to existing numbers? C++ 【发布时间】:2021-07-18 00:36:50 【问题描述】:

我希望你们都度过了美好的一天。只是为了提供一些背景信息,我正在尝试用 C++ 制作 Mancala 游戏。情况是我想在用户提供索引时添加到每个数字。例如,如果用户在游戏中输入 10

  04 04 04 04 04 04
00                  00
  04 04 04 04 04 04
           ^^

那将是箭头所指的数字。我想创建代码,将游戏中的每个对应数字加一并产生以下输出:

   04 04 04 04 04 05
00                   01
   04 04 04 00 05 0

【问题讨论】:

这里有很多代码,我不确定我是否理解实际问题。你能把它缩小到不起作用的功能,它应该做什么,以及它正在做什么吗?我不知道您所说的“4 4 4 4 4 4 0 4 4 4 4 4 4 0 至:5 4 4 4 4 4 0 4 4 4 0 5 5 1”是什么意思。 绝对!谢谢你的回复。当用户提供索引时,我想添加到每个数字。例如,如果用户在 4 4 4 4 4 4 0 4 4 4 4 4 4 0 的游戏中输入 10,那么这将是倒数第四个数字 - 零是分数。将会发生的是 +1(四分)将进入每个数字,导致: 5 4 4 4 4 4 0 4 4 4 0 5 5 1 ....“1”已更改,因为用户将一个点放入他们的侧面 @beginnercoderuh 很抱歉,但我仍然不明白您的问题。 10 如何转化为04 被选中?然后你想加 1 到什么?为什么只有 2 个04 变成05 而指向的04 变成00?我们需要阅读 Mancala 游戏吗?另外,最后一行的个位数 0 是什么?请阅读this,以便我们为您提供帮助。 提示:模(余数)运算符。板子看起来有点圆形(事实上,你可以把它做成圆形)。 提示:如果一个豆荚(碗)包含 5 个种子,则表示当前碗的种子计数为零,接下来的 5 个种子的种子计数将递增。你可以把它们做成一个链表。 【参考方案1】:

让我们用一个圆形数组来表示棋盘。 每边有 6 个插槽,加上他们的“奖金”插槽。

static const unsigned int MAX_SLOTS = 14u;

在我对游戏的理解中,移动是通过获取插槽的内容并以顺时针或逆时针方式重新分配它们(每个插槽一个)来进行的。

std::vector<int> board(MAX_SLOTS) = 
 4, 4, 4, 4, 4, 4, 0,
  4, 4, 4, 4, 4, 4, 0;

void player_move(int starting_index, std::vector<int>& gameboard)

    const int quantity = gameboard[index];
    const unsigned int board_capacity = gameboard.size();
    gameboard[index] = 0;
    for (int i = 0; i < quantity; ++i)
    
        const int position = (starting_index + 1 + i) % board_capacity;
        ++gameboard[position];
    

上面的代码只执行玩家的移动。下一步是分析棋盘以去除豆子,以及可能的额外动作。

循环数组的关键技巧是使用% 运算符。

编辑:改变方向 你可以通过改变position的计算来改变分布的方向:

const int position = (board_capacity + starting_index - i - 1) % board_position;

【讨论】:

以上是关于如何添加到现有号码? C++的主要内容,如果未能解决你的问题,请参考以下文章

如何向现有 QTableWidget 添加新行?

合并原始联系人

如何在现有 C++ 项目中添加对话框资源

如何在现有构造函数中添加附加参数。 C++ ASIO

在现有 C++ QT 项目中实例化 QML 对象

如何将新数据保存到现有单元格?