来使用,
但 Eclipse 的目标不仅限于此。
Eclipse 还包括插件开发环境(Plug-in Development Environment,
PDE)这个组件主要针对希望扩展 Eclipse 的软件开发人员
因为它允许他们构建与 Eclipse 环境无缝集成的工具。
由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,
以及给用户提供一致和统一的集成开发环境而言
所有工具开发人员都具有同等的发挥场所。
这种平等和一致性并不仅限于 Java 开发工具。
尽管 Eclipse 是使用 Java 语言开发的,
但它的用途并不限于 Java 语言;例如
支持诸如 C/C++、COBOL 和 Eiffel 等编程语言的插件已经可用
或预计会推出。
Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,
比如内容管理系统。
Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,
用于通过插件组件构建开发环境。
3.程序设计需求分析
3.1任务概述
用java实现具有一定功能的中国象棋对弈软件,
主要功能如下:
a.象棋对弈:
红方先走
然后黑方再走红黑交替
直到一方获胜。
b.新游戏:
任何时候可以重新开始一盘新的对弈。
c.悔棋:
当走错棋的时候可以悔棋。
d.信息提示:
提示当前信息状态。
e.简单的帮助文档:
象棋规则介绍、软件的简单介绍和编制说明。
3.2综合要求
1. 硬件配置
CPU:
≥Pentium 4 1.6G
内存:
≥512MB
硬盘剩余空间:
≥2GB
2. 软件环境
操作系统:
Microsoft Windows XP
安装Sun公司的Java运行环境JRE 1.5,
安装Java开发工具包(JDK 1.5)及ECLIPSE
3.3 设计基本要求
1. 中国象棋是双方在由9条和10条横线分割而成的棋盘对弈。
竖线与横线的交叉点称做棋点,每个棋子都放置在棋点上,
而不是方格中。
河界将棋盘分为两个等分=份,没一边都有一个由9个点组成的区域"将",
"帅""士"只能在"九宫"内移动并且"将""帅",
的每一步只可以水平或垂直移动一个棋点。
士:
"士"只能在"九宫"内移动,
并且每一步只可以沿对角线方向移动一个棋点。
象;一步必须沿对角线方向走两个棋点。
但它既不能过河,也不能跳过或穿越障碍,
即象征走的过程不能被"别眼"。
马:
每一步只可以水平或垂直移动一个棋点。
但它必须沿对角线方向,向左或向右移动,
中国象棋的马不能跳过障碍
即在走的过程不能被"别腿"。
车:
可以沿水平或垂直方向移动任意个无障碍的点。
炮:
行走规则和车很类似,但它必须跳过一个棋子来吃掉对方的一个棋子。
被跳过的棋子被称为桥或者屏风。
兵:
过河前每步只能向前移动一个棋点。
过河后,它便增加了向左右移动的能力。
并不允许向后移动。
2.单击"中国象棋"菜单可以选择"制作棋谱",
"保存棋谱 "和"演示棋谱"菜单项。
3.选择"制作棋谱",将出现相应的棋盘,
该棋盘可进行实战对弈可以随时选择"保存棋谱"
将对弈过程保存成一个棋谱文件。
选择"演示棋谱"将显示打开文件对话框供用户选择以保存的棋谱文件。
选择棋谱文件后,将显示用来演示棋谱的棋盘,
用户可以选择自动或者手动来演示对弈过程。
4.程序的总体设计
4.1线程的设计
在Java中,
创建线程的方法有两种:
一种是通过创建Thread类的子类来实现;另一种是通过实现Runnable接口的类来实现。
这两种创建线程方法并没有本质上的区别,
但是由于Java不允许多重继承所以当一个类要继承另一个非Thread类而实现多线程的话
只能通过实现Runnable接口的方式来实现。
4.1.1 通过Thread类实现
定义一个线程类,
他继承类Thread并重写其中的run()方法。
这时在初始化这个类的实例时,目标对象target可以为null,
表示这个实例本身具有线程体。
由于Java只支持单继承,用这种方法定义的类不能再继承其他类。
1
Thread类定义的用来帮助管理线程的方法主要包括以下内容。
● void run()方法:
线程的入口点,
运行线程中的代码。
● void start()方法:
通过调用运行方法来启动线程,
使之由出生状态转入就绪状态。
● void sleep(long milis):在一段时间内挂起线程,
令线程睡眠在此期间线程不消耗CPU资源;以毫秒为单位。
● void interrupt():
中断线程。
● boolean isAlive():判定线程是否仍在在运行,
出于活动状态。
● void stName(String threadName):改变线程的名字。
● String getName():获取由setName()方法实质的线程名字的字符串。
● Yield():将CPU控制权主动移交到下一个可运行的线程。
● setPriority(int p):设置线程优先级。
● getPriority():
获得线程优先级。
● Join():等待一个线程终止。
4.1.2 实现Runnable接口
创建线程的最简单的方法就是创建一个实现Runnable接口的类。
然后根据工作需要重新设计线程的run方法;再建立该类的对象。
Runnable抽象了一个执行代码单元。
你可以通过实现Runnable接口的方法创建每一个对象的线程。
为实现Runnable接口,一个类仅需实现一个run()的简单方法。
4.2线程的生命周期
每个线程的生命周期一共包括5种状态:
出生,
就绪运行阻塞和死亡。
线程从出生到死亡的过程称为线程的生命周期。
通过特定的操作可以进行状态间的转换。
4.2.1 出生
当用关键字new和thread类或其子类建立了一个线程对象后,
该线程就处于出生状态。
Thread线程名=new Thread();
处于新建状态的线程只是一个空闲的线程对象,
系统并没有为他分配资源。
在调用start方法之前,线程就一直处于出生状态。
4.2.2 就绪
在调用了start方法之后,
线程就进入就绪状态即被加入到处于就绪状态的线程序列中
在等待CPU时间片。
线程名。
Start();
4.2.3 运行
当处于线程序列中的线程获得CPU时间片的时候,
该线程就会自动调用其run方法进入运行状态。
4.2.4 阻塞
线程能够运行,但有某个条件能阻止它的运行。
当线程处于阻塞状态时,调度机制将忽略线程,
不会分配给线程任何处理器时间。
直到线程重新进入了就绪状态,它才有可能执行操作。
导致线程进入阻塞状态原因主要包括以下几种。
① 通过调用wait()方法使线程挂起。
直到线程得到了notify()或notifyAll()消息,
线程才会进入就绪状态。
当与某对象相关的一个线程调用了notify()方法时,
那么等待该特定对象的一个线程便进入就绪状态;当与某对象相关的线程调用了notifyAll()方法后
等待该对象的所有线程都会回到就绪状态。
② 通过调用sleep()方法使线程进入休眠状态。
在这种情况下,线程在指定的时间内不会运行。
只能等待其结束期后,线程才可以自动进入就绪状态。
③ 线程在等待某个输入/输出完成。
只能等待该输入/输出操作完成后,线程才可以自动进入就绪状态。
④ 调用suspend()方法挂起程序。
可以通过调用resume()方法使其进入就绪状态。
⑤ 线程试图在某个对象上调用其同步控制方法,
但是对象锁不可用。
4.2.5 死亡
死亡状态是线程生命周期中的最后一个阶段。
一共有两种方式可以导致一个线程的死亡。
● 自然死亡:
线程的run()方法正常结束。
● 强制死亡:
通过执行stop()或destroy()方法使线程终止。
5.程序的详细设计
5.1程序流程图
中国象棋对弈系统共有8个Java源文件。
重要之间的关系如下图;
图1 类之间的关系
Chess.Java
该Java文件生成的类负责创建程序的主窗口。
该类含有main方法,程序从该类开始执行。
ChessBoard.java
该文件生成的类负责创建"对弈棋盘",用户可以用鼠标拖动棋盘上的棋子,
当松开鼠标是则将棋子放在棋点。
该棋盘不允许用户将棋子拖放到非棋点上。
棋盘上的rule对象负责判断走棋是否遵守了中国象棋的规则,
例如"马"走日"象"走田"小卒"一去不回头等等。
如果用户的走法不符合规则,棋子将被放回原处,
重新走着。
棋盘的MakeChessManual对象负责记录棋谱,
上一篇:
中国象棋对弈系统_java课程设计
下一篇:
近三年来思想工作小结(德能勤绩廉)