使用单链表的绘制方法

Draw Method using singly linked lists

背景:游戏由可点击的牡蛎组成,必须将它们移动到屏幕上它们消失的另一个位置。牡蛎(节点)有图像、矩形、位置和下一个节点数据。在 draw 方法中,我有一个代表节点数的计数器。每次迭代都会调用 traverse 方法。一旦循环完成,遍历列表的变量将重置为列表的头部。 25个节点中只绘制了一个。

    _oysterSLL.placeholder = _oysterSLL.moveAddress; 
    GraphicsDevice.Clear(Color.CornflowerBlue);
    spriteBatch.Begin();
    spriteBatch.Draw(Bins.T2DrepresentativeImage, Bins.V2location,     Color.White);

    for (int i = _oysterSLL.count; i > 1; --i)
        {
            _oysterSLL.traverseList(_oysterSLL.moveAddress);
            spriteBatch.Draw(_oysterSLL.moveAddress.T2DrepresentativeImage, _oysterSLL.moveAddress.V2location, Color.White);
        }
    _oysterSLL.moveAddress = _oysterSLL.placeholder;
    spriteBatch.End();
    base.Draw(gameTime);

问题:如何绘制每个节点而不是最后一个节点?

感谢您的帮助。我是编程新手,如有任何建议,我们将不胜感激!

编辑:我在下面添加了 _oysterSLL class 代码。使用的实用程序 class 唯一继承的变量是 count 变量,它是一个 int。感谢您的建议,我希望我包含的 LinkedList class 对您有所帮助。我想我想避免使用数组,因为我想在用户将牡蛎移动到 objective 时释放内存。但是,我可以看到我在不使用索引的情况下使用 for 循环是多么荒谬。

namespace Oyster
{
class LinkedList : Utility
{
    private Oyster _head, _tail, _placeholder, _moveAddress;

    public LinkedList()
    {

    }

    public Oyster head
    {
        get { return _head; }
        set { _head = value;}
    }

    public Oyster tail
    {
        get { return _tail; }
        set { _tail = value; }
    }

    public Oyster placeholder
    {
        get { return _placeholder; }
        set { _placeholder = value; }
    }

    public Oyster moveAddress
    {
        get { return _moveAddress; }
        set { _moveAddress = value; }
    }

    public void oysterAddSLL(Oyster newOyster)
    {
        if (_head == null)
        {
            _head = newOyster;
            _tail = newOyster;
            _placeholder = newOyster;
            _moveAddress = newOyster;
            count++;

        }
        else
        {
            _tail = newOyster;
            _head.Next = _tail;
            _head = _tail;
            count++;
        }
    }

    public void traverseList(Oyster node)
    {
        node = node.Next;
    }

    public void nodeDeletion( Oyster toBeDeleted, Oyster toDirect)
    {
        toDirect.Next = toBeDeleted.Next;
    }
} 

我不知道我是否完全理解你的代码(变量命名有点让我困惑),但让我试试看:

我看到你在遍历牡蛎集合,但你总是画同一个。

如果您根本不打算使用循环的索引,那么使用 for 循环有什么意义?

我认为你的问题可以通过解决每个位置的牡蛎来解决,基本上是这样的:

for (int i = _oysterSLL.Count; i > 1; --i)
{
    _oysterSLL.traverseList(_oysterSLL[i].moveAddress);
    spriteBatch.Draw(_oysterSLL[i].moveAddress.T2DrepresentativeImage, _oysterSLL[i].moveAddress.V2location, Color.White);
}

如您所见,在 draw 方法中,我现在使用索引变量 (_oysterSLL[i]) 来定位它包含的每个对象。

但是考虑到这一点,并且没有与 _oysterSLL 集合中的对象对应的代码,很难理解它的作用。