首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nim游戏-堆栈选择

Nim游戏-堆栈选择
EN

Stack Overflow用户
提问于 2014-10-09 16:53:14
回答 2查看 448关注 0票数 0

我们必须在C++中为Uni开发一个Nim游戏,我正在很好地完成它,只是我遇到了一个问题,当玩家选择一个堆栈时,它以数组的方式工作,而不是屏幕上的数字。我很肯定这只是一个"-1“,但我找不到它,无论我想放在哪里"-1”它最终采取了最后的计数器计数之一。

代码如下:

代码语言:javascript
复制
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <string>
#include <iomanip>


char star = '*';
const int HEAPS = 3;
int heaps[HEAPS];
int heapNumber[] = {1,2,3};
int playerHeapChoice;
int playerCounterChoice;

int playerTurn()
{
    std::cout << "Which stack would you like to take counters from?";
    std::cin >> playerHeapChoice;
    std::cout << "How many counters would you like to take from the heap?";
    std::cin >> playerCounterChoice;

    heaps[playerHeapChoice] = heaps[playerHeapChoice] - playerCounterChoice;
    std::cout << "There are " << heaps[playerHeapChoice] << " counters left in this stack.";

    return heaps[playerHeapChoice];
}

int main()
{   
    srand(time(NULL));

    for (int i = 0; i < HEAPS; i++)
    {
        heaps[i] = (rand() % 20) + 1;
    }

    std::cout << "Stack" << std::setw(8) << "  Number" << std::setw(8) << "   Counters" <<     std::endl;
    for (int count = 0; count < HEAPS; count++)
    {
         std::cout << heapNumber[count] << std::setw(8) << heaps[count] << std::setw(8);
         for (int count = 0; count < heaps[count]; count++)
        {
            std::cout << star;
        }
        std::cout << std::endl;
    }

    playerTurn();

    _getch();
    return 0;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-09 17:12:54

注意,而不是

代码语言:javascript
复制
std::cout << heapNumber[count]

你可以做到

代码语言:javascript
复制
std::cout << (count + 1)

同样,您的部分问题在于

代码语言:javascript
复制
heaps[playerHeapChoice]

这应该是

代码语言:javascript
复制
heaps[playerHeapChoice - 1]

此外,我强烈建议您在使用它的函数中声明每个变量。将所有变量声明为全局变量是不允许的,因为它会在更大的程序中引起严重问题。

票数 1
EN

Stack Overflow用户

发布于 2014-10-09 17:00:35

您正在两次使用变量名称int count。

一次在第一次for循环,一次在第二次。我对此感到惊讶。但我相信这会引起一些问题。

代码语言:javascript
复制
for (int count = 0; count < HEAPS; count++)
{
    for (int count = 0; count < heaps[count]; count++)
    {
    }
}

至于你的问题,很难理解这个问题?你是在问玩家要从哪个堆栈中获取哪些堆栈,以及他们输入的数字是获得数组索引而不是实际堆栈的数量吗?

如果是这样的话,是因为您直接通过它们键入的索引访问数组。您需要在数组中找到值。Psuedo代码:

代码语言:javascript
复制
for(int i = 0; i < heaps[count]; ++count)
{
    if(heaps[i] == playerHeapChoice)
    {
        std::cout << "There are " << heaps[i] << " counters left in this stack.";
    }
}

一些类似的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26283892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档