c#编写平台

起个什么名字不会重复 2017-08-09 05:00:21
我想做一个五子棋游戏平台,我开发界面。然后可以加载AI程序。可以实现人机互下或者机器博弈。
现在有一个问题想请教论坛大佬:我加载引擎后,如何获取AI程序的输出合适?

详细说明一下:
我提供平台:PlateForm
别人开发AI:ai_one,ai_two
在我开发的平台上,可以选择加载一个AI,这样人机互下。也可以加载两个AI,实现机器博弈。只要AI遵守我提供的通信协议即可。
...全文
506 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilikeff8 2017-08-22
  • 打赏
  • 举报
回复
另一种做法是用tcp socket通讯,定个端口,通讯协议自己定,和开发语言,是不是在同一台机器上,一点关系都没有
cheng2005 2017-08-22
  • 打赏
  • 举报
回复
引用 5 楼 qq_27041969 的回复:
[quote=引用 3 楼 wddw1986 的回复:] 楼主所说的AI不就相当于“插件”的概念吗,定义好接口就可以了,底层接口和插件接口都定义好,双方就可以互相调用了。
你说的这个方法需要ai的开发者和我的平台使用同一种语言,不太好。而且需要我考虑到各种情况给出接口,不如我直接自己定义几个命令方便。所以不太好用。但还是谢谢[/quote] 谁告诉你插件一定是同一种语言?接口的调用形式也有很多种
ilikeff8 2017-08-12
  • 打赏
  • 举报
回复
那你就用虚拟串口,定义好通讯协议,用串口收发命令
  • 打赏
  • 举报
回复
不不,你没搞明白我的问题。我编写的平台。然后启动外部程序(使用我的协议的人编写的ai,是一个简单的命令行程序),我的平台想办法截取ai的标准输出流,然后解析ai输出的命令。在平台上表现出来。
  • 打赏
  • 举报
回复
引用 3 楼 wddw1986 的回复:
楼主所说的AI不就相当于“插件”的概念吗,定义好接口就可以了,底层接口和插件接口都定义好,双方就可以互相调用了。
你说的这个方法需要ai的开发者和我的平台使用同一种语言,不太好。而且需要我考虑到各种情况给出接口,不如我直接自己定义几个命令方便。所以不太好用。但还是谢谢
  • 打赏
  • 举报
回复
听起来好麻烦。我的方法是,用c#的process类,当我加载引擎的时候 Process myProcess = new Process(); try { myProcess.StartInfo.UseShellExecute = false; myProcess.StartInfo.FileName = "test.exe"; myProcess.StartInfo.CreateNoWindow = true; myProcess.Start(); } catch (Exception e) { Console.WriteLine(e.Message); } 这样我可以通过myProcess向引擎发送命令和接收参数。 比如加载引擎后,我通过myProcess发送“new game” ai 接收到“new game”后,初始化所有参数。发送“ready”,通过myProcess接收到“ready”后,执行其他操作。 这就是我所说的,我自己定义的通讯协议。 这样,ai的编写者通过标准输入输出就可以跟我的界面实现通讯。 比如用c语言的话,直接通过scanf就可以接收到“new game”指令。通过printf就可以发送指令到平台。 但是这样做有一个缺点:我必须轮询的检查ai是否有输出。很占用资源。想请教一下大家有没有更好的方法。
cheng2005 2017-08-11
  • 打赏
  • 举报
回复
楼主所说的AI不就相当于“插件”的概念吗,定义好接口就可以了,底层接口和插件接口都定义好,双方就可以互相调用了。
白衣如花 2017-08-09
  • 打赏
  • 举报
回复
不就是回去下子的xy坐标吗?难道你还要获取子是方的还是圆的? 第一种输入:当前棋局所有下子的位置。 第二种输入:长连接,那边有存储之前的棋局,你只要传最近一步下子位置 输出:ai下子位置

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧