java五子棋毕业设计方案整套

java五子棋毕业设计方案整套
java五子棋毕业设计方案整套

java五子棋毕业设计方案整套

1 引言

随着计算机技术的不断发展,网络技术的普及范围越来越广,网络能够提供的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。如今网络休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。

网络五子棋游戏是使用Java语言开发的一款游戏。它使用SOCKET建立连接,多线程处理数据,以及可嵌入网络浏览器的APPLET作为客户端,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易。通过对该软件的编写,还可以巩固学生对以上各种知识的掌握和理解。

2 JAVA语言概述

JAVA简介

JAVA是Sun Microsystem公司开发的编程语言,是一个简单,面向对象,分布式,解释性,强壮,安全,与系统无关,可移植,高性能,多线程和动态的语言。

JAVA的基本特点

(1) 简单性

Java与C++语言非常相近,但Java比C++简单,它抛弃了C++中的一些不是绝对必要的功能,如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。 Java实现了自动的垃圾收集,简化了内存管理的工作。

(2) 面向对象

Java提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法,很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子类可以使用或重新定义父类或超类所提供的方法,从而既实现了代码的复用,又提供了一种动态的解决方案。

(3) 多线程

多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现网络上的实时交互操作。

(4) 分布性

Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便的访问其他对象。

(5) 体系结构中立

Java是一种网络语言,为使Java程序能在网络的任何地方运行,Java 解释器生成与体系结构无关的字节码结构的文件格式。为了使Java的应用程序能不依赖于具体的系统,Java语言环境还提供了用于访问底层操作系统功能的类组成的包,当程序使用这些包时,可以确保它能运行在各种支持Java的平台上。

(6) 安全性

用于网络、分布环境下的Java必须要防止病毒的入侵,Java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。

Java中输入/输出流概念

过滤流DataInputStream 和DataOutputStream 除了分别作为FilterInputStream 和FilterOutputStream的子类外,还分别实现了接口DataInput 和DataOutput。接口DataInput 中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数,如readBoolean()、 readInt()、readLine()、readFully()等。接口DataOutput 中定义的方法主要是向流中写入基本类型的数据或者写入一定长度的字节数组,如writeChar()、writeDouble()。 DataInputStream可以从所连接的输入流中读取与机器无关的基本类型数据,用以实现一种独立于具体平台的输入方式;DataOutputStream 可以向所连接的输出流写入基本类型的数据。

Socket 机制

Socket是面向客户/服务器模型设计的,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。

Socket通常用来实现客户方和服务方的连接。客户程序可以向Socket写请求,服务器将处理此请求,然后通过Socket将结果返回给用户。

Socket通信机制提供了两种通讯方式:有联接和无联接方式,分别面

向不同的应用需求。使用有联接方式时,通信链路提供了可靠的,全双工的字节流服务。在该方式下,通信双方必须创建一个联接过程并建立一条通讯链路,以后的网络通信操作完全在这一对进程之间进行,通信完毕关闭此联接过程。使用无联接方式时其系统开销比无联接方式小,但通信链路提供了不可靠的数据报服务,不能保证信源所传输的数据一定能够到达信宿。在该方式下,通信双方不必创建一个联接过程和建立一条通讯链路,网络通信操作在不同的主机和进程之间转发进行。

在java中使用套接字相当简单,Java 。使得编写网络应用程序相对容易。JAVA支持流套接字(stream socket)和数据报套接字(datagram socket)。流套接字使用TCP(Transmission Control Protocol,传输控制协议)进行数据传输,而数据报套接字使用UDP(User Datagram Protocol,用户数据报协议)。

在Socket层实现的Java网络程序是严格同步的。从一台机器发送数据的操作要求对应一个从其他机器接受数据的操作。

JAVA工具

JDK

1) Java编译器

Java编译器将Java源代码文件编译成可执行的Java字节码。Java源代码文件的扩展名为 .java,。源文件中的每个类在编译后都将产生一个class 文件,这意味一个Java源代码文件可能编译生成多个class文件。

2) Java解释器

Java解释器对编译生成的字节码格式的可执行程序的运行提供支持,它是运行非图形Java程序的命令行工具。

3 程序的设计思路和算法

人机博弈的要点

人机对弈的程序,至少应具备以下5个部分:

(1)某种在机器中表示棋局的方法,能够让程序知道博弈的状态。

(2)产生合法走法的规则,以使博弈公正地进行,并可判断人类对手是否乱走。

(3)从所有合法的走法中选择最佳的走法技术。

(4)一种评估局面优劣的方法,用以同上面的技术配合做出智能的选择。

(5)一个界面,有了他,这个程序才能用。

五子棋特点及规则

五子棋的娱乐性强、规则简单、易学、流行性广。普通人不需长时间专门训练即可自如行棋。因此极受大众欢迎。五子棋的规则为:

(1)棋盘采用像围棋盘一样的15路或19路线的棋盘,在此采用19路的棋盘。

(2)下法两人分别执黑白两色棋子。轮流在棋盘上选择一个无子的交叉点落子,无子的交叉点又被称为空点。

(3)输赢判断黑、白双方有一方的五个棋子在横、竖或斜方向上连接成一线即为该方赢。

算法设计

博弈树的搜索过程

在以下讨论中,命名2个博弈者MAX和MIN。下面的任务是为MAX找最佳的移动。假设MAX先移动,然后2个博弈者轮流移动。因此,深度为偶数的节点,对应于MAX下一步移动的位置,称为MAX节点;深度为奇数的节点对应于MIN下一步移动的位置,称为MIN节点(博弈树的顶节点深度为0)。k层包括深

度为2k和2k+1的节点。通常用层数表示博弈树的搜索深度,他可以表示出向前预测的必须认识到搜索到终点是不可能的(除了在博弈快结束时),所以,常采用在有限范围搜索方法。这里使用启发式搜索。在启发式搜索的过程中,关键的一步是如何确定下一个要考察的节点,在确定节点时只要能充分利用与问题有关的信息,估计出节点的重要性,就能在搜索时选择重要性较高的节点,以利于博弈者以较快的速度求出最佳的棋步。

.2 采用静态评估函数

这里用评估函数h(i)衡量每一个叶节点位置的“值”。一个最佳首步可以由一个最小最大化过程产生。假设轮到MAX从搜索树的叶节点中选取,他肯定选择拥有最大值的节点。因此,MIN叶节点的一个MAX节点双亲的倒推值就等于叶节点的静态评估值中的最大值。另一方面,MIN从叶结点中选取时,必须选取最小的节点(即最负的值)。既然如此,MAX叶节点的MIN双亲节点被分配一个倒推值,他等于叶节点静态评估值的最小值。在所有叶节点的父节点被赋予倒推值后,开始倒推另一层,假定MAX将选择有最大倒推值的MIN的后继节点,而MIN会选择有最小倒推值的MAX后继节点。继续逐层对节点评估,直到最后开始节点的后继者被赋予倒推值。MAX将选择有最大倒推值的节点作为他的首步。整个过程的有效性基于这样的假设。用整个棋盘估值的函数h(n)为静态估值函数。设想当前棋局S为轮到计算机方下棋(用□表示),任选一空点作为计算机方的下棋位置(可有若干种选择),接着考虑在此情况下游戏者一方下棋的棋局(用O表示);从某一“O”棋局出发,任选一空点作为游戏者一方的落子处(又有若干种选择),再次形成计算机方下棋的“ □”棋局;依此类推,这样可形成一棵以S为根结点的博弈树,该树以O棋局为第2层子结点,以棋局为第3层子结点等等。如果继续向前搜索,可形成多层子结点,现在以向前搜索3层子结点为例来说明极大极小值的过程。对第3层子结点的某一棋局n,

求出其估计值h(n),假设有一博弈树已形成,如图1所示,h(n)的值由各结点旁的数值给出。

根据极小极大化分析法,先计算第3层子结点h(n)值,然后第2层子结点的估计值取他的各后继子结点的极小值,根结点的估计值取他的各子结点的极大值。这个取得最大估计值的子结点即为从S出发的计算机方的最佳落子方案。棋盘上某一行、某一列或某一对角线为一路,这里使用的棋盘为19行19列,因此,行和列方向上共有19+19=38路;从左下到右上方向的对角线有37路,同样,从左上到右下方向的对角线也有37路。但对于五子棋来说必须在一条直线上有连续五个棋子才能赢。因此,在对角线上就可以减少8路。所以,整个棋盘路的总数为:

对某一棋局n,第i路得分:h(i)=h

c (i)-h

m

(i)。

其中:h

c (i)为计算机方在第i路估计值得分,h

m

(i)为游戏者一方在第i路得分。

对的得分规则作如下说明。规则中+代表一空点;o代表对方棋子;*代表有计算机方棋子;++表示连续2点为空点;+++*++表示连续3个空点接一个计算机方棋子,再接两空点。某一规则+表示如在i路上有棋子构成形如+++*++则h

c

(i)=30。其他规则表示相同。

在系统中使用的主要估值规则如下:

由对称性可知++**+++和+++*++的估值相同,同理可得其他具有这样对称性的估值都认为是相等的。在连续两路上出现(3)的情形

=>h

c (i)=5 000,一路出现(3),另外一路出现(4)=>h

c

(i)=5 000。所以在整个棋

盘上的总估值为:

为了增加系统的智能化也可以添加其他的一些规则。

.3 遗传算法优化估值函数

在博弈程序的几大主要部分里,估值函数是与具体的棋类知识紧密结合的一部分。可以说估值函数在很大程度上决定了博弈程序的棋力高低。上面给出的估值是根据实际经验给出的。如何对上述的估值进行优化呢?下面采用遗传算法来改进静态估值。遗传算法的估计值在很大的程度上也依赖于实施者的经验。但是可以利用一些高水平名局棋谱或同其他博弈程序对弈,看使用某一组

参数时取胜的机率有多大来进行较验。经过几次的试验一般就可以得到较好的静态估值。传统的算法一般只能维护一组较好的参数。遗传算法同传统的算法相比可以同时维护几组较好的参数,通过向其中添加一组新参数,通常是将几组老参数中选出的值组合在一起做一点变化。然后同几组老的参数比较孰优孰劣,将最差的一组从中去除。这里面较重要的操作是交叉和变异操作。交叉通过随机交换父代个体的信息来继承已有参数中的优良内容;变异通过随机改变个体中的基因而增加种群的多样性,避免优化的因局部震荡而失败。

可以将遗传算法的优化估值参数的过程用图2表示。

遗传算法的优点:

(1)由于搜索算法是从问题的解开始的,而不是一组参数。所以被局部震荡干扰导致求最优解失败的可能性大大减小。

(2)此算法能将搜索重点集中于性能高的部分,能较快地求出最佳的参数。

在使用中应当注意的问题如下:

种群数目这是影响算法性能的重要因素。种群数目过大,会导致运算时间太长,结果收敛缓慢;种群数目太小则可能导致算法精度过低,甚至停止不前。

交叉概率这个用于控制交叉操作的频度。此概率过大会导致种群中的个体更新过快,较优的个体不能稳定的保持和传递信息;此概率过小则会使优化的过程缓慢甚至停止不前。

变异概率这个概率用于控制产生变异个体的频度,目的是防止整个种群中任意参数的几个基因保持不变。一般使用一个很小的概率即足以达成此任务;概率太大则遗传信息无法稳定传递,从而使优化过程变成随机过程,失

去确切的方向而导致失败。

4 程序实现

程序设计思路

实现一个用户可以Internet 上任何地方的不同机上进行游戏,使用多线程和网络套接字数据流的分布式五子棋游戏,根据要完成的功能,本程序采用多客户服务方式。服务器创建服务器Socket ,始终处于监听等待状态。客户端是动作的发起者,何时发出申请由客户端决定。客户端向服务器发出申请,服务器给予响应,客户端发出申请后立即可从Socket 通道去取服务方的结果。服务器接受两个客户端连接后开始一个线程,不断接受客户端发来的数据,并把处理后的数据传送给客户端。服务器可以创建任意多局(图3-1)。

在对服务器与客户端的设计开发之前,为了使开发方便,将服务器与客户端之间用以通信的变量规定好。通过编写一个接口GameConstant(),在其中定服

游戏局1 游戏局N

…… 客户

客户

客户客户…… …… 图3-1 系统框架

义各个常量的值:

public static int PLAYER1 = 1;

public static int PLAYER2 = 2;

public static int PLAYER1_WON = 1;

public static int PLAYER2_WON = 2;

public static int DRAW = 3;

public static int CONTINUE = 4;

public static int STOP = 100;

public static int GAMEPORT = 8000;

服务器和客户端在设计时继承接口GameConstant()里面的所有数据。

服务器的设计与实现

为了使界面友好,服务器使用图形组件,创建成一个可以显示游戏信息的框架。在框架中创建一个包含文本区的滚动窗格,并在文本区显示游戏信息(图3-2)。

图3-2 服务器界面

Interface of Game-server

要建立服务器,需要创建一个服务器Socket,并把它附加到一个端口上,服务器通过这个端口监听连接请求。端口标识Socket上的TCP服务。,引入包后通过实现一个ServerSocket的实例就可以创建一个服务器Socket,并把它附加到一个端口(GAMEPORT)上:

ServerSocket serverSocket = new ServerSocket (GAMEPORT);

然后,服务器使用下列语句开始监听连接请求:

Socket player1 = ();

Socket player2 = ();

服务器开始等待,直到客户提出连接请求。连接建立后,服务器通过数据输入流从客户端接收信息,并且通过数据输出流把相应的标记发送给客户端。

new DataOutputStream(()).writeInt(PLAYER1);

new DataOutputStream(()).writeInt(PLAYER2);

当客户端满足开局条件时,就开启一个线程处理客户之间数据,同时继续监听其它客户端的连接请求。

多线程是Java的一个特点,多线程可以使程序反应更快、交互性更强,并能提高执行效率。创建一个新的线程的生命周期如下状态: 新建,就绪,运行,阻塞,死亡。

在Java中,提供了多种控制线程的方法,在服务器中用到的主要以下几种:

public void run ()

Java运行系统调用这个方法来执行线程。在用户线程类中,必须覆盖这个方法并且提供线程执行的代码。

public void start ()

该方法启动线程,它引起对run()方法的调用。客户类中的可运行对象调用该方法。

服务器程序采用类HandleGame继承Thread类来实现对线程的调用,同时对run ()方法覆盖。

以下是HandleGame () 类里面主要的数据域和方法:

private char[][] cell:Char类型数组用来记录玩家的标记。

private DataInputStream isFromPlayer1;

private DataOutputStream osToPlayer1;

private DataInputStream isFromPlayer2;

private DataOutputStream osToPlayer2;

:四个数据流用来实现与两个玩家之间信息的传递。

public HandleGame (Socket player1, Socket player2):

构造函数,两个参数用以接收传递过来的Socket对象。

public void run():对继承Thread类中的run ()方法进行覆盖。

private boolean isFull() :判断是否满格。

private boolean isWon(int row,int column,char token):

判断新标记的单元格是否使一方获胜。

游戏局一旦建立起来,服务器便于工作交替地从客户端那里接收数据。从客户端接收到数据后,服务器判断游戏状态,并根据结果进行相关操作,直至游戏结束。

客户端的设计与实现

客户端负责与玩家的交互。因此要创建一个界面,包括一个20*20的下棋区域,当玩家选定单元格或接收到别的玩家选定的单元格时,用不同的标记显示;两个显示游戏名称和游戏状态的标签和两个菜单栏上的按键用以进行控制,如图3-3:

图3-3 客户端界面

Interface of Game-client

这里客户程序设计成一个Java Applet,用户可以在Web浏览器里运行。

,浏览器调用init ()方法对界面进行初始化。点击Start时开启一个线程和服务器连接,通过数据流进行数据交换。

connectToServer = new Socket("localhost", GAMEPORT);

isFromServer = new DataInputStream(());

osToServer = new DataOutputStream(());

下面是类GameClient的主要方法和数据:

public class GameClient extends JApplet

implements Runnable, ActionListener, GameConstants

{

private boolean myTurn = false; :标记是否轮到自己下棋

private char myToken = ' '; :标记自己的棋子

private char otherToken = ' '; :标记对手的棋子

private Cell[][] cell = new Cell[20][20]; :生成20*20个单元格

private int rowSelected; :记录所选单元格的行

private int columnSelected; :记录所选单元格的列

private boolean continueToPlay = true;

private boolean waiting = true;

:记录游戏进行中的状态

public void init():初始化用户界面,打开网页时由浏览器调用

public void actionPerformed(ActionEvent e):

覆盖ActionListener接口里面actionPerformed ()方法,用来处理用户点击菜单栏引起的操作。

public void run()

覆盖Runnable接口里的run ()方法,用以对游戏过程中的数据传输,处理,控制。

}

在客户程序的类中,由于它继承了Applet类,所以不能再通过声明Thread 类的扩展来实现,只能通过实现Java提供的一个Runnable接口,进行线程的创建和运行。Runnable接口的实现是非常简单的,它只包含run ()方法,使用时只要将该方法覆盖。

从游戏设计来看,单元格是处理鼠标点击事件和显示标记的GUI对象。在这里使用的是面板,设置单元格Cell为JPanel的子类。将Cell类声明为内部类,可以直接使用GameClient类中定义的变量与方法,使程序简洁明了。

Cell类中包含以下主要数据和方法:

public class Cell extends JPanel implements MouseListener

{

private int row;

private int column;

private char token = ' ';

public Cell(int row, int column){}:构造函数

public void paintComponent(Graphics g){}:

Graphics对象g是由Java运行系统自动创建,这个对象控制信息的绘制方式。可以使用定义在Graphics类中的多种画法绘制字符串的

几何图形。

public void mouseClicked(MouseEvent e){}

public void mouseExited(MouseEvent e){}

public void mouseEntered(MouseEvent e){}

public void mouseReleased(MouseEvent e){}

public void mousePressed(MouseEvent e){}

:接口MouseListener中的方法。

}

程序的运行

首先将编写好的程序使用Java编译器编译,生成以class为扩展名的类文件,然后使用Java解释器分别运行服务器和客户端。客户端发出连接,服务器接收后开启线程对游戏进行控制,游戏结束时关闭线程。具体流程如图3-4所示:

玩家一

1.初始化用户界面

2.向服务器请求连

接,并从服务器获

知所用棋子的标

记。

3.从服务器得到开始

标志。

4.等待玩家标记单元

格,并向服务器发

送单元格的行号和

列号。

5.从服务器接收游戏

状态。

6.如果状态是WIN,显

示是胜者,如果玩

家二获胜,接收玩

家二的最后一步走

棋信息。中断循环。

7.如果状态是DRAW,

显示游戏结束,中

断循环。

8.如果状态是

CONTINUE,接收玩

家二选定的单元格

的行号和列号,标

记玩家二选定的单

元格。服务器

创建一个服务器套接字。

接收第一个玩家的连接请求,并且

通知玩家他是玩家一,使用标记

“X”。

接收第二个玩家的连接请求,并且

通知玩家他是玩家二,使用标记

“O”。启动对局线程。

处理对局:

1.告诉玩家一开始游戏。

2.接收玩家一选定单元格的行和

列。

3.判断游戏状态(STOP,WIN,

DRAW,CONTINUE)。如果玩家一

退出,向玩家二发送状态

(STOP),退出。

4.如果玩家一获胜,给两个玩家

都发送状态(PLAYER1_WON),

并且向玩家二发送玩家一的走

棋信息。退出。

5.如果状态是CONTINUE,通知玩

家二轮他走棋,并且向玩家二

发送玩家一最新选定单元格的

行和列。

6.接收玩家二选定的单元格的行

和列。

7.如果玩家二退出,向玩家一发

送状态(STOP),退出。

8.如果玩家二获胜,给两个玩家

都发送状态(PLAYER2_WON),

并且向玩家一发送玩家二的走

棋信息。退出。

9.如果状态是CONTINUE,

发送状态,并且向玩家一发送

玩家二最近选定的单元格的行

和列。

玩家二

1.初始化用户界面

2.向服务器请求连接,

并从服务器获知所用

棋子的标记。

3.从服务器接收游戏状

态。

4.如果状态是WIN,显示

是胜者,如果玩家一

获胜,接收玩家一的

最后一步走棋信息。

中断循环。

5.如果状态是

CONTINUE,接收玩家

一选定的单元格的行

号和列号,标记玩家

一选定的单元格。

6.等待玩家标记单元

格,并向服务器发送

单元格的行号和列

号。

图3-4 运行流程

Flow Chart

5 小结

随着计算机和网络技术的不断发展,信息技术给人们带来的帮助越来越大,单独一台计算机已经不能满足人们的需求,网络正在成为大多数人群生产、生活中密不可分的一部分。Java作为一种分布式和可移植的计算机语言,在网络软件开发上有着特别的优点。它开发方便、快捷,安全性高,对以往复杂的功能,尤其是网络通信等方面,实现起来简洁明了,在网络编程领域有着巨大的发展潜力。在当今网络经济飞速发展的时代,Java技术的平台无关性、可重用性、模块化等特点大大减少了重复劳动,无论是开发用于Internet浏览的网站还是功能复杂的网络应用系统,Java都可以提供有力的支持。相信只要合理地利用Java技术,必定可以在电子商务、大型网站建设中发挥日益重要的作用。

JAVA课程设计 五子棋

攀枝花学院课程业设计 五子棋 学生姓名: 学号: 所在院(系):数学院计算机学院专业:信息与计算科学指导教师:讲师 二〇一四年六月 攀枝花学院教务处制

攀枝花学院本科学生课程设计任务书 注:任务书由指导教师填写。

摘要 五子棋作为一类棋类竞技运动,现在很流行,很多人把它作为一类开发智力的一种游戏,锻炼人的思维。这次课题主要是完成人机对战,在对战中电脑根据人的思维做出相应的反应,电脑对战中通过深度的搜索,使得自身有更大的胜算,估值计算也是一种方法,可以提高电脑的智能度。分析模块中影响智能的因素也不少,通过节点比较与节点连接后的结果做出估计提高智能,了解递归算法、电脑学习等对此有很大帮助。算法是程序的灵魂,一旦算法正确那么程序将很好。不同的人工智能将会有不同的帮助,多去了解将更能提高智能程度。五子棋是我国的一门文化,这将使得它更受世界人们的欢迎。有助我国文化发展。 关键词五子棋,智能,算法,模块,人机对战

目录 1 需求分析 (1) 1.1需求来源 (1) 1.2设计目的 (1) 2 功能需求分析 (1) 2.1功能需求 (1) 3 设计与实现 (2) 3.1设计思想 (2) 3.2系统模块结构 (2) 3.3流程图 (2) 4 概要设计 (4) 4.1抽象数据类型定义 (4) 4.2程序包含模块 (4) 4.3模块间关系 (4) 4.4系统功能实现 (4) 5 模块设计 (5) 5.1主界面模块 (5) 5.2选择模块 (5) 5.3判断模块、 (5) 5.4显示模块 (5) 参考文献 (9)

1 需求分析 1.1需求来源 计算机在我们的生活中有越来越重要的角色,我们也越来越离不开计算机,计算机带给我们许多便利,学习好计算机知识已经是必不可少的一项技能了。特别是电子商务、电子邮件等,人工智能现在的热点方向,人们感叹计算机的高效是也感叹自己的聪明,人工智能现在是很好的以方面。 1.2设计目的 该软件为用户提供一个在Windows系统上运行的五子棋游戏小系统。应达到的目的是:建立人机对战的模块,可以机器思考如何应对。已达到提高智力的效果设计出五子棋的游戏界面,创建对象可以在地图中站位,在每一步后计算机会自己运算自己的下一步,任何一方不可以越界,当一方达到五子是判断谁是胜利者,在过程中尽量使得游戏智能程度更高。 2 功能需求分析 2.1功能需求 现在研究五子棋的算法已经很多了,比较经典的有递归、二叉树等,这也是很基础的,不同算法要求也不同,要求的能力也不同,每一种算法都是使得程序清晰明白,当五子相连就算胜利。故我们要理解中间过程。 每个代码实现功能也是不同的,有的是判断,有的是理解,有的是更好知道程序,程序在执行时我们可以知道哪里出错。哪里会有问题,修改便利。、在错误中学习,加强自己的基础知识与算法的能力。

五子棋报告-java

XXXX大学 XX学院 课程设计报告 课程名称:面向对象程序设计 题目名称:五子棋游戏设计 学生姓名: 专业班级: 指导教师:任晓强

一、课程设计目的与任务(四号、宋体、加黑、顶格) (1)掌握Java编程、面向对象的基础知识。 (2)较熟练地编写Java应用程序Application。 (3)了解Java的常用标准类库、编程技巧、异常处理。 (4)联系已学过的内容,巩固所学的理论,增强独立工作能力。(5)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。 (6)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。 课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。 二、课程设计内容 1本设计题目的主要内容 设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能: 1.选择落子的先后顺序 2.重置棋盘 3.刷新重新开始 4.退出提示 并且规定退出者判为负,但退出过程中要有提示。以防不小心点错了。 最后判断某一方是否为五子连珠。 实现一个简单的多用户五子棋的游戏程序,包括如下两个界面 (1)选择对弈桌(执黑、执白)。 (2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负); 2 设计思想与程序构架

程序流程图 程序的功能分配 a. 棋盘的绘制 public void draw_qipan(Graphics G) 添加按钮 Button b1=new Button("开始"); Button b2=new Button("重置游戏"); Label lblWin=new Label(" "); Checkbox ckbHB[]=new Checkbox[3]; Button exist = new Button("退出"); public void init(){ ckbHB[0]=new Checkbox("执白",ckgHB,false); ckbHB[1]=new Checkbox("执黑",ckgHB,false); ckbHB[2]=new Checkbox("观看",ckgHB, false); } c. 鼠标棋子的触发事件 public void mouseClicked(MouseEvent e) { Graphics g=getGraphics(); int x1,y1; x1=(); y1=(); if ()<20 || ()>300 || ()<20 || ()>300) {

c++五子棋课程设计报告

福建农林大学计算机与信息学院 课程设计报告 课程名称:面向对象程序设计课程设计 课程设计题目:五子棋 姓名: 系:计算机 专业:软件工程 年级: 学号: 指导教师: 职称: 年月日

福建农林大学计算机与信息学院计算机类课程设计报告结果评定

目录 1.设计目的 (4) 2.设计要求 (4) 3.设计方案 (4) 4.设计内容 (7) 4.1系统的主要结构和类结构 (7) 4.2 (2)五子棋类的结构 (7) 4.3⑶系统工作流程介绍.................................................... 7错误!未定义书签。⑷类的介绍. (8) 4.5 (5) 各个模块的介绍 (8) 4.6 (6)程序运行图示 (14) 5.总结 (16) 参考文献 (17)

(a)1.设计目的 (1)加深我对面向对象程序基本的理解和掌握。 (2)熟练掌握基本流程图的绘制。 (3)熟练visio的一些操作方法。 (4)能够在调试程序中快速发现并排除程序中的错误。 (5)提高面向对象程序语言解决实际中的问题的能力。 (b)2.设计要求 五子棋是玩家在游戏棋盘上逐个输入黑子或白子的坐标,因此游戏要求在DOS界面生成一个可供操作的棋盘。通过输入坐标完成对应落子情况,在输入过程中判断落子是否正确、是否有一方胜利等情况。编写代码可以在VC6.0下编译通过。游戏要能实现五子棋游戏的简单操作。程序中要体现面向对象思想。 (c)3.设计方案 (必须包含系统功能说明、用例图和类图) 一、用例图 落子 基于用户的用例图

步数用例图 系统用例图 1)输出棋盘界面菜单及图像2)开始进入控制3)黑白棋正确输入格式控制4)判断黑白输赢控制5)正确计数对羿步数及下一步所要走的棋盘界面

五子棋(JAVA版)实习报告及原代码

实习报告 课程名称信息系统认知实习实习题目java五子棋专业 班级 学号 学生姓名 实习成绩 指导教师 2010年1月 前言

摘要 五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏。主要完成了人机对战和玩家之间联网对战2个功能。网络连接部分为Socket编程应用,客户端和服务器端的交互用Class Message定义,有很好的可扩展性,客户端负责界面维护和收集用户输入的信息,及错误处理。服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户列表。在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高电脑AI方案,如递归算法、电脑学习等。算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。 1引言 1.1课题背景 五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为连珠,英译为Renju,英文称之为Gobang或FIR(Five in a Row 的缩写),亦有连五子、五子连、串珠、五目、五目碰、五格等多种称谓。 五子棋起源于古代中国,发展于日本,风靡于欧洲。对于它与围棋的关系有两种说法,一说早于围棋,早在“尧造围棋”之前,民间就已有五子棋游戏;一说源于围棋,是围棋发展的一个分支。在中国的文化里,倍受人们的青睐。本世纪初五子棋传入欧洲并迅速风靡全欧。通过一系列的变化,使五子棋这一简单的游戏复杂化、规范化,而最终成为今天的职业连珠五子棋,同时也成为一种国际 比赛棋。 Java语言是当今最为流行的程序设计语言之一作为一门非常优秀和极为健壮的编程语言,它同时具有的面向对象,与平台无关,分布式应用,安全,稳定和多线程等优良的特征,使用Java语言,不仅可以开发出功能强大的大型应用程序,而且Java语言本身突出的跨平台的特性也使得它特别适合于Internet上的应用开发,可以这样说,Java的出现使得所开发的应用程序“一次编写,处处可用”的 实现成为了可能。 1.2本课题研究的意义 近来随着计算机的快速发展,各种各样的电脑游戏层出不穷,使得我们能有更多的娱乐项目,而棋类游戏能起到锻炼人的思维和修身养性的作用,而且棋类游戏水平颇高,大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表;其它像围棋的“手淡”、象棋的“将族”

五子棋课程设计报告

单 位 分院(系) 专 业 学 号 学生姓名 指导教师 完成日期 2011 年 05 月 日 摘 要 五子棋的历史:五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代 的传统黑白棋种之一.发展于日本,流行于欧美.容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性. 五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏.有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的.在上古的神话传说中有“女娲造人,伏羲做棋”一说,《增山海经》中记载:“休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵.”李善注引三国魏邯郸淳《艺经》中曰:“棋局,纵横各十七道,合二百八十九道,白黑棋子,各一百五十枚”.这段虽没明讲是何种棋类,但至少知道远古就以漂亮的石头为棋子.因而规则简单的五子棋也可能出自当时,并是用石子作棋子.亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来. 程序说明:本程序是一款棋类益智游戏程序,是用WIN-TC 编写在WINDOWS 系统下运行的娱乐游戏.本程序可以实现人人对战,操作采用键盘上的上下左右键控制棋子的上下左右移动,由空格键控制下棋,双方都可通过ESC 键终止游戏. 石家庄铁道大学课程设计 五子棋 课程设计题目

游戏开始后,红、白双方轮流下棋,程序会根据双方下棋的先后顺序自动显示不同颜色的棋子,提示当前下棋的棋手,任何一方由五子连成一线时,游戏结束,结束时会显示对战双方胜负情况. 关键词:五子棋游戏应用程序,C语言,图形函数 目录 第1章选题的意义2 意义2 设计思路 2 系统的基本要求3 第1章选题的意义 意义 通过游戏过程增加编程的兴趣,提高编程水平.编制该程序我对以下的知识点进行的巩固和掌握:1.数组元素为结构体的数组应用.2.全局变量应用.3.按键的处理.4.数组元素与蛇、食物的对应关系.5.图形方式等等.加深对所学知识的理解与掌握,增强自己对所学知识解决实际问题的能力,为以后的程序开发打下基础. 设计思路 棋盘设计为18×18格,初始状态光标在棋盘的中央,玩家1先走,轮流落子,当一方连成五子或下满棋盘时,游戏结束(连成五子的一方获胜,下满棋盘为和棋).当游戏一方胜利后显示胜利信息.从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格上的状态,共有三种情况,分别是0代表空格,1代表白棋,2代表黑棋.这样程序的主要工作是接收棋手按键操作,棋手用Up、Down、Left、Right控制光标移动,空格键表示落子.一旦接收到空格键,说明棋手落子,先判断是否是有效位置,也就是说已经有棋子的位置不能重叠

五子棋-Java课程设计

《面向对象程序设计》 课程设计报告 实验时间:2010年10月26日 实验班级:********************** 实验报告总份(片)数: 1 份(片) 实验指导老师:***** ******* 设计小组 湖南省吉首市吉首大学 课程设计报告 简单的游戏——五子棋 小组成员(姓名、学号): **(组长)** ** ** ** ** 一、实验分工

二、开发环境(实验编译以及测试环境) 硬件环境: CPU:Intel 奔腾双核E5200 主频2.5GHz 内存:2G 软件环境: 操作系统:Windows 7 编程环境JDK7.0 开发工具:Eclipse SDK 三、使用环境(用户运行环境) 硬件环境: CPU主频在500MHZ以上,内存在128M以上 软件环境: JAVA运行环境+ Windows XP或Windows 2000 以上操作系统 目录 第一章总体设计.............................................................................................................................. 1 1.1设计的目的.......................................................................................................................... 1 1.2本系统的主要功能.............................................................................................................. 1 1.3系统包含的类及类之间的关系。...................................................................................... 1 1.4 Java源文件及其功能......................................................................................................... 2 1.5 项目构建思路..................................................................................................................... 2第二章模块功能介绍.................................................................................................................. 12 2.1主类Chess...................................................................................................................... 12

人工智能课程设计(五子棋)解读

《人工智能导论》课程报告 课题名称:五子棋 姓名: X X 学号:114304xxxx 课题负责人名(学号): X X114304xxxx 同组成员名单(学号、角色): x x1143041325 XXX1143041036 指导教师:张建州 评阅成绩: 评阅意见: 提交报告时间:2014年 1 月 9 日

五子棋 计算机科学与技术专业 学生XXX 指导老师张建州 [摘要]人类之所以不断在进步,是因为我们人类一直不断的在思考,五子棋游戏程序的开发符合人类进步也是促进人类进步的一大动力之一。五子棋游戏程序让人们方便快捷的可以下五子棋,让人们在何时都能通过下棋来提高逻辑思维能力,同时也培养儿童的兴趣以及爱好,让孩子更加聪明。 同时,五子棋游戏程序的开发也使得五子棋这个游戏得到了广泛的推广,让世界各地的人们知道五子棋,玩上五子棋,这已经不是局限。五子棋游戏程序使得越来越多的人喜欢上了五子棋,热爱下五子棋,它是具有很好的带动性的。 关键词:五子棋进步思考

目录 《人工智能导论》课程报告 0 1 引言 (3) 1.1五子棋简介 (3) 1.2 五子棋游戏的发展与现状 (3) 2 研究问题描述 (4) 2.1 问题定义 (4) 2.2 可行性研究 (4) 2.3 需求分析 (5) 2.4 总体设计 (5) 2.5 详细设计 (6) 2.6编码和单元测试 (6) 3 人工智能技术 (6) 4 算法设计 (7) 4.1α-β剪枝算法 (7) 4.2极大极小树 (7) 4.3深度优先搜索(DFS) (8) 4.4静态估值函数 (9) 5 软件设计和实现 (9) 5.1 数据结构定义 (9) 5.2 程序流程图 (17) 6 性能测试 (18) 6.1 程序执行结果 (18) 7 总结 (21) 参考文献 (21)

Java五子棋毕业设计论文

摘要 人工智能是一门正在迅速发展的新兴的,综合性很强的交叉科学。它与生物工程、空间技术一起被并列为二十一世界三大尖端技术。它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。目前各发达国家都把人工智能作为重点项目,列入本国的高科技发展计划当中,投入巨大的人力和物力。 计算机人机对弈也是其中之一。作为人智能研究的一个重要分支,计算机博弈是检验人工水平的一个重要方面。它的研究为人工智能带来了很多重要的方法和理论,产生了广泛的社会影响和学术影响。 五子棋人机对弈是计算机博弈中的一种。研究其计算机算法,可以让我们看到人工智能的稚形,也有助于我们人脑的开发。五子棋是我国发明的,研究它可以让更多的外国人了解五子棋,这有助于我国优秀文化的推广。 关键词:人工智能,计算人机对弈,五子棋,算法

目录 摘要 (Ⅰ) 目录 (Ⅲ) 第一章绪论 (1) 第二章需求分析 (2) 2.1 业务需求 (2) 2.2 性能需求 (2) 2.3 系统平台需求 (2) 第三章五子棋相关基础 (4) 3.1 五子棋解释 (4) 3.2 五子棋的基本规则 (4) 3.3 五子棋的常用术语 (5) 第四章开发工具、环境及其技术 (7) 4.1 Java简介 (7) 4.2 Java编程环境 (9) 第五章程序设计思路与实现 (10) 5.1 程序设计思路 (10) 5.2 程序设计 (13) 结论 (33) 参考文献.................................................................................................................... 致谢............................................................................................................................ 附录............................................................................................................................

五子棋课程设计实验报告

西南交通大学 程序语言综合课程设计 五子棋游戏 课程《程序语言综合课程设计》 学院信息科学与技术学 专业软件工程 姓名 学号 20119050 日期 2016年月日

目录 第一章课程设计的目的和要求 (3) 1.1 课程设计的目的 (3) 1.2 课程设计的要求 (3) 1.3 课程设计的实验环境 (3) 第二章功能描述 (4) 第三章总体设计 (5) 3.1 功能模块设计 (5) 3.1.1 任务执行流程图 (5) 3.1.2 下棋函数流程图 (6) 3.2 数据结构设计 (7) 3.2.1 定义结构体 (7) 3.2.2 定义数组 (7) 3.2.3 全局变量 (7) 3.3 函数功能描述 (7) 第四章程序实现 (8) 4.1源码分析 (8) 4.2运行结果及界面介绍 (22) 第五章后记 (27)

第一章课程设计的目的和要求 1.1 课程设计的目的 1.加深对C语言数据类型,运算,语句结构及其程序设计的基本方法理解和掌握; 2.熟练掌握流程图的绘制、程序设计文档的书写; 3.通过编写一个完整的程序,一方面可以检查我们这学期的学习情况,为以后的学习打下坚实的基础; 4.熟悉C语言游戏编程,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。 1.2 课程设计的要求 1、编写程序代码,调试所写程序使其能够正确运行; 2、能进行基本的五子棋操作,有图形界面,能够用键盘操作; 3、能够实现悔棋、存档和读档等附加功能 1.3 课程设计的实验环境 该课程设计在设计与实验过程中需要在windows XP系统/windows 2000以上系统中进行,程序设计要求在visual C++6.0平台中进行,完成代码的编写、编译、调试、测试等工作。本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下: 硬件:Cpu:2.1GHZ,内存,2GB,硬盘:320GB,操作系统:windows xp 软件环境:安装VC++6.0

JAVA五子棋程序设计课程设计

JAVA五子棋程序设计课程设计

计算机与信息工程系 《JAVA程序实训》设计 五子棋游戏 摘要: 计算机人机对弈作为人智能研究的一个重要分支,计算机博弈是检验人工水平的一个重要方面。它的研究为人工智能带来了很多重要的方法和理论,产生了广泛的社会影响和学术影响。 五子棋人机对弈是计算机博弈中的一种。研究其计算机算法,能够让我们看到人工智能的稚形,也有助于我们人脑的开发。五子棋是中国创造的,研究它能够让更多的外国人了解五子棋,这有助于中国优秀文化的推广。 关键词:人工智能,计算人机对弈,五子棋,算法 , java 1.课程设计介绍 1.1课程设计目的 经过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、NetBeans等开发工具的运用,拓宽常见类库的应用。使我们经过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。本次课程设计每人一组,自行设计并实现共功能模块。

1.2课程设计任务 实现五子棋游戏,要求:使用图形用户界面,实现人人对战,人机对战。能够判断输赢,有“开始”按钮,当出现棋盘后,按此按钮进入对战状态。当有胜利者(垂直、水平、对角线连续5子),显示对话框,提示谁(黑还是白)胜利了。若当棋盘满了还无胜利者,显示平局对话框。有“悔棋”按钮,玩家能够点击悔棋,回到上一步。 1.3课程设计论文编写要求 (1)要按照书稿的规格打印与写课程设计论文; (2)论文包括目录、设计思路、具体实现、运行调试与分析讨论、设计体会与小结、参考文献、附录(源代码)等; (3)课程设计论文装订按学校的统一要求完成。 2.系统设计 2.1需求分析 2.1.1性能需求 一款小游戏的确立是建立在各种各样的需求上面的,这种需求往往来自于玩家的实际需求,其中玩家的实际需求最为重要.面对游戏拥有不同知识和理解层面的玩家,游戏制作人对玩家需求的理解程度,在很大程度上决定了此类游戏开发的成败.因此如何更好地的了解,分析,明确玩家需求,而且能够准确,清晰以文档的形式表示给游戏制作人,保证开发过程按照满足玩家需求为目的正确开发方向进行,是每游戏游戏制作人需要面正确问题。 作为五子棋的设计需要考虑到的最基本的需求莫过于人机对战与人人对战功能的实现,当然还有下棋过程中的下棋悔棋功能以及判断游戏的胜负等方面的要求。当然最好是要考虑到界面的友好性,作为一个娱乐软件,还应

java课程设计人机对弈五子棋

《Java程序设计》课程设计报告 学院:理学院 班级: 姓名: 学号: 指导教师: 课设时间: 2015-06-23 至2015-06-25 二O一五年六月二十五日

课程设计(论文)任务书 理学院信息与计算科学专业2012-2班 一、课程设计(论文)题目:人机对弈五子棋游戏 二、课程设计(论文)工作: 自2015 年6 月23 日起至2015 年6 月25日止 三、课程设计(论文) 地点: 5-205 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)使学生掌握软件开发的基本工作流程; (2)巩固JAVA程序设计课程所学的内容; (3)培养学生的计算机思维能力以及合作的精神; (4)培养学生分析、解决问题的能力; (5)提高学生的科技论文写作能力。 2.课程设计的任务及要求 1)基本要求: (1)研究课程设计任务,并进行系统需求分析; (2)对系统进行总体设计,分解系统功能模块,进行任务分配,以实现分工合作;(3)实现各功能模块代码; (4)系统组装,测试、完善系统。 2)创新要求: 在基本要求达到后,可进行创新设计,如改进界面、增加功能或进行代码优化。3)课程设计论文编写要求

(1)要按照书稿的规格打印誊写课程设计论文 (2)论文包括封面、设计任务书(含评语)、摘要、目录、设计内容、设计小结(3)论文装订按学校的统一要求完成 4)参考文献: (1)丁振凡,《JAVA语言程序设计》,清华大学出版社 (2)丁振凡,《JAVA语言程序设计实验指导与习题解答》,清华大学出版社 (3)https://www.360docs.net/doc/ac13176015.html,/ 5)课程设计进度安排 内容天数地点 系统总体设计 1 实验室 软件设计及调试 1 实验室 答辩及撰写报告 1 实验室、图书馆 学生签名: 2015年6月25日 课程设计(论文)评审意见 (1)课程设计过程(20分):优()、良()、中()、一般()、差(); (2)是否完成调试,系统运行效果(30分):优()、良()、中()、一般()、差(); (3)回答问题(20分):优()、良()、中()、一般()、差();(4)课程设计报告(30分):优()、良()、中()、一般()、差(); (5)格式规范性及考勤是否降等级:是()、否() 评阅人:职称:教授 2015年 6月25日

MFC课程设计报告-一个简单的五子棋游戏

设计一个简单的五子棋游戏 一、设计目标与内容 1.了解Windows编程的基础知识,掌握MFC应用程序的基本知 识; 2.基本掌握面向对象程序设计的基本思路和方法; 3.掌握用VC++开发应用程序的的一般步骤和方法; 4.能够利用所学的基本知识, 设计一个简单的五子棋游戏,具 有以下功能:①数据结构的设计;五子棋棋盘的绘制。②两人下棋时,两人下棋算法的设计。③两人下棋时,判断任一方获胜的算法的设计。 二、设计要求 1.用VC++进行编码,实现应用程序的功能。注重编码质量, 代码要有适当的注释; 提交设计报告一份(课程设计任务书、目录、主要的数据结构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。总体设计 运行时效果如下:

图3-1 这个程序只能进行两个人之间的对弈,不能进行人机对弈,由于时间和个人能力的原因所以人机对弈的算法就没有写出。同时程序中也存在着很多漏洞,但基本的功能都已经实现,还有待继续改进。 详细设计 新建工程game_wzq

选择单文档应用程序,在Step 4 of 6中先中Windows Sockets 复选框。如下图: 图3-2 资源编辑 黑白位图Bitmap以表示棋盘上面的棋子: IDB_BLACK DB_WHITE 黑白鼠标Cursor以替换当前鼠标: IDC_CURSOR1 黑棋子

IDC_CURSOR2 白棋子 黑白图标Icon以显示在状态栏供以提示 IDI_BLACK IDI_WHITE 菜单以供操作: 开始: ID_START 保存: ID_SAVE 打开: ID_OPEN 如下图所示: 图3-3 变量函数 首先,为了实现状态栏的应用,我们必须更改它的变量:

《C++语言程序设计》课程设计报告--五子棋

C++语言程序设计 课程设计报告 课程:C++语言程序设计题目:五子棋 年级: 专业: 学号: 姓名: 指导教师: 江苏师范大学数学与统计学院

【摘要】 五子棋是我国古代的、传统的黑白棋种之一。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。本游戏是以C++语言作为开发工具,运行环境Visual C++ 6.0,通过构造函数绘制棋谱,以及落子函数、判断函数,实现双人对弈的功能。 【关键词】五子棋、游戏、人人对战、C++ 【引言】 五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“連珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(Five in a Row的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。 五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。 本游戏是以C++语言作为开发工具,运行环境Visual C++ 6.0,通过构造函数绘制棋谱,以及落子函数、判断函数,实现双人对弈的功能。 【设计思路】 第一步:绘制棋谱 第二步:对战双方落子 第三步:判断是否有五子连珠 第四步:重复第一、二、三步直至出现五子连珠 【设计过程】 通过构造函数实现棋盘,编写落子函数实现玩家落子,通过判断函数判断是否有五子连珠的结果。 【设计结果】 图1-1 初始画面

java+五子棋+课程设计报告 (2)

课程设计(论文)任务书 软件学院软件工程+电子商务专业2007-2班 一、课程设计(论文)题目多用户五子棋游戏 二、课程设计(论文)工作自2009年6月15日起至2009年6月19 日止。 三、课程设计(论文) 地点: 创新大楼310 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)通过课程设计把课堂上讲的内容融会贯通,学会设计程序、开发应用软件、开发系统软件等各项工作。 (2)通过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念要理解、会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。 2.课程设计的任务及要求 1)基本要求: 实现一个简单的多用户五子棋的游戏程序,包括如下两个界面 (1)选择对弈桌及角色(执黑、执白、观看)。 (2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);发言及显示区;用户列表区;棋盘绘制区。 2)创新要求: 在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机界面。 3)课程设计论文编写要求 (1)要按照书稿的规格打印与写课程设计论文 (2)论文包括目录、设计思路、具体实现、运行调试与分析讨论、设计体会与小结、参考文献、附录(源代码)等 (3)课程设计论文装订按学校的统一要求完成 4)答辩与评分标准:

(1)完成基本算法设计:20分; (2)完成设计过程:40分; (3)完成调试:20分; (4)回答问题:20分。 5)参考文献: [1]吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社 [2] 柳西玲.许斌编著.Java语言应用开发基础.北京:清华大学出版社 [3] (美)CayS.Horsttmann Gary Cornell JAVA核心技术卷i:基础知识(原书第七版):机械工业出版社 [4]丁振凡Java 语言实用教程:北京邮电大学出版社 [5]https://www.360docs.net/doc/ac13176015.html, 6)课程设计进度安排 内容天数地点 构思及收集资料1图书馆 编码与调试 2.5实验室 撰写论文 1.5图书馆、实验室 学生签名: 2009年6 月15 日 课程设计(论文)评审意见 (1)完成基本算法(20分):优()、良()、中()、一般()、差();(2)完成调试(20分):优()、良()、中()、一般()、差();(3)创新设计(20分):优()、良()、中()、一般()、差();(4)设计分析(20分):优()、良()、中()、一般()、差();(5)回答问题(20分):优()、良()、中()、一般()、差();(6)格式规范性及考勤是否降等级:是( )、否() 评阅人:职称: 2009年6月21 日

五子棋JAVA语言毕业课程设计报告

(此文档为word格式,下载后您可任意编辑修改!) 《Java语言程序设计》课程设计报告 学院:信息科学技术学院 班级:软件技术2班 姓名:王更新 学号: 指导教师:郭韶升 课设时间:至 二O一四年三月二十六日

目录 一、设计要求 (2) 二、设计步骤 (2) 2.1程序流程图 (2) 2.2程序的功能分配 (3) 三、设计正文 (6) 3.1创建棋盘类 (6) 3.2判断输赢功能实现 (9) 3.3测试结果 (9) 四、心得体会 (12) 五、参考文献 (12) 附录(源代码) (13) 一、课程设计要求 设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能:

1.选择落子的先后顺序 2.重置棋盘 3.刷新重新开始 4.退出提示 并且规定退出者判为负,但退出过程中要有提示。以防不小心点错了。最后判断某一方是否为五子连珠。 实现一个简单的多用户五子棋的游戏程序,包括如下两个界面 (1)选择对弈桌(执黑、执白)。 (2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负); 二、设计步骤 2.1程序流程图 2.2 程序的功能分配 a. 棋盘的绘制 public void draw_qipan(Graphics G) 画棋盘 15*15{ G.setColor(Color.lightGray); G.fill3DRect(0,true); G.setColor(Color.black); for(int i=1;i<16;i++){ G.drawLine(20,20*i*i); G.drawLine(20*i,20,20*i,300);

五子棋游戏__课程设计报告(含源代码可以运行)

《软件基础》大作业 项目名称:五子棋游戏 学号:201046820510 201046820605 姓名:校建林 朱颖 完成时间:2011年11月28日指导教师:鲁可

目录 一需求分析 (1) 1.1开发背景 (1) 1.2项目目标五子棋与游戏开发成员和具体日期完成任务以及任务的具体分配. . . . . . . . . . . . . . . . . . . . 1 1.3运行环境...初始化. (3) 1.4项目任务书主循环控制模块 (3) 1.5玩家下子 (3) 1.6盘面分析填写棋型表 (3) 1.7对方下子 (4) 1.8胜负判断 (4) 二技术线路 (4) 2.1采用的软件及开发平台是什么 2.2项目的总体方案—包括模块及模块间的联系、信息流、数据流等 2.3项目的详细设计—包括模块的功能、数据结构及算法等 2.1技术线路模块图 (4) 2.2技术线路说明 (5) 三工程进度 第三章系统设计 (5) 3.1流程图 (6) 3.2流程图说明 (6) 四程序测试分析 (7) 4.1阶段性测试 4.2总体测试 五个人总结 (9) 附录源代码 (10)

五子棋游戏 第一章需求分析 1.1开发背景 软件需求分析是软件开发周期的第一个阶段,也是关系到软件开发成败的关键一步。对于任何一个软件而言,需求分析工作都是至关重要的一步。只有通过软件需求分析,才能把软件的功能和性能由总体的概念性描述转化为具体的规格说明,进而建立软件开发的基础。实践表明,需求分析工作进行得好坏,在很大程度上决定了软件开发的成败。 软件需求分析的任务是:让用户和开发者共同明确将要开发的是一个什么样的软件。具体而言,就是通过对问题及其环境的理解、分析和综合,建立逻辑模型,完成新软件的逻辑方案设计。 基于本游戏,首先得为整个棋盘建立一张表格用以记录棋子信息,我们使用一个15*15的二维数组Table[15][15](15*15是五子棋棋盘的大小),数组的每一个元素对应棋盘上的一个交叉点,用‘0’表示空位、‘1’代表己方的子、‘2’代表对方的子;这张表也是今后分析的基础。在此之后还要为两个玩家双方各建立一张棋型表Computer[15][15][4]和Player[15][15][4],用来存放棋型数据。 1.2 项目目标五子棋与游戏开发具体任务完成日期以及任务的具体分配 五子棋游戏开发成员:校建林、朱颖。 五子棋游戏开发具体的任务步骤: 1.需求分析 内容包括:总体分析、五子棋与游戏开发成员和具体任务完成日期以及任务的具体分配、初始化、主循环控制模块、玩家下子、盘面分析填写棋型表、对方下子、胜负判断。 2.技术线路 内容包括:采用的软件及开发平台是什么。 项目的总体方案—包括模块及模块间的联系、信息流、数据流等。

基于JAVA的五子棋游戏设计本科毕业设计

XX大学本科毕业设计 基于JAVA的五子棋游戏设计

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日

五子棋JAVA语言课程设计报告

《Java语言程序设计》课程设计报告 学院:信息科学技术学院 班级:软件技术2班 姓名:王更新 学号: 1108900505 指导教师:郭韶升 课设时间: 2014-03-17 至2014-03-26 二O一四年三月二十六日

目录 一、设计要求 (2) 二、设计步骤 (2) 2.1程序流程图 (2) 2.2程序的功能分配 (3) 三、设计正文 (6) 3.1创建棋盘类 (6) 3.2判断输赢功能实现 (9) 3.3测试结果 (9) 四、心得体会 (12) 五、参考文献 (12) 附录(源代码) (13)

一、课程设计要求 设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能: 1.选择落子的先后顺序 2.重置棋盘 3.刷新重新开始 4.退出提示 并且规定退出者判为负,但退出过程中要有提示。以防不小心点错了。 最后判断某一方是否为五子连珠。 实现一个简单的多用户五子棋的游戏程序,包括如下两个界面 (1)选择对弈桌(执黑、执白)。 (2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负); 二、设计步骤 2.1程序流程图

2.2 程序的功能分配 a. 棋盘的绘制 public void draw_qipan(Graphics G) //画棋盘 15*15{ G.setColor(Color.lightGray); G.fill3DRect(10,10,300,300,true); G.setColor(Color.black); for(int i=1;i<16;i++){ G.drawLine(20,20*i,300,20*i); G.drawLine(20*i,20,20*i,300); } } b. 添加按钮 Button b1=new Button("开始"); Button b2=new Button("重置游戏"); Label lblWin=new Label(" "); Checkbox ckbHB[]=new Checkbox[3]; Button exist = new Button("退出"); public void init(){ ckbHB[0]=new Checkbox("执白",ckgHB,false); ckbHB[1]=new Checkbox("执黑",ckgHB,false); ckbHB[2]=new Checkbox("观看",ckgHB, false); } c. 鼠标棋子的触发事件 public void mouseClicked(MouseEvent e) { Graphics g=getGraphics(); int x1,y1; x1=e.getX(); y1=e.getY(); if (e.getX()<20 || e.getX()>300 || e.getY()<20 || e.getY()>300) { return; } if (x1%20>10) { x1+=10; } if(y1%20>10) { y1+=10; } x1=x1/20*20; y1=y1/20*20; set_Qizi(x1,y1); m*=(-1); }

相关文档
最新文档