ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:138.15KB ,
资源ID:20020394      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20020394.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java课程设计五子棋游戏完整版Word格式文档下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

java课程设计五子棋游戏完整版Word格式文档下载.docx

1、 由于不考虑禁手问题,在实现“连五”过程中,我们可以考虑完成“双四”,“四三”,“双三”,“冲四”,“活三”,“活四”来实现目的。 活四:有两个点能形成“连五”的四就是活四; 冲四:只有一个点能形成“连五”的四叫做“冲四”,或者叫做“单四”; 活三:己方在落一子就能形成“活四”的三叫做“活三”。“活三”分为“连活三”和“跳活三”。连活三:在棋盘某一条阳线或阴线上有同色三子相连,且在此三子两端延长线上有一端至少有一个,另一端至少有两个无子的交叉点与此三子紧密相连。跳活三:中间仅间隔一个无子交叉点的连三,但两端延长线均至少有一个无子的交叉点与此三子相连。 双三:由于黑方走一着在无子交叉点上同时形成

2、二个或二个以上黑方 活 的局面。 双四: 四 四三:指某一方同时具备两个先手,其中一个是 ,一个是 活三 。 在实现上面这些高级算法的时候,我们需要一个基础,就是对制定位置周围情况进行检测。在棋盘上面,棋子存在8个移动方向,检测时需要对每个方向进行检测。为了简单直观,这里将每步棋子的移动生成一个新的棋子。2.2需求分析 一款小游戏的确立是建立在各种各样的需求上面的,这种需求往往来自于玩家的实际需求,其中玩家的实际需求最为重要.面对游戏拥有不同知识和理解层面的玩家,游戏制作人对玩家需求的理解程度,在很大程度上决定了此类游戏开发的成败.因此如何更好地的了解,分析,明确玩家需求,并且能够准确,清晰以

3、文档的形式表达给游戏制作人,保证开发过程按照满足玩家需求为目的正确开发方向进行,是每游戏游戏制作人需要面对的问题。作为五子棋的设计需要考虑到的最基本的需求莫过于人机对战与人人对战功能的实现,当然还有下棋过程中的下棋悔棋功能以及判断游戏的胜负等方面的要求。当然最好是要考虑到界面的友好性,作为一个娱乐软件,还应该考虑到玩家在游戏时的舒适性。2.3系统流程图 图1程序流程图2.4设计方法2.4.1主要方法设计五子棋的娱乐性强、规则简单、易学、流行性广,普通人不需长时间专门训练即可自如行棋,因此极受大众喜欢,本系统可以实现人与人手动下棋,扫描整个棋盘记录连在一起的黑白棋子数,实现人与人有次序的下棋,判

4、断人与人的胜负,为人下棋提供帮助,五子棋规则为:(1)本游戏可选择人与人对战模式。(2)下法:两人分别执黑白两色棋子,轮流在棋盘上选择一个无子的交叉点落子,无子的交叉点又被称为空点。(3)输赢判断:黑、白双方有一方的五个棋子在横、竖或斜方向上连接成一线即为该方赢。表1.主要方法方法名称返回类型功能备注ChessPad()初始化棋盘设置棋盘颜色,Void paint (Graphics g)对棋子等图像进行初始化设置棋子大小,颜色等Public void mousePressed(MouseEvent e)鼠标的实践监听单击实践public void mousePressed(MouseEven

5、t e)public void paint(Graphics g)画出图像控制图像的大小范围处理按下鼠标的事件选中下棋的位置public void mouseReleased(MouseEvent e)处理鼠标离开的事件本步下棋结束public void mouseExited(MouseEvent e)处理鼠标离开棋盘时鼠标离开组件不实现任何事件public void mouseClicked(MouseEvent e)处理发生单击的事件实现下棋以及重新开始游戏2.4.2程序中类及成员变量的说明程序中所含的各个类名、类的作用及其子类父类,如表2所示:表2.类表及其子类父类类名作用父类子类Ch

6、essFrame创建五子棋游戏主窗体和菜单JFrame ChessModel实现了整个五子棋程序算法的核心MainPanel1、构建一个面板,在该面板上画上棋盘;2、处理在该棋盘上的鼠标事件(如鼠标左键点击、鼠标右键点击、鼠标拖动等)JPanelChessWindowEvent事件响应WindowAdapter表3.主要成员变量(属性)成员变量描述变量类型名称控制棋子颜色inti重新开局Button请黑棋下子TextFieldtext_1请白棋下子text_2这是第+i+步text_32.3.3 java源文件及其功能 表4 .java源文件及其功能序号文件名主要功能1Chess本程序的主函数

7、2Autoplay实现电脑可以自动下棋分为8种情况3Scan扫描整个棋盘记录连在一起的黑白棋子数为判断胜负服务4Sort实现人与电脑有次序的下棋黑棋白棋有序的下5Judge判断人与人之间的胜负文本框中会显示结果6Evaluate电脑估计为电脑下棋提供帮助2.3.4五子棋游戏中的注册监听 对角色选择按钮注册ActionListener监听,设置用户的角色。定义黑子int类型 0,白子1。对按钮开始、重置注册ActionListener监听,如果点击开始,用户进 入下棋状态,有一方赢了,棋盘上则不能再点击棋子。点击重置,则开始新的一轮。对鼠标注册mouseClicked监听,鼠标点击棋盘时获取下棋

8、的位置。对JTextField注册ActionListener,用户输入聊天信息后,通过Server传递给其他用户,在对话框JTextArea内显示。class ServerThread implements Runnable 类监听线程,监听是否有客户端法过信息来。(1)属性:Vector threads 向量存储线程,Socket socket 服务端口,DataInputStream in 输入流,DataOutputStream out 输出流,int nid 用户ID。(2)方法:构造器public ServerThread(Socket socket,Vector threads)

9、,实现信息的输入、输出,和public void run()监听客户端是否发信息过来,当客户离开时向,其他客户发信息,把客户端的信息发给其他客户。2.3.5 游戏整体设计(1)五子棋的游戏主界面五子棋主界面包括ChessBot.java,ChessMap.java,ChessPanel.java和Console.java四个文件。ChessMap是该五子棋游戏的主运行类,其中有运行整个程序的main方法,该文件生成了ChessMap类的一个实例,从而生成了五子棋游戏的界面ChessMap类将所有的功能集中到菜单栏中,并通过调用其他模块来实现五子棋游戏的各个功能。(2)机器人部分的设计机器人部分

10、的设计是由ChessBot.java类来实现的。该java类首先导入了三个函数,分别是math,lang和awt。该程序定义了棋盘的边长,棋盘的边长通过定义一个私有的int型变量来实现。将机器人定义成一个方法,通过0和1来确定按下的棋子是机器人自己下的,还是敌人的棋子。该ChessBot类中还包括了重开一局的方法,该方法通过for循环语句来实现,即重置棋子。另外一个方法是悔棋,悔棋同样是通过for语句循环来实现,首先通过二维数组算出最后一步棋下的位置,然后通过Step-实现。最后一个方法是计算当前位置type方是否有nn子相连,相连的情况。当横向五子连珠,纵向五子连珠,左斜线五子连珠或者是右斜

11、线五子连珠时,比赛结束,同时显示出获胜方的棋子颜色。四种方向的连珠用for循环语句分别写出其二维数组也就是棋子的位置,从而进行判断棋子有几个棋子相连。使用endfor语句结束for循环,利用return语句,重复判断棋子的位置以及是否连珠。(3)五子棋面板的设计首先导入awt等java包。ChessPanel继承JPanel的属性类。定义一系列的私有变量,如棋盘的背景位图,黑棋子的位图,白棋子的位图,以及插入棋子的位置。该java包还调用了重开一局的方法,以及悔棋的方法。public void showMousePos(Point p)是用来调试用,显示鼠标位置。public Point ad

12、dChess(int x,int y,int type)是调试下一步棋,参数为插入点像素坐标。public Point addChess(int x,int y,int type,boolean isMatrix)实现的功能是算下一步棋,isMatrix位true参数为插入点棋格坐标,否则参数为插入点像素坐标。当游戏结束的时候使用Graphics g调用方法,在游戏过程中如果是黑方或是白方获胜在棋盘中就会显示是哪方获胜。3.设计结果与分析(1)当进入到游戏当中可以选择是哪个颜色的棋先出,选择好之后便可以单机开始进行下棋,如果在游戏过程中出现什么问题可以单机再来一局重新开始游。五子棋游戏的主界面

13、如图2所示:图2.程序主界面(2)如果实黑棋先开始那么开始后的界面中先出的棋显示的是黑棋,如果是白棋先出则显示的是白棋,以黑棋为例如图3所示: 图3.黑棋先出的界面图(3)对于五子棋游戏,无论人机对战,还是双人对战,都需要判断棋盘上是否存在五子连珠情况,这既是游戏名字的由来,也是游戏结束的标志。判断五子连珠的原理是从横,竖,左斜线,右斜线4条线上判断是否存在5个相连的同类棋子,黑棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示:图4.游戏结束界面(4)白棋的五个棋子在横、竖或斜方向上连接成一线即为该方赢如图4所示: 图5.白棋胜利界面图4.设计体会通过这次课程设计,我进一步加深对基

14、础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。在此感谢我的指导老师原玥老师,她在课题的研究上不遗余力的给予指导。她严谨的治学态度深深的影响了我,使我受益匪浅!这个课设题对我来说有一定的挑战性,因为我自己也不知道自己到底学到了一个什么样的境界。但可以肯定,这个课设题的要求绝对在我的能力范围以上。之所以选择这个题目是想逼着自己去查更多的资料,学到更多的东西。结果也确实是这样的,我在这次课设中学到了不少东西,也理解了许多原来不理

15、解的东西。尽管这个系统做的并不是那么的完善。对于Java中的引用,初始化类等,开始我并不是非常的理解,知道就这么做就能实现相应的功能了,并没有很深刻的去理解它为什么要这么做。但是真正的要用Java去做一个东西不理解它是不行的,而且其间这课设涉及到了Java 中的绝大多数的知识点,如Java图形用户界面设计、Java中的多线程程序设计、Java输入输出流,要应用这些东西更要求我去好好理解Java的这些规则。经过了长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个课程设计。在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构

16、架不够熟悉,不能灵活地运用所学的知识点。自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。在这次课程设计中,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题5.参考文献1陈国君,陈磊,刘洋.Java2程序设计基础M北京:清华大学出版社 20092 埃史尔,陈昊鹏.Java编程思想(第4版)M.北京:机械工业出版社 20073 李钟尉,马文强,

17、陈丹丹.Java从入门到精通M.北京:清华大学出版社 20084 Y.Daniel Liang,万波,郑海红,潘蓉.Java语言程序设计:基础篇(原书第6版)M.北京:机械工业出版社 20085 Ian F.Darwin,关丽荣,张晓坤.Java经典实例(第2版)M.北京:中国电力出版社 20096丁振凡.Java语言实用教程M.北京:北京邮电大学出版社 20057张广彬,孟红蕊,张永宝.Java课程设计案例精编M.北京:清华大学出版社 2005附录:程序源文件import java.awt.Checkbox;import java.awt.CheckboxGroup;import java.

18、awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JButton;import jav

19、ax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JPanel;public class FivChese extends JFrame CheseGame CG; FivChese () this.CG= new CheseGame(); addMouseListener(CG); add(CG); public static void main(String args) FivChese fivechese= new FivChese (); fivechese.setDefaultCloseOperation(

20、JFrame.EXIT_ON_CLOSE); fivechese.setSize(900, 700); fivechese.setTitle(五子棋); fivechese.setVisible(true); fivechese.setResizable(true);class CheseGame extends JPanel implements MouseListener,ItemListener int map = new int2020; Color color = Color.BLACK,Color.WHITE,Color.LIGHT_GRAY; /棋子坐标 int x = -1;

21、int y = -1; /判定是白棋还是黑棋 int flag = 1; /判定胜负 int winner = 3; JButton btn1 = new JButton(开始 /游戏开始 JButton btn2 = new JButton(再来一局/游戏重置 /确定白棋先还是黑棋先 CheckboxGroup cbg = new CheckboxGroup(); Checkbox chb1 = new Checkbox(黑棋先开始,cbg,true); Checkbox chb2 = new Checkbox(白棋先开始,cbg,false); Override public void i

22、temStateChanged(ItemEvent ie) / throw new UnsupportedOperationException(Not supported yet. if(chb1.getState() flag = 1; else flag = 2; class GameStart implements ActionListener public void actionPerformed(ActionEvent ae) if(ae.getSource() = btn1)/str.equals(Start) start(); repaint(); btn1.setEnabled

23、(false); btn2.setEnabled(true); chb1.setEnabled(false); chb2.setEnabled(false); if(ae.getSource() = btn2) chb1.setEnabled(true); chb2.setEnabled(true); CheseGame() this.setLayout(null); chb1.setBounds(650, 50, 100, 30); chb2.setBounds(650, 100, 100, 30); chb1.addItemListener(this); chb2.addItemListe

24、ner(this); btn1.setBounds(650,150,100,30); btn1.addActionListener(new GameStart(); btn2.setBounds(650, 200, 100, 30); btn2.addActionListener(new GameStart(); btn2.setEnabled(false); this.add(btn1); this.add(btn2); this.add(chb1); this.add(chb2); void start() for(int i = 0;i 20;i+) for(int j = 0;j j+) mapij = 0; winner = 0; Boolean win(int x,int y)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1