课程设计NO.1沈阳大学五子棋游戏1.课程设计的目的计算机技术的不断发展给人们的日常工作和生活都带来了许多益处,从Windows系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家开始,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。Java语言作为一种面向对象的编程语言,具有分布式,可移植,高性能等特点。通过系统的学习,就可以使用它开发出功能齐全,满足特殊需求的应用程序。它对学习者掌握技能,开拓思维都有很大的帮助。Java语言的开发方法是当今世界最流行的开发方法,是当今流行的网络编程语言。它具有面向对象、跨平台、分布应用等特点。它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。很多程序开发人员得第一选择。为了将课堂上得知识掌握得更加透彻,深刻把握Java语言的重要概念及其面向对象的特性,锻炼学生熟练的应用面向对象的思想和设计方法解决实际问题的能力,开设了Java程序设计课程设计。让学生自己动手动脑,将书本上得知识运用到实践当中去,使知识能更好得融会贯通。通过自己动手,自主得学习,对Java这门课程有更深得了解与认识,并通过自己动手,自主得学习,对Java这门课程有更深得了解与认识,通过本次课设,实现本学期内容的回顾与综合运用,包括类的建立,用类创建对象,方法的调用,图形组建的使用方法,图形界面的布局形式,事件处理机制,文件对话框的使用,文件操作的基本方法,数据读写的基本用法等。学习任何知识得目的都是要将它运用到实践中去,所以我们要运用已有的知识,独立得将这个课程设计完成,只有这样,我们才能将知识变成本领,变成属于自己得东西,通过一个学习得学习,我们已经有可一定得Java基础,现在我们就要利用这些基础,来完成课程设计。课程设计NO.2沈阳大学这次课程设计我主要研究了利用已学的Java知识编辑一个五子棋小游戏。通过此次课程设计,来巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、JCreator等开发工具的运用,拓宽常用类库的应用。2.设计方案论证2.1设计思路(1)棋盘界面设计在对棋盘界面设计方面要考虑简洁友好,符合游戏者需求。棋子的设计方面系统中设置了两种棋子颜色,yellow或者red,游戏者可自行选择。棋子怎样画出来,怎样使棋子按我们所想的方式来绘制出来是设计的主要难题。运行时要求当每次点击鼠标的时候就在点击鼠标的地方画一个棋子,所以得定义一个棋子的类使点击鼠标时系统把棋子绘制出来。这样主界面里的棋子就确定了,而且也确定了几个所需要的类。可以先定义好这些类了。有了以上的准备就可以把棋盘绘制出来了,下棋时每次在适当位置点击鼠标的时候就在所点击的位置上画出你这个角色的颜色,然后计算机会自动的下棋,计算机自动下棋要有一个控制变量来控制能不能下棋。人可以随意的下子,可是计算机就要计算在哪个位置下子了。这里由计算机下子的算法来确定,人人对战的话就不象单机游戏一样,要计算机来判断人下子之后计算机下那一个地方了,人人对战只要在双方下子的时候判断赢棋情况,当然还要同步的控制两个人下棋的顺序,这样的话就要用到线程了,各自都继承或实现线程类或接口,以便各自能随时单独控制接发消息。(2)算法设计对于五子棋游戏,无论人机对战,还是双人对战,都需要判断棋盘上是否存在五子连珠情况,这既是游戏名字的由来,也是游戏结束的标志。判断五子连珠的原理是从横,竖,左斜线,右斜线4条线上判断是否存在5个相连的同类棋子。对战一方落子后,在该处向8个方向检测连续的同类棋子,如果检测到直线方向上存在5个连续的同类棋子(包含本位置棋子),则判断为“连五”并结束检测循环。基于检测结果,可以判断游戏是否结束,并根据获胜方的落子代码判断获胜方是谁。课程设计NO.3沈阳大学由于不考虑禁手问题,在实现“连五”过程中,我们可以考虑完成“双四”,“四三”,“双三”,“冲四”,“活三”,“活四”来实现目的。活四:有两个点能形成“连五”的四就是活四;冲四:只有一个点能形成“连五”的四叫做“冲四”,或者叫做“单四”;活三:己方在落一子就能形成“活四”的三叫做“活三”。“活三”分为“连活三”和“跳活三”。连活三:在棋盘某一条阳线或阴线上有同色三子相连,且在此三子两端延长线上有一端至少有一个,另一端至少有两个无子的交叉点与此三子紧密相连。跳活三:中间仅间隔一个无子交叉点的连三,但两端延长线均至少有一个无子的交叉点与此三子相连。双三:由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方活的局面。双四:由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方四的局面。四三:指某一方同时具备两个先手,其中一个是四,一个是活三。在实现上面这些高级算法的时候,我们需要一个基础,就是对制定位置周围情况进行检测。在棋盘上面,棋子存在8个移动方向,检测时需要对每个方向进行检测。为了简单直观,这里将每步棋子的移动生成一个新的棋子。2.2需求分析一款小游戏的确立是建立在各种各样的需求上面的,这种需求往往来自于玩家的实际需求,其中玩家的实际需求最为重要.面对游戏拥有不同知识和理解层面的玩家,游戏制作人对玩家需求的理解程度,在很大程度上决定了此类游戏开发的成败.因此如何更好地的了解,分析,明确玩家需求,并且能够准确,清晰以文档的形式表达给游戏制作人,保证开发过程按照满足玩家需求为目的正确开发方向进行,是每游戏游戏制作人需要面对的问题。作为五子棋的设计需要考虑到的最基本的需求莫过于人机对战与人人对战功能的实现,当然还有下棋过程中的下棋悔棋功能以及判断游戏的胜负等方面的要求。当然最好是要考虑到界面的友好性,作为一个娱乐软件,还应该考虑到玩家在游戏时的舒适性。课程设计NO.4沈阳大学2.3系统流程图图1程序流程图2.4设计方法2.4.1主要方法设计五子棋的娱乐性强、规则简单、易学、流行性广,普通人不需长时间专门训练即可自如行棋,因此极受大众喜欢,本系统可以实现人与人手动下棋,扫描整个棋盘记录连在一起的黑白棋子数,实现人与人有次序的下棋,判断人与人的胜负,为人下棋提供帮助,初始化开始主控制白方下子黑方下子判断胜负结束胜利白方黑方未判断胜负课程设计NO.5沈阳大学五子棋规则为:(1)本游戏可选择人与人对战模式。(2)下法:两人分别执黑白两色棋子,轮流在棋盘上选择一个无子的交叉点落子,无子的交叉点又被称为空点。(3)输赢判断:黑、白双方有一方的五个棋子在横、竖或斜方向上连接成一线即为该方赢。表1.主要方法方法名称返回类型功能备注ChessPad()初始化棋盘设置棋盘颜色,ChessPad()Voidpaint(Graphicsg)对棋子等图像进行初始化设置棋子大小,颜色等Voidpaint(Graphicsg)PublicvoidmousePressed(MouseEvente)鼠标的实践监听单击实践publicvoidmousePressed(MouseEvente)publicvoidpaint(Graphicsg)画出图像控制图像的大小范围publicvoidpaint(Graphicsg)publicvoidmousePressed(MouseEvente)处理按下鼠标的事件选中下棋的位置PublicvoidmousePressed(MouseEvente)publicvoidmouseReleased(MouseEvente)处理鼠标离开的事件本步下棋结束publicvoidmouseReleased(MouseEvente)publicvoidmouseExited(MouseEvente)处理鼠标离开棋盘时鼠标离开组件不实现任何事件publicvoidmouseExited(MouseEvente)课程设计NO.6沈阳大学publicvoidmouseClicked(MouseEvente)处理发生单击的事件实现下棋以及重新开始游戏publicvoidmouseClicked(MouseEvente)2.4.2程序中类及成员变量的说明程序中所含的各个类名、类的作用及其子类父类,如表2所示:表2.类表及其子类父类类名作用父类子类ChessFrame创建五子棋游戏主窗体和菜单JFrameChessModel实现了整个五子棋程序算法的核心MainPanel1、构建一个面板,在该面板上画上棋盘;2、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等)JPanelChessWindowEvent事件响应WindowAdapter表3.主要成员变量(属性)成员变量描述变量类型名称控制棋子颜色inti重新开局ButtonButton请黑棋下子TextFieldtext_1请白棋下子TextFieldtext_2课程设计NO.7沈阳大学这是第+i+步TextFieldtext_32.3.3java源文件及其功能表4.java源文件及其功能序号文件名主要功能备注1Chess本程序的主函数初始化棋盘2Autoplay实现电脑可以自动下棋分为8种情况3Scan扫描整个棋盘记录连在一起的黑白棋子数为判断胜负服务4Sort实现人与电脑有次序的下棋黑棋白棋有序的下5Judge判断人与人之间的胜负文本框中会显示结果6Evaluate电脑估计为电脑下棋提供帮助2.3.4五子棋游戏中的注册监听对角色选择按钮注册ActionListener监听,设置用户的角色。定义黑子int类型0,白子1。对按钮开始、重置注册ActionListener监听,如果点击开始,用户进入下棋状态,有一方赢了,棋盘上则不能再点击棋子。点击重置,则开始新的一轮。对鼠标注册mouseClicked监听,鼠标点击棋盘时获取下棋的位置。对JTextField注册ActionListener,用户输入聊天信息后,通过Server传递给其他用户,在对话框JTextArea内显示。classServerThreadimplementsRunnable{}类监听线程,监听是否有客户端法过信息来。(1)属性:Vectorthreads向量存储线程,Socketsocket服务端口,DataInputStreamin输入流,DataOutputStreamout输出流,intnid用户ID。(2)方法:构造器publicServerThread(Socketsocket,Vectorthreads),实现信息的输入、课程设计NO.8沈阳大学输出,和publicvoidrun()监听客户端是否发信息过来,当客户离开时向,其他客户发信息,把客户端的信息发给其他客户。2.3.5游戏整体设计(1)五子棋的游戏主界面五子棋主界面包括ChessBot.java,ChessMap.java,ChessPanel.java和Console.java四个文件。ChessMap是该五子棋游戏的主运行类,其中有运行整个程序的main方法,该文件生成了ChessMap类的一个实例,从而生成了五子棋游戏的界面ChessMap类将所有的功能集中到菜单栏中,并通过调用其他模块来实现五子棋游戏的各个功能。(2)机器人部分的设计机器人部分的设计是由ChessBot.java类来实现的。该java类首先导入了三个函数,分别是math,lang和awt。该程序定义了棋盘的边长,棋盘的边长通过定义一个私有的int型变量来实现。将机器人定义成一个方法,通过0和1来确定按下的棋子是机器人自己下的,还是敌人的棋子。该ChessBot类中还包括了重开一局的方法,该方法通过for循环语句来实现,即重置棋子。另外一个方法是悔棋,悔棋同样是通过for语句循环来实现,首先通过二维数组算出最后一步棋下的位置,然后通过Step--实现。最后一个方法是计算当前位置type方是否有nn子相连,相连的情况。当横向五子连珠,纵向五子连珠,左斜线五子连珠或者是右斜线五子连珠时,比赛结束,同时显示出获胜方的棋子颜色。四种方向的连珠用for循环语句分别写出其二维数