gpt4 book ai didi

actionscript-3 - 在这个简单的例子中,如何思考 "Tell, don' t ask”?

转载 作者:行者123 更新时间:2023-12-01 04:20:05 33 4
gpt4 key购买 nike

在以下简单场景中,您将如何坚持“告诉,不问”原则(以下称为“原则”)?在俄罗斯方块游戏中,我有与以下示例相关的 Board、BlockGrid 和 Piece 类:

public class Board
{
private var fallingPiece:Piece;
private var blockGrid:BlockGrid;
...
public function moveFallingPiece(xDirection:int, yDirection:int):void
{
blockGrid.movePiece(fallingPiece, xDirection, yDirection);
}
}

一旦fallingPiece被放置在BlockGrid的最底行,它就不再是“fallingPiece”了。我是否正确,我没有违反以下原则?
if(blockGrid.getPiecePosition(piece).y == 0)
{
fallingPiece = null;
}

但这与我认为明显违反原则的这真的不同吗?
public function moveFallingPiece(xDirection:int, yDirection:int):void
{
if(blockGrid.getPiecePosition(piece).y > 0)
{
blockGrid.movePiece(fallingPiece, xDirection, yDirection);
}
else
{
fallingPiece = null;
}
}

我并不是假设我已经以正确的方式设计了这些类关系来处理该原则。如果那是我所缺少的,请就替代设计提出建议。

编辑,建议的解决方案:

我通过事件提出了“命令反馈”的答案。 Board 告诉 BlockGrid 移动一块。 BlockGrid 的 movePiece 方法根据结果调度 MOVED_TO 或 MOVE_FAILED 事件,Board 可以监听并使用这些事件来确定一块是否已停止下落。请不要犹豫,提供有关此解决方案的反馈。
public class Board
{
...
public function Board()
{
...
blockGrid.addEventListener(PieceMoveEvent.MOVE_FAILED, onPieceMoveFailed);
...
}

public function moveFallingPiece(xDirection:int, yDirection:int):void
{
blockGrid.movePiece(fallingPiece, xDirection, yDirection);
}

public function onPieceMoveFailed(event:MovePieceEvent):void
{
if(event.instance == currentlyFallingPiece && event.fromPosition.y != event.toPosition.y)
{
currentlyFallingPiece = null;
}
}

最佳答案

我认为,为了更好地遵循 Tell, Don't Ask 原则,当fallingPiece 到达它的休息点时,你应该让blockGrid 通知你的Board 类。在上述两种情况下,您都在询问 blockGrid 是否是块的 position.y == 0 以确定fallingPiece 是否应为空。相反,您希望 blockGrid 告诉 Board 类fallingPiece.y 已经达到0。

关于actionscript-3 - 在这个简单的例子中,如何思考 "Tell, don' t ask”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2215478/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com