2014-10-09 53 views
0

我们必须在Uni的C++中为Nim开发一款游戏,并且我正在很好地处理它,它只是我遇到了一个问题,当玩家选择一个堆栈时,它将以阵列号而不是屏幕上的数字。我很确定这只是一个“-1”,但是我无法找到它,在我试图放置“-1”的任何地方,它最终以最后一个计数器计数。下面Nim Game - 堆栈选择

代码:

#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; 
} 
+0

我看到有几个问题。 'for(int count = 0; count > playerHeapChoice;'将playerHeapChoce递减1之前,用'playerHeapChoice - ;'' – 2014-10-09 17:18:46

回答

1

注意,而不是

std::cout << heapNumber[count] 

你可以做

std::cout << (count + 1) 

同样,你的问题的一部分是

heaps[playerHeapChoice] 

这应该是

heaps[playerHeapChoice - 1] 

此外,我强烈建议您在使用它的函数中声明每个变量。将所有变量声明为全局变量是不被赞成的,因为它可能在更大的程序中导致严重的问题。

1

您正在使用的变量名称诠释计数两次。

一次进入第一个for循环,一次进入第二个循环。我很惊讶,编译。但我相信这是造成问题的原因。

for (int count = 0; count < HEAPS; count++) 
{ 
    for (int count = 0; count < heaps[count]; count++) 
    { 
    } 
} 

至于你的问题很难理解这个问题?难道你问玩家要从哪个堆栈中取出,并且他们输入的数字是获取数组索引而不是实际堆栈的数目?

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

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

沿着这些线的东西。

+2

'''''''''''''''''''''''我称之为“阴影”。 – 2014-10-09 17:09:53

+0

我相信这是沿着正确的路线,虽然我不确定在哪里把它放在基本程序的作品。它打印3个堆栈,并且由于heapNumber数组,我将它们标记为“1,2,3”,但是如果玩家选择堆1,它会选择堆2,所以他们得到的是数组索引而不是实际的堆栈,尽管我有因为playerTurn方法中没有计数,所以不知道该把if语句放在哪里。 – CyberHydra 2014-10-09 17:15:05

+0

在这种情况下,我会像前面提到的用户那样做。数组从索引0开始,而玩家可能不会以这种方式输入。因此,从玩家输入的内容中删除1。 – marsh 2014-10-09 17:22:23