java课程设计_五子棋(附源代码)

三人斗地主_[官网入口]2014--2015 年度第二学期) 网络工程学生姓名 1308020207指导教师 江涛 完成日期 永磁同步电机双环调速系统的仿真研究 1.1课程设计目的....................................3 1.2 预备知识........................................3 1.3 课程设计内容和要求..............................3 需求分析...........................................42.1 系统目标.......................................4 2.2 主体功能.......................................4 2.3 开发环境.......................................4 2.4 概念设计.......................................4 系统总体设计.......................................53.1 系统的功能模块划分.............................5 3.2 系统流程图.....................................6 系统详细设计.......................................74.1 代码实现情况...................................7 4.1.1 server 4..1.2client 4.1.3chessface 4.1.4chessface 4.1.5chessface 包chessthread 4.1.6chessface 4.1.7chessface 4.1.8chessface 包userPad 4.1测试分析........................................9 4.2.1 程序运行情况................................9 4.2.2 程序运行异常处理...........................12 小结...............................................12参考文献.............................................13 源代码Java 语言与面向对象技术课程设计 1、概述1.1 课程设计目的 《JAVA 程序设计》是计算机相关专业的必修专业基础课程,其实 践性、应用性很强。实践教学环节是必不可少的一个重要环节。本 课程的程序设计专题实际是计算机相关专业学生学习完《JAVA 程序 设计》课程后,进行的一次全面的综合训练,JAVA 程序设计的设计 目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程 序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综 合运用所学知识,利用软件工程为基础进行软件开发、并在实践应 用方面打下一定基础。 1.2 预备知识 熟悉JAVA 语言及ECLIPSE 开发工具。 1.3 课程设计内容和要求 按课程设计指导书提供的课题,要求学生在自行完成各个操作环 节,并能实现且达到举一反三的目的,完成一个项目解决一类问 题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用 其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够 进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA 序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题的能力; 培养学生进行设计分析、设计方法、设计操作与测试、设计过程的 永磁同步电机双环调速系统的仿真研究 观察、理解和归纳能力的提高。五子棋是起源于中国古代的传统黑白棋种之一。五子棋不仅能增 强思维能力,提高智力,而且富含哲理,有助于修身养性。三人斗地主_[官网入口] 经过 一个学期的学习,使我对Java 有了一定的了解。但要深入理解Java 语言,单靠上课是不够的。三人斗地主_[官网入口]必须通过课程设计,设计一个比较大的 程序,才能更深一步地理解 Java 语言。在这次课程中,我选择了网 络五子棋作为课题。编写网络五子棋游戏要利用到Socket 网络编程 技术和多线程。通过这次课程设计,熟悉 Java GUI图形界面设 计,网络Socket 编程和多线程编程。三人斗地主_[官网入口] 需求分析2.1 系统目标 本系统主要是完成五子棋游戏的基本操作,在玩游戏的过程中玩 家可以放松心情得到娱乐。 2.2 主体功能 本程序实现了一个小的五子棋游戏,可以实现两个人在用一 台机器上进行游戏。程序会自动判断谁输谁赢,在游戏的开 始,第一个人可以选择执白棋还是黑棋,之后点击开始进行游 2.3开发环境 硬件要求能运行Eclipse windowsxp 以上系统。JAVA 程序设 计语言及相应的集成开发环境,SDK 和ECLIPSE 开发工具。三人斗地主_[官网入口] 2.4 概念设计 Java 语言与面向对象技术课程设计 网络五子棋是采用网络协议为TCP/IP的网上对弈游戏,运用“客 户端-服务器“(c/s)网络架构模式。实现用户通过 Internt 连接在 任何地方与不同玩家进行对战。服务器可以创建任意多局游戏。三人斗地主_[官网入口] 通过使用多线程和网络套接字SOCKET 来实现游戏之间的通讯,它 是基于点对点的通讯。开始让服务器初始化建立服务器套接字 SOCKET,基于某个端口 PORT,服务器始终处于监听状态。客户端是 动作的发起者,何时发出申请由客户端决定。客户端向服务器发出申 请,服务器给予响应。打开客户端套接字 SOCKET,连接到服务器端 的地址ADDRESS 和端口PORT。连接建立后,创建一个SOCKET 实例, 并开始一个线程,监听该客户端请求。服务器继续监听其它用户的连 接。服务器通过数据输入流从客户端接收信息,并且通过数据输出流 把相应的信息发送给客户端。客户端发送请求和响应接收到的各种信 在服务器和客户端之间传递的消息格式是采用“[消息类别]+内容“组成的,服务器和客户端在传递消息的过程,根据消息的类别来进 行相关的操作。 系统总体设计3.1 系统的功能模块示意图 永磁同步电机双环调速系统的仿真研究 3.2系统流程图 Java 语言与面向对象技术课程设计 系统详细设计4.1 代码实现情况 4.1.1 server classMessageServerPanel extends Panel //主消息窗口 class ServerThread extends Thread //服务器线程,主要用于 服务器与客户端的通信 public class chessServer extends Frame implements ActionListener //服务器端框架类 4.1.2 client publicclass chessClient extends Frame implements ActionListener, KeyListener //五子棋客户端框架,实现了动作 监听器和键盘监听器 永磁同步电机双环调速系统的仿真研究 publicboolean connectServer(String serverIP, int serverPort) throws Exception //和服务器建立连接并通信的函 数。return true 连接成功, false 如果失败. 4.1.3 chessface publicclass chatPad extends Panel //聊天信息Panel。Panel 上的文本域可以显示用户聊天信息。 4.1.4 chessface publicclass chessPad extends Panel implements MouseListener //显示棋盘的Panel。此Panel 实现了鼠标监听 classchessPoint_black extends Canvas //表示黑子的类 class chessPoint_white extends Canvas //表示白子的类 4.1.5 chessface 包chessthread publicclass chessThread extends Thread //一个客户端用 户线程. 处理用户落子的点击事件处理,及消息发送. 4.1.6 chessface publicclass controlPad extends Panel //控制Panel。此 Panel 上的按钮如其名,完成相应的功能。 4.1.7 chessface publicclass inputPad extends Panel //输入信息Panel。 Panel 左边的下拉列表中列出了所有用户的名字。右边的文本框可以 输入聊天信息,点击回车信息被发送。 Java 语言与面向对象技术课程设计 4.1.8chessface 包userPad publicclass userPad extends Panel //用户列表Panel。 此Panel 维护一个服务器的当前用户列表, 所有的用户名都将显示 在列表中。 4.2 测试分析 4.2.1 程序运行情况 //打开服务端 //打开客户端 永磁同步电机双环调速系统的仿真研究 10 //落子 Java 语言与面向对象技术课程设计 11 //判定 永磁同步电机双环调速系统的仿真研究 12 4.2.2 程序运行异常处理 启动游戏时,应先启动服务端,然后打开客户端,连接服务端, 建立游戏,加入游戏,然后落子。 在启动客户端时,若是闪退,请先关闭服务端,然后重启。 小结经过为期二周的课程设计,感觉自己所学远远不能解决做课设时 的需求。在熟悉课本和上网搜索后,才算马马虎虎的完成了任务。 在画棋盘时,调用draw 方法对于画图这块的坐标布置,在今后学画 其他图画时能够得心应手。获取棋子方法的巧妙,注册鼠标,获取 点击位置,除以棋盘间隔,去掉不为整数的一块,再乘以棋盘间隔 便获得最临近点的下棋坐标,即所要下棋的位置。用二维数组模拟 Java 语言与面向对象技术课程设计 13 棋盘,无棋子的置为 0,黑子置为 1,白子置为 2,以便在判断胜负 时利于同色棋子的查找。整个棋盘就模拟出来了,很巧妙,不过有 更好的方法用向量存储棋子信息,便于悔棋等操作。 实现多用户 聊天,老师后面讲的不是很多,做起来有点费力。参考网上资料, 明白 Socket 原理。开始时照着课本上的例子,不能得出想要的效 果,而且只运行了一个程序看不到有通信的效果。后面在运行了 Server 类后,自己尝试着两个Client 类,实现了通话,就像腾讯QQ 里面一样的效果。里面定义了 Vector 线程,实现了多线程用法。 两个板块大体实现,但是后面的要求五,由于数据库的使用不是太 熟悉,不能注册用户,添加好友,查找好友,还有悔棋操作未能实 现。此程序最大的缺点还在于,不能实现网络两人下五子棋。由于 不能将棋盘信息与聊天信息区分,不能告诉对反自己下了哪一步, 所以根据自己的水平也就能做到这了,今后加以完善。 参考文献 Java面向对象教程 电子工业出版社 2006-03 Java网络编程精解 电子工业出版社 2006-03 Java程序设计与应用 清华大学出版社 2005-06 Java就业培训程序 清华大学出版社 2003-06 Java课程设计 清华大学出版社 2004-03 Java高级程序设计 中国水利水电出版社 2006-03 Java语言使用教程 北京邮电大学出版社 2005-06 8.薛为民 Java 应用教程 清华大学出版社 2005-06 永磁同步电机双环调速系统的仿真研究 14 JAVA入门 辽宁科学技术出版社 1997-03 10.郑莉 Java 语言程序设计 清华大学出版社 2006-03 源码1、server 包中chessServer packageserver; import java.io.*; import java.net.*; import java.awt.*; import java.util.*; import java.awt.event.*; classMessageServerPanel extends Panel 主消息窗口TextArea messageBoard newTextArea("", 22, 50, TextArea.SCROLLBARS_VERTICAL_ONLY); Label statusLabel newLabel("当前连接数:", Label.LEFT); Panel boardPanel newPanel();// 主显示区Panel Panel statusPanel newPanel();// 连接状态Panel MessageServerPanel() setSize(350,300); setBackground(new Color(204, 204, 204)); setLayout(new BorderLayout()); boardPanel.setLayout(new FlowLayout()); boardPanel.setSize(210, 210); statusPanel.setLayout(new BorderLayout()); statusPanel.setSize(210, 50); boardPanel.add(messageBoard); statusPanel.add(statusLabel, BorderLayout.WEST); add(boardPanel, BorderLayout.CENTER); add(statusPanel, BorderLayout.NORTH); Java语言与面向对象技术课程设计 15 classServerThread extends Thread SocketclientSocket; Hashtable clientDataHash;// Socket 与发送数据的流的映射 Hashtable clientNameHash;// Socket 与用户名的映射 Hashtable chessPeerHash;// 对弈的两个客户端用户名的映射 MessageServerPanel server; boolean isClientClosed ServerThread(SocketclientSocket, Hashtable clientDataHash, Hashtable clientNameHash, Hashtable chessPeerHash, MessageServerPanel server) clientSocket;this.clientDataHash clientDataHash;this.clientNameHash clientNameHash;this.chessPeerHash chessPeerHash;this.server 对客户端发来的消息处理的函数,处理后转发回客户端。处理消息的过程比较复杂, 要针对很多种情况分别处理。 publicvoid messageTransfer(String message) StringclientName, peerName; /////////////命令处理/////////////////////////////// 永磁同步电机双环调速系统的仿真研究16 Feedback(getUserList()); "/creatgame[inchess]" clientNameHash映射 和chessPeerHash映射。 else (message.startsWith("/creatgame[inchess]")) StringchessServerName message.substring(20);synchronized (clientNameHash) clientNameHash.put(clientSocket,message.substring(11)); synchronized(chessPeerHash) {//刚创建,等待其他人加入 chessPeerHash.put(chessServerName, "wait"); clientNameHash.get(clientSocket));chessPeerTalk(chessServerName, "/OK"); publicTalk(getUserList()); 如果消息以“/joingame”开头,则将消息的服务端名字和本地用户名提取出来, 然后修改clientNameHash表和chessPeerHash StringTokenizeruserToken newStringTokenizer(message, StringgetUserToken, serverName, selfName; String[] chessNameOpt intgetOptNum 提取服务端用户名和本地用户名while (userToken.hasMoreTokens()) (String)userToken.nextToken(" chessNameOpt[0];selfName 修改Socket和名字映射 synchronized (clientNameHash) Java语言与面向对象技术课程设计 17 clientNameHash.put(clientSocket, ("[inchess]" 修改chessPeerHash映射 synchronized (chessPeerHash) chessPeerHash.put(serverName,selfName); publicTalk(getUserList());chessPeerTalk(selfName, ("/peer serverName));chessPeerTalk(serverName, ("/peer chessPeerTalk(selfName,"/reject"); try catch(Exception ez) 如果消息以“/[inchess]”开头,则获取要发送消息的用户名和发送的消息 然后发送出去。else intfirstLocation lastLocation;lastLocation lastLocation);message (chessPeerTalk(peerName,message)) 如果消息以“/giveup”开头,则判断是对弈双方哪方放弃了。else StringchessClientName !((String)chessPeerHash.get(chessClientName)).equals("wait")) chessPeerTalk((String)永磁同步电机双环调速系统的仿真研究 18 chessPeerHash.get(chessClientName), "/youwin"); //剔除这对对弈的人。。 synchronized (chessPeerHash) chessPeerTalk((String)getHashKey(chessPeerHash, chessClientName), "/youwin"); synchronized (chessPeerHash) chessPeerHash.remove((String)getHashKey(chessPeerHash, chessClientName)); 如果找不到发送消息的用户,则输出消息说“没有这个用户”else intfirstLocation lastLocation;lastLocation Feedback("无效命令");return; lastLocation);message (String)clientNameHash.get(clientSocket) (peerTalk(peerName,message)) 如果不以“/”开头,表明是普通消息,直接发送else message;server.messageBoard.append(message publicTalk(message);Java 语言与面向对象技术课程设计 19 server.messageBoard.setCaretPosition(server.messageBoard.getText().le ngth()); publicvoid publicTalk(String publicTalkMessage) synchronized(clientDataHash) (Enumerationenu clientDataHash.elements();enu.hasMoreElements();) DataOutputStreamoutData (DataOutputStream)enu.nextElement(); try //输出信息。。这里会阻塞outData.writeUTF(publicTalkMessage); catch(IOException es) //打印异常堆栈。。。终止程序。。es.printStackTrace(); 选择对象发送消息,参数peerTalk为发送的用户名,后面的参数为发送 的消息 publicboolean peerTalk(String peerTalk, String talkMessage) (Enumerationenu clientDataHash.keys();enu.hasMoreElements();) SocketuserClient (Socket)enu.nextElement(); (peerTalk.equals((String)clientNameHash.get(userClient)) !peerTalk.equals((String)clientNameHash.get(clientSocket))) synchronized(clientDataHash) 永磁同步电机双环调速系统的仿真研究20 DataOutputStream peerOutData (DataOutputStream)clientDataHash.get(userClient); try catch(IOException es) Feedback(talkMessage);return (false); 如果是发给自己的,直接回馈else (peerTalk.equals((String)clientNameHash.get(clientSocket))) Feedback(talkMessage);return (false); return(true); publicboolean chessPeerTalk(String chessPeerTalk, String chessTalkMessage) (Enumerationenu clientDataHash.keys();enu.hasMoreElements();) SocketuserClient (Socket)enu.nextElement(); (chessPeerTalk.equals((String)clientNameHash.get(userClient)) !chessPeerTalk.equals((String)clientNameHash.get(clientSocket))) synchronized(clientDataHash) DataOutputStreampeerOutData (DataOutputStream)clientDataHash.get(userClient); try catch(IOException es) es.printStackTrace();Java 语言与面向对象技术课程设计 21 return(false);

java课程设计_五子棋(附源代码)代码,帮助,五子棋,源代码,JAVA,课程设计,附源代码,Java,java吧

文档格式:
.doc
文档页数:
59页
文档大小:
646.35K
文档热度:
文档分类:
IT计算机 --  Java
文档标签:
java 代码 帮助 五子棋 源代码 JAVA 课程设计 附源代码

更多>> 相关文档

页面底部区域 foot.htm