个Socket。 Socket通常用来实现客户方和服务方的连接。客户
程序可以向Socket写请求,服务器将处理此请求,然后通过Socket将结果返回给用户。
Socket通信机制提供了两种通讯方式:有联接和无联接方式,分别面向不同的应用需求。使用有联接方式时,通信链路提供了可靠的,全双工的字节流服务。在该方式下,通信双方必须创建一个联接过程并建立一条通讯链路,以后的网络通信操作完全在这一对进程之间进行,
通信完毕关闭此联接过程。使用无联接方式时其系统开销比无联接方式小,但通信链路提供了不可靠的数据报服务,不能保证信源所传输的数据一定能够到达信宿。在该方式下,通信双方不必创建一个联接过程和建立一条通讯链路,网络通信操作在不同的主机和进程之间转发进行。
在java中使用套接字相当简单,Java API为处理套接字的通信提供了一个类java.net.Socket。使得编写网络应用程序相对容易。JAVA支持流套接字(stream socket)和数据报套接字(datagram socket)。流套接字使用TCP(Trans
mission Control Protocol,传输控制协议)进行数据传输,而数据报套接字使用UDP(User Datagram Protocol,用户数据报协议)。
在Socket层实现的Java网络程序是严格同步的。从一台机器发送数据的操作要求对应一个从其他机器接受数据的操作。
2.2 JAVA工具
JDK
1) Java编译器
Java编译器将Java源代码文件编译成可执行的Java字节码。Java
源代码文件的扩展名为 .java,Java编译器把这种扩展名的文件编译成扩展名为.class的文件。源文件中的每个类在编译后都将产生一个class文件,这意味一个Java源代码文件可能编译生成多个class文件。
2) Java解释器
Java解释器对编译生成的字节码格式的可执行程序的运行提供支持,它是运行非图形Java程序的命令行工具。
3 程序的
设计思路和算法
3.1 人机博弈的要点
人机对弈的程序,至少应具备以下5个部分:
(1)某种在机器中表示棋局的方法,能够让程序知道博弈的状态。
(2)产生合法走法的规则,以使博弈公正地进行,并可判断人类对手是否乱走。
(3)从所有合法的走法中选择最佳的走法技术。
(4)一种评估局面优劣的方法,用以同上面的技术配合做出智能的选择。
(5)一个界面,有了他,这个程序才能用。
3.2 五子棋特点及规则
五子棋的娱乐性强、规则简单、易学、流行性广。普通人不需长时间专门训练即可自如行棋。因此极受大众欢迎。五子棋的规则为:
(1)棋盘 采用像围棋盘一样的15路或19路线的棋盘,在此采用19路的棋盘。
(2)下法 两人分别执黑白两色棋子。轮流在棋盘上选择一个无子的交叉点落子,无子的交叉点又被称为空点。
(3)输赢判断 黑、白双方有一方的五个棋子在横、竖或斜方向上连接成一线即为该方赢。
3.3 算法设计
3.3.1 博弈树的搜索过程
在以下讨论中,命名2个博弈者MAX和MIN。下面的任务是为MAX找最佳的移动。假设MAX先移动,然后2个博弈者轮流移动。因此,深度为偶数的节点,对应于MAX下一步移动的位置,称为MAX节点;深度为奇数的节点对应于MIN下一步移动的位置,称为MIN节点(博弈树的顶节点深度为0)。k层包括深度为2k和2k+1的节点。通
常用层数表示博弈树的搜索深度,他可以表示出向前预测的必须认识到搜索到终点是不可能的(除了在博弈快结束时),所以,常采用在有限范围搜索方法。这里使用启发式搜索。在启发式
搜索的过程中,关键的一步是如何确定下一个要考察的节点,在确定节点时只要能充分利用与
问题有关的信息,估计出节点的重要性,就能在搜索时选择重要性较高的节点,以利于博弈者以较快的速度求出最佳的棋步。
3.3.2 采用静态评估函数
这里用评估函数h(i)衡量每一个