Java实训项目中国象棋设计报告

合集下载

中国象棋详细设计分析

中国象棋详细设计分析

《计算机综合实习》题目:中国象棋(java单机版)班级:信息与计算科学1001班*名:***学号:*********指导教师:***日期:2014.1.7目录第一章引言(概述)........................................................................................................................ - 1 -第二章可行性分析.................................................................................................................................. - 2 -2.1 总体分析............................................................................................................................................. - 2 -2.2 开发环境介绍..................................................................................................................................... - 2 -2.2.1软件开发环境 (2)第三章需求设计...................................................................................................................................... - 2 -第四章详细设计.................................................................................................................................... - 3 -4.1 功能设计............................................................................................................................................. - 3 -4.1.1功能说明 (3)4.1.2对弈规则 (3)4.1.3相关类图 ................................................................................ 错误!未定义书签。

java开发象棋游戏课程设计

java开发象棋游戏课程设计

java开发象棋游戏课程设计一、课程目标知识目标:1. 让学生掌握Java语言的基本语法和面向对象编程思想。

2. 使学生了解并运用Java的图形用户界面(GUI)编程,实现象棋游戏的基本界面设计。

3. 让学生掌握二维数组的使用,完成棋盘的设计与棋子的存储。

技能目标:1. 培养学生运用Java语言解决实际问题的能力,学会分析、设计和实现小型游戏程序。

2. 培养学生的逻辑思维能力,能够独立完成象棋游戏的基本规则编写。

3. 提高学生的团队协作能力,通过分组合作完成课程项目。

情感态度价值观目标:1. 培养学生对待编程的兴趣和热情,激发他们主动探索新技术的欲望。

2. 培养学生具有良好的编程习惯,注重代码规范和优化。

3. 培养学生面对挑战和困难时保持积极的态度,勇于克服问题,不断进步。

本课程结合学科特点,针对高年级学生的编程基础和认知水平,以Java语言为基础,设计具有实用性和挑战性的象棋游戏项目。

在教学过程中,注重理论与实践相结合,鼓励学生动手实践和团队协作,以达到预期的学习成果。

通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高编程能力和综合素质。

1. Java基本语法与面向对象编程:回顾Java基本语法,重点讲解面向对象编程思想,包括类与对象、封装、继承和多态等概念。

相关教材章节:第一章至第三章2. Java GUI编程:介绍Java图形用户界面编程,使用Swing库设计界面,包括窗口、按钮、菜单等组件的使用。

相关教材章节:第六章3. 二维数组与棋盘设计:讲解二维数组的定义和使用,运用二维数组实现棋盘的设计与棋子的存储。

相关教材章节:第四章4. 象棋游戏规则与逻辑编写:分析象棋游戏的基本规则,指导学生编写相关逻辑代码,实现棋子的移动、吃子等功能。

相关教材章节:第五章5. 课程项目实践:分组进行项目实践,学生根据教学大纲和进度,合作完成象棋游戏的设计与实现。

相关教材章节:第七章6. 代码优化与调试:教授学生如何优化代码,进行调试,提高程序的稳定性和运行效率。

象棋项目实训报告书范文

象棋项目实训报告书范文

通过本次象棋项目实训,旨在提高学生对象棋游戏规则、战术策略的掌握,培养团队协作能力和创新思维,同时提升学生的实践操作能力和项目管理能力。

二、实训背景随着信息技术的飞速发展,游戏产业在我国逐渐崛起,象棋作为我国传统竞技项目,具有丰富的文化内涵和广泛的群众基础。

为响应国家关于传承和弘扬中华优秀传统文化的号召,我校特开展象棋项目实训,旨在让学生在实践中学习和传承象棋文化。

三、实训内容1. 象棋基础知识学习- 象棋规则讲解- 象棋棋子特性分析- 象棋基本走法与开局布局2. 象棋实战技巧训练- 中局战术运用- 终局技巧训练- 对弈心理素质培养3. 团队协作与项目管理- 团队组建与分工- 项目进度管理与协调- 项目成果展示与汇报4. 创新设计与开发- 象棋游戏规则创新- 象棋游戏界面设计- 象棋游戏功能开发1. 前期准备- 组织学生进行分组,每组5-6人,选出组长负责协调工作。

- 安排专业教师进行象棋基础知识讲解,包括棋子特性、走法、开局布局等。

- 提供象棋棋具和教学软件,方便学生进行实战训练。

2. 实战训练- 每周安排两次实战对弈,由组长组织,记录对弈过程,分析胜负原因。

- 安排专业教师进行点评,指出学生在实战中存在的问题,并给予指导。

- 鼓励学生互相学习,共同进步。

3. 团队协作与项目管理- 每组学生根据自身特长,分工合作,共同完成项目任务。

- 定期召开项目会议,汇报进度,协调解决问题。

- 针对项目实施过程中遇到的问题,组织讨论,寻求解决方案。

4. 创新设计与开发- 鼓励学生发挥创意,对象棋游戏规则进行创新设计。

- 组织学生进行游戏界面设计,提升游戏视觉效果。

- 引导学生进行游戏功能开发,增加游戏趣味性和互动性。

五、实训成果1. 学生个人成果- 学会象棋基本规则和实战技巧。

- 提高对弈心理素质,增强竞技水平。

- 培养团队合作精神和项目管理能力。

2. 团队项目成果- 完成象棋游戏规则创新设计。

- 开发出具有创新性和实用性的象棋游戏。

java课程设计-中国象棋

java课程设计-中国象棋

《java语言程序设计》课程设计姓名:学号:指导教师:***班级:数学081所在院系:理学院1目录摘要 (1)关键字 (1)正文 (2)1、程序设计说明 (2)1.1 程序的设计及实现 (2)1.1.1搜索引擎的实现(engine包) (2)1.1.2信息传输机制(message包) (3)1.1.3棋子(pieces包) (3)1.2 主控模块(main包) (3)2、运行结果 (5)3、设计体会 (6)附件 (7)程序代码 (7)参考文献资料 (41)2Java语言程序设计实验报告实验项目名称:中国象棋对弈系统作者姓名与单位:李明数学与应用数学专业数学081班摘要:本文主要是运用java实现具有一定功能的中国象棋对弈系统软件,主要功能如下:a、象棋对弈:红方先走,然后黑方再走,红黑交替,直到一方获胜。

b、新游戏:任何时候可以重新开始一盘新的对弈。

c、悔棋:当走错棋的时候可以悔棋。

d、信息提示:提示当前信息状态。

e、简单的帮助文档:象棋规则介绍、软件的简单介绍和编制说明关键词:java、中国象棋对弈系统3正文:一程序设计说明1.1程序的设计及实现本系统主要有以下4个模块,每个模块对应一个程序包:1、engine:搜索引擎包,系统的核心部分。

2、message:网络对战过程中各种消息及其传递机制的类实现包。

3、main:主界面实现包。

4、pieces:棋子及其相关类实现包。

现就各个包中的要点给与说明。

1.1.1 搜索引擎的实现(engine包)(1) BitBoard.java:位棋盘的实现,见2.4节。

(2) CCEvalue.java:评价函数知识类。

本程序使用开源软件“梦入神蛋”的快速评价函数。

该函数包含子力价值和棋子所在位置的奖励值。

子力价值分别是:帅-0, 仕- 40, 象-40, 马-88, 车-200, 炮-96, 兵-9。

帅是无价的,用0表示。

以马为例,位置的奖励值如下:0,-3,5,4,2,2,5,4,2,2,-3,2,4,6,10,12,20,10,8,2,2,4,6,10,13,11,12,11,15,2,0,5,7,7,14,15,19,15,9,8,2,-10,4,10,15,16,12,11,6,2,0,5,7,7,14,15,19,15,9,8,2,4,6,10,13,11,12,11,15,2,-3,2,4,6,10,12,20,10,8,2,0,-3,5,4,2,2,5,4,2,2上面的每行代表棋盘的一条纵线。

中国象棋课程设计java

中国象棋课程设计java

中国象棋课程设计java一、课程目标知识目标:1. 掌握中国象棋的基本规则,如棋子的种类、走法、胜负判定等;2. 学会使用Java语言实现中国象棋的基本功能,如棋盘的绘制、棋子的移动、胜负判断等;3. 了解中国象棋的文化背景和起源,提高对传统文化的认识。

技能目标:1. 培养学生的编程能力,使其能够运用Java语言解决实际问题;2. 提高学生的逻辑思维能力,通过编写代码实现中国象棋的规则;3. 培养学生的团队协作和沟通能力,分组合作完成中国象棋程序的编写。

情感态度价值观目标:1. 培养学生对传统文化的热爱,增强民族自豪感;2. 培养学生勇于挑战、克服困难的意志品质,提高自信心;3. 培养学生遵守规则的意识,养成良好的竞技态度。

课程性质:本课程结合了传统文化、编程语言和逻辑思维,旨在提高学生的综合素质。

学生特点:学生处于中学阶段,具有一定的逻辑思维能力和编程基础,对中国象棋有一定了解。

教学要求:注重实践操作,引导学生运用所学知识解决问题,培养学生团队协作能力和创新精神。

将课程目标分解为具体的学习成果,以便在教学过程中进行有效评估和调整。

二、教学内容1. 中国象棋基础知识:介绍中国象棋的起源、发展历程、棋盘结构、棋子种类及走法等,让学生全面了解中国象棋的基本构成。

相关教材章节:第一章《中国象棋概述》2. Java编程基础:回顾Java语言的基本语法、数据类型、控制结构、面向对象编程等知识,为后续编写中国象棋程序打下基础。

相关教材章节:第二章《Java语言基础》3. 棋盘绘制:学习Java图形用户界面(GUI)编程,掌握如何使用Java绘制中国象棋棋盘。

相关教材章节:第三章《Java图形用户界面编程》4. 棋子移动与规则实现:学习如何使用Java实现棋子的移动、判断胜负等规则。

相关教材章节:第四章《Java事件处理》和第五章《Java多线程编程》5. 中国象棋程序设计:分组合作,综合运用所学知识,编写具有基本功能的中国象棋程序。

java课程设计中国象棋

java课程设计中国象棋

java课程设计中国象棋一、课程目标知识目标:1. 让学生掌握中国象棋的基本规则和棋谱表示方法。

2. 帮助学生理解面向对象编程的基本概念,如类、对象、继承、封装等。

3. 引导学生运用Java语言实现中国象棋的基本功能,包括棋子的移动、胜负判断等。

技能目标:1. 培养学生运用Java编写程序解决问题的能力,提高编程技巧。

2. 培养学生对中国象棋的逻辑思考和策略运用能力。

3. 培养学生团队协作、沟通表达的能力,共同完成课程设计任务。

情感态度价值观目标:1. 激发学生对计算机编程和中国象棋的兴趣,提高学习积极性。

2. 培养学生勇于尝试、不断探索的精神,面对困难和挑战时不轻言放弃。

3. 增强学生的民族自豪感,传承和弘扬中华优秀传统文化。

课程性质分析:本课程为Java程序设计课程,结合中国象棋项目,旨在让学生在实践中掌握编程技能,提高解决问题的能力。

学生特点分析:学生处于高中年级,具备一定的编程基础和逻辑思维能力,对中国象棋有一定了解,具备较强的学习能力和团队合作精神。

教学要求:1. 教师应注重理论与实践相结合,引导学生运用所学知识解决实际问题。

2. 关注学生的个体差异,给予个性化指导,提高学生的编程能力。

3. 创设互动、讨论的学习氛围,培养学生的团队协作能力和创新精神。

4. 对课程目标进行分解,明确具体的学习成果,便于教学设计和评估。

二、教学内容1. 中国象棋基本规则及棋谱表示方法- 中国象棋的棋盘、棋子及其走法- 棋谱的记录和表示方式2. 面向对象编程基本概念- 类的定义、对象创建、属性和方法- 继承、封装、多态等特性3. Java编程基础- Java基本语法、数据类型、运算符- 控制结构、数组、字符串等4. 中国象棋程序设计- 设计棋盘类、棋子类、游戏规则类- 实现棋子的移动、胜负判断等功能5. 教学大纲与进度安排- 第一周:中国象棋基本规则及棋谱表示方法学习- 第二周:面向对象编程基本概念复习- 第三周:Java编程基础复习及实践- 第四周:设计棋盘类、棋子类、游戏规则类- 第五周:实现棋子的移动、胜负判断等功能- 第六周:课程设计总结、展示与评价教材章节关联:1. 《Java程序设计》第1-3章:Java基本语法、数据类型、运算符2. 《Java程序设计》第4-6章:面向对象编程基本概念3. 《中国象棋入门与提高》:中国象棋基本规则及棋谱表示方法教学内容组织:以项目为导向,将中国象棋与Java编程知识相结合,分阶段进行教学,逐步实现课程目标。

中国象棋实验报告

本科学生综合性实验报告课程名称:Java程序设计中国象棋项目成员学号班级B02班项目名称中国象棋指导教师开课学期2013 至2014 学年第1 学期完成时间2013 年12 月25 日1.引言 (1)1.1开发背景 (1)1.2国内外象棋发展状况 (1)1.3开发目标 (2)1.4开发环境 (2)2.设计思路 (2)2.1设计步骤 (2)2.2设计流程图 (3)3.设计技术 (3)3.1io技术 (3)3.2多线程 (4)3.3swing (4)4.设计规则 (4)4.1走棋规则 (4)4.2吃棋规则 (4)5.代码实现 (4)6.程序测试 (5)6.1步骤一:点击运行 (5)6.2步骤二: (6)7.总结与提升 (10)1.引言1.1开发背景中国象棋游戏流传至今已经有数千年的历史了,是一种古老的文化,它集文化、科学、艺术、竞技于一体,有利于开发人的智慧,锻炼人的思维,培养人的毅力,增强人的竞争意识。

自从计算机发明,向各个领域发展,到成为我们现在每天工作和生活必不可少的一部分的这个过程中,电子游戏也逐步渗入我们每个人的娱乐活动中。

在计算机已经普及的今天,对于可以用计算机进行程序编辑的人来说,开发属于自己的游戏,已经不再是梦想,中国象棋历史悠久不仅源远流长,而且基础广泛,作为一项智力运动更成为我们游戏开发的首选对象。

中国象棋是一项智力游戏,以往都是人和人下棋,现在有了计算机我们可以和计算机竞技,人可以与计算机进行对弈。

控制计算机的是人类,而人工智能是综合性很强的一门边缘学科,它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。

因此,对游戏开发过程中的人工智能技术的研究自然也就成了业界的一个热门研究方向。

1.2国内外象棋发展状况中国象棋游戏流传至今已经有数千年的历史了,是一种古老的文化,它集文化、科学、艺术、竞技于一体,有利于开发人的智慧,锻炼人的思维,培养人的毅力,增强人的竞争意识。

java中国象棋报告

贵州航天职业技术学院Java课程设计报告专业:计算机软件技术班级:09软件二学号:A093GZ053020152 姓名:韦治成指导老师:肖宏启时间:目录摘要 ------------------------------------------------------------------- 3【摘要】 ------------------------------------------------------------ 3【关键字】 --------------------------------------------------------- 4系统概述 ---------------------------------------------------------------- 41.棋盘表示 ---------------------------------------------------------- 43.人人对弈 ---------------------------------------------------------- 4系统分析 ---------------------------------------------------------------- 41. 设计内容--------------------------------------------------------- 42. 设计要求--------------------------------------------------------- 53.中国象棋软件-------------------------------------------------- 6 4.运行效果-------------------------------------------------------- 8系统设计 ---------------------------------------------------------------- 81.总体设计 ---------------------------------------------------------- 8运行界面: ------------------------------------------------------- 102.运行输出结果 -------------------------------------------------- 103.总结与说明 ----------------------------------------------------- 114.象棋界面实现: ----------------------------------------------- 115.对弈功能的实现: -------------------------------------------- 15 参考文献 -------------------------------------------------------------- 16中国象棋摘要【摘要】中国象棋系统将计算机知识和中国象棋知识结合起来的一种新型的游戏方式。

中国象棋棋谱设计Java课程设计实验报告

课程设计报告课程名称:Java程序设计设计题目:中国象棋棋谱设计专业:信息与计算科学班级:信111**:***学号:**********指导教师:***河北建筑工程学院数理系2014 年5 月5 日一、基本界面设计:1.棋子的设计;(1)声明一个ChessPiece类,完成各个棋子的外观设计;public class ChessPiece extends JLabel{String name;Color backColor=null,foreColor;String 颜色类别=null;ChessBoard board=null;{int j=0;for(j=minJ+1;j<=maxJ-1;j++){if(point[startI][j].isPiece()){可否走棋=false;break;} }if(j==maxJ){可否走棋=true;}}else if(startJ==endJ) { int i=0;for(i=minI+1;i<=maxI-1;i++) { if(point[i][startJ].isPiece()){可否走棋=false;break;} }if(i==maxI){可否走棋=true;}}else{可否走棋=false;}}else if(piece.getName().equals("马"))…..//以及各个棋子规则的设计(5)实现棋子按对弈规则的移动并记录棋子移动的位置;界面如下:e=SwingUtilities.convertMouseEvent(piece,e,this); } if(e.getSource()==this){if(move&&piece!=null){x=e.getX(); y=e.getY();if(红方走棋&&((piece.棋子类别()).equals(红方颜色))){piece.setLocation(x-piece.getWidth()/2,y-piece.getHeight()/2);}if(黑方走棋&&(piece.棋子类别().equals(黑方颜色))){ piece.setLocation(x-piece.getWidth()/2,y-piece.getHeight()/2);}}}} public void mouseReleased(MouseEvent e){ …}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}public void mouseClicked(MouseEvent e){ }}2.图中中国象棋是个菜单包括制作棋谱、保存棋谱、演示棋谱三个菜单项(1)保存棋谱设计界面为:当你制作棋谱文件时可以选择路径保存棋谱文件(2)演示棋谱设计界面为:A.可以从文件中选择你要演示的棋谱文件B选择文件后开始演示棋谱文件自动演示中可以按照你设计棋谱时的步骤一次生成保存的棋谱文件,也可以设置时间间隔,使得生成文件时一步和下一步的时间安装你设置的时间进行,也可以收手动操作,一步一步的进行。

中国象棋打谱系统 JAVA课程设计报告

题目中国象棋打谱系统第一章总体设计1.1本系统的主要功能中国象棋打谱系统可以把对弈过程保存成文件,并可以重新演示对弈过程,即复盘。

1.2系统包含的类及类之间的关系本系统共包括10个java源文件。

如图1-1所示。

图1-1 类之间的关系2.2 java源文件及其功能1.ChinaChess.java该文件负责创建中国象棋打谱系统的主窗口。

2.ChessBoard.java该文件负责创建键盘。

3.ChessPiece.java该文件负责创建棋盘中的棋子。

4.Point.java该文件负责确定棋子在棋盘中的位置。

5.ChessBox.java该文件负责创建棋盘中的棋盒。

6.InitPieceLocation.java该文件负责安排棋子在棋盘中的初始位置。

7.InitCanju.java该文件使用户需要制作残局棋谱时,棋盘的开局要由用户来确定。

8.HandleMouse.java该文件负责处理鼠标事件,以便用户拖动棋子走棋。

9.MoveRule.java该文件负责验证用户的走法是否符合象棋规则。

10.DemoManulDialog.java该文件负责演示棋谱。

第二章详细设计2.1主类ChinaChess.java(1)成员变量见表2-1(2)方法见表2-2(3)源代码见文件ChinaChess.java2.2类ChessBoard(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件ChessBoard.java 2.3类ChessPiece(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件ChessPiece.java 2.4类Point(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件Point.java 2.5类ChessBox(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件ChessBox.java2.6类InitPieceLocation(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件InitPieceLocation.java 2.7类InitCanju(1)成员变量见表2-3(2)方法见表2-4表2-4 主要方法(3)源代码见文件InitCanju.java 2.8类HandleMouse(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件HandleMouse.java 2.9类MoveRule(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件MoveRule.java2.10类DemoManulDialog(1)成员变量见表2-3(2)方法见表2-4(3)源代码见文件DemoManulDialog.java第三章运行效果3.1 系统主界面图3-1 系统主窗口3.2 ×××录入界面。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

广西科技大学鹿山学院面向对象程序设计实训报告题目:网络中国象棋系别:电气与计算机工程系专业班级:计软141班*名:***学号:********成绩评定:指导教师签字:2016 年1 月10 日目录目录1、需求分析 (2)1.1 开发的背景 (2)1.2 算法 (2)1.3 要求 (3)2、总体分析与设计 (3)2.1 总体设计方案 (3)2.2 功能描述 (4)2.2.1服务器端 (4)2.2.2客户端 (4)2.3算法设计---- (4)2.5系统流程图---- (5)3、数据结构设计 (5)3.1 功能模块的设计 (5)3.1.1服务器端框架类设计 (5)3.1.2服务器线程设计 (9)3.1.3服务器代理线程设计 (9)3.1.4 棋子的开发类设计 (14)3.1.5 客户端的框架类设计 (15)3.1.6 客户端的框架类设计 (17)3.1.7 棋子的规则类设计 (20)3.1.8 棋盘的规则类设计 (23)4、系统实现 (5)4.1服务器端界面 (27)4.2客户端界面 (27)4.3 未启动服务器,客户端连接失败 (28)4.4服务器启动 (28)4.5 服务器启动客户端成功连接 (29)4.6 显示在线用户 (29)4.7 不允许重名 (30)4.8发起挑战 (30)4.9拒绝挑战 (31)4.10接受挑战 (31)4.11 对战走棋 (32)4.12 不能向正在下棋的用户发起挑战 (32)4.13 赢棋 (33)4.14 认输 (33)4.15 服务器关闭 (34)总结 (34)参考文献 (35)1、需求分析1.1 开发的背景·中国象棋有着悠久的历史,象棋爱好者更是不计其数,但是由于人们的工作地点从、时间的限制,原始的那种面对面的下棋方式已经不再适应人们的生活,人们已经开始走向网络象棋博弈·网络象棋有着很多的优点,通过网络象棋,对弈的双方是网络上任意的两个象棋爱好者,甚至是不认识。

网络让对弈的范围更加的广泛,让象棋爱好者可以与更多的象棋爱好者切磋棋艺。

1.2 算法·指定服务器端口号·支持多人同时在线··显示在线用户信息·显示当前在线所有用户·从在线用户列表中选择玩家进行挑战·接受或拒绝挑战1.3 要求·用Java语言实现系统,源程序要有适当的注释,使程序容易阅读·函数功能要划分好(结构化程序设计)·可以增加新功能模块2、总体分析与设计2.1 总体设计方案·系统功能模块图:2.2 功能描述2.2.1服务器端·可以指定服务器端口号。

·可以支持多人同时在线。

·可以显示在线用户信息。

·不允许玩家同名2.2.2客户端·能够通过主机IP号及端口号登陆到服务器。

·可以显示当前在线所有用户。

·可以从在线用户列表中选择玩家进行挑战。

·可以接受或拒绝挑战。

·如果对方在和其他玩家对弈中,则应该给与相应的提示信息。

·象棋规则一定要严密。

·棋子样式采用最普通的橡胶式象棋。

棋子为黑色,字为红色和白色2.3 算法设计----本程序功能模块根据程序设计的需要。

综合程序的实用性、智能化的考虑。

将程序划分为8个模块来写。

(1)服务器端的框架设计类(2)服务器线程类(3)服务器代理线程类(4)棋子类的开发类(5)客户端的框架设计类(6)客户端线程类(7)棋子的规则类(8)棋盘的设计类2.5 系统流程图----3、数据结构设计3.1 功能模块的设计3.1.1 服务器端框架类设计import java.util.*;import java.awt.*;//界面包import java.awt.event.*;//事件处理包import javax.swing.*;//图形化界面包import javax.swing.event.*;//图形化界面包事件进行处理import .*;//网络包import java.io.*;//IO流public class Server extends JFrame implements ActionListener{JLabel jlPort=new JLabel("端口号");//创建提示输入端口号标签JTextField jtfPort=new JTextField("9457");//用于输入端口号的文本框JButton jbStart=new JButton("启动");//创建"启动"按钮JButton jbStop=new JButton("关闭");//创建"关闭"按钮JPanel jps=new JPanel();//创建一个JPanel对象JList jlUserOnline=new JList();//创建用于显示当前用户的JListJScrollPane jspx=new JScrollPane(jlUserOnline);//将显示当前用户的JList放在JScrollPane中JSplitPane jspz=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jspx,jps);//创建JSplitPane 对象ServerSocket ss;//声明ServerSocket引用ServerThread st;//声明ServerThread引用Vector onlineList=new Vector();//创建存放当前在线用户的Vector对象public Server(){this.initialComponent();//初始化控件this.addListener();//为相应的控件注册事件监听器this.initialFrame();//初始化窗体this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public void initialComponent(){jps.setLayout(null);//设为空布局jlPort.setBounds(20,20,50,20);jps.add(jlPort);//添加用于提示输入端口号的标签this.jtfPort.setBounds(85,20,60,20);jps.add(this.jtfPort);//添加用于输入端口号的文本框this.jbStart.setBounds(18,50,60,20);jps.add(this.jbStart);//添加"开始"按钮this.jbStop.setBounds(85,50,60,20);jps.add(this.jbStop);//添加"关闭"按钮this.jbStop.setEnabled(false);//将"关闭"按钮设为不可用}public void addListener(){this.jbStart.addActionListener(this);//为"开始"按钮注册事件监听器this.jbStop.addActionListener(this);//为"关闭"按钮注册事件监听器}public void initialFrame(){this.setTitle("象棋--服务器端");//设置窗体标题Image image=new ImageIcon("ico.gif").getImage();this.setIconImage(image);this.add(jspz);//将JSplitPane添加到窗体中jspz.setDividerLocation(250);jspz.setDividerSize(4);//设置分割线的位置和宽度this.setBounds(20,20,420,320);this.setVisible(true);//设置可见性this.addWindowListener(//为窗体关闭事件注册监听器new WindowAdapter(){public void windowClosing(WindowEvent e){if(st==null)//当服务器线程为空时直接退出{System.exit(0);//退出return;}try{Vector v=onlineList;int size=v.size();for(int i=0;i<size;i++){//当不为空时,向在线用户发送离线信息ServerAgentThread tempSat=(ServerAgentThread)v.get(i);tempSat.dout.writeUTF("<#SERVER_DOWN#>");tempSat.flag=false;//终止服务器代理线程}st.flag=false;//终止服务器线程st=null;ss.close();//关闭ServerSocketv.clear();//将在线用户列表清空refreshList();//刷新列表}catch(Exception ee){ee.printStackTrace();}System.exit(0);//退出}});}public void actionPerformed(ActionEvent e){if(e.getSource()==this.jbStart){//当单击"启动"按钮时this.jbStart_event();}else if(e.getSource()==this.jbStop){//单击"关闭"按钮后this.jbStop_event();}}public void jbStart_event(){//单击"启动"按钮的业务处理代码int port=0;try{//获得用户输入的端口号,并转化为整型port=Integer.parseInt(this.jtfPort.getText().trim());}catch(Exception ee){//端口号不是整数,给出提示信息JOptionPane.showMessageDialog(this,"端口号只能是整数","错误",JOptionPane.ERROR_MESSAGE);return;}if(port>65535||port<0){//断口号不合法,给出提示信息JOptionPane.showMessageDialog(this,"端口号只能是0-65535的整数","错误",JOptionPane.ERROR_MESSAGE);return;}try{this.jbStart.setEnabled(false);//将开始按钮设为不可用this.jtfPort.setEnabled(false);//将用于输入端口号的文本框设为不可用this.jbStop.setEnabled(true);//将停止按钮设为可用ss=new ServerSocket(port);//创建ServerSocket对象st=new ServerThread(this);//创建服务器线程st.start();//启动服务器线程//给出服务器启动成功的提示信息JOptionPane.showMessageDialog(this,"服务器启动成功","提示",RMATION_MESSAGE);}catch(Exception ee){//给出服务器启动失败的提示信息JOptionPane.showMessageDialog(this,"服务器启动失败","错误",JOptionPane.ERROR_MESSAGE);this.jbStart.setEnabled(true);//将开始按钮设为可用this.jtfPort.setEnabled(true);//将用于输入端口号的文本框设为可用this.jbStop.setEnabled(false);//将停止按钮设为不可用}}public void jbStop_event(){//单击"关闭"按钮的业务处理代码try{Vector v=onlineList;int size=v.size();for(int i=0;i<size;i++){//向在线用户发送离线信息ServerAgentThread tempSat=(ServerAgentThread)v.get(i);tempSat.dout.writeUTF("<#SERVER_DOWN#>");tempSat.flag=false;//关闭服务器代理线程}st.flag=false;//关闭服务器线程st=null;ss.close();//关闭ServerSocketv.clear();//将在线用户列表清空refreshList();//刷新列表this.jbStart.setEnabled(true);//将开始按钮设为可用this.jtfPort.setEnabled(true);//将用于输入端口号的文本框设为可用this.jbStop.setEnabled(false);//将停止按钮设为不可用}catch(Exception ee){ee.printStackTrace();}}public void refreshList(){//更新在线用户列表的业务处理代码Vector v=new Vector();int size=this.onlineList.size();for(int i=0;i<size;i++){//遍历在线列表ServerAgentThread tempSat=(ServerAgentThread)this.onlineList.get(i);String temps=tempSat.sc.getInetAddress().toString();temps=temps+"|"+tempSat.getName();//获得所需信息v.add(temps);//添加到Vector中}this.jlUserOnline.setListData(v);//更新列表数据}public static void main(String args[]){new Server();}}说明:此服务器端类既为服务器的运行类,用户通过该类进入服务器的主界面。

相关文档
最新文档