0

所以我在一个关于玩家围坐在桌子旁的编程任务上遇到了一些麻烦。该程序应该能够在刚刚转弯的玩家之后添加玩家。该作业应该向我们展示如何将数据添加到任何地方的链表中。所以当我使用 PLAY 命令时会出现我的问题。这应该允许单个玩家轮流。

例如,如果有玩家 A、B 和 C,并且执行 PLAY 命令,控制台会显示“玩家 A 轮到”。如果再次执行PLAY,会显示“玩家B轮到”。

我的代码允许列表中的第一个播放器播放,但不会移动到下一个节点/播放器。

void CircleList::play()
{
    LinkedListOfPlayersNode *p=(*pFront).pNext;
    if (p->pData!=NULL)
    {
        cout<<p->pData->getName()+" takes a turn\n";
        p-> pNext; //My attempt to move to the next node.
    }
    else
    {
        cout<<"There are no players. Please ADD a player.\n";
    }
}

所以这显然是行不通的。有人可以向我解释我将如何转移到下一个球员吗?

PS - 代码是 C++

4

2 回答 2

2

您需要班级中的一名成员来保留最后一个轮到的玩家。

class CircleList
{
   //...
   PlayerNode* pLastPlayer;
};

最初,这被设置为pFront,每次play被调用时,您都会将其移动到下一个玩家。

void CircleList::play()
{
   //logic with pLastPlayer here

   //at the end move it
   pLastPlayer = pLastPlayer->next;
}
于 2012-09-23T19:34:38.300 回答
1

线

p-> pNext; //My attempt to move to the next node.

不会将任何内容移动到下一个节点。您可能应该存储/分配p->pNext 给某些东西。

于 2012-09-23T19:43:20.270 回答