Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# 如何为windows phone棋盘游戏编写简单的AI代码?_C#_.net_Windows Phone 7_Artificial Intelligence - Fatal编程技术网

C# 如何为windows phone棋盘游戏编写简单的AI代码?

C# 如何为windows phone棋盘游戏编写简单的AI代码?,c#,.net,windows-phone-7,artificial-intelligence,C#,.net,Windows Phone 7,Artificial Intelligence,大概是这样的: 我不知道如何编码,因为我只编码了非游戏应用程序。例如,在玩家做出动作后,你如何确定最佳动作?我不需要完美的动作,只需要足够的挑战 我不知道我是否必须扫描所有可能的移动,等等。在像图中所示的游戏中,可能的移动数量非常有限,对吗?所以我可以把它们都算出来。但我不确定哪一步更好,等等。在一个小而简单的游戏中,如tic tac toe,你可以建立一棵树,其中: 每个节点都是一个板位置 每个叶子节点都是一个完成的游戏,分数为+1表示X赢,-1表示O赢,0表示平局 每个子节点都是从其父节

大概是这样的:

我不知道如何编码,因为我只编码了非游戏应用程序。例如,在玩家做出动作后,你如何确定最佳动作?我不需要完美的动作,只需要足够的挑战


我不知道我是否必须扫描所有可能的移动,等等。在像图中所示的游戏中,可能的移动数量非常有限,对吗?所以我可以把它们都算出来。但我不确定哪一步更好,等等。

在一个小而简单的游戏中,如tic tac toe,你可以建立一棵树,其中:

  • 每个节点都是一个板位置
  • 每个叶子节点都是一个完成的游戏,分数为+1表示X赢,-1表示O赢,0表示平局
  • 每个子节点都是从其父节点合法移动的结果
然后,X正在搜索一个能使最小结果最大化的移动,知道O将搜索(在随后的回合中)一个能使最大结果最小化的移动,知道X将搜索(在随后的回合中)一个能

这是极小极大算法

在Tic-Tac-Toe中,树只能有9层深,如果你想变得光滑,你可以利用一些板对称性,并保持计算和数据结构的可管理性


请注意,对于更复杂的游戏,这将由于某种原因而失败(国际象棋是确定性的,但太大,无法以这种方式处理;双陆棋需要概率技术等),但许多方法都是这一主题的变体

在一个小而简单的游戏(如tic-tac-toe)中,您可以构建一棵树,其中:

  • 每个节点都是一个板位置
  • 每个叶子节点都是一个完成的游戏,分数为+1表示X赢,-1表示O赢,0表示平局
  • 每个子节点都是从其父节点合法移动的结果
然后,X正在搜索一个能使最小结果最大化的移动,知道O将搜索(在随后的回合中)一个能使最大结果最小化的移动,知道X将搜索(在随后的回合中)一个能

这是极小极大算法

在Tic-Tac-Toe中,树只能有9层深,如果你想变得光滑,你可以利用一些板对称性,并保持计算和数据结构的可管理性

请注意,对于更复杂的游戏,这将由于某种原因而失败(国际象棋是确定性的,但太大,无法以这种方式处理;双陆棋需要概率技术等),但许多方法都是这一主题的变体

+1。查看更多信息@Joan Venge,请注意,在简单的游戏中,让电脑玩家赢球很容易,但让电脑玩家以惊人的方式输球更难,也更有趣,所以玩家确实有战斗的机会。+1。查看更多信息@Joan Venge,请注意,在简单的游戏中,让电脑玩家赢球很容易,但让电脑玩家以惊人的方式输球要困难得多,也更有趣,所以玩家确实有战斗的机会。