Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试在不同的方法c中调用另一个GUI方法_C#_Events_User Interface_Methods - Fatal编程技术网

C# 尝试在不同的方法c中调用另一个GUI方法

C# 尝试在不同的方法c中调用另一个GUI方法,c#,events,user-interface,methods,C#,Events,User Interface,Methods,我在简洁地描述我要做的事情时遇到了一点困难,这损害了我寻找答案的能力。我会尽量明确我的问题,如果有人能给我一个建议,或者给我指明学习的方向,我将非常感激 我正在尝试为cardgame Dominion编程一个GUI版本,在这里玩不同的牌会产生不同的结果和选择。许多这类牌有相似的起始选择,例如从你的手牌中选择一张牌并将其扔掉/看着敌人的手牌,但不同的结束选择,例如升级那张被丢弃的牌/将被丢弃的牌交给其他玩家。在玩一张牌时,程序寻找唯一的数字卡代码,并开始执行该卡的特定代码 这里是我挂断电话的地方:

我在简洁地描述我要做的事情时遇到了一点困难,这损害了我寻找答案的能力。我会尽量明确我的问题,如果有人能给我一个建议,或者给我指明学习的方向,我将非常感激

我正在尝试为cardgame Dominion编程一个GUI版本,在这里玩不同的牌会产生不同的结果和选择。许多这类牌有相似的起始选择,例如从你的手牌中选择一张牌并将其扔掉/看着敌人的手牌,但不同的结束选择,例如升级那张被丢弃的牌/将被丢弃的牌交给其他玩家。在玩一张牌时,程序寻找唯一的数字卡代码,并开始执行该卡的特定代码

这里是我挂断电话的地方:

我希望有更通用的方法来监听用户在唯一卡代码中的输入,但我总是会出错。理想情况下,我可以做一些类似的事情

for(int i = 0; i < totalPlayers; i++)
{
    showEnemyHand(i);
}

在“buttonclicked”事件中,特别是扑克牌按钮。showEnemyHandint和thiefEffectint方法将等待用户输入,存储响应,然后直接返回调用它的for循环,但这并不像我最初希望的那么简单

我最痛苦的是甚至不知道我应该寻找什么。我一直在阅读有关事件处理和委托的内容,我不确定这是否是我需要的。有没有人能给我指出我需要学习的方向,或者给我一个我想解决的问题,这样我就可以更容易地找到它?当然,帮助我解决这个问题也会很感激的

非常感谢!
Jake

您的解决方案适用于基于命令行的游戏,适用于具有连续性/协同程序的语言,或者可能适用于多线程应用程序,其中showEnemyHand等会阻止用户输入。对于基于GUI的游戏,事件驱动的体系结构是最适合您的,所以原则上我建议您多了解它

但是如果你真的想用循环来实现,我建议你读一下和。一旦您理解了这些概念,您应该能够:

创建一个单独的线程来承载循环; 创建一个锁,该锁将阻止执行,直到用户输入某些内容为止(参见链接问题中的示例); 在循环和回调中使用该锁进行用户输入: 在循环的开始,你等待你的锁; 当用户输入您将使用事件处理程序检测到的内容时,请参阅您正在使用的特定GUI框架的文档,保存选择的操作并释放锁; 循环将自动继续,读取保存的操作并执行迭代,直到再次到达同一点并等待另一个用户输入。
无论这种方法比使用事件驱动逻辑编写规则更容易还是更难,都有争议。同样的道理,虽然我在这方面的经验较少,但我不能发表意见。不过,我给出的提示应该可以帮助您开始。

太好了。非常感谢。我不能说它是否能工作几天,但我会在它工作后分享我的结果。这听起来像是我要找的东西,谢谢。
for(int i = 0; i < totalPlayers; i++)
{
    thiefEffect(i);
}